summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-02-13 03:08:30 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-02-13 03:08:30 +0000
commitc54e122a7f60d1a6324a6dd37e60c7cc4a8699fa (patch)
treea99169ffcfaa5b16e7beb4c1be0812935855fd7e
parent77da9217b8ed1a86989fef10a602dc43e97cc68f (diff)
parent837e2766950f5f5456e6b780f536b4725d944dac (diff)
Merge "Ensure looper is non-null in DisplayManagerGlobal"
-rw-r--r--core/java/android/hardware/display/DisplayManagerGlobal.java32
1 files changed, 28 insertions, 4 deletions
diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java
index f3ebd7f36fd6..ac44fe93ac31 100644
--- a/core/java/android/hardware/display/DisplayManagerGlobal.java
+++ b/core/java/android/hardware/display/DisplayManagerGlobal.java
@@ -16,6 +16,8 @@
package android.hardware.display;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.pm.ParceledListSlice;
@@ -229,7 +231,17 @@ public final class DisplayManagerGlobal {
return getCompatibleDisplay(displayId, DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS);
}
- public void registerDisplayListener(DisplayListener listener, Handler handler) {
+ /**
+ * Register a listener for display-related changes.
+ *
+ * @param listener The listener that will be called when display changes occur.
+ * @param handler Handler for the thread that will be receiving the callbacks. May be null.
+ * If null, listener will use the handler for the current thread, and if still null,
+ * the handler for the main thread.
+ * If that is still null, a runtime exception will be thrown.
+ */
+ public void registerDisplayListener(@NonNull DisplayListener listener,
+ @Nullable Handler handler) {
if (listener == null) {
throw new IllegalArgumentException("listener must not be null");
}
@@ -237,7 +249,8 @@ public final class DisplayManagerGlobal {
synchronized (mLock) {
int index = findDisplayListenerLocked(listener);
if (index < 0) {
- mDisplayListeners.add(new DisplayListenerDelegate(listener, handler));
+ Looper looper = getLooperForHandler(handler);
+ mDisplayListeners.add(new DisplayListenerDelegate(listener, looper));
registerCallbackIfNeededLocked();
}
}
@@ -258,6 +271,17 @@ public final class DisplayManagerGlobal {
}
}
+ private static Looper getLooperForHandler(@Nullable Handler handler) {
+ Looper looper = handler != null ? handler.getLooper() : Looper.myLooper();
+ if (looper == null) {
+ looper = Looper.getMainLooper();
+ }
+ if (looper == null) {
+ throw new RuntimeException("Could not get Looper for the UI thread.");
+ }
+ return looper;
+ }
+
private int findDisplayListenerLocked(DisplayListener listener) {
final int numListeners = mDisplayListeners.size();
for (int i = 0; i < numListeners; i++) {
@@ -636,8 +660,8 @@ public final class DisplayManagerGlobal {
private static final class DisplayListenerDelegate extends Handler {
public final DisplayListener mListener;
- public DisplayListenerDelegate(DisplayListener listener, Handler handler) {
- super(handler != null ? handler.getLooper() : Looper.myLooper(), null, true /*async*/);
+ DisplayListenerDelegate(DisplayListener listener, @NonNull Looper looper) {
+ super(looper, null, true /*async*/);
mListener = listener;
}