diff options
author | Bill Lin <lbill@google.com> | 2021-08-12 14:11:25 +0800 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-08-17 01:10:13 +0000 |
commit | 6b313952524977c26b719303e8689a4548d14f54 (patch) | |
tree | 6111482ad521425952e0c0f929c1079e0b90ff32 | |
parent | 580ce0ec16ac83bcb18e9b450be882f58d2ccca2 (diff) | |
download | base-6b313952524977c26b719303e8689a4548d14f54.tar.gz |
Don't create one-handed-background-panel after rotation
From code flow, when onConfigurationChanged() by rotating
OneHandedBackgroundPanelOrganizer#showBackgroundPanelLayer()
will be invoked and then create one-handed-background-panel
even though OHM is not activated.
Besides, this could introduce overhead on SF.
Test: manual rotate and dumpsys check HWC layers
Test: atest WMShellUnitTests
Bug: 196306312
Change-Id: Ia766078d5c76b08ab5b24e0ce965ad1d085e4686
(cherry picked from commit 27da5b04d44e76e884f8148684eb36311923c651)
3 files changed, 36 insertions, 1 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java index 97461e607e66..d3274706631b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizer.java @@ -16,6 +16,8 @@ package com.android.wm.shell.onehanded; +import static com.android.wm.shell.onehanded.OneHandedState.STATE_ACTIVE; + import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Color; @@ -46,7 +48,7 @@ import java.util.concurrent.Executor; * the screen has entered one handed mode. */ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer - implements OneHandedAnimationCallback { + implements OneHandedAnimationCallback, OneHandedState.OnStateChangedListener { private static final String TAG = "OneHandedBackgroundPanelOrganizer"; private static final int THEME_COLOR_OFFSET = 10; private static final int ALPHA_ANIMATION_DURATION = 200; @@ -56,6 +58,7 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer private final OneHandedSurfaceTransactionHelper.SurfaceControlTransactionFactory mTransactionFactory; + private @OneHandedState.State int mCurrentState; private ValueAnimator mAlphaAnimator; private float mTranslationFraction; @@ -180,6 +183,9 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer * Called when transition finished. */ public void onStopFinished() { + if (mAlphaAnimator == null) { + return; + } mAlphaAnimator.start(); } @@ -224,6 +230,10 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer */ public void onConfigurationChanged() { updateThemeColors(); + + if (mCurrentState != STATE_ACTIVE) { + return; + } showBackgroundPanelLayer(); } @@ -242,6 +252,11 @@ public class OneHandedBackgroundPanelOrganizer extends DisplayAreaOrganizer return Math.max(origColor - THEME_COLOR_OFFSET, 0) / 255.0f; } + @Override + public void onStateChanged(int newState) { + mCurrentState = newState; + } + void dump(@NonNull PrintWriter pw) { final String innerPrefix = " "; pw.println(TAG); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java index b0fe856df7c8..954ca14b4960 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedController.java @@ -307,6 +307,7 @@ public class OneHandedController implements RemoteCallable<OneHandedController> mAccessibilityManager.addAccessibilityStateChangeListener( mAccessibilityStateChangeListener); + mState.addSListeners(mBackgroundPanelOrganizer); mState.addSListeners(mTutorialHandler); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java index 99c610765c04..7b9553c5ef9b 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/onehanded/OneHandedBackgroundPanelOrganizerTest.java @@ -19,6 +19,9 @@ package com.android.wm.shell.onehanded; import static android.view.Display.DEFAULT_DISPLAY; import static android.window.DisplayAreaOrganizer.FEATURE_ONE_HANDED_BACKGROUND_PANEL; +import static com.android.wm.shell.onehanded.OneHandedState.STATE_ACTIVE; +import static com.android.wm.shell.onehanded.OneHandedState.STATE_NONE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; @@ -109,4 +112,20 @@ public class OneHandedBackgroundPanelOrganizerTest extends OneHandedTestCase { assertThat(mSpiedBackgroundPanelOrganizer.mBackgroundSurface).isNull(); } + + @Test + public void testStateNone_onConfigurationChanged() { + mSpiedBackgroundPanelOrganizer.onStateChanged(STATE_NONE); + mSpiedBackgroundPanelOrganizer.onConfigurationChanged(); + + verify(mSpiedBackgroundPanelOrganizer, never()).showBackgroundPanelLayer(); + } + + @Test + public void testStateActivate_onConfigurationChanged() { + mSpiedBackgroundPanelOrganizer.onStateChanged(STATE_ACTIVE); + mSpiedBackgroundPanelOrganizer.onConfigurationChanged(); + + verify(mSpiedBackgroundPanelOrganizer).showBackgroundPanelLayer(); + } } |