diff options
author | 2025-02-02 01:12:40 -0800 | |
---|---|---|
committer | 2025-02-04 10:11:34 -0800 | |
commit | 1ada394e007fb0c72530f8966245061eb109b3af (patch) | |
tree | 626410fb54b0790580a90f464bda215794caf35d | |
parent | d3b31eb20db812c05ef4a5a5fdb80c857f789a3e (diff) |
Simplifying some ActivityContext and StateManager methods
> Merging asContext and getContext meethod
> Simplifying some generic declaration in StateManager
Bug: 393703968
Flag: EXEMPT refactor
Test: Compilation
Change-Id: I679ac83e39b2a17f510698db15335aae8f735aad
24 files changed, 108 insertions, 154 deletions
diff --git a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java index c81fce1cb3..23f4f6789e 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java @@ -1165,9 +1165,9 @@ public class QuickstepLauncher extends Launcher implements RecentsViewContainer, .getHotseatTranslationXForNavBar(this, isBubblesOnLeft); } if (isBubbleBarEnabled() - && mDeviceProfile.shouldAdjustHotseatForBubbleBar(getContext(), hasBubbles())) { + && mDeviceProfile.shouldAdjustHotseatForBubbleBar(asContext(), hasBubbles())) { translationX += (int) mDeviceProfile - .getHotseatAdjustedTranslation(getContext(), itemInfo.cellX); + .getHotseatAdjustedTranslation(asContext(), itemInfo.cellX); } return translationX; } diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java index dae63af097..10513c08c6 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java @@ -48,8 +48,7 @@ public class AllAppsState extends LauncherState { } @Override - public <DEVICE_PROFILE_CONTEXT extends Context & ActivityContext> - int getTransitionDuration(DEVICE_PROFILE_CONTEXT context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { return isToState ? context.getDeviceProfile().allAppsOpenDuration : context.getDeviceProfile().allAppsCloseDuration; diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java index 932d241307..80fc5fa391 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewModalTaskState.java @@ -17,12 +17,12 @@ package com.android.launcher3.uioverrides.states; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_OVERVIEW; -import android.content.Context; import android.graphics.Rect; import com.android.launcher3.Flags; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; +import com.android.launcher3.views.ActivityContext; import com.android.quickstep.views.RecentsView; /** @@ -39,7 +39,7 @@ public class OverviewModalTaskState extends OverviewState { } @Override - public int getTransitionDuration(Context launcher, boolean isToState) { + public int getTransitionDuration(ActivityContext launcher, boolean isToState) { return 300; } diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java index 5c16a6227f..15216febd5 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java @@ -29,6 +29,7 @@ import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.Themes; +import com.android.launcher3.views.ActivityContext; import com.android.quickstep.util.BaseDepthController; import com.android.quickstep.util.LayoutUtils; import com.android.quickstep.views.RecentsView; @@ -62,10 +63,10 @@ public class OverviewState extends LauncherState { } @Override - public int getTransitionDuration(Context context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { if (isToState) { // In gesture modes, overview comes in all the way from the side, so give it more time. - return DisplayController.getNavigationMode(context).hasGestures + return DisplayController.getNavigationMode(context.asContext()).hasGestures ? OVERVIEW_SLIDE_IN_DURATION : OVERVIEW_POP_IN_DURATION; } else { diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/SplitScreenSelectState.java b/quickstep/src/com/android/launcher3/uioverrides/states/SplitScreenSelectState.java index 3ae221bbeb..2631fbf0b6 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/SplitScreenSelectState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/SplitScreenSelectState.java @@ -16,9 +16,8 @@ package com.android.launcher3.uioverrides.states; -import android.content.Context; - import com.android.launcher3.Launcher; +import com.android.launcher3.views.ActivityContext; import com.android.quickstep.util.SplitAnimationTimings; import com.android.quickstep.views.RecentsView; @@ -43,11 +42,10 @@ public class SplitScreenSelectState extends OverviewState { } @Override - public int getTransitionDuration(Context context, boolean isToState) { - boolean isTablet = ((Launcher) context).getDeviceProfile().isTablet; - if (isToState && isTablet) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { + if (isToState && context.getDeviceProfile().isTablet) { return SplitAnimationTimings.TABLET_ENTER_DURATION; - } else if (isToState && !isTablet) { + } else if (isToState) { return SplitAnimationTimings.PHONE_ENTER_DURATION; } else { return SplitAnimationTimings.ABORT_DURATION; diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java index cbfcda70f6..05d12c31af 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java @@ -186,7 +186,7 @@ public class NoButtonQuickSwitchTouchController implements TouchController, mIsTrackpadSwipe = isTrackpadFourFingerSwipe(ev); return mIsTrackpadSwipe; } - if (DesktopModeStatus.canEnterDesktopMode(mLauncher.getContext()) + if (DesktopModeStatus.canEnterDesktopMode(mLauncher) //TODO(b/345296916): replace with dev option once in teamfood && Flags.enableQuickswitchDesktopSplitBugfix() && mRecentsView.getNonDesktopTaskViewCount() < 1) { diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java index 44fdaec4e2..b4b80c5705 100644 --- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java +++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java @@ -128,8 +128,7 @@ public class FallbackRecentsStateController implements StateHandler<RecentsState state.getScrimColor(mRecentsViewContainer.asContext()), config.getInterpolator(ANIM_SCRIM_FADE, LINEAR)); if (isSplitSelectionState(state)) { - int duration = - state.getTransitionDuration(mRecentsViewContainer.asContext(), true); + int duration = state.getTransitionDuration(mRecentsViewContainer, true); // TODO (b/246851887): Pass in setter as a NO_ANIM PendingAnimation instead PendingAnimation pa = new PendingAnimation(duration); mRecentsView.createSplitSelectInitAnimation(pa, duration); diff --git a/quickstep/src/com/android/quickstep/fallback/RecentsState.java b/quickstep/src/com/android/quickstep/fallback/RecentsState.java index c2e7536c97..f27b60cb0a 100644 --- a/quickstep/src/com/android/quickstep/fallback/RecentsState.java +++ b/quickstep/src/com/android/quickstep/fallback/RecentsState.java @@ -27,6 +27,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.statemanager.BaseState; import com.android.launcher3.util.Themes; +import com.android.launcher3.views.ActivityContext; import com.android.quickstep.views.RecentsViewContainer; /** @@ -92,7 +93,7 @@ public class RecentsState implements BaseState<RecentsState> { } @Override - public int getTransitionDuration(Context context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { return 250; } diff --git a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt index 3082dc6898..07288d8f47 100644 --- a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt +++ b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt @@ -390,10 +390,6 @@ class RecentsWindowManager(context: Context, wallpaperColorHints: Int) : return systemUiController } - override fun getContext(): Context { - return this - } - override fun getScrimView(): ScrimView? { return scrimView } diff --git a/quickstep/src/com/android/quickstep/util/AnimUtils.java b/quickstep/src/com/android/quickstep/util/AnimUtils.java index 31aca03ce6..fda0c29b68 100644 --- a/quickstep/src/com/android/quickstep/util/AnimUtils.java +++ b/quickstep/src/com/android/quickstep/util/AnimUtils.java @@ -78,8 +78,7 @@ public class AnimUtils { @NonNull SplitAnimationController animationController) { StateAnimationConfig config = new StateAnimationConfig(); BaseState startState = stateManager.getState(); - long duration = startState.getTransitionDuration(container.asContext(), - false /*isToState*/); + long duration = startState.getTransitionDuration(container, false /*isToState*/); if (duration == 0) { // Case where we're in contextual on workspace (NORMAL), which by default has 0 // transition duration diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java index 11e7d2cc41..e61d402698 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java +++ b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java @@ -63,14 +63,6 @@ public interface RecentsViewContainer extends ActivityContext { <T extends View> T getOverviewPanel(); /** - * Dispatches a generic motion event to the view hierarchy. - * Returns the current RecentsViewContainer as context - */ - default Context asContext() { - return (Context) this; - } - - /** * @see Window.Callback#dispatchGenericMotionEvent(MotionEvent) */ boolean dispatchGenericMotionEvent(MotionEvent ev); diff --git a/src/com/android/launcher3/LauncherRootView.java b/src/com/android/launcher3/LauncherRootView.java index a5b95c75f1..b8a0abd9e7 100644 --- a/src/com/android/launcher3/LauncherRootView.java +++ b/src/com/android/launcher3/LauncherRootView.java @@ -12,6 +12,7 @@ import android.view.WindowInsets; import com.android.launcher3.graphics.SysUiScrim; import com.android.launcher3.statemanager.StatefulContainer; import com.android.launcher3.util.window.WindowManagerProxy; +import com.android.launcher3.views.ActivityContext; import java.util.Collections; import java.util.List; @@ -36,7 +37,7 @@ public class LauncherRootView extends InsettableFrameLayout { public LauncherRootView(Context context, AttributeSet attrs) { super(context, attrs); - mStatefulContainer = StatefulContainer.fromContext(context); + mStatefulContainer = ActivityContext.lookupContext(context); mSysUiScrim = new SysUiScrim(this); } @@ -54,7 +55,7 @@ public class LauncherRootView extends InsettableFrameLayout { @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { mStatefulContainer.handleConfigurationChanged( - mStatefulContainer.getContext().getResources().getConfiguration()); + mStatefulContainer.asContext().getResources().getConfiguration()); return updateInsets(insets); } diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index 79e9bd2007..8c6555e9a9 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -118,7 +118,7 @@ public abstract class LauncherState implements BaseState<LauncherState> { LAUNCHER_STATE_HOME, FLAG_DISABLE_RESTORE | FLAG_WORKSPACE_ICONS_CAN_BE_DRAGGED | FLAG_HAS_SYS_UI_SCRIM) { @Override - public int getTransitionDuration(Context context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { // Arbitrary duration, when going to NORMAL we use the state we're coming from instead. return 0; } diff --git a/src/com/android/launcher3/graphics/SysUiScrim.java b/src/com/android/launcher3/graphics/SysUiScrim.java index d59fc1934c..6f1d98fea9 100644 --- a/src/com/android/launcher3/graphics/SysUiScrim.java +++ b/src/com/android/launcher3/graphics/SysUiScrim.java @@ -40,6 +40,7 @@ import com.android.launcher3.testing.shared.ResourceUtils; import com.android.launcher3.util.ScreenOnTracker; import com.android.launcher3.util.ScreenOnTracker.ScreenOnListener; import com.android.launcher3.util.Themes; +import com.android.launcher3.views.ActivityContext; /** * View scrim which draws behind hotseat and workspace @@ -94,8 +95,8 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { public SysUiScrim(View view) { mRoot = view; - mContainer = StatefulContainer.fromContext(view.getContext()); - DisplayMetrics dm = mContainer.getContext().getResources().getDisplayMetrics(); + mContainer = ActivityContext.lookupContext(view.getContext()); + DisplayMetrics dm = mContainer.asContext().getResources().getDisplayMetrics(); mTopMaskHeight = ResourceUtils.pxFromDp(TOP_MASK_HEIGHT_DP, dm); mBottomMaskHeight = ResourceUtils.pxFromDp(BOTTOM_MASK_HEIGHT_DP, dm); @@ -173,12 +174,12 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { @Override public void onViewAttachedToWindow(View view) { - ScreenOnTracker.INSTANCE.get(mContainer.getContext()).addListener(mScreenOnListener); + ScreenOnTracker.INSTANCE.get(mContainer.asContext()).addListener(mScreenOnListener); } @Override public void onViewDetachedFromWindow(View view) { - ScreenOnTracker.INSTANCE.get(mContainer.getContext()).removeListener(mScreenOnListener); + ScreenOnTracker.INSTANCE.get(mContainer.asContext()).removeListener(mScreenOnListener); } /** @@ -213,7 +214,7 @@ public class SysUiScrim implements View.OnAttachStateChangeListener { } private Bitmap createDitheredAlphaMask(int height, @ColorInt int[] colors, float[] positions) { - DisplayMetrics dm = mContainer.getContext().getResources().getDisplayMetrics(); + DisplayMetrics dm = mContainer.asContext().getResources().getDisplayMetrics(); int width = ResourceUtils.pxFromDp(ALPHA_MASK_BITMAP_WIDTH_DP, dm); Bitmap dst = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8); Canvas c = new Canvas(dst); diff --git a/src/com/android/launcher3/statemanager/BaseState.java b/src/com/android/launcher3/statemanager/BaseState.java index f6b610c9bf..b7dd2bf01d 100644 --- a/src/com/android/launcher3/statemanager/BaseState.java +++ b/src/com/android/launcher3/statemanager/BaseState.java @@ -15,15 +15,13 @@ */ package com.android.launcher3.statemanager; -import android.content.Context; - import com.android.launcher3.DeviceProfile; import com.android.launcher3.views.ActivityContext; /** * Interface representing a state of a StatefulContainer */ -public interface BaseState<T extends BaseState> { +public interface BaseState<T> { // Flag to indicate that Launcher is non-interactive in this state int FLAG_NON_INTERACTIVE = 1 << 0; @@ -37,8 +35,7 @@ public interface BaseState<T extends BaseState> { /** * @return How long the animation to this state should take (or from this state to NORMAL). */ - <DEVICE_PROFILE_CONTEXT extends Context & ActivityContext> - int getTransitionDuration(DEVICE_PROFILE_CONTEXT context, boolean isToState); + int getTransitionDuration(ActivityContext context, boolean isToState); /** * Returns the state to go back to from this state diff --git a/src/com/android/launcher3/statemanager/StateManager.java b/src/com/android/launcher3/statemanager/StateManager.java index 763f3bab38..a125331865 100644 --- a/src/com/android/launcher3/statemanager/StateManager.java +++ b/src/com/android/launcher3/statemanager/StateManager.java @@ -27,7 +27,6 @@ import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; -import android.content.Context; import android.os.Handler; import android.os.Looper; import android.util.Log; @@ -50,50 +49,49 @@ import java.util.stream.Collectors; /** * Class to manage transitions between different states for a StatefulActivity based on different * states - * @param STATE_TYPE Basestate used by the state manager - * @param STATEFUL_CONTAINER container object used to manage state + * @param <S> Basestate used by the state manager + * @param <T> container object used to manage state */ -public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, - STATEFUL_CONTAINER extends Context & StatefulContainer<STATE_TYPE>> { +public class StateManager<S extends BaseState<S>, T extends StatefulContainer<S>> { public static final String TAG = "StateManager"; // b/279059025, b/325463989 private static final boolean DEBUG = true; - private final AnimationState mConfig = new AnimationState(); + private final AnimationState<S> mConfig = new AnimationState<>(); private final Handler mUiHandler; - private final STATEFUL_CONTAINER mStatefulContainer; - private final ArrayList<StateListener<STATE_TYPE>> mListeners = new ArrayList<>(); - private final STATE_TYPE mBaseState; + private final T mContainer; + private final ArrayList<StateListener<S>> mListeners = new ArrayList<>(); + private final S mBaseState; // Animators which are run on properties also controlled by state animations. - private final AtomicAnimationFactory mAtomicAnimationFactory; + private final AtomicAnimationFactory<S> mAtomicAnimationFactory; - private StateHandler<STATE_TYPE>[] mStateHandlers; - private STATE_TYPE mState; + private StateHandler<S>[] mStateHandlers; + private S mState; - private STATE_TYPE mLastStableState; - private STATE_TYPE mCurrentStableState; + private S mLastStableState; + private S mCurrentStableState; - private STATE_TYPE mRestState; + private S mRestState; - public StateManager(STATEFUL_CONTAINER container, STATE_TYPE baseState) { + public StateManager(T container, S baseState) { mUiHandler = new Handler(Looper.getMainLooper()); - mStatefulContainer = container; + mContainer = container; mBaseState = baseState; mState = mLastStableState = mCurrentStableState = baseState; mAtomicAnimationFactory = container.createAtomicAnimationFactory(); } - public STATE_TYPE getState() { + public S getState() { return mState; } - public STATE_TYPE getTargetState() { - return (STATE_TYPE) mConfig.targetState; + public S getTargetState() { + return mConfig.targetState; } - public STATE_TYPE getCurrentStableState() { + public S getCurrentStableState() { return mCurrentStableState; } @@ -115,20 +113,20 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, writer.println(prefix + "\tisInTransition:" + isInTransition()); } - public StateHandler<STATE_TYPE>[] getStateHandlers() { + public StateHandler<S>[] getStateHandlers() { if (mStateHandlers == null) { - ArrayList<StateHandler<STATE_TYPE>> handlers = new ArrayList<>(); - mStatefulContainer.collectStateHandlers(handlers); + ArrayList<StateHandler<S>> handlers = new ArrayList<>(); + mContainer.collectStateHandlers(handlers); mStateHandlers = handlers.toArray(new StateHandler[handlers.size()]); } return mStateHandlers; } - public void addStateListener(StateListener listener) { + public void addStateListener(StateListener<S> listener) { mListeners.add(listener); } - public void removeStateListener(StateListener listener) { + public void removeStateListener(StateListener<S> listener) { mListeners.remove(listener); } @@ -136,14 +134,14 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, * Returns true if the state changes should be animated. */ public boolean shouldAnimateStateChange() { - return mStatefulContainer.shouldAnimateStateChange(); + return mContainer.shouldAnimateStateChange(); } /** * @return {@code true} if the state matches the current state and there is no active * transition to different state. */ - public boolean isInStableState(STATE_TYPE state) { + public boolean isInStableState(S state) { return mState == state && mCurrentStableState == state && (mConfig.targetState == null || mConfig.targetState == state); } @@ -156,23 +154,23 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } /** - * @see #goToState(STATE_TYPE, boolean, AnimatorListener) + * @see #goToState(S, boolean, AnimatorListener) */ - public void goToState(STATE_TYPE state) { + public void goToState(S state) { goToState(state, shouldAnimateStateChange()); } /** - * @see #goToState(STATE_TYPE, boolean, AnimatorListener) + * @see #goToState(S, boolean, AnimatorListener) */ - public void goToState(STATE_TYPE state, AnimatorListener listener) { + public void goToState(S state, AnimatorListener listener) { goToState(state, shouldAnimateStateChange(), listener); } /** - * @see #goToState(STATE_TYPE, boolean, AnimatorListener) + * @see #goToState(S, boolean, AnimatorListener) */ - public void goToState(STATE_TYPE state, boolean animated) { + public void goToState(S state, boolean animated) { goToState(state, animated, 0, null); } @@ -183,21 +181,21 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, * true otherwise * @param listener any action to perform at the end of the transition, or null. */ - public void goToState(STATE_TYPE state, boolean animated, AnimatorListener listener) { + public void goToState(S state, boolean animated, AnimatorListener listener) { goToState(state, animated, 0, listener); } /** * Changes the Launcher state to the provided state after the given delay. */ - public void goToState(STATE_TYPE state, long delay, AnimatorListener listener) { + public void goToState(S state, long delay, AnimatorListener listener) { goToState(state, true, delay, listener); } /** * Changes the Launcher state to the provided state after the given delay. */ - public void goToState(STATE_TYPE state, long delay) { + public void goToState(S state, long delay) { goToState(state, true, delay, null); } @@ -219,7 +217,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, cancelAnimation(); } if (mConfig.currentAnimation == null) { - for (StateHandler handler : getStateHandlers()) { + for (StateHandler<S> handler : getStateHandlers()) { handler.setState(mState); } if (wasInAnimation) { @@ -230,21 +228,21 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, /** Handles backProgress in predictive back gesture by passing it to state handlers. */ public void onBackProgressed( - STATE_TYPE toState, @FloatRange(from = 0.0, to = 1.0) float backProgress) { - for (StateHandler handler : getStateHandlers()) { + S toState, @FloatRange(from = 0.0, to = 1.0) float backProgress) { + for (StateHandler<S> handler : getStateHandlers()) { handler.onBackProgressed(toState, backProgress); } } /** Handles back cancelled event in predictive back gesture by passing it to state handlers. */ - public void onBackCancelled(STATE_TYPE toState) { - for (StateHandler handler : getStateHandlers()) { + public void onBackCancelled(S toState) { + for (StateHandler<S> handler : getStateHandlers()) { handler.onBackCancelled(toState); } } private void goToState( - STATE_TYPE state, boolean animated, long delay, AnimatorListener listener) { + S state, boolean animated, long delay, AnimatorListener listener) { if (enableStateManagerProtoLog()) { StateManagerProtoLogProxy.logGoToState( mState, state, getTrimmedStackTrace("StateManager.goToState")); @@ -254,7 +252,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } animated &= areAnimatorsEnabled(); - if (mStatefulContainer.isInState(state)) { + if (getState() == state) { if (mConfig.currentAnimation == null) { // Run any queued runnable if (listener != null) { @@ -273,13 +271,13 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } // Cancel the current animation. This will reset mState to mCurrentStableState, so store it. - STATE_TYPE fromState = mState; + S fromState = mState; cancelAnimation(); if (!animated) { mAtomicAnimationFactory.cancelAllStateElementAnimation(); onStateTransitionStart(state); - for (StateHandler handler : getStateHandlers()) { + for (StateHandler<S> handler : getStateHandlers()) { handler.setState(state); } @@ -306,13 +304,13 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } } - private void goToStateAnimated(STATE_TYPE state, STATE_TYPE fromState, + private void goToStateAnimated(S state, S fromState, AnimatorListener listener) { // Since state mBaseState can be reached from multiple states, just assume that the // transition plays in reverse and use the same duration as previous state. mConfig.duration = state == mBaseState - ? fromState.getTransitionDuration(mStatefulContainer, false /* isToState */) - : state.getTransitionDuration(mStatefulContainer, true /* isToState */); + ? fromState.getTransitionDuration(mContainer, false /* isToState */) + : state.getTransitionDuration(mContainer, true /* isToState */); prepareForAtomicAnimation(fromState, state, mConfig); AnimatorSet animation = createAnimationToNewWorkspaceInternal(state).buildAnim(); if (listener != null) { @@ -326,7 +324,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, * - Setting interpolators for various animations included in the state transition. * - Setting some start values (e.g. scale) for views that are hidden but about to be shown. */ - public void prepareForAtomicAnimation(STATE_TYPE fromState, STATE_TYPE toState, + public void prepareForAtomicAnimation(S fromState, S toState, StateAnimationConfig config) { mAtomicAnimationFactory.prepareForAtomicAnimation(fromState, toState, config); } @@ -335,7 +333,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, * Creates an animation representing atomic transitions between the provided states */ public AnimatorSet createAtomicAnimation( - STATE_TYPE fromState, STATE_TYPE toState, StateAnimationConfig config) { + S fromState, S toState, StateAnimationConfig config) { if (enableStateManagerProtoLog()) { StateManagerProtoLogProxy.logCreateAtomicAnimation( mState, toState, getTrimmedStackTrace("StateManager.createAtomicAnimation")); @@ -348,7 +346,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, PendingAnimation builder = new PendingAnimation(config.duration); prepareForAtomicAnimation(fromState, toState, config); - for (StateHandler handler : mStatefulContainer.getStateManager().getStateHandlers()) { + for (StateHandler<S> handler : getStateHandlers()) { handler.setStateWithAnimation(toState, config, builder); } return builder.buildAnim(); @@ -362,19 +360,19 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, * accuracy. */ public AnimatorPlaybackController createAnimationToNewWorkspace( - STATE_TYPE state, long duration) { + S state, long duration) { return createAnimationToNewWorkspace(state, duration, 0 /* animFlags */); } public AnimatorPlaybackController createAnimationToNewWorkspace( - STATE_TYPE state, long duration, @AnimationFlags int animFlags) { + S state, long duration, @AnimationFlags int animFlags) { StateAnimationConfig config = new StateAnimationConfig(); config.duration = duration; config.animFlags = animFlags; return createAnimationToNewWorkspace(state, config); } - public AnimatorPlaybackController createAnimationToNewWorkspace(STATE_TYPE state, + public AnimatorPlaybackController createAnimationToNewWorkspace(S state, StateAnimationConfig config) { config.animProps |= StateAnimationConfig.USER_CONTROLLED; cancelAnimation(); @@ -384,10 +382,10 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, return mConfig.playbackController; } - private PendingAnimation createAnimationToNewWorkspaceInternal(final STATE_TYPE state) { + private PendingAnimation createAnimationToNewWorkspaceInternal(final S state) { PendingAnimation builder = new PendingAnimation(mConfig.duration); if (!mConfig.hasAnimationFlag(SKIP_ALL_ANIMATIONS)) { - for (StateHandler handler : getStateHandlers()) { + for (StateHandler<S> handler : getStateHandlers()) { handler.setStateWithAnimation(state, mConfig, builder); } } @@ -396,7 +394,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, return builder; } - private AnimatorListener createStateAnimationListener(STATE_TYPE state) { + private AnimatorListener createStateAnimationListener(S state) { return new AnimationSuccessListener() { @Override @@ -412,9 +410,9 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, }; } - private void onStateTransitionStart(STATE_TYPE state) { + private void onStateTransitionStart(S state) { mState = state; - mStatefulContainer.onStateSetStart(mState); + mContainer.onStateSetStart(mState); if (enableStateManagerProtoLog()) { StateManagerProtoLogProxy.logOnStateTransitionStart(state); @@ -426,14 +424,14 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } } - private void onStateTransitionEnd(STATE_TYPE state) { + private void onStateTransitionEnd(S state) { // Only change the stable states after the transitions have finished if (state != mCurrentStableState) { mLastStableState = state.getHistoryForState(mCurrentStableState); mCurrentStableState = state; } - mStatefulContainer.onStateSetEnd(state); + mContainer.onStateSetEnd(state); if (state == mBaseState) { setRestState(null); } @@ -448,7 +446,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } } - public STATE_TYPE getLastState() { + public S getLastState() { return mLastStableState; } @@ -468,11 +466,11 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, } } - public STATE_TYPE getRestState() { + public S getRestState() { return mRestState == null ? mBaseState : mRestState; } - public void setRestState(STATE_TYPE restState) { + public void setRestState(S restState) { mRestState = restState; } @@ -518,7 +516,7 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, * @param anim The custom animation to the given state. * @param toState The state we are animating towards. */ - public void setCurrentAnimation(AnimatorSet anim, STATE_TYPE toState) { + public void setCurrentAnimation(AnimatorSet anim, S toState) { cancelAnimation(); setCurrentAnimation(anim); anim.addListener(createStateAnimationListener(toState)); @@ -691,10 +689,10 @@ public class StateManager<STATE_TYPE extends BaseState<STATE_TYPE>, /** Handles backProgress in predictive back gesture for target state. */ default void onBackProgressed( - STATE_TYPE toState, @FloatRange(from = 0.0, to = 1.0) float backProgress) {}; + STATE_TYPE toState, @FloatRange(from = 0.0, to = 1.0) float backProgress) {} /** Handles back cancelled event in predictive back gesture for target state. */ - default void onBackCancelled(STATE_TYPE toState) {}; + default void onBackCancelled(STATE_TYPE toState) {} } public interface StateListener<STATE_TYPE> { diff --git a/src/com/android/launcher3/statemanager/StatefulActivity.java b/src/com/android/launcher3/statemanager/StatefulActivity.java index 15190f6a18..445701d19d 100644 --- a/src/com/android/launcher3/statemanager/StatefulActivity.java +++ b/src/com/android/launcher3/statemanager/StatefulActivity.java @@ -20,7 +20,6 @@ import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE; import static com.android.launcher3.LauncherState.FLAG_NON_INTERACTIVE; -import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; @@ -199,11 +198,6 @@ public abstract class StatefulActivity<STATE_TYPE extends BaseState<STATE_TYPE>> mOldRotation = rotation; } - @Override - public Context getContext() { - return this; - } - /** * Logic for when device configuration changes (rotation, screen size change, multi-window, * etc.) diff --git a/src/com/android/launcher3/statemanager/StatefulContainer.java b/src/com/android/launcher3/statemanager/StatefulContainer.java index b10af0a415..83a2fdcac5 100644 --- a/src/com/android/launcher3/statemanager/StatefulContainer.java +++ b/src/com/android/launcher3/statemanager/StatefulContainer.java @@ -20,8 +20,6 @@ package com.android.launcher3.statemanager; import static com.android.launcher3.LauncherState.FLAG_CLOSE_POPUPS; import static com.android.launcher3.statemanager.BaseState.FLAG_NON_INTERACTIVE; -import android.content.Context; -import android.content.ContextWrapper; import android.content.res.Configuration; import androidx.annotation.CallSuper; @@ -40,23 +38,6 @@ public interface StatefulContainer<STATE_TYPE extends BaseState<STATE_TYPE>> ext ActivityContext { /** - * Returns an instance of an implementation of StatefulContainer - * - * @param context will find instance of StatefulContainer from given context. - */ - static <T extends StatefulContainer> T fromContext(Context context) { - if (context instanceof StatefulContainer) { - return (T) context; - } else if (context instanceof ContextWrapper) { - return fromContext(((ContextWrapper) context).getBaseContext()); - } else { - throw new IllegalArgumentException("Cannot find StatefulContainer in parent tree"); - } - } - - Context getContext(); - - /** * Creates a factory for atomic state animations */ default StateManager.AtomicAnimationFactory<STATE_TYPE> createAtomicAnimationFactory() { diff --git a/src/com/android/launcher3/states/EditModeState.kt b/src/com/android/launcher3/states/EditModeState.kt index 6ff47aef43..268a37301d 100644 --- a/src/com/android/launcher3/states/EditModeState.kt +++ b/src/com/android/launcher3/states/EditModeState.kt @@ -36,11 +36,7 @@ class EditModeState(id: Int) : LauncherState(id, StatsLogManager.LAUNCHER_STATE_ FLAG_WORKSPACE_HAS_BACKGROUNDS) } - override fun <T> getTransitionDuration(context: T, isToState: Boolean): Int where - T : Context?, - T : ActivityContext? { - return 150 - } + override fun getTransitionDuration(context: ActivityContext, isToState: Boolean) = 150 override fun <T> getDepthUnchecked(context: T): Float where T : Context?, T : ActivityContext? { if (enableScalingRevealHomeAnimation()) { diff --git a/src/com/android/launcher3/states/HintState.java b/src/com/android/launcher3/states/HintState.java index bf2fb30841..ed22d39983 100644 --- a/src/com/android/launcher3/states/HintState.java +++ b/src/com/android/launcher3/states/HintState.java @@ -26,6 +26,7 @@ import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.util.Themes; +import com.android.launcher3.views.ActivityContext; /** * Scale down workspace/hotseat to hint at going to either overview (on pause) or first home screen. @@ -46,7 +47,7 @@ public class HintState extends LauncherState { } @Override - public int getTransitionDuration(Context context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { return 80; } diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java index 2e57ed86ab..15e6c6190c 100644 --- a/src/com/android/launcher3/states/SpringLoadedState.java +++ b/src/com/android/launcher3/states/SpringLoadedState.java @@ -24,6 +24,7 @@ import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.Workspace; +import com.android.launcher3.views.ActivityContext; /** * Definition for spring loaded state used during drag and drop. @@ -41,7 +42,7 @@ public class SpringLoadedState extends LauncherState { } @Override - public int getTransitionDuration(Context context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { return 150; } diff --git a/src/com/android/launcher3/views/ActivityContext.java b/src/com/android/launcher3/views/ActivityContext.java index c9acca7014..81968fce58 100644 --- a/src/com/android/launcher3/views/ActivityContext.java +++ b/src/com/android/launcher3/views/ActivityContext.java @@ -528,6 +528,11 @@ public interface ActivityContext { return false; } + /** Returns the current ActivityContext as context */ + default Context asContext() { + return (Context) this; + } + /** * Returns the ActivityContext associated with the given Context, or throws an exception if * the Context is not associated with any ActivityContext. diff --git a/src_no_quickstep/com/android/launcher3/uioverrides/states/AllAppsState.java b/src_no_quickstep/com/android/launcher3/uioverrides/states/AllAppsState.java index 9865516c4c..03a553534f 100644 --- a/src_no_quickstep/com/android/launcher3/uioverrides/states/AllAppsState.java +++ b/src_no_quickstep/com/android/launcher3/uioverrides/states/AllAppsState.java @@ -18,8 +18,6 @@ package com.android.launcher3.uioverrides.states; import static com.android.app.animation.Interpolators.DECELERATE; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_ALLAPPS; -import android.content.Context; - import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.R; @@ -31,8 +29,6 @@ import com.android.launcher3.views.ActivityContext; */ public class AllAppsState extends LauncherState { - private static final float PARALLAX_COEFFICIENT = .125f; - private static final int STATE_FLAGS = FLAG_WORKSPACE_INACCESSIBLE; public AllAppsState(int id) { @@ -40,8 +36,7 @@ public class AllAppsState extends LauncherState { } @Override - public <DEVICE_PROFILE_CONTEXT extends Context & ActivityContext> - int getTransitionDuration(DEVICE_PROFILE_CONTEXT context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { return isToState ? context.getDeviceProfile().allAppsOpenDuration : context.getDeviceProfile().allAppsCloseDuration; diff --git a/src_no_quickstep/com/android/launcher3/uioverrides/states/OverviewState.java b/src_no_quickstep/com/android/launcher3/uioverrides/states/OverviewState.java index 7a228c42b8..532a338237 100644 --- a/src_no_quickstep/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/src_no_quickstep/com/android/launcher3/uioverrides/states/OverviewState.java @@ -17,12 +17,11 @@ package com.android.launcher3.uioverrides.states; import static com.android.launcher3.logging.StatsLogManager.LAUNCHER_STATE_OVERVIEW; -import android.content.Context; - import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; import com.android.launcher3.R; import com.android.launcher3.util.Themes; +import com.android.launcher3.views.ActivityContext; /** * Definition for overview state @@ -34,7 +33,7 @@ public class OverviewState extends LauncherState { } @Override - public int getTransitionDuration(Context context, boolean isToState) { + public int getTransitionDuration(ActivityContext context, boolean isToState) { return 250; } |