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

Commit 6568ee5d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Introduce Client Transient flag (1/n)" into udc-dev am: de6724e2 am: 2916b8f6

parents f73e62ae 2916b8f6
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -300,6 +300,14 @@ public final class ViewRootImpl implements ViewParent,
    public static final boolean CAPTION_ON_SHELL =
    public static final boolean CAPTION_ON_SHELL =
            SystemProperties.getBoolean("persist.wm.debug.caption_on_shell", true);
            SystemProperties.getBoolean("persist.wm.debug.caption_on_shell", true);


    /**
     * Whether the client (system UI) is handling the transient gesture and the corresponding
     * animation.
     * @hide
     */
    public static final boolean CLIENT_TRANSIENT =
            SystemProperties.getBoolean("persist.wm.debug.client_transient", false);

    /**
    /**
     * Whether the client should compute the window frame on its own.
     * Whether the client should compute the window frame on its own.
     * @hide
     * @hide
+146 −127
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.view.InsetsFrameProvider.SOURCE_ARBITRARY_RECTANGLE;
import static android.view.InsetsFrameProvider.SOURCE_CONTAINER_BOUNDS;
import static android.view.InsetsFrameProvider.SOURCE_CONTAINER_BOUNDS;
import static android.view.InsetsFrameProvider.SOURCE_DISPLAY;
import static android.view.InsetsFrameProvider.SOURCE_DISPLAY;
import static android.view.InsetsFrameProvider.SOURCE_FRAME;
import static android.view.InsetsFrameProvider.SOURCE_FRAME;
import static android.view.ViewRootImpl.CLIENT_TRANSIENT;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LOW_PROFILE_BARS;
@@ -213,7 +214,8 @@ public class DisplayPolicy {
        }
        }
    }
    }


    private final SystemGesturesPointerEventListener mSystemGestures;
    // Will be null in client transient mode.
    private SystemGesturesPointerEventListener mSystemGestures;


    final DecorInsets mDecorInsets;
    final DecorInsets mDecorInsets;


@@ -408,7 +410,8 @@ public class DisplayPolicy {
        final Looper looper = UiThread.getHandler().getLooper();
        final Looper looper = UiThread.getHandler().getLooper();
        mHandler = new PolicyHandler(looper);
        mHandler = new PolicyHandler(looper);
        // TODO(b/181821798) Migrate SystemGesturesPointerEventListener to use window context.
        // TODO(b/181821798) Migrate SystemGesturesPointerEventListener to use window context.
        mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,
        if (!CLIENT_TRANSIENT) {
            SystemGesturesPointerEventListener.Callbacks gesturesPointerEventCallbacks =
                    new SystemGesturesPointerEventListener.Callbacks() {
                    new SystemGesturesPointerEventListener.Callbacks() {


                private static final long MOUSE_GESTURE_DELAY_MS = 500;
                private static final long MOUSE_GESTURE_DELAY_MS = 500;
@@ -558,8 +561,11 @@ public class DisplayPolicy {
                public void onMouseLeaveFromBottom() {
                public void onMouseLeaveFromBottom() {
                    mHandler.removeCallbacks(mOnSwipeFromBottom);
                    mHandler.removeCallbacks(mOnSwipeFromBottom);
                }
                }
                });
            };
            mSystemGestures = new SystemGesturesPointerEventListener(mUiContext, mHandler,
                    gesturesPointerEventCallbacks);
            displayContent.registerPointerEventListener(mSystemGestures);
            displayContent.registerPointerEventListener(mSystemGestures);
        }
        mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() {
        mAppTransitionListener = new WindowManagerInternal.AppTransitionListener() {


            private Runnable mAppTransitionPending = () -> {
            private Runnable mAppTransitionPending = () -> {
@@ -645,7 +651,9 @@ public class DisplayPolicy {
                mContext, () -> {
                mContext, () -> {
            synchronized (mLock) {
            synchronized (mLock) {
                onConfigurationChanged();
                onConfigurationChanged();
                if (!CLIENT_TRANSIENT) {
                    mSystemGestures.onConfigurationChanged();
                    mSystemGestures.onConfigurationChanged();
                }
                mDisplayContent.updateSystemGestureExclusion();
                mDisplayContent.updateSystemGestureExclusion();
            }
            }
        });
        });
@@ -667,7 +675,9 @@ public class DisplayPolicy {
    }
    }


    void systemReady() {
    void systemReady() {
        if (!CLIENT_TRANSIENT) {
            mSystemGestures.systemReady();
            mSystemGestures.systemReady();
        }
        if (mService.mPointerLocationEnabled) {
        if (mService.mPointerLocationEnabled) {
            setPointerLocationEnabled(true);
            setPointerLocationEnabled(true);
        }
        }
@@ -1308,8 +1318,10 @@ public class DisplayPolicy {
    }
    }


    void onDisplayInfoChanged(DisplayInfo info) {
    void onDisplayInfoChanged(DisplayInfo info) {
        if (!CLIENT_TRANSIENT) {
            mSystemGestures.onDisplayInfoChanged(info);
            mSystemGestures.onDisplayInfoChanged(info);
        }
        }
    }


    /**
    /**
     * Called for each window attached to the window manager as layout is proceeding. The
     * Called for each window attached to the window manager as layout is proceeding. The
@@ -1681,8 +1693,10 @@ public class DisplayPolicy {
        // Update the latest display size, cutout.
        // Update the latest display size, cutout.
        mDisplayContent.updateDisplayInfo();
        mDisplayContent.updateDisplayInfo();
        onConfigurationChanged();
        onConfigurationChanged();
        if (!CLIENT_TRANSIENT) {
            mSystemGestures.onConfigurationChanged();
            mSystemGestures.onConfigurationChanged();
        }
        }
    }


    /**
    /**
     * Called when the configuration has changed, and it's safe to load new values from resources.
     * Called when the configuration has changed, and it's safe to load new values from resources.
@@ -1960,6 +1974,9 @@ public class DisplayPolicy {


    @VisibleForTesting
    @VisibleForTesting
    void requestTransientBars(WindowState swipeTarget, boolean isGestureOnSystemBar) {
    void requestTransientBars(WindowState swipeTarget, boolean isGestureOnSystemBar) {
        if (CLIENT_TRANSIENT) {
            return;
        }
        if (swipeTarget == null || !mService.mPolicy.isUserSetupComplete()) {
        if (swipeTarget == null || !mService.mPolicy.isUserSetupComplete()) {
            // Swipe-up for navigation bar is disabled during setup
            // Swipe-up for navigation bar is disabled during setup
            return;
            return;
@@ -2608,7 +2625,9 @@ public class DisplayPolicy {
            final DecorInsets.Info info = mDecorInsets.mInfoForRotation[rotation];
            final DecorInsets.Info info = mDecorInsets.mInfoForRotation[rotation];
            pw.println(prefixInner + Surface.rotationToString(rotation) + "=" + info);
            pw.println(prefixInner + Surface.rotationToString(rotation) + "=" + info);
        }
        }
        if (!CLIENT_TRANSIENT) {
            mSystemGestures.dump(pw, prefix);
            mSystemGestures.dump(pw, prefix);
        }


        pw.print(prefix); pw.println("Looper state:");
        pw.print(prefix); pw.println("Looper state:");
        mHandler.getLooper().dump(new PrintWriterPrinter(pw), prefix + "  ");
        mHandler.getLooper().dump(new PrintWriterPrinter(pw), prefix + "  ");
+4 −0
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.view.RoundedCorners.NO_ROUNDED_CORNERS;
import static android.view.Surface.ROTATION_0;
import static android.view.Surface.ROTATION_0;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import static android.view.ViewRootImpl.CLIENT_TRANSIENT;
import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsets.Type.navigationBars;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
import static android.view.WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
@@ -63,6 +64,7 @@ import android.view.WindowManager;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;


import org.junit.Assume;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;


@@ -388,6 +390,7 @@ public class DisplayPolicyTests extends WindowTestsBase {
    @SetupWindows(addWindows = { W_ACTIVITY, W_NAVIGATION_BAR })
    @SetupWindows(addWindows = { W_ACTIVITY, W_NAVIGATION_BAR })
    @Test
    @Test
    public void testCanSystemBarsBeShownByUser() {
    public void testCanSystemBarsBeShownByUser() {
        Assume.assumeFalse(CLIENT_TRANSIENT);
        ((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
        ((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
        mAppWindow.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
        mAppWindow.mAttrs.insetsFlags.behavior = BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
        mAppWindow.setRequestedVisibleTypes(0, navigationBars());
        mAppWindow.setRequestedVisibleTypes(0, navigationBars());
@@ -409,6 +412,7 @@ public class DisplayPolicyTests extends WindowTestsBase {
    @UseTestDisplay(addWindows = { W_NAVIGATION_BAR })
    @UseTestDisplay(addWindows = { W_NAVIGATION_BAR })
    @Test
    @Test
    public void testTransientBarsSuppressedOnDreams() {
    public void testTransientBarsSuppressedOnDreams() {
        Assume.assumeFalse(CLIENT_TRANSIENT);
        final WindowState win = createDreamWindow();
        final WindowState win = createDreamWindow();


        ((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;
        ((TestWindowManagerPolicy) mWm.mPolicy).mIsUserSetupComplete = true;