diff options
author | Brett Chabot <brettchabot@google.com> | 2023-03-07 09:16:52 -0800 |
---|---|---|
committer | Rex Hoffman <rexhoffman@google.com> | 2023-04-18 16:31:47 +0000 |
commit | b5d2493d4f0815ccfaa5f80616d0cd33605c7c7e (patch) | |
tree | 3cadbaba1f5be69be3704917690243799826ac18 | |
parent | d1d388775157f87fa1d28a8a27686f00ece133f4 (diff) | |
download | robolectric-b5d2493d4f0815ccfaa5f80616d0cd33605c7c7e.tar.gz |
Prep for platform changes in DisplayEventReceiver, WindowManagerGlobal and NfcAdapter.
PiperOrigin-RevId: 514752786
Bug: 278141861
Test: atest MyRoboTests
Merged-In: I8423c40dbd0edef45f810525ad7d070c3fe61ce6
Change-Id: I649a13ced9a13407871a3b1d7c469d617c7b9f80
3 files changed, 27 insertions, 12 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayEventReceiver.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayEventReceiver.java index 36c824064..933024646 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayEventReceiver.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayEventReceiver.java @@ -239,21 +239,19 @@ public class ShadowDisplayEventReceiver { return newVsyncEventData(); } - private Object newVsyncEventData() { + private static Object /* VsyncEventData */ newVsyncEventData() { try { // onVsync on T takes a package-private VsyncEventData class, which is itself composed of a // package private VsyncEventData.FrameTimeline class. So use reflection to build these up Class<?> frameTimelineClass = Class.forName("android.view.DisplayEventReceiver$VsyncEventData$FrameTimeline"); - Object timeline = - ReflectionHelpers.callConstructor( - frameTimelineClass, - ClassParameter.from(long.class, 1) /* vsync id */, - ClassParameter.from(long.class, 1) /* expectedPresentTime */, - ClassParameter.from(long.class, 10) /* deadline */); - Object timelineArray = Array.newInstance(frameTimelineClass, 1); - Array.set(timelineArray, 0, timeline); + int timelineArrayLength = RuntimeEnvironment.getApiLevel() == TIRAMISU ? 1 : 7; + + Object timelineArray = Array.newInstance(frameTimelineClass, timelineArrayLength); + for (int i = 0; i < timelineArrayLength; i++) { + Array.set(timelineArray, i, newFrameTimeline(frameTimelineClass)); + } // get FrameTimeline[].class Class<?> frameTimeLineArrayClass = @@ -268,6 +266,14 @@ public class ShadowDisplayEventReceiver { } } + private static Object newFrameTimeline(Class<?> frameTimelineClass) { + return ReflectionHelpers.callConstructor( + frameTimelineClass, + ClassParameter.from(long.class, 1) /* vsync id */, + ClassParameter.from(long.class, 1) /* expectedPresentTime */, + ClassParameter.from(long.class, 10) /* deadline */); + } + /** Reflector interface for {@link DisplayEventReceiver}'s internals. */ @ForType(DisplayEventReceiver.class) protected interface DisplayEventReceiverReflector { diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayManagerGlobal.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayManagerGlobal.java index c6c2b1f1c..91a3c5579 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayManagerGlobal.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayManagerGlobal.java @@ -1,5 +1,6 @@ package org.robolectric.shadows; +import static android.os.Build.VERSION_CODES.CUR_DEVELOPMENT; import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1; import static android.os.Build.VERSION_CODES.O_MR1; import static android.os.Build.VERSION_CODES.P; @@ -23,6 +24,7 @@ import java.util.List; import java.util.TreeMap; import java.util.concurrent.CopyOnWriteArrayList; import javax.annotation.Nullable; +import org.robolectric.RuntimeEnvironment; import org.robolectric.android.Bootstrap; import org.robolectric.annotation.HiddenApi; import org.robolectric.annotation.Implementation; @@ -82,7 +84,11 @@ public class ShadowDisplayManagerGlobal { reflector(DisplayManagerGlobalReflector.class, instance); displayManagerGlobal.setDm(displayManager); displayManagerGlobal.setLock(new Object()); - displayManagerGlobal.setDisplayListeners(new CopyOnWriteArrayList<>()); + List<Handler> displayListeners = + RuntimeEnvironment.getApiLevel() < CUR_DEVELOPMENT + ? new ArrayList<>() + : new CopyOnWriteArrayList<>(); + displayManagerGlobal.setDisplayListeners(displayListeners); displayManagerGlobal.setDisplayInfoCache(new SparseArray<>()); return instance; } @@ -265,7 +271,7 @@ public class ShadowDisplayManagerGlobal { void setLock(Object lock); @Accessor("mDisplayListeners") - void setDisplayListeners(CopyOnWriteArrayList<Handler> list); + void setDisplayListeners(List<Handler> list); @Accessor("mDisplayInfoCache") void setDisplayInfoCache(SparseArray<DisplayInfo> displayInfoCache); diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNfcAdapter.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNfcAdapter.java index 98847ab6c..0f9e44d17 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNfcAdapter.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNfcAdapter.java @@ -11,6 +11,7 @@ import android.nfc.NdefMessage; import android.nfc.NfcAdapter; import android.nfc.Tag; import android.os.Build; +import android.os.Build.VERSION_CODES; import android.os.Bundle; import java.util.Map; import org.robolectric.RuntimeEnvironment; @@ -220,7 +221,9 @@ public class ShadowNfcAdapter { } if (RuntimeEnvironment.getApiLevel() >= Build.VERSION_CODES.Q) { nfcAdapterReflector.setHasNfcFeature(false); - nfcAdapterReflector.setHasBeamFeature(false); + if (RuntimeEnvironment.getApiLevel() < VERSION_CODES.CUR_DEVELOPMENT) { + nfcAdapterReflector.setHasBeamFeature(false); + } } } |