diff options
author | Jason Monk <jmonk@google.com> | 2017-08-29 18:58:00 -0400 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-10-27 03:11:25 +0000 |
commit | e7927633423aaff3ed66eca0c40b9a4b893ba468 (patch) | |
tree | 2035284b41cc57e556f58e58420f62b10fe7b527 | |
parent | 9697fd47359e6f6228e75d9a57144652c24a97f2 (diff) | |
download | base-e7927633423aaff3ed66eca0c40b9a4b893ba468.tar.gz |
Auto dim the nav bar to help prevent diff aging
Test: runtest systemui
Bug: 63630024
Change-Id: If2a6c0934f8751f82c027dbb3b5f103a34dc78d4
(cherry picked from commit 188bf2ea315903df4aaab6de2a7b898e0cab306d)
5 files changed, 121 insertions, 14 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java index f3c2bc56b409..f379a4636623 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java @@ -75,6 +75,10 @@ public class BarTransitions { return mMode; } + public void setAutoDim(boolean autoDim) { + // Default is don't care. + } + /** * @param alwaysOpaque if {@code true}, the bar's background will always be opaque, regardless * of what mode it is currently set to. diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java index cb925d5f7e16..f3ca66ffa9b3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java @@ -32,6 +32,7 @@ public final class NavigationBarTransitions extends BarTransitions { private final LightBarTransitionsController mLightTransitionsController; private boolean mLightsOut; + private boolean mAutoDim; public NavigationBarTransitions(NavigationBarView view) { super(view, R.drawable.nav_background); @@ -44,7 +45,19 @@ public final class NavigationBarTransitions extends BarTransitions { public void init() { applyModeBackground(-1, getMode(), false /*animate*/); - applyMode(getMode(), false /*animate*/, true /*force*/); + applyLightsOut(false /*animate*/, true /*force*/); + } + + @Override + public void setAutoDim(boolean autoDim) { + if (mAutoDim == autoDim) return; + mAutoDim = autoDim; + applyLightsOut(true, false); + } + + @Override + protected boolean isLightsOut(int mode) { + return super.isLightsOut(mode) || mAutoDim; } public LightBarTransitionsController getLightTransitionsController() { @@ -54,13 +67,12 @@ public final class NavigationBarTransitions extends BarTransitions { @Override protected void onTransition(int oldMode, int newMode, boolean animate) { super.onTransition(oldMode, newMode, animate); - applyMode(newMode, animate, false /*force*/); + applyLightsOut(animate, false /*force*/); } - private void applyMode(int mode, boolean animate, boolean force) { - + private void applyLightsOut(boolean animate, boolean force) { // apply to lights out - applyLightsOut(isLightsOut(mode), animate, force); + applyLightsOut(isLightsOut(getMode()), animate, force); } private void applyLightsOut(boolean lightsOut, boolean animate, boolean force) { @@ -86,7 +98,6 @@ public final class NavigationBarTransitions extends BarTransitions { } } - public void reapplyDarkIntensity() { applyDarkIntensity(mLightTransitionsController.getCurrentDarkIntensity()); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index ada98b7a2ca3..5a5f164ede6d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -560,14 +560,12 @@ public class StatusBar extends SystemUI implements DemoMode, protected DozeScrimController mDozeScrimController; private final UiOffloadThread mUiOffloadThread = Dependency.get(UiOffloadThread.class); - private final Runnable mAutohide = new Runnable() { - @Override - public void run() { - int requested = mSystemUiVisibility & ~STATUS_OR_NAV_TRANSIENT; - if (mSystemUiVisibility != requested) { - notifyUiVisibilityChanged(requested); - } - }}; + private final Runnable mAutohide = () -> { + int requested = mSystemUiVisibility & ~STATUS_OR_NAV_TRANSIENT; + if (mSystemUiVisibility != requested) { + notifyUiVisibilityChanged(requested); + } + }; private boolean mWaitingForKeyguardExit; protected boolean mDozing; @@ -3269,6 +3267,7 @@ public class StatusBar extends SystemUI implements DemoMode, } else { cancelAutohide(); } + touchAutoDim(); } protected int computeStatusBarMode(int oldVal, int newVal) { @@ -3354,6 +3353,7 @@ public class StatusBar extends SystemUI implements DemoMode, dismissVolumeDialog(); } checkBarModes(); + touchAutoDim(); } private void dismissVolumeDialog() { @@ -3385,6 +3385,16 @@ public class StatusBar extends SystemUI implements DemoMode, mHandler.postDelayed(mAutohide, AUTOHIDE_TIMEOUT_MS); } + public void touchAutoDim() { + if (mNavigationBar != null) { + mNavigationBar.getBarTransitions().setAutoDim(false); + } + mHandler.removeCallbacks(mAutoDim); + if (mState != StatusBarState.KEYGUARD && mState != StatusBarState.SHADE_LOCKED) { + mHandler.postDelayed(mAutoDim, AUTOHIDE_TIMEOUT_MS); + } + } + void checkUserAutohide(View v, MotionEvent event) { if ((mSystemUiVisibility & STATUS_OR_NAV_TRANSIENT) != 0 // a transient bar is revealed && event.getAction() == MotionEvent.ACTION_OUTSIDE // touch outside the source bar @@ -4791,6 +4801,7 @@ public class StatusBar extends SystemUI implements DemoMode, updateReportRejectedTouchVisibility(); updateDozing(); updateTheme(); + touchAutoDim(); mNotificationShelf.setStatusBarState(state); } @@ -5292,6 +5303,7 @@ public class StatusBar extends SystemUI implements DemoMode, @Override public void appTransitionFinished() { + touchAutoDim(); EventBus.getDefault().send(new AppTransitionFinishedEvent()); } @@ -7466,4 +7478,10 @@ public class StatusBar extends SystemUI implements DemoMode, } } // End Extra BaseStatusBarMethods. + + private final Runnable mAutoDim = () -> { + if (mNavigationBar != null) { + mNavigationBar.getBarTransitions().setAutoDim(true); + } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java index 13ee23fb7af9..06040e2b0bcc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java @@ -28,6 +28,8 @@ import android.view.Surface; import android.view.View; import com.android.systemui.R; +import com.android.systemui.SysUiServiceProvider; +import com.android.systemui.statusbar.phone.StatusBar; /** * The "dead zone" consumes unintentional taps along the top edge of the navigation bar. @@ -44,6 +46,7 @@ public class DeadZone extends View { public static final int VERTICAL = 1; // Consume taps along the left edge. private static final boolean CHATTY = true; // print to logcat when we eat a click + private final StatusBar mStatusBar; private boolean mShouldFlash; private float mFlashFrac = 0f; @@ -88,6 +91,7 @@ public class DeadZone extends View { + (mVertical ? " vertical" : " horizontal")); setFlashOnTouchCapture(context.getResources().getBoolean(R.bool.config_dead_zone_flash)); + mStatusBar = SysUiServiceProvider.getComponent(context, StatusBar.class); } static float lerp(float a, float b, float f) { @@ -132,6 +136,7 @@ public class DeadZone extends View { if (DEBUG) { Slog.v(TAG, this + " ACTION_DOWN: " + event.getX() + "," + event.getY()); } + if (mStatusBar != null) mStatusBar.touchAutoDim(); int size = (int) getSize(event.getEventTime()); // In the vertical orientation consume taps along the left edge. // In horizontal orientation consume taps along the top edge. diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java new file mode 100644 index 000000000000..0c1baaa1b476 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package com.android.systemui.statusbar.phone; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.support.test.filters.SmallTest; +import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper.RunWithLooper; + +import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.CommandQueue; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidTestingRunner.class) +@RunWithLooper +@SmallTest +public class NavigationBarTransitionsTest extends SysuiTestCase { + + private NavigationBarTransitions mTransitions; + + @Before + public void setup() { + mContext.putComponent(CommandQueue.class, mock(CommandQueue.class)); + NavigationBarView navBar = spy(new NavigationBarView(mContext, null)); + when(navBar.getCurrentView()).thenReturn(navBar); + when(navBar.findViewById(anyInt())).thenReturn(navBar); + mTransitions = new NavigationBarTransitions(navBar); + } + + @Test + public void setIsLightsOut_NoAutoDim() { + mTransitions.setAutoDim(false); + + assertFalse(mTransitions.isLightsOut(BarTransitions.MODE_OPAQUE)); + + assertTrue(mTransitions.isLightsOut(BarTransitions.MODE_LIGHTS_OUT)); + } + + @Test + public void setIsLightsOut_AutoDim() { + mTransitions.setAutoDim(true); + + assertTrue(mTransitions.isLightsOut(BarTransitions.MODE_OPAQUE)); + + assertTrue(mTransitions.isLightsOut(BarTransitions.MODE_LIGHTS_OUT)); + } + +}
\ No newline at end of file |