aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Chiu <chiujason@google.com>2021-03-10 23:12:14 +0800
committerJason Chiu <chiujason@google.com>2021-03-11 14:22:23 +0800
commit682903755755e0275a9c30254df4e554eaaf48a3 (patch)
treef579791adde597db8116ab2452410ba84fcb5dce
parent6b27a2a5528fdeb3b7742a739d70ceb727bf7003 (diff)
downloadrobolectric-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.java20
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);
}