Merge "Fade back button in and out tied with the overview/shelf (2/3)" into ub-launcher3-edmonton
This commit is contained in:
commit
f3cc505e86
Binary file not shown.
|
@ -93,7 +93,11 @@ public class UiFactory {
|
|||
TYPE_ALL & ~TYPE_HIDE_BACK_BUTTON) == null;
|
||||
}
|
||||
OverviewInteractionState.getInstance(launcher)
|
||||
.setBackButtonVisible(!shouldBackButtonBeHidden);
|
||||
.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) {
|
||||
|
|
|
@ -17,7 +17,6 @@ package com.android.quickstep;
|
|||
|
||||
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABLE_QUICK_SCRUB;
|
||||
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_DISABLE_SWIPE_UP;
|
||||
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_HIDE_BACK_BUTTON;
|
||||
import static com.android.systemui.shared.system.NavigationBarCompat.FLAG_SHOW_OVERVIEW_BUTTON;
|
||||
import static com.android.systemui.shared.system.SettingsCompat.SWIPE_UP_SETTING_NAME;
|
||||
|
||||
|
@ -46,7 +45,6 @@ import java.util.concurrent.ExecutionException;
|
|||
*
|
||||
* - FLAG_DISABLE_QUICK_SCRUB
|
||||
* - FLAG_DISABLE_SWIPE_UP
|
||||
* - FLAG_HIDE_BACK_BUTTON
|
||||
* - FLAG_SHOW_OVERVIEW_BUTTON
|
||||
*
|
||||
* @see com.android.systemui.shared.system.NavigationBarCompat.InteractionType and associated flags.
|
||||
|
@ -81,7 +79,7 @@ public class OverviewInteractionState {
|
|||
}
|
||||
|
||||
private static final int MSG_SET_PROXY = 200;
|
||||
private static final int MSG_SET_BACK_BUTTON_VISIBLE = 201;
|
||||
private static final int MSG_SET_BACK_BUTTON_ALPHA = 201;
|
||||
private static final int MSG_SET_SWIPE_UP_ENABLED = 202;
|
||||
|
||||
private final SwipeUpGestureEnabledSettingObserver mSwipeUpSettingObserver;
|
||||
|
@ -92,13 +90,16 @@ public class OverviewInteractionState {
|
|||
|
||||
// These are updated on the background thread
|
||||
private ISystemUiProxy mISystemUiProxy;
|
||||
private boolean mBackButtonVisible = true;
|
||||
private boolean mSwipeUpEnabled = true;
|
||||
|
||||
private Runnable mOnSwipeUpSettingChangedListener;
|
||||
|
||||
private OverviewInteractionState(Context context) {
|
||||
mContext = context;
|
||||
|
||||
// Data posted to the uihandler will be sent to the bghandler. Data is sent to uihandler
|
||||
// because of its high send frequency and data may be very different than the previous value
|
||||
// For example, send back alpha on uihandler to avoid flickering when setting its visibility
|
||||
mUiHandler = new Handler(this::handleUiMessage);
|
||||
mBgHandler = new Handler(UiThreadHelper.getBackgroundLooper(), this::handleBgMessage);
|
||||
|
||||
|
@ -116,9 +117,9 @@ public class OverviewInteractionState {
|
|||
return mSwipeUpEnabled;
|
||||
}
|
||||
|
||||
public void setBackButtonVisible(boolean visible) {
|
||||
mUiHandler.removeMessages(MSG_SET_BACK_BUTTON_VISIBLE);
|
||||
mUiHandler.obtainMessage(MSG_SET_BACK_BUTTON_VISIBLE, visible ? 1 : 0, 0)
|
||||
public void setBackButtonAlpha(float alpha, boolean animate) {
|
||||
mUiHandler.removeMessages(MSG_SET_BACK_BUTTON_ALPHA);
|
||||
mUiHandler.obtainMessage(MSG_SET_BACK_BUTTON_ALPHA, animate ? 1 : 0, 0, alpha)
|
||||
.sendToTarget();
|
||||
}
|
||||
|
||||
|
@ -127,7 +128,7 @@ public class OverviewInteractionState {
|
|||
}
|
||||
|
||||
private boolean handleUiMessage(Message msg) {
|
||||
mBgHandler.obtainMessage(msg.what, msg.arg1, msg.arg2).sendToTarget();
|
||||
mBgHandler.obtainMessage(msg.what, msg.arg1, msg.arg2, msg.obj).sendToTarget();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -136,9 +137,9 @@ public class OverviewInteractionState {
|
|||
case MSG_SET_PROXY:
|
||||
mISystemUiProxy = (ISystemUiProxy) msg.obj;
|
||||
break;
|
||||
case MSG_SET_BACK_BUTTON_VISIBLE:
|
||||
mBackButtonVisible = msg.arg1 != 0;
|
||||
break;
|
||||
case MSG_SET_BACK_BUTTON_ALPHA:
|
||||
applyBackButtonAlpha((float) msg.obj, msg.arg1 == 1);
|
||||
return true;
|
||||
case MSG_SET_SWIPE_UP_ENABLED:
|
||||
mSwipeUpEnabled = msg.arg1 != 0;
|
||||
resetHomeBounceSeenOnQuickstepEnabledFirstTime();
|
||||
|
@ -162,10 +163,8 @@ public class OverviewInteractionState {
|
|||
return;
|
||||
}
|
||||
|
||||
int flags;
|
||||
if (mSwipeUpEnabled) {
|
||||
flags = mBackButtonVisible ? 0 : FLAG_HIDE_BACK_BUTTON;
|
||||
} else {
|
||||
int flags = 0;
|
||||
if (!mSwipeUpEnabled) {
|
||||
flags = FLAG_DISABLE_SWIPE_UP | FLAG_DISABLE_QUICK_SCRUB | FLAG_SHOW_OVERVIEW_BUTTON;
|
||||
}
|
||||
try {
|
||||
|
@ -175,6 +174,18 @@ public class OverviewInteractionState {
|
|||
}
|
||||
}
|
||||
|
||||
@WorkerThread
|
||||
private void applyBackButtonAlpha(float alpha, boolean animate) {
|
||||
if (mISystemUiProxy == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
mISystemUiProxy.setBackButtonAlpha(alpha, animate);
|
||||
} catch (RemoteException e) {
|
||||
Log.w(TAG, "Unable to update overview back button alpha", e);
|
||||
}
|
||||
}
|
||||
|
||||
private class SwipeUpGestureEnabledSettingObserver extends ContentObserver {
|
||||
private Handler mHandler;
|
||||
private ContentResolver mResolver;
|
||||
|
|
|
@ -25,9 +25,11 @@ 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;
|
||||
|
||||
|
@ -182,6 +184,13 @@ 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);
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ 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;
|
||||
|
@ -221,6 +222,8 @@ public abstract class AbstractStateChangeTouchController
|
|||
cancelAtomicComponentsController();
|
||||
}
|
||||
mProgressMultiplier = initCurrentAnimation(animComponents);
|
||||
mCurrentAnimation.getAnimationPlayer().addUpdateListener(animation ->
|
||||
setBackButtonAlphaWithProgress((float) animation.getAnimatedValue()));
|
||||
mCurrentAnimation.dispatchOnStart();
|
||||
return true;
|
||||
}
|
||||
|
@ -279,6 +282,7 @@ public abstract class AbstractStateChangeTouchController
|
|||
mAtomicComponentsController.setPlayFraction(fraction - mAtomicComponentsStartProgress);
|
||||
}
|
||||
maybeUpdateAtomicAnim(mFromState, mToState, fraction);
|
||||
setBackButtonAlphaWithProgress(fraction);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -471,6 +475,14 @@ 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,
|
||||
|
|
|
@ -56,4 +56,6 @@ public class UiFactory {
|
|||
}
|
||||
|
||||
public static void prepareToShowOverview(Launcher launcher) { }
|
||||
|
||||
public static void setBackButtonAlpha(Launcher launcher, float alpha, boolean animate) { }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue