summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author android-build-team Robot <android-build-team-robot@google.com> 2018-05-02 23:40:06 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-05-02 23:40:06 +0000
commit56f39770ea9659832a4113df4e19828947705b76 (patch)
tree79ff90829b8cac5ea1955ae59e0914a4489e8cf1
parentbca85a0d44270be7c324c7ae380148cb5c11848a (diff)
parent6607c3dc250c81ab4b5e60468d7fcc816d6b6770 (diff)
Merge "Quickscrub will hide the most right buttons on nav bar" into pi-dev
-rw-r--r--packages/SystemUI/res/layout/menu_ime.xml1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java73
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java8
5 files changed, 84 insertions, 22 deletions
diff --git a/packages/SystemUI/res/layout/menu_ime.xml b/packages/SystemUI/res/layout/menu_ime.xml
index 5a0e76799e7c..1be3375b5c07 100644
--- a/packages/SystemUI/res/layout/menu_ime.xml
+++ b/packages/SystemUI/res/layout/menu_ime.xml
@@ -16,6 +16,7 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:systemui="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/menu_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
index 7284ee8b39bc..2161655a64c5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
@@ -14,8 +14,12 @@
package com.android.systemui.statusbar.phone;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
import android.view.View;
+import com.android.systemui.Interpolators;
import com.android.systemui.plugins.statusbar.phone.NavBarButtonProvider.ButtonInterface;
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
@@ -26,6 +30,8 @@ import java.util.ArrayList;
* multiples of the same nav bar icon appearing.
*/
public class ButtonDispatcher {
+ private final static int FADE_DURATION_IN = 150;
+ private final static int FADE_DURATION_OUT = 100;
private final ArrayList<View> mViews = new ArrayList<>();
@@ -36,13 +42,24 @@ public class ButtonDispatcher {
private View.OnLongClickListener mLongClickListener;
private View.OnHoverListener mOnHoverListener;
private Boolean mLongClickable;
- private Integer mAlpha;
+ private Float mAlpha;
private Float mDarkIntensity;
private Integer mVisibility = -1;
private Boolean mDelayTouchFeedback;
private KeyButtonDrawable mImageDrawable;
private View mCurrentView;
private boolean mVertical;
+ private ValueAnimator mFadeAnimator;
+
+ private final ValueAnimator.AnimatorUpdateListener mAlphaListener = animation ->
+ setAlpha((float) animation.getAnimatedValue());
+
+ private final AnimatorListenerAdapter mFadeListener = new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ setVisibility(getAlpha() == 1 ? View.VISIBLE : View.INVISIBLE);
+ }
+ };
public ButtonDispatcher(int id) {
mId = id;
@@ -64,19 +81,22 @@ public class ButtonDispatcher {
if (mAlpha != null) {
view.setAlpha(mAlpha);
}
- if (mDarkIntensity != null) {
- ((ButtonInterface) view).setDarkIntensity(mDarkIntensity);
- }
- if (mVisibility != null) {
+ if (mVisibility != null && mVisibility != -1) {
view.setVisibility(mVisibility);
}
- if (mImageDrawable != null) {
- ((ButtonInterface) view).setImageDrawable(mImageDrawable);
- }
- if (mDelayTouchFeedback != null) {
- ((ButtonInterface) view).setDelayTouchFeedback(mDelayTouchFeedback);
+ if (view instanceof ButtonInterface) {
+ final ButtonInterface button = (ButtonInterface) view;
+ if (mDarkIntensity != null) {
+ button.setDarkIntensity(mDarkIntensity);
+ }
+ if (mImageDrawable != null) {
+ button.setImageDrawable(mImageDrawable);
+ }
+ if (mDelayTouchFeedback != null) {
+ button.setDelayTouchFeedback(mDelayTouchFeedback);
+ }
+ button.setVertical(mVertical);
}
- ((ButtonInterface) view).setVertical(mVertical);
}
public int getId() {
@@ -99,7 +119,9 @@ public class ButtonDispatcher {
mImageDrawable = drawable;
final int N = mViews.size();
for (int i = 0; i < N; i++) {
- ((ButtonInterface) mViews.get(i)).setImageDrawable(mImageDrawable);
+ if (mViews.get(i) instanceof ButtonInterface) {
+ ((ButtonInterface) mViews.get(i)).setImageDrawable(mImageDrawable);
+ }
}
}
@@ -116,11 +138,13 @@ public class ButtonDispatcher {
// This seems to be an instantaneous thing, so not going to persist it.
final int N = mViews.size();
for (int i = 0; i < N; i++) {
- ((ButtonInterface) mViews.get(i)).abortCurrentGesture();
+ if (mViews.get(i) instanceof ButtonInterface) {
+ ((ButtonInterface) mViews.get(i)).abortCurrentGesture();
+ }
}
}
- public void setAlpha(int alpha) {
+ public void setAlpha(float alpha) {
mAlpha = alpha;
final int N = mViews.size();
for (int i = 0; i < N; i++) {
@@ -132,7 +156,9 @@ public class ButtonDispatcher {
mDarkIntensity = darkIntensity;
final int N = mViews.size();
for (int i = 0; i < N; i++) {
- ((ButtonInterface) mViews.get(i)).setDarkIntensity(darkIntensity);
+ if (mViews.get(i) instanceof ButtonInterface) {
+ ((ButtonInterface) mViews.get(i)).setDarkIntensity(darkIntensity);
+ }
}
}
@@ -140,7 +166,9 @@ public class ButtonDispatcher {
mDelayTouchFeedback = delay;
final int N = mViews.size();
for (int i = 0; i < N; i++) {
- ((ButtonInterface) mViews.get(i)).setDelayTouchFeedback(delay);
+ if (mViews.get(i) instanceof ButtonInterface) {
+ ((ButtonInterface) mViews.get(i)).setDelayTouchFeedback(delay);
+ }
}
}
@@ -192,6 +220,19 @@ public class ButtonDispatcher {
}
}
+ public void animateFade(boolean in) {
+ if (mFadeAnimator != null) {
+ mFadeAnimator.cancel();
+ }
+ mFadeAnimator = ValueAnimator.ofFloat(getAlpha(), in ? 1 : 0);
+ mFadeAnimator.setDuration(in? FADE_DURATION_IN : FADE_DURATION_OUT);
+ mFadeAnimator.setInterpolator(in ? Interpolators.ALPHA_IN : Interpolators.ALPHA_OUT);
+ mFadeAnimator.addListener(mFadeListener);
+ mFadeAnimator.addUpdateListener(mAlphaListener);
+ mFadeAnimator.start();
+ setVisibility(View.VISIBLE);
+ }
+
public ArrayList<View> getViews() {
return mViews;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
index 91cf8f086905..4885c2f796d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
@@ -168,10 +168,10 @@ public class NavigationBarInflaterView extends FrameLayout
}
}
- public void setButtonDispatchers(SparseArray<ButtonDispatcher> buttonDisatchers) {
- mButtonDispatchers = buttonDisatchers;
- for (int i = 0; i < buttonDisatchers.size(); i++) {
- initiallyFill(buttonDisatchers.valueAt(i));
+ public void setButtonDispatchers(SparseArray<ButtonDispatcher> buttonDispatchers) {
+ mButtonDispatchers = buttonDispatchers;
+ for (int i = 0; i < buttonDispatchers.size(); i++) {
+ initiallyFill(buttonDispatchers.valueAt(i));
}
}
@@ -220,7 +220,8 @@ public class NavigationBarInflaterView extends FrameLayout
// and will only happen once.
if (parent.getChildAt(i).getId() == buttonDispatcher.getId()) {
buttonDispatcher.addView(parent.getChildAt(i));
- } else if (parent.getChildAt(i) instanceof ViewGroup) {
+ }
+ if (parent.getChildAt(i) instanceof ViewGroup) {
addAll(buttonDispatcher, (ViewGroup) parent.getChildAt(i));
}
}
@@ -411,7 +412,8 @@ public class NavigationBarInflaterView extends FrameLayout
final int indexOfKey = mButtonDispatchers.indexOfKey(v.getId());
if (indexOfKey >= 0) {
mButtonDispatchers.valueAt(indexOfKey).addView(v);
- } else if (v instanceof ViewGroup) {
+ }
+ if (v instanceof ViewGroup) {
final ViewGroup viewGroup = (ViewGroup)v;
final int N = viewGroup.getChildCount();
for (int i = 0; i < N; i++) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 6dbe9f89dcde..6cc96da96e45 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -260,6 +260,8 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
new ButtonDispatcher(R.id.accessibility_button));
mButtonDispatchers.put(R.id.rotate_suggestion,
new ButtonDispatcher(R.id.rotate_suggestion));
+ mButtonDispatchers.put(R.id.menu_container,
+ new ButtonDispatcher(R.id.menu_container));
mDeadZone = new DeadZone(this);
}
@@ -368,6 +370,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
return mButtonDispatchers.get(R.id.rotate_suggestion);
}
+ public ButtonDispatcher getMenuContainer() {
+ return mButtonDispatchers.get(R.id.menu_container);
+ }
+
public SparseArray<ButtonDispatcher> getButtonDispatchers() {
return mButtonDispatchers;
}
@@ -796,6 +802,10 @@ public class NavigationBarView extends FrameLayout implements PluginListener<Nav
public boolean isRotateButtonVisible() { return mShowRotateButton; }
+ public void setMenuContainerVisibility(boolean visible) {
+ getMenuContainer().animateFade(visible);
+ }
+
@Override
public void onFinishInflate() {
mNavigationInflaterView = (NavigationBarInflaterView) findViewById(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
index 6b0ac948a036..1a1839d6e457 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java
@@ -401,6 +401,10 @@ public class QuickStepController implements GestureHelper {
mDarkTrackColor = mContext.getColor(R.color.quick_step_track_background_dark);
mTrackAnimator.setFloatValues(0, 1);
mTrackAnimator.start();
+
+ // Hide menu buttons on nav bar until quick scrub has ended
+ mNavigationBarView.setMenuContainerVisibility(false /* visible */);
+
try {
mOverviewEventSender.getProxy().onQuickScrubStart();
if (DEBUG_OVERVIEW_PROXY) {
@@ -416,6 +420,10 @@ public class QuickStepController implements GestureHelper {
private void endQuickScrub(boolean animate) {
if (mQuickScrubActive || mDragScrubActive) {
animateEnd();
+
+ // Restore the nav bar menu buttons visibility
+ mNavigationBarView.setMenuContainerVisibility(true /* visible */);
+
if (mQuickScrubActive) {
try {
mOverviewEventSender.getProxy().onQuickScrubEnd();