Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea67e1cc authored by Rupesh Bansal's avatar Rupesh Bansal Committed by Android (Google) Code Review
Browse files

Merge "Refactored EventMask to EventFlag" into main

parents 7cda99e3 a13cdf4d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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.
@@ -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
@@ -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());
    }

+39 −36
Original line number Diff line number Diff line
@@ -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;
@@ -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<>();

@@ -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);
    }

@@ -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();
@@ -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
@@ -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();
            }
@@ -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;
@@ -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;
        }

@@ -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() + ")");
@@ -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: "
@@ -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;
@@ -1381,7 +1384,7 @@ public final class DisplayManagerGlobal {

        @Override
        public String toString() {
            return "mask: {" + mEventsMask + "}, for " + mListener.getClass();
            return "mEventFlagsMask: {" + mEventFlagsMask + "}, for " + mListener.getClass();
        }
    }

+23 −22
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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;
@@ -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;

@@ -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);
        }

        /**
@@ -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;
@@ -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);
@@ -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");
            }
@@ -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.");
                }
@@ -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);
            }