diff options
author | Jason Chiu <chiujason@google.com> | 2021-03-10 23:12:14 +0800 |
---|---|---|
committer | Jason Chiu <chiujason@google.com> | 2021-03-11 14:22:23 +0800 |
commit | 682903755755e0275a9c30254df4e554eaaf48a3 (patch) | |
tree | f579791adde597db8116ab2452410ba84fcb5dce | |
parent | 6b27a2a5528fdeb3b7742a739d70ceb727bf7003 (diff) | |
download | robolectric-shadows-682903755755e0275a9c30254df4e554eaaf48a3.tar.gz |
Fix broken Robolectric caused by ConfigurationController
Bug: 182342985
Test: make RunSettingsRoboTests -j
Change-Id: Ie6d062573e060a0260ae2c098d4dce3991fb8754
-rw-r--r-- | robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java b/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java index 67aa9732b..e74a03cdb 100644 --- a/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java +++ b/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java @@ -182,7 +182,23 @@ public class ParallelUniverse implements ParallelUniverseInterface { ReflectionHelpers.loadClass( getClass().getClassLoader(), ShadowContextImpl.CLASS_NAME); - ReflectionHelpers.setField(activityThread, "mCompatConfiguration", configuration); + if (sdkConfig.getApiLevel() < Build.VERSION_CODES.S) { + ReflectionHelpers.setField(activityThread, "mCompatConfiguration", configuration); + } else { + Class<?> activityThreadInternalClass = + ReflectionHelpers.loadClass( + getClass().getClassLoader(), "android.app.ActivityThreadInternal"); + Class<?> configurationControllerClass = + ReflectionHelpers.loadClass( + getClass().getClassLoader(), "android.app.ConfigurationController"); + Object configController = ReflectionHelpers.callConstructor(configurationControllerClass, + from(activityThreadInternalClass, activityThread)); + ReflectionHelpers.callInstanceMethod(configController, "setCompatConfiguration", + from(Configuration.class, configuration)); + configuration = ReflectionHelpers.callInstanceMethod(configController, + "getCompatConfiguration"); + ReflectionHelpers.setField(activityThread, "mConfigurationController", configController); + } ReflectionHelpers .setStaticField(ActivityThread.class, "sMainThreadHandler", new Handler(Looper.myLooper())); @@ -230,7 +246,7 @@ public class ParallelUniverse implements ParallelUniverseInterface { ReflectionHelpers.callInstanceMethod( contextImpl, "setOuterContext", - ReflectionHelpers.ClassParameter.from(Context.class, application)); + from(Context.class, application)); } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException(e); } |