Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +8 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.ActivityManager; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; Loading @@ -35,6 +34,10 @@ public class BarTransitions { public static final int MODE_OPAQUE = 0; public static final int MODE_SEMI_TRANSPARENT = 1; public static final int MODE_TRANSPARENT = 2; public static final int MODE_LIGHTS_OUT = 3; protected static final int LIGHTS_IN_DURATION = 250; protected static final int LIGHTS_OUT_DURATION = 750; private final String mTag; protected final View mTarget; Loading @@ -52,10 +55,10 @@ public class BarTransitions { } }; public BarTransitions(Context context, View target) { public BarTransitions(View target) { mTag = "BarTransitions." + target.getClass().getSimpleName(); mTarget = target; final Resources res = context.getResources(); final Resources res = target.getContext().getResources(); mOpaque = res.getColor(R.drawable.status_bar_background); mSemiTransparent = res.getColor(R.color.status_bar_background_semi_transparent); } Loading @@ -76,6 +79,7 @@ public class BarTransitions { protected Integer getBackgroundColor(int mode) { if (mode == MODE_SEMI_TRANSPARENT) return mSemiTransparent; if (mode == MODE_OPAQUE) return mOpaque; if (mode == MODE_LIGHTS_OUT) return mOpaque; return null; } Loading Loading @@ -113,6 +117,7 @@ public class BarTransitions { if (mode == MODE_OPAQUE) return "MODE_OPAQUE"; if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT"; if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT"; if (mode == MODE_LIGHTS_OUT) return "MODE_LIGHTS_OUT"; throw new IllegalArgumentException("Unknown mode " + mode); } } packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java 0 → 100644 +163 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 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 android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.ServiceManager; import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.R; import com.android.systemui.statusbar.policy.KeyButtonView; public final class NavigationBarTransitions extends BarTransitions { private static final boolean ENABLE_GRADIENT = false; // until we can smooth transition private final NavigationBarView mView; private final Drawable mTransparentBottom; private final Drawable mTransparentRight; private final int mTransparentColor; private final IStatusBarService mBarService; private boolean mLightsOut; public NavigationBarTransitions(NavigationBarView view) { super(view); mView = view; final Resources res = mView.getContext().getResources(); final int[] gradientColors = new int[] { res.getColor(R.color.navigation_bar_background_transparent_start), res.getColor(R.color.navigation_bar_background_transparent_end) }; mTransparentBottom = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors); mTransparentRight = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors); mTransparentColor = res.getColor(R.color.status_bar_background_transparent); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); } public void setVertical(boolean isVertical) { if (!ENABLE_GRADIENT) return; mTransparent = isVertical ? mTransparentRight : mTransparentBottom; } @Override protected Integer getBackgroundColor(int mode) { if (!ENABLE_GRADIENT && mode == MODE_TRANSPARENT) return mTransparentColor; return super.getBackgroundColor(mode); } @Override protected void onTransition(int oldMode, int newMode, boolean animate) { super.onTransition(oldMode, newMode, animate); applyMode(newMode, animate, false /*force*/); } public void reapplyMode() { applyMode(getMode(), false /*animate*/, true /*force*/); } private void applyMode(int mode, boolean animate, boolean force) { // apply to key buttons final boolean isOpaque = mode == MODE_OPAQUE || mode == MODE_LIGHTS_OUT; final float alpha = isOpaque ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f; setKeyButtonViewQuiescentAlpha(mView.getBackButton(), alpha, animate); setKeyButtonViewQuiescentAlpha(mView.getHomeButton(), alpha, animate); setKeyButtonViewQuiescentAlpha(mView.getRecentsButton(), alpha, animate); setKeyButtonViewQuiescentAlpha(mView.getMenuButton(), alpha, animate); // apply to lights out applyLightsOut(mode == MODE_LIGHTS_OUT, animate, force); } private void setKeyButtonViewQuiescentAlpha(View button, float alpha, boolean animate) { if (button instanceof KeyButtonView) { ((KeyButtonView) button).setQuiescentAlpha(alpha, animate); } } private void applyLightsOut(boolean lightsOut, boolean animate, boolean force) { if (!force && lightsOut == mLightsOut) return; mLightsOut = lightsOut; final View navButtons = mView.getCurrentView().findViewById(R.id.nav_buttons); final View lowLights = mView.getCurrentView().findViewById(R.id.lights_out); // ok, everyone, stop it right there navButtons.animate().cancel(); lowLights.animate().cancel(); final float navButtonsAlpha = lightsOut ? 0f : 1f; final float lowLightsAlpha = lightsOut ? 1f : 0f; if (!animate) { navButtons.setAlpha(navButtonsAlpha); lowLights.setAlpha(lowLightsAlpha); lowLights.setVisibility(lightsOut ? View.VISIBLE : View.GONE); } else { final int duration = lightsOut ? LIGHTS_OUT_DURATION : LIGHTS_IN_DURATION; navButtons.animate() .alpha(navButtonsAlpha) .setDuration(duration) .start(); lowLights.setOnTouchListener(mLightsOutListener); if (lowLights.getVisibility() == View.GONE) { lowLights.setAlpha(0f); lowLights.setVisibility(View.VISIBLE); } lowLights.animate() .alpha(lowLightsAlpha) .setDuration(duration) .setInterpolator(new AccelerateInterpolator(2.0f)) .setListener(lightsOut ? null : new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator _a) { lowLights.setVisibility(View.GONE); } }) .start(); } } private final View.OnTouchListener mLightsOutListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // even though setting the systemUI visibility below will turn these views // on, we need them to come up faster so that they can catch this motion // event applyLightsOut(false, false, false); try { mBarService.setSystemUiVisibility(0, View.SYSTEM_UI_FLAG_LOW_PROFILE); } catch (android.os.RemoteException ex) { } } return false; } }; } No newline at end of file packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +8 −145 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.systemui.statusbar.phone; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; import android.app.StatusBarManager; import android.content.Context; Loading @@ -25,11 +23,8 @@ import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.Handler; import android.os.Message; import android.os.ServiceManager; import android.util.AttributeSet; import android.util.Log; import android.view.Display; Loading @@ -38,16 +33,13 @@ import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.widget.ImageView; import android.widget.LinearLayout; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.R; import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.statusbar.DelegateViewHelper; import com.android.systemui.statusbar.policy.DeadZone; import com.android.systemui.statusbar.policy.KeyButtonView; import java.io.FileDescriptor; import java.io.PrintWriter; Loading @@ -61,9 +53,6 @@ public class NavigationBarView extends LinearLayout { // slippery nav bar when everything is disabled, e.g. during setup final static boolean SLIPPERY_WHEN_DISABLED = true; final static boolean ANIMATE_HIDE_TRANSITION = false; // turned off because it introduces unsightly delay when videos goes to full screen protected IStatusBarService mBarService; final Display mDisplay; View mCurrentView = null; View[] mRotatedViews = new View[4]; Loading @@ -72,7 +61,7 @@ public class NavigationBarView extends LinearLayout { boolean mVertical; boolean mScreenOn; boolean mHidden, mLowProfile, mShowMenu; boolean mShowMenu; int mDisabledFlags = 0; int mNavigationIconHints = 0; Loading Loading @@ -111,62 +100,11 @@ public class NavigationBarView extends LinearLayout { } } private final class NavigationBarTransitions extends BarTransitions { private static final boolean ENABLE_GRADIENT = false; // until we can smooth transition private final Drawable mTransparentBottom; private final Drawable mTransparentRight; private final int mTransparentColor; public NavigationBarTransitions(Context context) { super(context, NavigationBarView.this); final Resources res = mContext.getResources(); final int[] gradientColors = new int[] { res.getColor(R.color.navigation_bar_background_transparent_start), res.getColor(R.color.navigation_bar_background_transparent_end) }; mTransparentBottom = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors); mTransparentRight = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors); mTransparentColor = res.getColor(R.color.status_bar_background_transparent); } public void setVertical(boolean isVertical) { if (!ENABLE_GRADIENT) return; mTransparent = isVertical ? mTransparentRight : mTransparentBottom; } @Override protected Integer getBackgroundColor(int mode) { if (!ENABLE_GRADIENT && mode == MODE_TRANSPARENT) return mTransparentColor; return super.getBackgroundColor(mode); } @Override protected void onTransition(int oldMode, int newMode, boolean animate) { super.onTransition(oldMode, newMode, animate); final float alpha = newMode == MODE_OPAQUE ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f; setKeyButtonViewQuiescentAlpha(getBackButton(), alpha); setKeyButtonViewQuiescentAlpha(getHomeButton(), alpha); setKeyButtonViewQuiescentAlpha(getRecentsButton(), alpha); setKeyButtonViewQuiescentAlpha(getMenuButton(), alpha); } private void setKeyButtonViewQuiescentAlpha(View button, float alpha) { if (button instanceof KeyButtonView) { ((KeyButtonView) button).setQuiescentAlpha(alpha); } } } public NavigationBarView(Context context, AttributeSet attrs) { super(context, attrs); mHidden = false; mDisplay = ((WindowManager)context.getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay(); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); final Resources res = mContext.getResources(); mBarSize = res.getDimensionPixelSize(R.dimen.navigation_bar_size); Loading @@ -176,7 +114,7 @@ public class NavigationBarView extends LinearLayout { getIcons(res); mBarTransitions = new NavigationBarTransitions(context); mBarTransitions = new NavigationBarTransitions(this); } public BarTransitions getBarTransitions() { Loading Loading @@ -210,6 +148,10 @@ public class NavigationBarView extends LinearLayout { private H mHandler = new H(); public View getCurrentView() { return mCurrentView; } public View getRecentsButton() { return mCurrentView.findViewById(R.id.recent_apps); } Loading Loading @@ -252,24 +194,6 @@ public class NavigationBarView extends LinearLayout { setDisabledFlags(mDisabledFlags, true); } View.OnTouchListener mLightsOutListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // even though setting the systemUI visibility below will turn these views // on, we need them to come up faster so that they can catch this motion // event setLowProfile(false, false, false); try { mBarService.setSystemUiVisibility(0, View.SYSTEM_UI_FLAG_LOW_PROFILE); } catch (android.os.RemoteException ex) { } } return false; } }; public void setNavigationIconHints(int hints) { setNavigationIconHints(hints, false); } Loading Loading @@ -366,65 +290,6 @@ public class NavigationBarView extends LinearLayout { getMenuButton().setVisibility(mShowMenu ? View.VISIBLE : View.INVISIBLE); } public void setLowProfile(final boolean lightsOut) { setLowProfile(lightsOut, true, false); } public void setLowProfile(final boolean lightsOut, final boolean animate, final boolean force) { if (!force && lightsOut == mLowProfile) return; mLowProfile = lightsOut; if (DEBUG) Log.d(TAG, "setting lights " + (lightsOut?"out":"on")); final View navButtons = mCurrentView.findViewById(R.id.nav_buttons); final View lowLights = mCurrentView.findViewById(R.id.lights_out); // ok, everyone, stop it right there navButtons.animate().cancel(); lowLights.animate().cancel(); if (!animate) { navButtons.setAlpha(lightsOut ? 0f : 1f); lowLights.setAlpha(lightsOut ? 1f : 0f); lowLights.setVisibility(lightsOut ? View.VISIBLE : View.GONE); } else { navButtons.animate() .alpha(lightsOut ? 0f : 1f) .setDuration(lightsOut ? 750 : 250) .start(); lowLights.setOnTouchListener(mLightsOutListener); if (lowLights.getVisibility() == View.GONE) { lowLights.setAlpha(0f); lowLights.setVisibility(View.VISIBLE); } lowLights.animate() .alpha(lightsOut ? 1f : 0f) .setDuration(lightsOut ? 750 : 250) .setInterpolator(new AccelerateInterpolator(2.0f)) .setListener(lightsOut ? null : new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator _a) { lowLights.setVisibility(View.GONE); } }) .start(); } } public void setHidden(final boolean hide) { if (hide == mHidden) return; mHidden = hide; Log.d(TAG, (hide ? "HIDING" : "SHOWING") + " navigation bar"); // bring up the lights no matter what setLowProfile(false); } @Override public void onFinishInflate() { mRotatedViews[Surface.ROTATION_0] = Loading Loading @@ -454,7 +319,7 @@ public class NavigationBarView extends LinearLayout { mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone); // force the low profile & disabled states into compliance setLowProfile(mLowProfile, false, true /* force */); mBarTransitions.reapplyMode(); setDisabledFlags(mDisabledFlags, true /* force */); setMenuVisibility(mShowMenu, true /* force */); Loading Loading @@ -562,8 +427,6 @@ public class NavigationBarView extends LinearLayout { pw.println(String.format(" disabled=0x%08x vertical=%s hidden=%s low=%s menu=%s", mDisabledFlags, mVertical ? "true" : "false", mHidden ? "true" : "false", mLowProfile ? "true" : "false", mShowMenu ? "true" : "false")); final View back = getBackButton(); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +5 −51 Original line number Diff line number Diff line Loading @@ -17,15 +17,16 @@ package com.android.systemui.statusbar.phone; import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT; import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; import static android.app.StatusBarManager.windowStateToString; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.app.ActivityManager; Loading Loading @@ -251,9 +252,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { int[] mAbsPos = new int[2]; Runnable mPostCollapseCleanup = null; private Animator mLightsOutAnimation; private Animator mLightsOnAnimation; // for disabling the status bar int mDisabled = 0; Loading Loading @@ -1808,11 +1806,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } } if (mNavigationBarView != null) { mNavigationBarView.setLowProfile(lightsOut); } setStatusBarLowProfile(lightsOut); setAreThereNotifications(); } // update status bar mode Loading Loading @@ -1872,6 +1866,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { private int barMode(int vis, int transientFlag, int transparentFlag) { return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT : (vis & transparentFlag) != 0 ? MODE_TRANSPARENT : (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0 ? MODE_LIGHTS_OUT : MODE_OPAQUE; } Loading @@ -1888,7 +1883,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { private void checkBarMode(int mode, int windowState, BarTransitions transitions) { final boolean imeVisible = (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0; final int finalMode = imeVisible ? MODE_OPAQUE : mode; final boolean animate = windowState == WINDOW_STATE_SHOWING; final boolean animate = windowState != WINDOW_STATE_HIDDEN; transitions.transitionTo(finalMode, animate); } Loading Loading @@ -1948,47 +1943,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { mHandler.postDelayed(mAutohide, 350); // longer than app gesture -> flag clear } private void setStatusBarLowProfile(boolean lightsOut) { if (mLightsOutAnimation == null) { final View notifications = mStatusBarView.findViewById(R.id.notification_icon_area); final View systemIcons = mStatusBarView.findViewById(R.id.statusIcons); final View signal = mStatusBarView.findViewById(R.id.signal_cluster); final View battery = mStatusBarView.findViewById(R.id.battery); final View clock = mStatusBarView.findViewById(R.id.clock); final AnimatorSet lightsOutAnim = new AnimatorSet(); lightsOutAnim.playTogether( ObjectAnimator.ofFloat(notifications, View.ALPHA, 0), ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 0), ObjectAnimator.ofFloat(signal, View.ALPHA, 0), ObjectAnimator.ofFloat(battery, View.ALPHA, 0.5f), ObjectAnimator.ofFloat(clock, View.ALPHA, 0.5f) ); lightsOutAnim.setDuration(750); final AnimatorSet lightsOnAnim = new AnimatorSet(); lightsOnAnim.playTogether( ObjectAnimator.ofFloat(notifications, View.ALPHA, 1), ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 1), ObjectAnimator.ofFloat(signal, View.ALPHA, 1), ObjectAnimator.ofFloat(battery, View.ALPHA, 1), ObjectAnimator.ofFloat(clock, View.ALPHA, 1) ); lightsOnAnim.setDuration(250); mLightsOutAnimation = lightsOutAnim; mLightsOnAnimation = lightsOnAnim; } mLightsOutAnimation.cancel(); mLightsOnAnimation.cancel(); final Animator a = lightsOut ? mLightsOutAnimation : mLightsOnAnimation; a.start(); setAreThereNotifications(); } private boolean areLightsOn() { return 0 == (mSystemUiVisibility & View.SYSTEM_UI_FLAG_LOW_PROFILE); } Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java 0 → 100644 +117 −0 File added.Preview size limit exceeded, changes collapsed. Show changes Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java +8 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import android.animation.ArgbEvaluator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.ActivityManager; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; Loading @@ -35,6 +34,10 @@ public class BarTransitions { public static final int MODE_OPAQUE = 0; public static final int MODE_SEMI_TRANSPARENT = 1; public static final int MODE_TRANSPARENT = 2; public static final int MODE_LIGHTS_OUT = 3; protected static final int LIGHTS_IN_DURATION = 250; protected static final int LIGHTS_OUT_DURATION = 750; private final String mTag; protected final View mTarget; Loading @@ -52,10 +55,10 @@ public class BarTransitions { } }; public BarTransitions(Context context, View target) { public BarTransitions(View target) { mTag = "BarTransitions." + target.getClass().getSimpleName(); mTarget = target; final Resources res = context.getResources(); final Resources res = target.getContext().getResources(); mOpaque = res.getColor(R.drawable.status_bar_background); mSemiTransparent = res.getColor(R.color.status_bar_background_semi_transparent); } Loading @@ -76,6 +79,7 @@ public class BarTransitions { protected Integer getBackgroundColor(int mode) { if (mode == MODE_SEMI_TRANSPARENT) return mSemiTransparent; if (mode == MODE_OPAQUE) return mOpaque; if (mode == MODE_LIGHTS_OUT) return mOpaque; return null; } Loading Loading @@ -113,6 +117,7 @@ public class BarTransitions { if (mode == MODE_OPAQUE) return "MODE_OPAQUE"; if (mode == MODE_SEMI_TRANSPARENT) return "MODE_SEMI_TRANSPARENT"; if (mode == MODE_TRANSPARENT) return "MODE_TRANSPARENT"; if (mode == MODE_LIGHTS_OUT) return "MODE_LIGHTS_OUT"; throw new IllegalArgumentException("Unknown mode " + mode); } }
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java 0 → 100644 +163 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 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 android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.ServiceManager; import android.view.MotionEvent; import android.view.View; import android.view.animation.AccelerateInterpolator; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.R; import com.android.systemui.statusbar.policy.KeyButtonView; public final class NavigationBarTransitions extends BarTransitions { private static final boolean ENABLE_GRADIENT = false; // until we can smooth transition private final NavigationBarView mView; private final Drawable mTransparentBottom; private final Drawable mTransparentRight; private final int mTransparentColor; private final IStatusBarService mBarService; private boolean mLightsOut; public NavigationBarTransitions(NavigationBarView view) { super(view); mView = view; final Resources res = mView.getContext().getResources(); final int[] gradientColors = new int[] { res.getColor(R.color.navigation_bar_background_transparent_start), res.getColor(R.color.navigation_bar_background_transparent_end) }; mTransparentBottom = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors); mTransparentRight = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors); mTransparentColor = res.getColor(R.color.status_bar_background_transparent); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); } public void setVertical(boolean isVertical) { if (!ENABLE_GRADIENT) return; mTransparent = isVertical ? mTransparentRight : mTransparentBottom; } @Override protected Integer getBackgroundColor(int mode) { if (!ENABLE_GRADIENT && mode == MODE_TRANSPARENT) return mTransparentColor; return super.getBackgroundColor(mode); } @Override protected void onTransition(int oldMode, int newMode, boolean animate) { super.onTransition(oldMode, newMode, animate); applyMode(newMode, animate, false /*force*/); } public void reapplyMode() { applyMode(getMode(), false /*animate*/, true /*force*/); } private void applyMode(int mode, boolean animate, boolean force) { // apply to key buttons final boolean isOpaque = mode == MODE_OPAQUE || mode == MODE_LIGHTS_OUT; final float alpha = isOpaque ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f; setKeyButtonViewQuiescentAlpha(mView.getBackButton(), alpha, animate); setKeyButtonViewQuiescentAlpha(mView.getHomeButton(), alpha, animate); setKeyButtonViewQuiescentAlpha(mView.getRecentsButton(), alpha, animate); setKeyButtonViewQuiescentAlpha(mView.getMenuButton(), alpha, animate); // apply to lights out applyLightsOut(mode == MODE_LIGHTS_OUT, animate, force); } private void setKeyButtonViewQuiescentAlpha(View button, float alpha, boolean animate) { if (button instanceof KeyButtonView) { ((KeyButtonView) button).setQuiescentAlpha(alpha, animate); } } private void applyLightsOut(boolean lightsOut, boolean animate, boolean force) { if (!force && lightsOut == mLightsOut) return; mLightsOut = lightsOut; final View navButtons = mView.getCurrentView().findViewById(R.id.nav_buttons); final View lowLights = mView.getCurrentView().findViewById(R.id.lights_out); // ok, everyone, stop it right there navButtons.animate().cancel(); lowLights.animate().cancel(); final float navButtonsAlpha = lightsOut ? 0f : 1f; final float lowLightsAlpha = lightsOut ? 1f : 0f; if (!animate) { navButtons.setAlpha(navButtonsAlpha); lowLights.setAlpha(lowLightsAlpha); lowLights.setVisibility(lightsOut ? View.VISIBLE : View.GONE); } else { final int duration = lightsOut ? LIGHTS_OUT_DURATION : LIGHTS_IN_DURATION; navButtons.animate() .alpha(navButtonsAlpha) .setDuration(duration) .start(); lowLights.setOnTouchListener(mLightsOutListener); if (lowLights.getVisibility() == View.GONE) { lowLights.setAlpha(0f); lowLights.setVisibility(View.VISIBLE); } lowLights.animate() .alpha(lowLightsAlpha) .setDuration(duration) .setInterpolator(new AccelerateInterpolator(2.0f)) .setListener(lightsOut ? null : new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator _a) { lowLights.setVisibility(View.GONE); } }) .start(); } } private final View.OnTouchListener mLightsOutListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // even though setting the systemUI visibility below will turn these views // on, we need them to come up faster so that they can catch this motion // event applyLightsOut(false, false, false); try { mBarService.setSystemUiVisibility(0, View.SYSTEM_UI_FLAG_LOW_PROFILE); } catch (android.os.RemoteException ex) { } } return false; } }; } No newline at end of file
packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +8 −145 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.systemui.statusbar.phone; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.LayoutTransition; import android.app.StatusBarManager; import android.content.Context; Loading @@ -25,11 +23,8 @@ import android.content.res.Resources; import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.Handler; import android.os.Message; import android.os.ServiceManager; import android.util.AttributeSet; import android.util.Log; import android.view.Display; Loading @@ -38,16 +33,13 @@ import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.widget.ImageView; import android.widget.LinearLayout; import com.android.internal.statusbar.IStatusBarService; import com.android.systemui.R; import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.statusbar.DelegateViewHelper; import com.android.systemui.statusbar.policy.DeadZone; import com.android.systemui.statusbar.policy.KeyButtonView; import java.io.FileDescriptor; import java.io.PrintWriter; Loading @@ -61,9 +53,6 @@ public class NavigationBarView extends LinearLayout { // slippery nav bar when everything is disabled, e.g. during setup final static boolean SLIPPERY_WHEN_DISABLED = true; final static boolean ANIMATE_HIDE_TRANSITION = false; // turned off because it introduces unsightly delay when videos goes to full screen protected IStatusBarService mBarService; final Display mDisplay; View mCurrentView = null; View[] mRotatedViews = new View[4]; Loading @@ -72,7 +61,7 @@ public class NavigationBarView extends LinearLayout { boolean mVertical; boolean mScreenOn; boolean mHidden, mLowProfile, mShowMenu; boolean mShowMenu; int mDisabledFlags = 0; int mNavigationIconHints = 0; Loading Loading @@ -111,62 +100,11 @@ public class NavigationBarView extends LinearLayout { } } private final class NavigationBarTransitions extends BarTransitions { private static final boolean ENABLE_GRADIENT = false; // until we can smooth transition private final Drawable mTransparentBottom; private final Drawable mTransparentRight; private final int mTransparentColor; public NavigationBarTransitions(Context context) { super(context, NavigationBarView.this); final Resources res = mContext.getResources(); final int[] gradientColors = new int[] { res.getColor(R.color.navigation_bar_background_transparent_start), res.getColor(R.color.navigation_bar_background_transparent_end) }; mTransparentBottom = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors); mTransparentRight = new GradientDrawable(Orientation.RIGHT_LEFT, gradientColors); mTransparentColor = res.getColor(R.color.status_bar_background_transparent); } public void setVertical(boolean isVertical) { if (!ENABLE_GRADIENT) return; mTransparent = isVertical ? mTransparentRight : mTransparentBottom; } @Override protected Integer getBackgroundColor(int mode) { if (!ENABLE_GRADIENT && mode == MODE_TRANSPARENT) return mTransparentColor; return super.getBackgroundColor(mode); } @Override protected void onTransition(int oldMode, int newMode, boolean animate) { super.onTransition(oldMode, newMode, animate); final float alpha = newMode == MODE_OPAQUE ? KeyButtonView.DEFAULT_QUIESCENT_ALPHA : 1f; setKeyButtonViewQuiescentAlpha(getBackButton(), alpha); setKeyButtonViewQuiescentAlpha(getHomeButton(), alpha); setKeyButtonViewQuiescentAlpha(getRecentsButton(), alpha); setKeyButtonViewQuiescentAlpha(getMenuButton(), alpha); } private void setKeyButtonViewQuiescentAlpha(View button, float alpha) { if (button instanceof KeyButtonView) { ((KeyButtonView) button).setQuiescentAlpha(alpha); } } } public NavigationBarView(Context context, AttributeSet attrs) { super(context, attrs); mHidden = false; mDisplay = ((WindowManager)context.getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay(); mBarService = IStatusBarService.Stub.asInterface( ServiceManager.getService(Context.STATUS_BAR_SERVICE)); final Resources res = mContext.getResources(); mBarSize = res.getDimensionPixelSize(R.dimen.navigation_bar_size); Loading @@ -176,7 +114,7 @@ public class NavigationBarView extends LinearLayout { getIcons(res); mBarTransitions = new NavigationBarTransitions(context); mBarTransitions = new NavigationBarTransitions(this); } public BarTransitions getBarTransitions() { Loading Loading @@ -210,6 +148,10 @@ public class NavigationBarView extends LinearLayout { private H mHandler = new H(); public View getCurrentView() { return mCurrentView; } public View getRecentsButton() { return mCurrentView.findViewById(R.id.recent_apps); } Loading Loading @@ -252,24 +194,6 @@ public class NavigationBarView extends LinearLayout { setDisabledFlags(mDisabledFlags, true); } View.OnTouchListener mLightsOutListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // even though setting the systemUI visibility below will turn these views // on, we need them to come up faster so that they can catch this motion // event setLowProfile(false, false, false); try { mBarService.setSystemUiVisibility(0, View.SYSTEM_UI_FLAG_LOW_PROFILE); } catch (android.os.RemoteException ex) { } } return false; } }; public void setNavigationIconHints(int hints) { setNavigationIconHints(hints, false); } Loading Loading @@ -366,65 +290,6 @@ public class NavigationBarView extends LinearLayout { getMenuButton().setVisibility(mShowMenu ? View.VISIBLE : View.INVISIBLE); } public void setLowProfile(final boolean lightsOut) { setLowProfile(lightsOut, true, false); } public void setLowProfile(final boolean lightsOut, final boolean animate, final boolean force) { if (!force && lightsOut == mLowProfile) return; mLowProfile = lightsOut; if (DEBUG) Log.d(TAG, "setting lights " + (lightsOut?"out":"on")); final View navButtons = mCurrentView.findViewById(R.id.nav_buttons); final View lowLights = mCurrentView.findViewById(R.id.lights_out); // ok, everyone, stop it right there navButtons.animate().cancel(); lowLights.animate().cancel(); if (!animate) { navButtons.setAlpha(lightsOut ? 0f : 1f); lowLights.setAlpha(lightsOut ? 1f : 0f); lowLights.setVisibility(lightsOut ? View.VISIBLE : View.GONE); } else { navButtons.animate() .alpha(lightsOut ? 0f : 1f) .setDuration(lightsOut ? 750 : 250) .start(); lowLights.setOnTouchListener(mLightsOutListener); if (lowLights.getVisibility() == View.GONE) { lowLights.setAlpha(0f); lowLights.setVisibility(View.VISIBLE); } lowLights.animate() .alpha(lightsOut ? 1f : 0f) .setDuration(lightsOut ? 750 : 250) .setInterpolator(new AccelerateInterpolator(2.0f)) .setListener(lightsOut ? null : new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator _a) { lowLights.setVisibility(View.GONE); } }) .start(); } } public void setHidden(final boolean hide) { if (hide == mHidden) return; mHidden = hide; Log.d(TAG, (hide ? "HIDING" : "SHOWING") + " navigation bar"); // bring up the lights no matter what setLowProfile(false); } @Override public void onFinishInflate() { mRotatedViews[Surface.ROTATION_0] = Loading Loading @@ -454,7 +319,7 @@ public class NavigationBarView extends LinearLayout { mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone); // force the low profile & disabled states into compliance setLowProfile(mLowProfile, false, true /* force */); mBarTransitions.reapplyMode(); setDisabledFlags(mDisabledFlags, true /* force */); setMenuVisibility(mShowMenu, true /* force */); Loading Loading @@ -562,8 +427,6 @@ public class NavigationBarView extends LinearLayout { pw.println(String.format(" disabled=0x%08x vertical=%s hidden=%s low=%s menu=%s", mDisabledFlags, mVertical ? "true" : "false", mHidden ? "true" : "false", mLowProfile ? "true" : "false", mShowMenu ? "true" : "false")); final View back = getBackButton(); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +5 −51 Original line number Diff line number Diff line Loading @@ -17,15 +17,16 @@ package com.android.systemui.statusbar.phone; import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT; import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN; import static android.app.StatusBarManager.WINDOW_STATE_SHOWING; import static android.app.StatusBarManager.windowStateToString; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSPARENT; import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.app.ActivityManager; Loading Loading @@ -251,9 +252,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { int[] mAbsPos = new int[2]; Runnable mPostCollapseCleanup = null; private Animator mLightsOutAnimation; private Animator mLightsOnAnimation; // for disabling the status bar int mDisabled = 0; Loading Loading @@ -1808,11 +1806,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { } } if (mNavigationBarView != null) { mNavigationBarView.setLowProfile(lightsOut); } setStatusBarLowProfile(lightsOut); setAreThereNotifications(); } // update status bar mode Loading Loading @@ -1872,6 +1866,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { private int barMode(int vis, int transientFlag, int transparentFlag) { return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT : (vis & transparentFlag) != 0 ? MODE_TRANSPARENT : (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0 ? MODE_LIGHTS_OUT : MODE_OPAQUE; } Loading @@ -1888,7 +1883,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { private void checkBarMode(int mode, int windowState, BarTransitions transitions) { final boolean imeVisible = (mNavigationIconHints & NAVIGATION_HINT_BACK_ALT) != 0; final int finalMode = imeVisible ? MODE_OPAQUE : mode; final boolean animate = windowState == WINDOW_STATE_SHOWING; final boolean animate = windowState != WINDOW_STATE_HIDDEN; transitions.transitionTo(finalMode, animate); } Loading Loading @@ -1948,47 +1943,6 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode { mHandler.postDelayed(mAutohide, 350); // longer than app gesture -> flag clear } private void setStatusBarLowProfile(boolean lightsOut) { if (mLightsOutAnimation == null) { final View notifications = mStatusBarView.findViewById(R.id.notification_icon_area); final View systemIcons = mStatusBarView.findViewById(R.id.statusIcons); final View signal = mStatusBarView.findViewById(R.id.signal_cluster); final View battery = mStatusBarView.findViewById(R.id.battery); final View clock = mStatusBarView.findViewById(R.id.clock); final AnimatorSet lightsOutAnim = new AnimatorSet(); lightsOutAnim.playTogether( ObjectAnimator.ofFloat(notifications, View.ALPHA, 0), ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 0), ObjectAnimator.ofFloat(signal, View.ALPHA, 0), ObjectAnimator.ofFloat(battery, View.ALPHA, 0.5f), ObjectAnimator.ofFloat(clock, View.ALPHA, 0.5f) ); lightsOutAnim.setDuration(750); final AnimatorSet lightsOnAnim = new AnimatorSet(); lightsOnAnim.playTogether( ObjectAnimator.ofFloat(notifications, View.ALPHA, 1), ObjectAnimator.ofFloat(systemIcons, View.ALPHA, 1), ObjectAnimator.ofFloat(signal, View.ALPHA, 1), ObjectAnimator.ofFloat(battery, View.ALPHA, 1), ObjectAnimator.ofFloat(clock, View.ALPHA, 1) ); lightsOnAnim.setDuration(250); mLightsOutAnimation = lightsOutAnim; mLightsOnAnimation = lightsOnAnim; } mLightsOutAnimation.cancel(); mLightsOnAnimation.cancel(); final Animator a = lightsOut ? mLightsOutAnimation : mLightsOnAnimation; a.start(); setAreThereNotifications(); } private boolean areLightsOn() { return 0 == (mSystemUiVisibility & View.SYSTEM_UI_FLAG_LOW_PROFILE); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java 0 → 100644 +117 −0 File added.Preview size limit exceeded, changes collapsed. Show changes