diff options
| -rw-r--r-- | src/com/android/systemui/navigation/fling/FlingActionHandler.java | 30 | ||||
| -rw-r--r-- | src/com/android/systemui/navigation/fling/FlingView.java | 83 |
2 files changed, 93 insertions, 20 deletions
diff --git a/src/com/android/systemui/navigation/fling/FlingActionHandler.java b/src/com/android/systemui/navigation/fling/FlingActionHandler.java index 8241ec8..92fc2b1 100644 --- a/src/com/android/systemui/navigation/fling/FlingActionHandler.java +++ b/src/com/android/systemui/navigation/fling/FlingActionHandler.java @@ -61,6 +61,7 @@ public class FlingActionHandler implements Swipeable, SmartObservable { private View mHost; private Context mContext; private boolean isDoubleTapEnabled; + private boolean mIsBackAlt; private boolean mKeyguardShowing; public FlingActionHandler(Context context, View host) { @@ -79,11 +80,7 @@ public class FlingActionHandler implements Swipeable, SmartObservable { ActionConfig action = button.getActionConfig(entry.getValue().action); mActionMap.put(entry.getKey(), action); } - isDoubleTapEnabled = !((ActionConfig) mActionMap - .get(ActionConstants.Fling.DOUBLE_LEFT_TAP_TAG)) - .hasNoAction() - || !((ActionConfig) mActionMap.get(ActionConstants.Fling.DOUBLE_RIGHT_TAP_TAG)) - .hasNoAction(); + setDoubleTapEnabled(); } public void setKeyguardShowing(boolean showing) { @@ -169,8 +166,26 @@ public class FlingActionHandler implements Swipeable, SmartObservable { fireAction(!right_tap.hasNoAction() ? right_tap : left_tap); } + protected void setImeActions(boolean isBackAlt) { + mIsBackAlt = isBackAlt; + setDoubleTapEnabled(); + } + + private void setDoubleTapEnabled() { + isDoubleTapEnabled = mIsBackAlt || !((ActionConfig) mActionMap + .get(ActionConstants.Fling.DOUBLE_LEFT_TAP_TAG)) + .hasNoAction() + || !((ActionConfig) mActionMap.get(ActionConstants.Fling.DOUBLE_RIGHT_TAP_TAG)) + .hasNoAction(); + } + @Override public void onDoubleLeftTap() { + if (mIsBackAlt) { + ActionHandler.performTask(mContext, ActionHandler.SYSTEMUI_TASK_IME_NAVIGATION_LEFT); + return; + } + ActionConfig left_tap = (ActionConfig) mActionMap .get(ActionConstants.Fling.DOUBLE_LEFT_TAP_TAG); ActionConfig right_tap = (ActionConfig) mActionMap @@ -180,6 +195,11 @@ public class FlingActionHandler implements Swipeable, SmartObservable { @Override public void onDoubleRightTap() { + if (mIsBackAlt) { + ActionHandler.performTask(mContext, ActionHandler.SYSTEMUI_TASK_IME_NAVIGATION_RIGHT); + return; + } + ActionConfig right_tap = (ActionConfig) mActionMap .get(ActionConstants.Fling.DOUBLE_RIGHT_TAP_TAG); ActionConfig left_tap = (ActionConfig) mActionMap diff --git a/src/com/android/systemui/navigation/fling/FlingView.java b/src/com/android/systemui/navigation/fling/FlingView.java index ad51c32..2cf3117 100644 --- a/src/com/android/systemui/navigation/fling/FlingView.java +++ b/src/com/android/systemui/navigation/fling/FlingView.java @@ -42,6 +42,9 @@ import com.android.systemui.statusbar.phone.BarTransitions; import com.android.systemui.statusbar.phone.PhoneStatusBar; import com.android.internal.utils.du.ActionConstants; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.app.StatusBarManager; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; @@ -63,8 +66,11 @@ import android.widget.ImageView; public class FlingView extends BaseNavigationBar { final static String TAG = FlingView.class.getSimpleName(); + final static int PULSE_FADE_OUT_DURATION = 250; + final static int PULSE_FADE_IN_DURATION = 200; + final static float PULSE_LOGO_OPACITY = 0.6f; - private static Set<Uri> sUris = new HashSet<Uri>(); + private static Set<Uri> sUris = new HashSet<Uri>(); static { sUris.add(Settings.Secure.getUriFor(Settings.Secure.FLING_LONGPRESS_TIMEOUT)); sUris.add(Settings.Secure.getUriFor(Settings.Secure.FLING_RIPPLE_ENABLED)); @@ -84,6 +90,8 @@ public class FlingView extends BaseNavigationBar { private FlingRipple mRipple; private FlingTrails mTrails; + private int mNavigationIconHints = 0; + private SmartObservable mObservable = new SmartObservable() { @Override public Set<Uri> onGetUris() { @@ -186,18 +194,23 @@ public class FlingView extends BaseNavigationBar { } }; - private final Runnable mAnimateShowLogo = new Runnable() { - @Override - public void run() { - mLogoController.unlockAndShow(null); - } - }; - @Override public boolean onStartPulse(Animation animatePulseIn) { - final boolean hasLogo = mLogoController.isEnabled(); - if (hasLogo) { - mLogoController.hideAndLock(mPulseOnListener); + if (mLogoController.isEnabled()) { + getLogoView(getHiddenView()).setAlpha(PULSE_LOGO_OPACITY); + getLogoView(getCurrentView()).animate() + .alpha(PULSE_LOGO_OPACITY) + .setDuration(PULSE_FADE_OUT_DURATION) + .setListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator _a) { + // shouldn't be null, mPulse just called into us + if (mPulse != null) { + mPulse.turnOnPulse(); + } + } + }) + .start(); return true; } return false; @@ -205,8 +218,13 @@ public class FlingView extends BaseNavigationBar { @Override public void onStopPulse(Animation animatePulseOut) { - getHandler().removeCallbacks(mAnimateShowLogo); - getHandler().postDelayed(mAnimateShowLogo, 250); + if (mLogoController.isEnabled()) { + getLogoView(getHiddenView()).setAlpha(1.0f); + getLogoView(getCurrentView()).animate() + .alpha(1.0f) + .setDuration(PULSE_FADE_IN_DURATION) + .start(); + } } @Override @@ -285,15 +303,44 @@ public class FlingView extends BaseNavigationBar { public void reorient() { super.reorient(); mBarTransitions.init(); - mLogoController.setLogoView(getFlingLogo()); + final FlingLogoView logo = getFlingLogo(); + mLogoController.setLogoView(logo); mLogoController.setLogoIcon(); + if (isBarPulseFaded() && mLogoController.isEnabled()) { + getLogoView(getCurrentView()).setAlpha(PULSE_LOGO_OPACITY); + getLogoView(getHiddenView()).setAlpha(PULSE_LOGO_OPACITY); + } setDisabledFlags(mDisabledFlags, true /* force */); } + boolean isBarPulseFaded() { + if (mPulse == null) { + return false; + } else { + return mPulse.shouldDrawPulse(); + } + } + @Override public void notifyScreenOn(boolean screenOn) { mGestureHandler.onScreenStateChanged(screenOn); super.notifyScreenOn(screenOn); + + if (mLogoController.isEnabled()) { + final float fadeAlpha = 1.0f; + ImageView currentLogo = getLogoView(getCurrentView()); + ImageView hiddenLogo = getLogoView(getHiddenView()); + if (screenOn && (currentLogo.getAlpha() != fadeAlpha || hiddenLogo.getAlpha() != fadeAlpha)) { + currentLogo.setAlpha(fadeAlpha); + hiddenLogo.setAlpha(fadeAlpha); + } + } + } + + private ImageView getLogoView(View v) { + final ViewGroup viewGroup = (ViewGroup) v; + ImageView logoView = (ImageView)viewGroup.findViewById(R.id.fling_console); + return logoView; } @Override @@ -310,7 +357,13 @@ public class FlingView extends BaseNavigationBar { @Override public void setNavigationIconHints(int hints) { - // maybe do something with the IME switcher + if (hints == mNavigationIconHints) { + return; + } + + final boolean backAlt = (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT) != 0; + mNavigationIconHints = hints; + mActionHandler.setImeActions(backAlt); } @Override |
