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

Commit 1db1cf3c authored by Yunfan Chen's avatar Yunfan Chen
Browse files

Move ImmersiveModeConfirmation to system UI (4/n)

This change move the WM side immersive mode confirmation window to the
system UI side. The major change of the immersive mode confirmation mode
to accomodate system UI side logic includes:

1. Power key panic is handled purely in DisplayPolicy, with a tracking
   of existance of the immersive confirmation window.
2. Introduce another layout params private flag to identify the
   immersive mode confiramtion mode.
3. CLIENT_* flags handling.
4. Vr and release handling, and most of the settings and display change
   handling moved to system UI.
5. Updated the text color of the window to match the themed background
   color.

Introduce CLIENT_IMMERSIVE_CONFIRMATION flag to control whether client
or the server side of immersive confirmation window shall be used. The
flag will only be in effect if the CLIENT_TRANSIENT flag is not true,
otherwise, the client side confirmation window will always be used.

Bug: 277290737
Test: build
Test: enable CLIENT_TRANSIENT and check the existance of the immersive
mode confirmation window.

Change-Id: I99f6097cb867f9808aecf4c7105289550001f452
parent 66b0bf75
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -310,6 +310,16 @@ public final class ViewRootImpl implements ViewParent,
    public static final boolean CLIENT_TRANSIENT =
            SystemProperties.getBoolean("persist.wm.debug.client_transient", false);

    /**
     * Whether the client (system UI) is handling the immersive confirmation window. If
     * {@link CLIENT_TRANSIENT} is set to true, the immersive confirmation window will always be the
     * client instance and this flag will be ignored. Otherwise, the immersive confirmation window
     * can be switched freely by this flag.
     * @hide
     */
    public static final boolean CLIENT_IMMERSIVE_CONFIRMATION =
            SystemProperties.getBoolean("persist.wm.debug.client_immersive_confirmation", false);

    /**
     * Whether the client should compute the window frame on its own.
     * @hide
+15 −0
Original line number Diff line number Diff line
@@ -3097,6 +3097,16 @@ public interface WindowManager extends ViewManager {
         */
        public static final int PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE = 1 << 16;

        /**
         * Flag to indicate that this window is a immersive mode confirmation window. The window
         * should be ignored when calculating insets control. This is used for prompt window
         * triggered by insets visibility changes. If it can take over the insets control, the
         * visibility will change unexpectedly and the window may dismiss itself. Power button panic
         * handling will be disabled when this window exists.
         * @hide
         */
        public static final int PRIVATE_FLAG_IMMERSIVE_CONFIRMATION_WINDOW = 1 << 17;

        /**
         * Flag to indicate that any window added by an application process that is of type
         * {@link #TYPE_TOAST} or that requires
@@ -3241,6 +3251,7 @@ public interface WindowManager extends ViewManager {
                PRIVATE_FLAG_LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME,
                PRIVATE_FLAG_FORCE_DRAW_BAR_BACKGROUNDS,
                PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE,
                PRIVATE_FLAG_IMMERSIVE_CONFIRMATION_WINDOW,
                SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS,
                PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY,
                PRIVATE_FLAG_EXCLUDE_FROM_SCREEN_MAGNIFICATION,
@@ -3324,6 +3335,10 @@ public interface WindowManager extends ViewManager {
                        mask = PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE,
                        equals = PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE,
                        name = "SUSTAINED_PERFORMANCE_MODE"),
                @ViewDebug.FlagToString(
                        mask = PRIVATE_FLAG_IMMERSIVE_CONFIRMATION_WINDOW,
                        equals = PRIVATE_FLAG_IMMERSIVE_CONFIRMATION_WINDOW,
                        name = "IMMERSIVE_CONFIRMATION_WINDOW"),
                @ViewDebug.FlagToString(
                        mask = SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS,
                        equals = SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS,
+13 −0
Original line number Diff line number Diff line
@@ -63,6 +63,19 @@ oneway interface IStatusBar
    void cancelPreloadRecentApps();
    void showScreenPinningRequest(int taskId);

    /**
     * Notify system UI the immersive prompt should be dismissed as confirmed, and the confirmed
     * status should be saved without user clicking on the button. This could happen when a user
     * swipe on the edge with the confirmation prompt showing.
     */
    void confirmImmersivePrompt();

    /**
     * Notify system UI the immersive mode changed. This shall be removed when client immersive is
     * enabled.
     */
    void immersiveModeChanged(int rootDisplayAreaId, boolean isImmersiveMode);

    void dismissKeyboardShortcutsMenu();
    void toggleKeyboardShortcutsMenu(int deviceId);

+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <solid android:color="@android:color/white" />
    <solid android:color="?android:attr/colorBackground" />

    <size
        android:height="56dp"
+1 −1
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <solid android:color="#80ffffff" />
    <solid android:color="?android:attr/colorBackground" />

    <size
        android:height="76dp"
Loading