summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2017-08-29 18:58:00 -0400
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-10-27 03:11:25 +0000
commite7927633423aaff3ed66eca0c40b9a4b893ba468 (patch)
tree2035284b41cc57e556f58e58420f62b10fe7b527
parent9697fd47359e6f6228e75d9a57144652c24a97f2 (diff)
downloadbase-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)
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java23
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java34
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/DeadZone.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/NavigationBarTransitionsTest.java69
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