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

Commit 770f8d39 authored by Rupesh Bansal's avatar Rupesh Bansal
Browse files

Explicit registraton to refresh rate

To not break the applications using the older sdks, we are implicitly
subscribing the clients to refresh rate events when the
registerDisplayListener(DisplayListener, Handler) API is called.
However, in other variants on registerDisplayListener, we now expect
users to explicitly subscribe to EVENT_TYPE_DISPLAY_REFRESH_RATE to get
the refresh rate updates.

Bug: 387962667
Flag: EXEMPT trivial change
Test: atest DisplayEventTest
Change-Id: I74610cec499546937442b5e10fdecc385d8b9dca
parent 849d1b8a
Loading
Loading
Loading
Loading
+9 −1
Original line number Original line Diff line number Diff line
@@ -623,6 +623,9 @@ public final class DisplayManager {
     * is triggered whenever the properties of a {@link android.view.Display}, such as size,
     * is triggered whenever the properties of a {@link android.view.Display}, such as size,
     * state, density are modified.
     * state, density are modified.
     *
     *
     * This event is not triggered for refresh rate changes as they can change very often.
     * To monitor refresh rate changes, subscribe to {@link EVENT_TYPE_DISPLAY_REFRESH_RATE}.
     *
     * @see #registerDisplayListener(DisplayListener, Handler, long)
     * @see #registerDisplayListener(DisplayListener, Handler, long)
     *
     *
     */
     */
@@ -801,6 +804,9 @@ public final class DisplayManager {
     * Registers a display listener to receive notifications about when
     * Registers a display listener to receive notifications about when
     * displays are added, removed or changed.
     * displays are added, removed or changed.
     *
     *
     * We encourage to use {@link #registerDisplayListener(Executor, long, DisplayListener)}
     * instead to subscribe for explicit events of interest
     *
     * @param listener The listener to register.
     * @param listener The listener to register.
     * @param handler The handler on which the listener should be invoked, or null
     * @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.
     * if the listener should be invoked on the calling thread's looper.
@@ -809,7 +815,9 @@ public final class DisplayManager {
     */
     */
    public void registerDisplayListener(DisplayListener listener, Handler handler) {
    public void registerDisplayListener(DisplayListener listener, Handler handler) {
        registerDisplayListener(listener, handler, EVENT_TYPE_DISPLAY_ADDED
        registerDisplayListener(listener, handler, EVENT_TYPE_DISPLAY_ADDED
                | EVENT_TYPE_DISPLAY_CHANGED | EVENT_TYPE_DISPLAY_REMOVED);
                | EVENT_TYPE_DISPLAY_CHANGED
                | EVENT_TYPE_DISPLAY_REFRESH_RATE
                | EVENT_TYPE_DISPLAY_REMOVED);
    }
    }


    /**
    /**
+6 −12
Original line number Original line Diff line number Diff line
@@ -1766,29 +1766,23 @@ public final class DisplayManagerGlobal {
        }
        }


        if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_CHANGED) != 0) {
        if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_CHANGED) != 0) {
            // For backward compatibility, a client subscribing to
            baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_BASIC_CHANGED;
            // DisplayManager.EVENT_FLAG_DISPLAY_CHANGED will be enrolled to both Basic and
            // RR changes
            baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_BASIC_CHANGED
                    | INTERNAL_EVENT_FLAG_DISPLAY_REFRESH_RATE;
        }
        }


        if ((eventFlags
        if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_REMOVED) != 0) {
                & DisplayManager.EVENT_TYPE_DISPLAY_REMOVED) != 0) {
            baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_REMOVED;
            baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_REMOVED;
        }
        }


        if (Flags.displayListenerPerformanceImprovements()) {
        if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_REFRESH_RATE) != 0) {
        if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_REFRESH_RATE) != 0) {
            baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_REFRESH_RATE;
            baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_REFRESH_RATE;
        }
        }


        if (Flags.displayListenerPerformanceImprovements()) {
            if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_STATE) != 0) {
            if ((eventFlags & DisplayManager.EVENT_TYPE_DISPLAY_STATE) != 0) {
                baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_STATE;
                baseEventMask |= INTERNAL_EVENT_FLAG_DISPLAY_STATE;
            }
            }
        }
        }



        return baseEventMask;
        return baseEventMask;
    }
    }
}
}
+4 −2
Original line number Original line Diff line number Diff line
@@ -307,8 +307,10 @@ public class DisplayManagerGlobalTest {
        assertEquals(DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_ADDED,
        assertEquals(DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_ADDED,
                mDisplayManagerGlobal
                mDisplayManagerGlobal
                        .mapFiltersToInternalEventFlag(DisplayManager.EVENT_TYPE_DISPLAY_ADDED, 0));
                        .mapFiltersToInternalEventFlag(DisplayManager.EVENT_TYPE_DISPLAY_ADDED, 0));
        assertEquals(DISPLAY_CHANGE_EVENTS, mDisplayManagerGlobal
        assertEquals(DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_BASIC_CHANGED,
                .mapFiltersToInternalEventFlag(DisplayManager.EVENT_TYPE_DISPLAY_CHANGED, 0));
                mDisplayManagerGlobal
                        .mapFiltersToInternalEventFlag(DisplayManager.EVENT_TYPE_DISPLAY_CHANGED,
                                0));
        assertEquals(DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_REMOVED,
        assertEquals(DisplayManagerGlobal.INTERNAL_EVENT_FLAG_DISPLAY_REMOVED,
                mDisplayManagerGlobal.mapFiltersToInternalEventFlag(
                mDisplayManagerGlobal.mapFiltersToInternalEventFlag(
                        DisplayManager.EVENT_TYPE_DISPLAY_REMOVED, 0));
                        DisplayManager.EVENT_TYPE_DISPLAY_REMOVED, 0));