aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Chabot <brettchabot@google.com>2023-03-07 09:16:52 -0800
committerRex Hoffman <rexhoffman@google.com>2023-04-18 16:31:47 +0000
commitb5d2493d4f0815ccfaa5f80616d0cd33605c7c7e (patch)
tree3cadbaba1f5be69be3704917690243799826ac18
parentd1d388775157f87fa1d28a8a27686f00ece133f4 (diff)
downloadrobolectric-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
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayEventReceiver.java24
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowDisplayManagerGlobal.java10
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowNfcAdapter.java5
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);
+ }
}
}