diff options
6 files changed, 78 insertions, 29 deletions
diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java b/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java new file mode 100644 index 000000000..2e6dcc0e7 --- /dev/null +++ b/quickstep/src/com/android/launcher3/uioverrides/BackButtonAlphaHandler.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2018 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.launcher3.uioverrides; + +import android.animation.ValueAnimator; + +import com.android.launcher3.Launcher; +import com.android.launcher3.LauncherState; +import com.android.launcher3.LauncherStateManager; +import com.android.launcher3.anim.AnimatorSetBuilder; +import com.android.quickstep.OverviewInteractionState; + +public class BackButtonAlphaHandler implements LauncherStateManager.StateHandler { + + private static final String TAG = "BackButtonAlphaHandler"; + + private final Launcher mLauncher; + private final OverviewInteractionState mOverviewInteractionState; + + public BackButtonAlphaHandler(Launcher launcher) { + mLauncher = launcher; + mOverviewInteractionState = OverviewInteractionState.getInstance(mLauncher); + } + + @Override + public void setState(LauncherState state) { + UiFactory.onLauncherStateOrFocusChanged(mLauncher); + } + + @Override + public void setStateWithAnimation(LauncherState toState, + AnimatorSetBuilder builder, LauncherStateManager.AnimationConfig config) { + if (!config.playNonAtomicComponent()) { + return; + } + float fromAlpha = mOverviewInteractionState.getBackButtonAlpha(); + float toAlpha = toState.hideBackButton ? 0 : 1; + if (Float.compare(fromAlpha, toAlpha) != 0) { + ValueAnimator anim = ValueAnimator.ofFloat(fromAlpha, toAlpha); + anim.setDuration(config.duration); + anim.addUpdateListener(valueAnimator -> { + final float alpha = (float) valueAnimator.getAnimatedValue(); + mOverviewInteractionState.setBackButtonAlpha(alpha, false); + }); + builder.play(anim); + } + } +} diff --git a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java index b371677f3..76820b6aa 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java +++ b/quickstep/src/com/android/launcher3/uioverrides/UiFactory.java @@ -78,11 +78,13 @@ public class UiFactory { } public static StateHandler[] getStateHandler(Launcher launcher) { - return new StateHandler[] { - launcher.getAllAppsController(), launcher.getWorkspace(), - new RecentsViewStateController(launcher)}; + return new StateHandler[] {launcher.getAllAppsController(), launcher.getWorkspace(), + new RecentsViewStateController(launcher), new BackButtonAlphaHandler(launcher)}; } + /** + * Sets the back button visibility based on the current state/window focus. + */ public static void onLauncherStateOrFocusChanged(Launcher launcher) { boolean shouldBackButtonBeHidden = launcher != null && launcher.getStateManager().getState().hideBackButton @@ -96,10 +98,6 @@ public class UiFactory { .setBackButtonAlpha(shouldBackButtonBeHidden ? 0 : 1, true /* animate */); } - public static void setBackButtonAlpha(Launcher launcher, float alpha, boolean animate) { - OverviewInteractionState.getInstance(launcher).setBackButtonAlpha(alpha,animate); - } - public static void resetOverview(Launcher launcher) { RecentsView recents = launcher.getOverviewPanel(); recents.reset(); diff --git a/quickstep/src/com/android/quickstep/OverviewInteractionState.java b/quickstep/src/com/android/quickstep/OverviewInteractionState.java index d60574676..922a7ff29 100644 --- a/quickstep/src/com/android/quickstep/OverviewInteractionState.java +++ b/quickstep/src/com/android/quickstep/OverviewInteractionState.java @@ -91,6 +91,7 @@ public class OverviewInteractionState { // These are updated on the background thread private ISystemUiProxy mISystemUiProxy; private boolean mSwipeUpEnabled = true; + private float mBackButtonAlpha = 1; private Runnable mOnSwipeUpSettingChangedListener; @@ -117,7 +118,14 @@ public class OverviewInteractionState { return mSwipeUpEnabled; } + public float getBackButtonAlpha() { + return mBackButtonAlpha; + } + public void setBackButtonAlpha(float alpha, boolean animate) { + if (!mSwipeUpEnabled) { + alpha = 1; + } mUiHandler.removeMessages(MSG_SET_BACK_BUTTON_ALPHA); mUiHandler.obtainMessage(MSG_SET_BACK_BUTTON_ALPHA, animate ? 1 : 0, 0, alpha) .sendToTarget(); @@ -128,6 +136,9 @@ public class OverviewInteractionState { } private boolean handleUiMessage(Message msg) { + if (msg.what == MSG_SET_BACK_BUTTON_ALPHA) { + mBackButtonAlpha = (float) msg.obj; + } mBgHandler.obtainMessage(msg.what, msg.arg1, msg.arg2, msg.obj).sendToTarget(); return true; } diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index e6fc4c6d4..3fcdee934 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -396,7 +396,6 @@ public class LauncherStateManager { setRestState(null); } - UiFactory.onLauncherStateOrFocusChanged(mLauncher); UiFactory.onLauncherStateOrResumeChanged(mLauncher); } diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index b5c821ac2..2c3e3ee7b 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -25,11 +25,9 @@ import com.android.launcher3.LauncherState; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.LauncherStateManager.StateHandler; import com.android.launcher3.R; -import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; -import com.android.launcher3.uioverrides.UiFactory; import com.android.launcher3.util.Themes; import com.android.launcher3.views.ScrimView; @@ -184,13 +182,6 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil anim.setDuration(config.duration); anim.setInterpolator(builder.getInterpolator(ANIM_VERTICAL_PROGRESS, interpolator)); anim.addListener(getProgressAnimatorListener()); - if (toState.hideBackButton) { - anim.addUpdateListener(animation -> { - final float alpha = (float) animation.getAnimatedValue(); - UiFactory.setBackButtonAlpha(mLauncher, 1 - Utilities.boundToRange(alpha, 0, 1), - false /* animate */); - }); - } builder.play(anim); diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 0e6853869..24382b7d0 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -42,7 +42,6 @@ import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.AnimatorSetBuilder; -import com.android.launcher3.uioverrides.UiFactory; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; @@ -224,8 +223,6 @@ public abstract class AbstractStateChangeTouchController cancelAtomicComponentsController(); } mProgressMultiplier = initCurrentAnimation(animComponents); - mCurrentAnimation.getAnimationPlayer().addUpdateListener(animation -> - setBackButtonAlphaWithProgress((float) animation.getAnimatedValue())); mCurrentAnimation.dispatchOnStart(); return true; } @@ -284,7 +281,6 @@ public abstract class AbstractStateChangeTouchController mAtomicComponentsController.setPlayFraction(fraction - mAtomicComponentsStartProgress); } maybeUpdateAtomicAnim(mFromState, mToState, fraction); - setBackButtonAlphaWithProgress(fraction); } /** @@ -477,14 +473,6 @@ public abstract class AbstractStateChangeTouchController } } - private void setBackButtonAlphaWithProgress(float progress) { - if (mFromState.hideBackButton ^ mToState.hideBackButton) { - progress = Utilities.boundToRange(progress, 0, 1); - final float alpha = mToState.hideBackButton ? 1 - progress : progress; - UiFactory.setBackButtonAlpha(mLauncher, alpha, false /* animate */); - } - } - private void logReachedState(int logAction) { // Transition complete. log the action mLauncher.getUserEventDispatcher().logStateChangeAction(logAction, |