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

Commit d27293ab authored by [D's avatar [D[1;5D
Browse files

Display-aware UiModeManager get* APIs

Bug: 434903682
Test: CTS
Flag: android.companion.virtualdevice.flags.device_aware_ui_mode

Change-Id: Ifcf6f4af0304e78ef36fa8dfd1b5041d2862d36b
parent 82ec66f8
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -54,9 +54,9 @@ interface IUiModeManager {
    void disableCarModeByCallingPackage(int flags, String callingPackage);

    /**
     * Return the current running mode.
     * Returns the current running mode on the given display.
     */
    int getCurrentModeType();
    int getCurrentModeType(int displayId);

    /**
     * Sets the night mode.
@@ -69,14 +69,14 @@ interface IUiModeManager {
    void setNightMode(int mode);

    /**
     * Gets the currently configured night mode.
     * Returns the currently configured night mode on the given display.
     * <p>
     * Returns
     * <ol>notnight mode</ol>
     * <ol>night mode</ol>
     * <ol>custom schedule mode switching</ol>
     */
    int getNightMode();
    int getNightMode(int displayId);

    /**
     * Sets the current night mode to {@link #MODE_NIGHT_CUSTOM} with the custom night mode type
+24 −16
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import android.util.ArraySet;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
import android.view.Display;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.function.pooled.PooledLambda;
@@ -956,10 +957,10 @@ public class UiModeManager {
        }
    }

    private Integer getCurrentModeTypeFromServer() {
    private Integer getCurrentModeTypeFromServer(int displayId) {
        try {
            if (sGlobals != null) {
                return sGlobals.mService.getCurrentModeType();
                return sGlobals.mService.getCurrentModeType(displayId);
            }
            return Configuration.UI_MODE_TYPE_NORMAL;
        } catch (RemoteException e) {
@@ -971,13 +972,13 @@ public class UiModeManager {
    /**
     * Retrieve the current running mode type for the user.
     */
    private final IpcDataCache.QueryHandler<Void, Integer> mCurrentModeTypeQuery =
    private final IpcDataCache.QueryHandler<Integer, Integer> mCurrentModeTypeQuery =
            new IpcDataCache.QueryHandler<>() {

                @Override
                @NonNull
                public Integer apply(Void query) {
                    return getCurrentModeTypeFromServer();
                public Integer apply(Integer displayId) {
                    return getCurrentModeTypeFromServer(displayId);
                }
            };

@@ -986,7 +987,7 @@ public class UiModeManager {
    /**
     * Cache the current running mode type for a user.
     */
    private final IpcDataCache<Void, Integer> mCurrentModeTypeCache =
    private final IpcDataCache<Integer, Integer> mCurrentModeTypeCache =
            new IpcDataCache<>(1, IpcDataCache.MODULE_SYSTEM,
                    CURRENT_MODE_TYPE_API, /* cacheName= */ "CurrentModeTypeCache",
                    mCurrentModeTypeQuery);
@@ -1015,9 +1016,9 @@ public class UiModeManager {
     */
    public int getCurrentModeType() {
        if (enableCurrentModeTypeBinderCache()) {
            return mCurrentModeTypeCache.query(null);
            return mCurrentModeTypeCache.query(getDisplayId());
        } else {
            return getCurrentModeTypeFromServer();
            return getCurrentModeTypeFromServer(getDisplayId());
        }
    }

@@ -1193,10 +1194,10 @@ public class UiModeManager {
        }
    }

    private Integer getNightModeFromServer() {
    private Integer getNightModeFromServer(int displayId) {
        try {
            if (sGlobals != null) {
                return sGlobals.mService.getNightMode();
                return sGlobals.mService.getNightMode(displayId);
            }
            return -1;
        } catch (RemoteException e) {
@@ -1208,13 +1209,13 @@ public class UiModeManager {
    /**
     * Retrieve the night mode for the user.
     */
    private final IpcDataCache.QueryHandler<Void, Integer> mNightModeQuery =
    private final IpcDataCache.QueryHandler<Integer, Integer> mNightModeQuery =
            new IpcDataCache.QueryHandler<>() {

                @Override
                @NonNull
                public Integer apply(Void query) {
                    return getNightModeFromServer();
                public Integer apply(Integer displayId) {
                    return getNightModeFromServer(displayId);
                }
            };

@@ -1223,7 +1224,7 @@ public class UiModeManager {
    /**
     * Cache the night mode for a user.
     */
    private final IpcDataCache<Void, Integer> mNightModeCache =
    private final IpcDataCache<Integer, Integer> mNightModeCache =
            new IpcDataCache<>(1, IpcDataCache.MODULE_SYSTEM,
                    NIGHT_MODE_API, /* cacheName= */ "NightModeCache", mNightModeQuery);

@@ -1255,9 +1256,9 @@ public class UiModeManager {
     */
    public @NightMode int getNightMode() {
        if (enableNightModeBinderCache()) {
            return mNightModeCache.query(null);
            return mNightModeCache.query(getDisplayId());
        } else {
            return getNightModeFromServer();
            return getNightModeFromServer(getDisplayId());
        }
    }

@@ -1812,4 +1813,11 @@ public class UiModeManager {
    private int getUserId() {
        return mContext != null ? mContext.getUserId() : UserHandle.myUserId();
    }

    private int getDisplayId() {
        if (!android.companion.virtualdevice.flags.Flags.deviceAwareUiMode()) {
            return Display.DEFAULT_DISPLAY;
        }
        return mContext == null ? Display.DEFAULT_DISPLAY : mContext.getDisplayId();
    }
}
+7 −4
Original line number Diff line number Diff line
@@ -231,7 +231,8 @@ public final class AutoFillUI {
            }
            hideAllUiThread(callback);
            mFillUi = new FillUi(context, response, focusedId, filterText, mOverlayControl,
                    serviceLabel, serviceIcon, mUiModeMgr.isNightMode(), maxInputLengthForAutofill,
                    serviceLabel, serviceIcon, mUiModeMgr.isNightMode(context.getDisplayId()),
                    maxInputLengthForAutofill,
                    new FillUi.Callback() {
                @Override
                public void onResponsePicked(FillResponse response) {
@@ -412,7 +413,8 @@ public final class AutoFillUI {
                public void startIntentSender(IntentSender intentSender, Intent intent) {
                    callback.startIntentSender(intentSender, intent);
                }
            }, mUiModeMgr.isNightMode(), isUpdate, compatMode, showServiceIcon);
            }, mUiModeMgr.isNightMode(context.getDisplayId()), isUpdate, compatMode,
                    showServiceIcon);

            mSaveEventLogger.maybeSetLatencySaveUiDisplayMillis();
        });
@@ -447,7 +449,7 @@ public final class AutoFillUI {
            hideAllUiThread(callback);
            mFillDialog = new DialogFillUi(mContext, response, focusedId, filterText,
                    serviceIcon, servicePackageName, componentName, mOverlayControl,
                    mUiModeMgr.isNightMode(), new DialogFillUi.UiCallback() {
                    mUiModeMgr.isNightMode(mContext.getDisplayId()), new DialogFillUi.UiCallback() {
                        @Override
                        public void onResponsePicked(FillResponse response) {
                            log(MetricsEvent.TYPE_DETAIL);
@@ -566,7 +568,8 @@ public final class AutoFillUI {
        pw.println("Autofill UI");
        final String prefix = "  ";
        final String prefix2 = "    ";
        pw.print(prefix); pw.print("Night mode: "); pw.println(mUiModeMgr.isNightMode());
        pw.print(prefix); pw.print("Night mode: ");
        pw.println(mUiModeMgr.isNightMode(mContext.getDisplayId()));
        if (mFillUi != null) {
            pw.print(prefix); pw.println("showsFillUi: true");
            mFillUi.dump(pw, prefix2);
+2 −1
Original line number Diff line number Diff line
@@ -23,7 +23,8 @@ package com.android.server;
 */
public abstract class UiModeManagerInternal {

    public abstract boolean isNightMode();
    /** Returns whether night mode is enabled on the given display. */
    public abstract boolean isNightMode(int displayId);

    /**
     * Sets the UI mode for the given display.
+29 −13
Original line number Diff line number Diff line
@@ -934,14 +934,14 @@ final class UiModeManagerService extends SystemService {
        }

        @Override
        public int getCurrentModeType() {
            final long ident = Binder.clearCallingIdentity();
            try {
        public int getCurrentModeType(int displayId) {
            synchronized (mLock) {
                    return mCurUiMode.get() & Configuration.UI_MODE_TYPE_MASK;
                int uiModeOverride = mDisplayUiModeOverrides.get(
                        displayId, UI_MODE_TYPE_UNDEFINED) & UI_MODE_TYPE_MASK;
                if (uiModeOverride != UI_MODE_TYPE_UNDEFINED) {
                    return uiModeOverride;
                }
            } finally {
                Binder.restoreCallingIdentity(ident);
                return mCurUiMode.get() & UI_MODE_TYPE_MASK;
            }
        }

@@ -1011,8 +1011,13 @@ final class UiModeManagerService extends SystemService {
        }

        @Override
        public int getNightMode() {
        public int getNightMode(int displayId) {
            synchronized (mLock) {
                int nightModeOverride = mDisplayUiModeOverrides.get(
                        displayId, UI_MODE_NIGHT_UNDEFINED) & UI_MODE_NIGHT_MASK;
                if (nightModeOverride != UI_MODE_NIGHT_UNDEFINED) {
                    return nightModeOverride;
                }
                return mNightMode.get();
            }
        }
@@ -2503,7 +2508,7 @@ final class UiModeManagerService extends SystemService {

        private void printCurrentNightMode() throws RemoteException {
            final PrintWriter pw = getOutPrintWriter();
            final int currMode = mInterface.getNightMode();
            final int currMode = mInterface.getNightMode(Display.DEFAULT_DISPLAY);
            final int customType = mInterface.getNightModeCustomType();
            final String currModeStr = nightModeToStr(currMode, customType);
            pw.println("Night mode: " + currModeStr);
@@ -2580,7 +2585,7 @@ final class UiModeManagerService extends SystemService {

        private void printCurrentCarMode() throws RemoteException {
            final PrintWriter pw = getOutPrintWriter();
            final int currMode = mInterface.getCurrentModeType();
            final int currMode = mInterface.getCurrentModeType(Display.DEFAULT_DISPLAY);
            pw.println("Car mode: " + (currMode == Configuration.UI_MODE_TYPE_CAR ? "yes" : "no"));
        }
    }
@@ -2588,14 +2593,22 @@ final class UiModeManagerService extends SystemService {
    public final class LocalService extends UiModeManagerInternal {

        @Override
        public boolean isNightMode() {
        public boolean isNightMode(int displayId) {
            synchronized (mLock) {
                final boolean isIt = (mConfiguration.uiMode & Configuration.UI_MODE_NIGHT_YES) != 0;
                final boolean isIt;
                final int nightModeOverride = mDisplayUiModeOverrides.get(
                        displayId, UI_MODE_NIGHT_UNDEFINED) & UI_MODE_NIGHT_MASK;
                if (nightModeOverride != UI_MODE_NIGHT_UNDEFINED) {
                    isIt = (nightModeOverride & Configuration.UI_MODE_NIGHT_YES) != 0;
                } else {
                    isIt = (mConfiguration.uiMode & Configuration.UI_MODE_NIGHT_YES) != 0;
                }
                if (LOG) {
                    Slog.d(TAG,
                        "LocalService.isNightMode(): mNightMode=" + mNightMode
                        + "; mComputedNightMode=" + mComputedNightMode
                        + "; uiMode=" + mConfiguration.uiMode
                        + "; nightModeOverride=" + nightModeOverride
                        + "; isIt=" + isIt);
                }
                return isIt;
@@ -2625,8 +2638,11 @@ final class UiModeManagerService extends SystemService {
                    Slog.d(TAG, "Setting UI mode override on display " + displayId + ": " + uiMode);
                    mDisplayUiModeOverrides.put(displayId, uiMode);
                }
                if (enableCurrentModeTypeBinderCache()) {
                    UiModeManager.invalidateCurrentModeTypeCache();
                    UiModeManager.invalidateNightModeCache();
                }
            }

            mWindowManager.onDisplayUiModeChanged(displayId);
        }

Loading