Loading packages/SystemUI/res/layout/menu_ime.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" > Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java +57 −16 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<>(); Loading @@ -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; Loading @@ -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 (view instanceof ButtonInterface) { final ButtonInterface button = (ButtonInterface) view; if (mDarkIntensity != null) { button.setDarkIntensity(mDarkIntensity); } if (mImageDrawable != null) { ((ButtonInterface) view).setImageDrawable(mImageDrawable); button.setImageDrawable(mImageDrawable); } if (mDelayTouchFeedback != null) { ((ButtonInterface) view).setDelayTouchFeedback(mDelayTouchFeedback); button.setDelayTouchFeedback(mDelayTouchFeedback); } button.setVertical(mVertical); } ((ButtonInterface) view).setVertical(mVertical); } public int getId() { Loading @@ -99,9 +119,11 @@ public class ButtonDispatcher { mImageDrawable = drawable; final int N = mViews.size(); for (int i = 0; i < N; i++) { if (mViews.get(i) instanceof ButtonInterface) { ((ButtonInterface) mViews.get(i)).setImageDrawable(mImageDrawable); } } } public void setVisibility(int visibility) { if (mVisibility == visibility) return; Loading @@ -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++) { 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++) { Loading @@ -132,17 +156,21 @@ public class ButtonDispatcher { mDarkIntensity = darkIntensity; final int N = mViews.size(); for (int i = 0; i < N; i++) { if (mViews.get(i) instanceof ButtonInterface) { ((ButtonInterface) mViews.get(i)).setDarkIntensity(darkIntensity); } } } public void setDelayTouchFeedback(boolean delay) { mDelayTouchFeedback = delay; final int N = mViews.size(); for (int i = 0; i < N; i++) { if (mViews.get(i) instanceof ButtonInterface) { ((ButtonInterface) mViews.get(i)).setDelayTouchFeedback(delay); } } } public void setOnClickListener(View.OnClickListener clickListener) { mClickListener = clickListener; Loading Loading @@ -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; } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +8 −6 Original line number Diff line number Diff line Loading @@ -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)); } } Loading Loading @@ -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)); } } Loading Loading @@ -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++) { Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +10 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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; } Loading Loading @@ -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( Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java +8 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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(); Loading Loading
packages/SystemUI/res/layout/menu_ime.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" > Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java +57 −16 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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<>(); Loading @@ -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; Loading @@ -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 (view instanceof ButtonInterface) { final ButtonInterface button = (ButtonInterface) view; if (mDarkIntensity != null) { button.setDarkIntensity(mDarkIntensity); } if (mImageDrawable != null) { ((ButtonInterface) view).setImageDrawable(mImageDrawable); button.setImageDrawable(mImageDrawable); } if (mDelayTouchFeedback != null) { ((ButtonInterface) view).setDelayTouchFeedback(mDelayTouchFeedback); button.setDelayTouchFeedback(mDelayTouchFeedback); } button.setVertical(mVertical); } ((ButtonInterface) view).setVertical(mVertical); } public int getId() { Loading @@ -99,9 +119,11 @@ public class ButtonDispatcher { mImageDrawable = drawable; final int N = mViews.size(); for (int i = 0; i < N; i++) { if (mViews.get(i) instanceof ButtonInterface) { ((ButtonInterface) mViews.get(i)).setImageDrawable(mImageDrawable); } } } public void setVisibility(int visibility) { if (mVisibility == visibility) return; Loading @@ -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++) { 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++) { Loading @@ -132,17 +156,21 @@ public class ButtonDispatcher { mDarkIntensity = darkIntensity; final int N = mViews.size(); for (int i = 0; i < N; i++) { if (mViews.get(i) instanceof ButtonInterface) { ((ButtonInterface) mViews.get(i)).setDarkIntensity(darkIntensity); } } } public void setDelayTouchFeedback(boolean delay) { mDelayTouchFeedback = delay; final int N = mViews.size(); for (int i = 0; i < N; i++) { if (mViews.get(i) instanceof ButtonInterface) { ((ButtonInterface) mViews.get(i)).setDelayTouchFeedback(delay); } } } public void setOnClickListener(View.OnClickListener clickListener) { mClickListener = clickListener; Loading Loading @@ -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; } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java +8 −6 Original line number Diff line number Diff line Loading @@ -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)); } } Loading Loading @@ -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)); } } Loading Loading @@ -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++) { Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +10 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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; } Loading Loading @@ -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( Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java +8 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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(); Loading