diff options
author | Jason Chiu <chiujason@google.com> | 2021-03-11 18:46:38 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-03-11 18:46:38 +0000 |
commit | 7813f990d2b4d97565b992998a79c8cb5bea1a7d (patch) | |
tree | f579791adde597db8116ab2452410ba84fcb5dce | |
parent | 2d531ffd4ee12f999a65ab345d8c6877a72dd790 (diff) | |
parent | 682903755755e0275a9c30254df4e554eaaf48a3 (diff) | |
download | robolectric-shadows-7813f990d2b4d97565b992998a79c8cb5bea1a7d.tar.gz |
Fix broken Robolectric caused by ConfigurationController am: 6829037557
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/robolectric-shadows/+/13825827
MUST ONLY BE SUBMITTED BY AUTOMERGER
Change-Id: I73b164f842d318cccc0a1953ad4ec79b50261a17
-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); } |