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

Commit ecf9bb58 authored by Matt Casey's avatar Matt Casey Committed by android-build-merger
Browse files

Merge "Always show ScreenDecorations when in gesture nav mode." into qt-dev am: 92d7f42b

am: 6a07469e

Change-Id: I26827273c85818996ba3279047dd8d5615b1e8df
parents c13520f5 6a07469e
Loading
Loading
Loading
Loading
+35 −6
Original line number Original line Diff line number Diff line
@@ -77,8 +77,10 @@ import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
import com.android.systemui.fragments.FragmentHostManager.FragmentListener;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.plugins.qs.QS;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.qs.SecureSetting;
import com.android.systemui.shared.system.QuickStepContract;
import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
import com.android.systemui.statusbar.phone.NavigationBarTransitions;
import com.android.systemui.statusbar.phone.NavigationBarTransitions;
import com.android.systemui.statusbar.phone.NavigationModeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.tuner.TunablePadding;
import com.android.systemui.tuner.TunablePadding;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService;
@@ -125,6 +127,7 @@ public class ScreenDecorations extends SystemUI implements Tunable,
    private Handler mHandler;
    private Handler mHandler;
    private boolean mAssistHintBlocked = false;
    private boolean mAssistHintBlocked = false;
    private boolean mIsReceivingNavBarColor = false;
    private boolean mIsReceivingNavBarColor = false;
    private boolean mInGesturalMode;


    /**
    /**
     * Converts a set of {@link Rect}s into a {@link Region}
     * Converts a set of {@link Rect}s into a {@link Region}
@@ -149,6 +152,28 @@ public class ScreenDecorations extends SystemUI implements Tunable,
        mHandler.post(this::startOnScreenDecorationsThread);
        mHandler.post(this::startOnScreenDecorationsThread);
        setupStatusBarPaddingIfNeeded();
        setupStatusBarPaddingIfNeeded();
        putComponent(ScreenDecorations.class, this);
        putComponent(ScreenDecorations.class, this);
        mInGesturalMode = QuickStepContract.isGesturalMode(
                Dependency.get(NavigationModeController.class)
                        .addListener(this::handleNavigationModeChange));
    }

    @VisibleForTesting
    void handleNavigationModeChange(int navigationMode) {
        if (!mHandler.getLooper().isCurrentThread()) {
            mHandler.post(() -> handleNavigationModeChange(navigationMode));
            return;
        }
        boolean inGesturalMode = QuickStepContract.isGesturalMode(navigationMode);
        if (mInGesturalMode != inGesturalMode) {
            mInGesturalMode = inGesturalMode;

            if (mInGesturalMode && mOverlay == null) {
                setupDecorations();
                if (mOverlay != null) {
                    updateLayoutParams();
                }
            }
        }
    }
    }


    private void fade(View view, boolean fadeIn, boolean isLeft) {
    private void fade(View view, boolean fadeIn, boolean isLeft) {
@@ -232,6 +257,7 @@ public class ScreenDecorations extends SystemUI implements Tunable,
                    break;
                    break;
            }
            }
        }
        }
        updateWindowVisibilities();
    }
    }


    /**
    /**
@@ -256,11 +282,15 @@ public class ScreenDecorations extends SystemUI implements Tunable,
        return thread.getThreadHandler();
        return thread.getThreadHandler();
    }
    }


    private boolean shouldHostHandles() {
        return mInGesturalMode;
    }

    private void startOnScreenDecorationsThread() {
    private void startOnScreenDecorationsThread() {
        mRotation = RotationUtils.getExactRotation(mContext);
        mRotation = RotationUtils.getExactRotation(mContext);
        mWindowManager = mContext.getSystemService(WindowManager.class);
        mWindowManager = mContext.getSystemService(WindowManager.class);
        updateRoundedCornerRadii();
        updateRoundedCornerRadii();
        if (hasRoundedCorners() || shouldDrawCutout()) {
        if (hasRoundedCorners() || shouldDrawCutout() || shouldHostHandles()) {
            setupDecorations();
            setupDecorations();
        }
        }


@@ -565,7 +595,10 @@ public class ScreenDecorations extends SystemUI implements Tunable,
        boolean visibleForCutout = shouldDrawCutout()
        boolean visibleForCutout = shouldDrawCutout()
                && overlay.findViewById(R.id.display_cutout).getVisibility() == View.VISIBLE;
                && overlay.findViewById(R.id.display_cutout).getVisibility() == View.VISIBLE;
        boolean visibleForRoundedCorners = hasRoundedCorners();
        boolean visibleForRoundedCorners = hasRoundedCorners();
        overlay.setVisibility(visibleForCutout || visibleForRoundedCorners
        boolean visibleForHandles = overlay.findViewById(R.id.assist_hint_left).getVisibility()
                == View.VISIBLE || overlay.findViewById(R.id.assist_hint_right).getVisibility()
                == View.VISIBLE;
        overlay.setVisibility(visibleForCutout || visibleForRoundedCorners || visibleForHandles
                ? View.VISIBLE : View.GONE);
                ? View.VISIBLE : View.GONE);
    }
    }


@@ -688,10 +721,6 @@ public class ScreenDecorations extends SystemUI implements Tunable,
                setSize(mOverlay.findViewById(R.id.right), sizeTop);
                setSize(mOverlay.findViewById(R.id.right), sizeTop);
                setSize(mBottomOverlay.findViewById(R.id.left), sizeBottom);
                setSize(mBottomOverlay.findViewById(R.id.left), sizeBottom);
                setSize(mBottomOverlay.findViewById(R.id.right), sizeBottom);
                setSize(mBottomOverlay.findViewById(R.id.right), sizeBottom);
                setSize(mOverlay.findViewById(R.id.assist_hint_left), sizeTop * 2);
                setSize(mOverlay.findViewById(R.id.assist_hint_right), sizeTop * 2);
                setSize(mBottomOverlay.findViewById(R.id.assist_hint_left), sizeBottom * 2);
                setSize(mBottomOverlay.findViewById(R.id.assist_hint_right), sizeBottom * 2);
            }
            }
        });
        });
    }
    }
+53 −0
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ import android.testing.TestableLooper.RunWithLooper;
import android.view.Display;
import android.view.Display;
import android.view.View;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager;
import android.view.WindowManagerPolicyConstants;


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


@@ -52,6 +53,7 @@ import com.android.systemui.R.dimen;
import com.android.systemui.ScreenDecorations.TunablePaddingTagListener;
import com.android.systemui.ScreenDecorations.TunablePaddingTagListener;
import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.fragments.FragmentHostManager;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.fragments.FragmentService;
import com.android.systemui.statusbar.phone.NavigationModeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.tuner.TunablePadding;
import com.android.systemui.tuner.TunablePadding;
@@ -78,6 +80,7 @@ public class ScreenDecorationsTest extends SysuiTestCase {
    private TunerService mTunerService;
    private TunerService mTunerService;
    private StatusBarWindowView mView;
    private StatusBarWindowView mView;
    private TunablePaddingService mTunablePaddingService;
    private TunablePaddingService mTunablePaddingService;
    private NavigationModeController mNavigationModeController;


    @Before
    @Before
    public void setup() {
    public void setup() {
@@ -87,6 +90,8 @@ public class ScreenDecorationsTest extends SysuiTestCase {
        mTunablePaddingService = mDependency.injectMockDependency(TunablePaddingService.class);
        mTunablePaddingService = mDependency.injectMockDependency(TunablePaddingService.class);
        mTunerService = mDependency.injectMockDependency(TunerService.class);
        mTunerService = mDependency.injectMockDependency(TunerService.class);
        mFragmentService = mDependency.injectMockDependency(FragmentService.class);
        mFragmentService = mDependency.injectMockDependency(FragmentService.class);
        mNavigationModeController = mDependency.injectMockDependency(
                NavigationModeController.class);


        mStatusBar = mock(StatusBar.class);
        mStatusBar = mock(StatusBar.class);
        mWindowManager = mock(WindowManager.class);
        mWindowManager = mock(WindowManager.class);
@@ -207,6 +212,54 @@ public class ScreenDecorationsTest extends SysuiTestCase {
        verify(mWindowManager, times(2)).addView(any(), any());
        verify(mWindowManager, times(2)).addView(any(), any());
    }
    }


    @Test
    public void testAssistHandles() {
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, false);
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.dimen.rounded_corner_radius, 0);
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.dimen.rounded_corner_radius_top, 0);
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.dimen.rounded_corner_radius_bottom, 0);
        mContext.getOrCreateTestableResources()
                .addOverride(dimen.rounded_corner_content_padding, 0);
        when(mNavigationModeController.addListener(any())).thenReturn(
                WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL);

        mScreenDecorations.start();

        // Add 2 windows for rounded corners (top and bottom).
        verify(mWindowManager, times(2)).addView(any(), any());
    }

    @Test
    public void testDelayedAssistHandles() {
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.bool.config_fillMainBuiltInDisplayCutout, false);
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.dimen.rounded_corner_radius, 0);
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.dimen.rounded_corner_radius_top, 0);
        mContext.getOrCreateTestableResources().addOverride(
                com.android.internal.R.dimen.rounded_corner_radius_bottom, 0);
        mContext.getOrCreateTestableResources()
                .addOverride(dimen.rounded_corner_content_padding, 0);
        when(mNavigationModeController.addListener(any())).thenReturn(
                WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON);

        mScreenDecorations.start();

        // No handles and no corners
        verify(mWindowManager, never()).addView(any(), any());

        mScreenDecorations.handleNavigationModeChange(
                WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL);

        // Add 2 windows for rounded corners (top and bottom).
        verify(mWindowManager, times(2)).addView(any(), any());
    }

    @Test
    @Test
    public void hasRoundedCornerOverlayFlagSet() {
    public void hasRoundedCornerOverlayFlagSet() {
        assertThat(mScreenDecorations.getWindowLayoutParams().privateFlags
        assertThat(mScreenDecorations.getWindowLayoutParams().privateFlags