Loading core/java/android/hardware/display/DisplayManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -580,7 +580,7 @@ public final class DisplayManager { EVENT_FLAG_DISPLAY_CONNECTION_CHANGED, }) @Retention(RetentionPolicy.SOURCE) public @interface EventsMask {} public @interface EventFlag {} /** * Event type for when a new display is added. Loading Loading @@ -774,7 +774,7 @@ public final class DisplayManager { * @param listener The listener to register. * @param handler The handler on which the listener should be invoked, or null * if the listener should be invoked on the calling thread's looper. * @param eventsMask A bitmask of the event types for which this listener is subscribed. * @param eventFlagsMask A bitmask of the event types for which this listener is subscribed. * * @see #EVENT_FLAG_DISPLAY_ADDED * @see #EVENT_FLAG_DISPLAY_CHANGED Loading @@ -786,8 +786,8 @@ public final class DisplayManager { * @hide */ public void registerDisplayListener(@NonNull DisplayListener listener, @Nullable Handler handler, @EventsMask long eventsMask) { mGlobal.registerDisplayListener(listener, handler, eventsMask, @Nullable Handler handler, @EventFlag long eventFlagsMask) { mGlobal.registerDisplayListener(listener, handler, eventFlagsMask, ActivityThread.currentPackageName()); } Loading core/java/android/hardware/display/DisplayManagerGlobal.java +39 −36 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.hardware.display; import static android.hardware.display.DisplayManager.EventsMask; import static android.hardware.display.DisplayManager.EventFlag; import static android.view.Display.HdrCapabilities.HdrType; import android.Manifest; Loading Loading @@ -130,7 +130,7 @@ public final class DisplayManagerGlobal { private final IDisplayManager mDm; private DisplayManagerCallback mCallback; private @EventsMask long mRegisteredEventsMask = 0; private @EventFlag long mRegisteredEventFlagsMask = 0; private final CopyOnWriteArrayList<DisplayListenerDelegate> mDisplayListeners = new CopyOnWriteArrayList<>(); Loading Loading @@ -346,10 +346,11 @@ public final class DisplayManagerGlobal { * @param packageName of the calling package. */ public void registerDisplayListener(@NonNull DisplayListener listener, @Nullable Handler handler, @EventsMask long eventsMask, String packageName) { @Nullable Handler handler, @EventFlag long eventFlagsMask, String packageName) { Looper looper = getLooperForHandler(handler); Handler springBoard = new Handler(looper); registerDisplayListener(listener, new HandlerExecutor(springBoard), eventsMask, registerDisplayListener(listener, new HandlerExecutor(springBoard), eventFlagsMask, packageName); } Loading @@ -358,32 +359,32 @@ public final class DisplayManagerGlobal { * * @param listener The listener that will be called when display changes occur. * @param executor Executor for the thread that will be receiving the callbacks. Cannot be null. * @param eventsMask Mask of events to be listened to. * @param eventFlagsMask Flag of events to be listened to. * @param packageName of the calling package. */ public void registerDisplayListener(@NonNull DisplayListener listener, @NonNull Executor executor, @EventsMask long eventsMask, String packageName) { @NonNull Executor executor, @EventFlag long eventFlagsMask, String packageName) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } if (eventsMask == 0) { if (eventFlagsMask == 0) { throw new IllegalArgumentException("The set of events to listen to must not be empty."); } if (extraLogging()) { Slog.i(TAG, "Registering Display Listener: " + Long.toBinaryString(eventsMask) + ", packageName: " + packageName); + Long.toBinaryString(eventFlagsMask) + ", packageName: " + packageName); } synchronized (mLock) { int index = findDisplayListenerLocked(listener); if (index < 0) { mDisplayListeners.add(new DisplayListenerDelegate(listener, executor, eventsMask, packageName)); mDisplayListeners.add(new DisplayListenerDelegate(listener, executor, eventFlagsMask, packageName)); registerCallbackIfNeededLocked(); } else { mDisplayListeners.get(index).setEventsMask(eventsMask); mDisplayListeners.get(index).setEventFlagsMask(eventFlagsMask); } updateCallbackIfNeededLocked(); maybeLogAllDisplayListeners(); Loading Loading @@ -455,12 +456,12 @@ public final class DisplayManagerGlobal { return -1; } @EventsMask private int calculateEventsMaskLocked() { @EventFlag private int calculateEventFlagsMaskLocked() { int mask = 0; final int numListeners = mDisplayListeners.size(); for (int i = 0; i < numListeners; i++) { mask |= mDisplayListeners.get(i).mEventsMask; mask |= mDisplayListeners.get(i).mEventFlagsMask; } if (mDispatchNativeCallbacks) { mask |= DisplayManager.EVENT_FLAG_DISPLAY_ADDED Loading @@ -478,14 +479,14 @@ public final class DisplayManagerGlobal { } private void updateCallbackIfNeededLocked() { int mask = calculateEventsMaskLocked(); int mask = calculateEventFlagsMaskLocked(); if (DEBUG) { Log.d(TAG, "Mask for listener: " + mask); Log.d(TAG, "Flag for listener: " + mask); } if (mask != mRegisteredEventsMask) { if (mask != mRegisteredEventFlagsMask) { try { mDm.registerCallbackWithEventMask(mCallback, mask); mRegisteredEventsMask = mask; mRegisteredEventFlagsMask = mask; } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } Loading Loading @@ -1276,7 +1277,7 @@ public final class DisplayManagerGlobal { private static final class DisplayListenerDelegate { public final DisplayListener mListener; public volatile long mEventsMask; public volatile long mEventFlagsMask; private final DisplayInfo mDisplayInfo = new DisplayInfo(); private final Executor mExecutor; Loading @@ -1284,10 +1285,10 @@ public final class DisplayManagerGlobal { private final String mPackageName; DisplayListenerDelegate(DisplayListener listener, @NonNull Executor executor, @EventsMask long eventsMask, String packageName) { @EventFlag long eventFlag, String packageName) { mExecutor = executor; mListener = listener; mEventsMask = eventsMask; mEventFlagsMask = eventFlag; mPackageName = packageName; } Loading @@ -1309,16 +1310,16 @@ public final class DisplayManagerGlobal { mGenerationId.incrementAndGet(); } void setEventsMask(@EventsMask long newEventsMask) { mEventsMask = newEventsMask; void setEventFlagsMask(@EventFlag long newEventsFlag) { mEventFlagsMask = newEventsFlag; } private void handleDisplayEventInner(int displayId, @DisplayEvent int event, private void handleDisplayEventInner(int displayId, @DisplayEvent int eventFlagsMask, @Nullable DisplayInfo info, boolean forceUpdate) { if (extraLogging()) { Slog.i(TAG, "DLD(" + eventToString(event) Slog.i(TAG, "DLD(" + eventToString(eventFlagsMask) + ", display=" + displayId + ", mEventsMask=" + Long.toBinaryString(mEventsMask) + ", mEventsFlagMask=" + Long.toBinaryString(mEventFlagsMask) + ", mPackageName=" + mPackageName + ", displayInfo=" + info + ", listener=" + mListener.getClass() + ")"); Loading @@ -1326,18 +1327,18 @@ public final class DisplayManagerGlobal { if (DEBUG) { Trace.beginSection( TextUtils.trimToSize( "DLD(" + eventToString(event) "DLD(" + eventToString(eventFlagsMask) + ", display=" + displayId + ", listener=" + mListener.getClass() + ")", 127)); } switch (event) { switch (eventFlagsMask) { case EVENT_DISPLAY_ADDED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0) { mListener.onDisplayAdded(displayId); } break; case EVENT_DISPLAY_CHANGED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0) { if (info != null && (forceUpdate || !info.equals(mDisplayInfo))) { if (extraLogging()) { Slog.i(TAG, "Sending onDisplayChanged: Display Changed. Info: " Loading @@ -1349,27 +1350,29 @@ public final class DisplayManagerGlobal { } break; case EVENT_DISPLAY_BRIGHTNESS_CHANGED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0) { mListener.onDisplayChanged(displayId); } break; case EVENT_DISPLAY_REMOVED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0) { mListener.onDisplayRemoved(displayId); } break; case EVENT_DISPLAY_HDR_SDR_RATIO_CHANGED: if ((mEventsMask & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0) { mListener.onDisplayChanged(displayId); } break; case EVENT_DISPLAY_CONNECTED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { mListener.onDisplayConnected(displayId); } break; case EVENT_DISPLAY_DISCONNECTED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { mListener.onDisplayDisconnected(displayId); } break; Loading @@ -1381,7 +1384,7 @@ public final class DisplayManagerGlobal { @Override public String toString() { return "mask: {" + mEventsMask + "}, for " + mListener.getClass(); return "mEventFlagsMask: {" + mEventFlagsMask + "}, for " + mListener.getClass(); } } Loading services/core/java/com/android/server/display/DisplayManagerService.java +23 −22 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import static android.Manifest.permission.MANAGE_DISPLAYS; import static android.Manifest.permission.RESTRICT_DISPLAY_MODES; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE; import static android.hardware.display.DisplayManager.EventsMask; import static android.hardware.display.DisplayManager.EventFlag; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; Loading Loading @@ -1390,16 +1390,16 @@ public final class DisplayManagerService extends SystemService { } private void registerCallbackInternal(IDisplayManagerCallback callback, int callingPid, int callingUid, @EventsMask long eventsMask) { int callingUid, @EventFlag long eventFlagsMask) { synchronized (mSyncRoot) { CallbackRecord record = mCallbacks.get(callingPid); if (record != null) { record.updateEventsMask(eventsMask); record.updateEventFlagsMask(eventFlagsMask); return; } record = new CallbackRecord(callingPid, callingUid, callback, eventsMask); record = new CallbackRecord(callingPid, callingUid, callback, eventFlagsMask); try { IBinder binder = callback.asBinder(); binder.linkToDeath(record, 0); Loading Loading @@ -4009,7 +4009,7 @@ public final class DisplayManagerService extends SystemService { public final int mPid; public final int mUid; private final IDisplayManagerCallback mCallback; private @EventsMask AtomicLong mEventsMask; private @DisplayManager.EventFlag AtomicLong mEventFlagsMask; private final String mPackageName; public boolean mWifiDisplayScanRequested; Loading @@ -4030,11 +4030,11 @@ public final class DisplayManagerService extends SystemService { private boolean mFrozen; CallbackRecord(int pid, int uid, @NonNull IDisplayManagerCallback callback, @EventsMask long eventsMask) { @EventFlag long eventFlagsMask) { mPid = pid; mUid = uid; mCallback = callback; mEventsMask = new AtomicLong(eventsMask); mEventFlagsMask = new AtomicLong(eventFlagsMask); mCached = false; mFrozen = false; Loading @@ -4056,8 +4056,8 @@ public final class DisplayManagerService extends SystemService { mPackageName = packageNames == null ? null : packageNames[0]; } public void updateEventsMask(@EventsMask long eventsMask) { mEventsMask.set(eventsMask); public void updateEventFlagsMask(@EventFlag long eventFlag) { mEventFlagsMask.set(eventFlag); } /** Loading Loading @@ -4121,12 +4121,13 @@ public final class DisplayManagerService extends SystemService { if (!shouldSendEvent(event)) { if (extraLogging(mPackageName)) { Slog.i(TAG, "Not sending displayEvent: " + event + " due to mask:" + mEventsMask); "Not sending displayEvent: " + event + " due to flag:" + mEventFlagsMask); } if (Trace.isTagEnabled(Trace.TRACE_TAG_POWER)) { Trace.instant(Trace.TRACE_TAG_POWER, "notifyDisplayEventAsync#notSendingEvent=" + event + ",mEventsMask=" + mEventsMask); "notifyDisplayEventAsync#notSendingEvent=" + event + ",mEventsFlag=" + mEventFlagsMask); } // The client is not interested in this event, so do nothing. return true; Loading Loading @@ -4172,22 +4173,22 @@ public final class DisplayManagerService extends SystemService { * Return true if the client is interested in this event. */ private boolean shouldSendEvent(@DisplayEvent int event) { final long mask = mEventsMask.get(); final long flag = mEventFlagsMask.get(); switch (event) { case DisplayManagerGlobal.EVENT_DISPLAY_ADDED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_CHANGED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_BRIGHTNESS_CHANGED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_REMOVED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_HDR_SDR_RATIO_CHANGED: return (mask & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0; return (flag & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_CONNECTED: // fallthrough case DisplayManagerGlobal.EVENT_DISPLAY_DISCONNECTED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0; default: // This should never happen. Slog.e(TAG, "Unknown display event " + event); Loading Loading @@ -4381,7 +4382,7 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call @SuppressLint("AndroidFrameworkRequiresPermission") // Permission only required sometimes public void registerCallbackWithEventMask(IDisplayManagerCallback callback, @EventsMask long eventsMask) { @EventFlag long eventFlagsMask) { if (callback == null) { throw new IllegalArgumentException("listener must not be null"); } Loading @@ -4390,7 +4391,7 @@ public final class DisplayManagerService extends SystemService { final int callingUid = Binder.getCallingUid(); if (mFlags.isConnectedDisplayManagementEnabled()) { if ((eventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { if ((eventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { mContext.enforceCallingOrSelfPermission(MANAGE_DISPLAYS, "Permission required to get signals about connection events."); } Loading @@ -4398,7 +4399,7 @@ public final class DisplayManagerService extends SystemService { final long token = Binder.clearCallingIdentity(); try { registerCallbackInternal(callback, callingPid, callingUid, eventsMask); registerCallbackInternal(callback, callingPid, callingUid, eventFlagsMask); } finally { Binder.restoreCallingIdentity(token); } Loading Loading
core/java/android/hardware/display/DisplayManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -580,7 +580,7 @@ public final class DisplayManager { EVENT_FLAG_DISPLAY_CONNECTION_CHANGED, }) @Retention(RetentionPolicy.SOURCE) public @interface EventsMask {} public @interface EventFlag {} /** * Event type for when a new display is added. Loading Loading @@ -774,7 +774,7 @@ public final class DisplayManager { * @param listener The listener to register. * @param handler The handler on which the listener should be invoked, or null * if the listener should be invoked on the calling thread's looper. * @param eventsMask A bitmask of the event types for which this listener is subscribed. * @param eventFlagsMask A bitmask of the event types for which this listener is subscribed. * * @see #EVENT_FLAG_DISPLAY_ADDED * @see #EVENT_FLAG_DISPLAY_CHANGED Loading @@ -786,8 +786,8 @@ public final class DisplayManager { * @hide */ public void registerDisplayListener(@NonNull DisplayListener listener, @Nullable Handler handler, @EventsMask long eventsMask) { mGlobal.registerDisplayListener(listener, handler, eventsMask, @Nullable Handler handler, @EventFlag long eventFlagsMask) { mGlobal.registerDisplayListener(listener, handler, eventFlagsMask, ActivityThread.currentPackageName()); } Loading
core/java/android/hardware/display/DisplayManagerGlobal.java +39 −36 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.hardware.display; import static android.hardware.display.DisplayManager.EventsMask; import static android.hardware.display.DisplayManager.EventFlag; import static android.view.Display.HdrCapabilities.HdrType; import android.Manifest; Loading Loading @@ -130,7 +130,7 @@ public final class DisplayManagerGlobal { private final IDisplayManager mDm; private DisplayManagerCallback mCallback; private @EventsMask long mRegisteredEventsMask = 0; private @EventFlag long mRegisteredEventFlagsMask = 0; private final CopyOnWriteArrayList<DisplayListenerDelegate> mDisplayListeners = new CopyOnWriteArrayList<>(); Loading Loading @@ -346,10 +346,11 @@ public final class DisplayManagerGlobal { * @param packageName of the calling package. */ public void registerDisplayListener(@NonNull DisplayListener listener, @Nullable Handler handler, @EventsMask long eventsMask, String packageName) { @Nullable Handler handler, @EventFlag long eventFlagsMask, String packageName) { Looper looper = getLooperForHandler(handler); Handler springBoard = new Handler(looper); registerDisplayListener(listener, new HandlerExecutor(springBoard), eventsMask, registerDisplayListener(listener, new HandlerExecutor(springBoard), eventFlagsMask, packageName); } Loading @@ -358,32 +359,32 @@ public final class DisplayManagerGlobal { * * @param listener The listener that will be called when display changes occur. * @param executor Executor for the thread that will be receiving the callbacks. Cannot be null. * @param eventsMask Mask of events to be listened to. * @param eventFlagsMask Flag of events to be listened to. * @param packageName of the calling package. */ public void registerDisplayListener(@NonNull DisplayListener listener, @NonNull Executor executor, @EventsMask long eventsMask, String packageName) { @NonNull Executor executor, @EventFlag long eventFlagsMask, String packageName) { if (listener == null) { throw new IllegalArgumentException("listener must not be null"); } if (eventsMask == 0) { if (eventFlagsMask == 0) { throw new IllegalArgumentException("The set of events to listen to must not be empty."); } if (extraLogging()) { Slog.i(TAG, "Registering Display Listener: " + Long.toBinaryString(eventsMask) + ", packageName: " + packageName); + Long.toBinaryString(eventFlagsMask) + ", packageName: " + packageName); } synchronized (mLock) { int index = findDisplayListenerLocked(listener); if (index < 0) { mDisplayListeners.add(new DisplayListenerDelegate(listener, executor, eventsMask, packageName)); mDisplayListeners.add(new DisplayListenerDelegate(listener, executor, eventFlagsMask, packageName)); registerCallbackIfNeededLocked(); } else { mDisplayListeners.get(index).setEventsMask(eventsMask); mDisplayListeners.get(index).setEventFlagsMask(eventFlagsMask); } updateCallbackIfNeededLocked(); maybeLogAllDisplayListeners(); Loading Loading @@ -455,12 +456,12 @@ public final class DisplayManagerGlobal { return -1; } @EventsMask private int calculateEventsMaskLocked() { @EventFlag private int calculateEventFlagsMaskLocked() { int mask = 0; final int numListeners = mDisplayListeners.size(); for (int i = 0; i < numListeners; i++) { mask |= mDisplayListeners.get(i).mEventsMask; mask |= mDisplayListeners.get(i).mEventFlagsMask; } if (mDispatchNativeCallbacks) { mask |= DisplayManager.EVENT_FLAG_DISPLAY_ADDED Loading @@ -478,14 +479,14 @@ public final class DisplayManagerGlobal { } private void updateCallbackIfNeededLocked() { int mask = calculateEventsMaskLocked(); int mask = calculateEventFlagsMaskLocked(); if (DEBUG) { Log.d(TAG, "Mask for listener: " + mask); Log.d(TAG, "Flag for listener: " + mask); } if (mask != mRegisteredEventsMask) { if (mask != mRegisteredEventFlagsMask) { try { mDm.registerCallbackWithEventMask(mCallback, mask); mRegisteredEventsMask = mask; mRegisteredEventFlagsMask = mask; } catch (RemoteException ex) { throw ex.rethrowFromSystemServer(); } Loading Loading @@ -1276,7 +1277,7 @@ public final class DisplayManagerGlobal { private static final class DisplayListenerDelegate { public final DisplayListener mListener; public volatile long mEventsMask; public volatile long mEventFlagsMask; private final DisplayInfo mDisplayInfo = new DisplayInfo(); private final Executor mExecutor; Loading @@ -1284,10 +1285,10 @@ public final class DisplayManagerGlobal { private final String mPackageName; DisplayListenerDelegate(DisplayListener listener, @NonNull Executor executor, @EventsMask long eventsMask, String packageName) { @EventFlag long eventFlag, String packageName) { mExecutor = executor; mListener = listener; mEventsMask = eventsMask; mEventFlagsMask = eventFlag; mPackageName = packageName; } Loading @@ -1309,16 +1310,16 @@ public final class DisplayManagerGlobal { mGenerationId.incrementAndGet(); } void setEventsMask(@EventsMask long newEventsMask) { mEventsMask = newEventsMask; void setEventFlagsMask(@EventFlag long newEventsFlag) { mEventFlagsMask = newEventsFlag; } private void handleDisplayEventInner(int displayId, @DisplayEvent int event, private void handleDisplayEventInner(int displayId, @DisplayEvent int eventFlagsMask, @Nullable DisplayInfo info, boolean forceUpdate) { if (extraLogging()) { Slog.i(TAG, "DLD(" + eventToString(event) Slog.i(TAG, "DLD(" + eventToString(eventFlagsMask) + ", display=" + displayId + ", mEventsMask=" + Long.toBinaryString(mEventsMask) + ", mEventsFlagMask=" + Long.toBinaryString(mEventFlagsMask) + ", mPackageName=" + mPackageName + ", displayInfo=" + info + ", listener=" + mListener.getClass() + ")"); Loading @@ -1326,18 +1327,18 @@ public final class DisplayManagerGlobal { if (DEBUG) { Trace.beginSection( TextUtils.trimToSize( "DLD(" + eventToString(event) "DLD(" + eventToString(eventFlagsMask) + ", display=" + displayId + ", listener=" + mListener.getClass() + ")", 127)); } switch (event) { switch (eventFlagsMask) { case EVENT_DISPLAY_ADDED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0) { mListener.onDisplayAdded(displayId); } break; case EVENT_DISPLAY_CHANGED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0) { if (info != null && (forceUpdate || !info.equals(mDisplayInfo))) { if (extraLogging()) { Slog.i(TAG, "Sending onDisplayChanged: Display Changed. Info: " Loading @@ -1349,27 +1350,29 @@ public final class DisplayManagerGlobal { } break; case EVENT_DISPLAY_BRIGHTNESS_CHANGED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0) { mListener.onDisplayChanged(displayId); } break; case EVENT_DISPLAY_REMOVED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0) { mListener.onDisplayRemoved(displayId); } break; case EVENT_DISPLAY_HDR_SDR_RATIO_CHANGED: if ((mEventsMask & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0) { mListener.onDisplayChanged(displayId); } break; case EVENT_DISPLAY_CONNECTED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { mListener.onDisplayConnected(displayId); } break; case EVENT_DISPLAY_DISCONNECTED: if ((mEventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { if ((mEventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { mListener.onDisplayDisconnected(displayId); } break; Loading @@ -1381,7 +1384,7 @@ public final class DisplayManagerGlobal { @Override public String toString() { return "mask: {" + mEventsMask + "}, for " + mListener.getClass(); return "mEventFlagsMask: {" + mEventFlagsMask + "}, for " + mListener.getClass(); } } Loading
services/core/java/com/android/server/display/DisplayManagerService.java +23 −22 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import static android.Manifest.permission.MANAGE_DISPLAYS; import static android.Manifest.permission.RESTRICT_DISPLAY_MODES; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_GONE; import static android.hardware.display.DisplayManager.EventsMask; import static android.hardware.display.DisplayManager.EventFlag; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_ALWAYS_UNLOCKED; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR; import static android.hardware.display.DisplayManager.VIRTUAL_DISPLAY_FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD; Loading Loading @@ -1390,16 +1390,16 @@ public final class DisplayManagerService extends SystemService { } private void registerCallbackInternal(IDisplayManagerCallback callback, int callingPid, int callingUid, @EventsMask long eventsMask) { int callingUid, @EventFlag long eventFlagsMask) { synchronized (mSyncRoot) { CallbackRecord record = mCallbacks.get(callingPid); if (record != null) { record.updateEventsMask(eventsMask); record.updateEventFlagsMask(eventFlagsMask); return; } record = new CallbackRecord(callingPid, callingUid, callback, eventsMask); record = new CallbackRecord(callingPid, callingUid, callback, eventFlagsMask); try { IBinder binder = callback.asBinder(); binder.linkToDeath(record, 0); Loading Loading @@ -4009,7 +4009,7 @@ public final class DisplayManagerService extends SystemService { public final int mPid; public final int mUid; private final IDisplayManagerCallback mCallback; private @EventsMask AtomicLong mEventsMask; private @DisplayManager.EventFlag AtomicLong mEventFlagsMask; private final String mPackageName; public boolean mWifiDisplayScanRequested; Loading @@ -4030,11 +4030,11 @@ public final class DisplayManagerService extends SystemService { private boolean mFrozen; CallbackRecord(int pid, int uid, @NonNull IDisplayManagerCallback callback, @EventsMask long eventsMask) { @EventFlag long eventFlagsMask) { mPid = pid; mUid = uid; mCallback = callback; mEventsMask = new AtomicLong(eventsMask); mEventFlagsMask = new AtomicLong(eventFlagsMask); mCached = false; mFrozen = false; Loading @@ -4056,8 +4056,8 @@ public final class DisplayManagerService extends SystemService { mPackageName = packageNames == null ? null : packageNames[0]; } public void updateEventsMask(@EventsMask long eventsMask) { mEventsMask.set(eventsMask); public void updateEventFlagsMask(@EventFlag long eventFlag) { mEventFlagsMask.set(eventFlag); } /** Loading Loading @@ -4121,12 +4121,13 @@ public final class DisplayManagerService extends SystemService { if (!shouldSendEvent(event)) { if (extraLogging(mPackageName)) { Slog.i(TAG, "Not sending displayEvent: " + event + " due to mask:" + mEventsMask); "Not sending displayEvent: " + event + " due to flag:" + mEventFlagsMask); } if (Trace.isTagEnabled(Trace.TRACE_TAG_POWER)) { Trace.instant(Trace.TRACE_TAG_POWER, "notifyDisplayEventAsync#notSendingEvent=" + event + ",mEventsMask=" + mEventsMask); "notifyDisplayEventAsync#notSendingEvent=" + event + ",mEventsFlag=" + mEventFlagsMask); } // The client is not interested in this event, so do nothing. return true; Loading Loading @@ -4172,22 +4173,22 @@ public final class DisplayManagerService extends SystemService { * Return true if the client is interested in this event. */ private boolean shouldSendEvent(@DisplayEvent int event) { final long mask = mEventsMask.get(); final long flag = mEventFlagsMask.get(); switch (event) { case DisplayManagerGlobal.EVENT_DISPLAY_ADDED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_ADDED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_CHANGED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_CHANGED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_BRIGHTNESS_CHANGED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_REMOVED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_REMOVED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_HDR_SDR_RATIO_CHANGED: return (mask & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0; return (flag & DisplayManager.EVENT_FLAG_HDR_SDR_RATIO_CHANGED) != 0; case DisplayManagerGlobal.EVENT_DISPLAY_CONNECTED: // fallthrough case DisplayManagerGlobal.EVENT_DISPLAY_DISCONNECTED: return (mask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0; return (flag & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0; default: // This should never happen. Slog.e(TAG, "Unknown display event " + event); Loading Loading @@ -4381,7 +4382,7 @@ public final class DisplayManagerService extends SystemService { @Override // Binder call @SuppressLint("AndroidFrameworkRequiresPermission") // Permission only required sometimes public void registerCallbackWithEventMask(IDisplayManagerCallback callback, @EventsMask long eventsMask) { @EventFlag long eventFlagsMask) { if (callback == null) { throw new IllegalArgumentException("listener must not be null"); } Loading @@ -4390,7 +4391,7 @@ public final class DisplayManagerService extends SystemService { final int callingUid = Binder.getCallingUid(); if (mFlags.isConnectedDisplayManagementEnabled()) { if ((eventsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { if ((eventFlagsMask & DisplayManager.EVENT_FLAG_DISPLAY_CONNECTION_CHANGED) != 0) { mContext.enforceCallingOrSelfPermission(MANAGE_DISPLAYS, "Permission required to get signals about connection events."); } Loading @@ -4398,7 +4399,7 @@ public final class DisplayManagerService extends SystemService { final long token = Binder.clearCallingIdentity(); try { registerCallbackInternal(callback, callingPid, callingUid, eventsMask); registerCallbackInternal(callback, callingPid, callingUid, eventFlagsMask); } finally { Binder.restoreCallingIdentity(token); } Loading