8/ Rename ActivityControlHelper

- ActivityControlHelper -> BaseActivityInterface
  LauncherActivityControlHelper -> LauncherActivityInterface
  FallbackActivityControlHelper -> FallbackActivityInterface
  QuickCaptureTouchConsumer -> QuickCaptureInputConsumer
- Move gestures to use the activity interface from the gesture state

Bug: 141886704
Change-Id: I6f12daeb03d564143404767dfe4576e3e5da2a1d
This commit is contained in:
Winson Chung 2019-10-04 11:30:10 -07:00
parent d3da92ac66
commit d7269bf8b6
25 changed files with 238 additions and 189 deletions

View File

@ -46,12 +46,12 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
RemoteAnimationProvider {
private static final String TAG = "AppToOverviewAnimationProvider";
private final ActivityControlHelper<T> mHelper;
private final BaseActivityInterface<T> mHelper;
private final int mTargetTaskId;
private IconRecentsView mRecentsView;
private AppToOverviewAnimationListener mAnimationReadyListener;
AppToOverviewAnimationProvider(ActivityControlHelper<T> helper, int targetTaskId) {
AppToOverviewAnimationProvider(BaseActivityInterface<T> helper, int targetTaskId) {
mHelper = helper;
mTargetTaskId = targetTaskId;
}
@ -75,7 +75,7 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
if (mAnimationReadyListener != null) {
mAnimationReadyListener.onActivityReady(activity);
}
ActivityControlHelper.AnimationFactory factory =
BaseActivityInterface.AnimationFactory factory =
mHelper.prepareRecentsUI(activity, wasVisible,
false /* animate activity */, (controller) -> {
controller.dispatchOnStart();
@ -85,7 +85,7 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
anim.start();
});
factory.onRemoteAnimationReceived(null);
factory.createActivityController(getRecentsLaunchDuration());
factory.createActivityInterface(getRecentsLaunchDuration());
mRecentsView = activity.getOverviewPanel();
return false;
}

View File

@ -33,14 +33,14 @@ import java.util.function.BiPredicate;
import java.util.function.Consumer;
/**
* {@link ActivityControlHelper} for recents when the default launcher is different than the
* {@link BaseActivityInterface} for recents when the default launcher is different than the
* currently running one and apps should interact with the {@link RecentsActivity} as opposed
* to the in-launcher one.
*/
public final class FallbackActivityControllerHelper extends
GoActivityControlHelper<RecentsActivity> {
public final class FallbackActivityInterface extends
GoActivityInterface<RecentsActivity> {
public FallbackActivityControllerHelper() { }
public FallbackActivityInterface() { }
@Override
public AnimationFactory prepareRecentsUI(RecentsActivity activity, boolean activityVisible,
@ -63,12 +63,12 @@ public final class FallbackActivityControllerHelper extends
if (!isAnimatingToRecents) {
rv.setAlpha(1);
}
createActivityController(getSwipeUpDestinationAndLength(
createActivityInterface(getSwipeUpDestinationAndLength(
activity.getDeviceProfile(), activity, new Rect()));
}
@Override
public void createActivityController(long transitionLength) {
public void createActivityInterface(long transitionLength) {
if (!isAnimatingToRecents) {
return;
}

View File

@ -13,8 +13,8 @@ import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
*
* @param <T> activity that contains the overview
*/
public abstract class GoActivityControlHelper<T extends BaseDraggingActivity> implements
ActivityControlHelper<T> {
public abstract class GoActivityInterface<T extends BaseDraggingActivity> implements
BaseActivityInterface<T> {
@Override
public void onTransitionCancelled(T activity, boolean activityVisible) {

View File

@ -30,10 +30,10 @@ import java.util.function.BiPredicate;
import java.util.function.Consumer;
/**
* {@link ActivityControlHelper} for the in-launcher recents.
* {@link BaseActivityInterface} for the in-launcher recents.
* TODO: Implement the app to overview animation functionality
*/
public final class LauncherActivityControllerHelper extends GoActivityControlHelper<Launcher> {
public final class LauncherActivityInterface extends GoActivityInterface<Launcher> {
@Override
public AnimationFactory prepareRecentsUI(Launcher activity,
@ -43,8 +43,7 @@ public final class LauncherActivityControllerHelper extends GoActivityControlHel
activity.<IconRecentsView>getOverviewPanel().setUsingRemoteAnimation(true);
//TODO: Implement this based off where the recents view needs to be for app => recents anim.
return new AnimationFactory() {
@Override
public void createActivityController(long transitionLength) {
public void createActivityInterface(long transitionLength) {
callback.accept(activity.getStateManager().createAnimationToNewWorkspace(
fromState, OVERVIEW, transitionLength));
}

View File

@ -101,7 +101,7 @@ public class OverviewCommandHelper {
private class RecentsActivityCommand<T extends BaseDraggingActivity> implements Runnable {
protected final ActivityControlHelper<T> mHelper;
protected final BaseActivityInterface<T> mHelper;
private final long mCreateTime;
private final long mToggleClickedTime = SystemClock.uptimeMillis();
@ -109,7 +109,7 @@ public class OverviewCommandHelper {
private ActivityInitListener<T> mListener;
public RecentsActivityCommand() {
mHelper = mOverviewComponentObserver.getActivityControlHelper();
mHelper = mOverviewComponentObserver.getActivityInterface();
mCreateTime = SystemClock.elapsedRealtime();
// Preload the plan

View File

@ -48,14 +48,14 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
private static final long RECENTS_LAUNCH_DURATION = 250;
private static final String TAG = "AppToOverviewAnimationProvider";
private final ActivityControlHelper<T> mHelper;
private final BaseActivityInterface<T> mHelper;
// The id of the currently running task that is transitioning to overview.
private final int mTargetTaskId;
private T mActivity;
private RecentsView mRecentsView;
AppToOverviewAnimationProvider(ActivityControlHelper<T> helper, int targetTaskId) {
AppToOverviewAnimationProvider(BaseActivityInterface<T> helper, int targetTaskId) {
mHelper = helper;
mTargetTaskId = targetTaskId;
}
@ -69,7 +69,7 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
boolean onActivityReady(T activity, Boolean wasVisible) {
activity.<RecentsView>getOverviewPanel().showCurrentTask(mTargetTaskId);
AbstractFloatingView.closeAllOpenViews(activity, wasVisible);
ActivityControlHelper.AnimationFactory factory =
BaseActivityInterface.AnimationFactory factory =
mHelper.prepareRecentsUI(activity, wasVisible,
false /* animate activity */, (controller) -> {
controller.dispatchOnStart();
@ -79,7 +79,7 @@ final class AppToOverviewAnimationProvider<T extends BaseDraggingActivity> imple
anim.start();
});
factory.onRemoteAnimationReceived(null);
factory.createActivityController(RECENTS_LAUNCH_DURATION);
factory.createActivityInterface(RECENTS_LAUNCH_DURATION);
factory.setRecentsAttachedToAppWindow(true, false);
mActivity = activity;
mRecentsView = mActivity.getOverviewPanel();

View File

@ -56,7 +56,7 @@ import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.graphics.RotationMode;
import com.android.launcher3.views.FloatingIconView;
import com.android.quickstep.ActivityControlHelper.HomeAnimationFactory;
import com.android.quickstep.BaseActivityInterface.HomeAnimationFactory;
import com.android.quickstep.SysUINavigationMode.Mode;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.ActivityInitListener;
@ -97,7 +97,7 @@ public abstract class BaseSwipeUpHandler<T extends BaseDraggingActivity, Q exten
protected final Context mContext;
protected final OverviewComponentObserver mOverviewComponentObserver;
protected final ActivityControlHelper<T> mActivityControlHelper;
protected final BaseActivityInterface<T> mActivityInterface;
protected final RecentsModel mRecentsModel;
protected final int mRunningTaskId;
@ -135,15 +135,15 @@ public abstract class BaseSwipeUpHandler<T extends BaseDraggingActivity, Q exten
protected boolean mCanceled;
protected int mFinishingRecentsAnimationForNewTaskId = -1;
protected BaseSwipeUpHandler(Context context,
protected BaseSwipeUpHandler(Context context, GestureState gestureState,
OverviewComponentObserver overviewComponentObserver,
RecentsModel recentsModel, InputConsumerController inputConsumer, int runningTaskId) {
mContext = context;
mOverviewComponentObserver = overviewComponentObserver;
mActivityControlHelper = overviewComponentObserver.getActivityControlHelper();
mActivityInterface = gestureState.getActivityInterface();
mRecentsModel = recentsModel;
mActivityInitListener =
mActivityControlHelper.createActivityInitListener(this::onActivityInit);
mActivityInterface.createActivityInitListener(this::onActivityInit);
mRunningTaskId = runningTaskId;
mInputConsumer = inputConsumer;
mMode = SysUINavigationMode.getMode(context);
@ -246,10 +246,10 @@ public abstract class BaseSwipeUpHandler<T extends BaseDraggingActivity, Q exten
success -> {
resultCallback.accept(success);
if (!success) {
mActivityControlHelper.onLaunchTaskFailed(mActivity);
mActivityInterface.onLaunchTaskFailed(mActivity);
nextTask.notifyTaskLaunchFailed(TAG);
} else {
mActivityControlHelper.onLaunchTaskSuccess(mActivity);
mActivityInterface.onLaunchTaskSuccess(mActivity);
}
}, mMainThreadHandler);
}
@ -291,7 +291,7 @@ public abstract class BaseSwipeUpHandler<T extends BaseDraggingActivity, Q exten
RemoteAnimationTargetCompat runningTaskTarget = targets.findTask(mRunningTaskId);
if (targets.minimizedHomeBounds != null && runningTaskTarget != null) {
overviewStackBounds = mActivityControlHelper
overviewStackBounds = mActivityInterface
.getOverviewWindowBounds(targets.minimizedHomeBounds, runningTaskTarget);
dp = dp.getMultiWindowProfile(mContext, new Point(
overviewStackBounds.width(), overviewStackBounds.height()));
@ -345,7 +345,7 @@ public abstract class BaseSwipeUpHandler<T extends BaseDraggingActivity, Q exten
protected void initTransitionEndpoints(DeviceProfile dp) {
mDp = dp;
mTransitionDragLength = mActivityControlHelper.getSwipeUpDestinationAndLength(
mTransitionDragLength = mActivityInterface.getSwipeUpDestinationAndLength(
dp, mContext, TEMP_RECT);
if (!dp.isMultiWindowMode) {
// When updating the target rect, also update the home bounds since the location on
@ -517,7 +517,7 @@ public abstract class BaseSwipeUpHandler<T extends BaseDraggingActivity, Q exten
public interface Factory {
BaseSwipeUpHandler newHandler(RunningTaskInfo runningTask,
BaseSwipeUpHandler newHandler(GestureState gestureState, RunningTaskInfo runningTask,
long touchTimeMs, boolean continuingLastGesture, boolean isLikelyToStartNewTask);
}

View File

@ -44,14 +44,14 @@ import java.util.function.BiPredicate;
import java.util.function.Consumer;
/**
* {@link ActivityControlHelper} for recents when the default launcher is different than the
* {@link BaseActivityInterface} for recents when the default launcher is different than the
* currently running one and apps should interact with the {@link RecentsActivity} as opposed
* to the in-launcher one.
*/
public final class FallbackActivityControllerHelper implements
ActivityControlHelper<RecentsActivity> {
public final class FallbackActivityInterface implements
BaseActivityInterface<RecentsActivity> {
public FallbackActivityControllerHelper() { }
public FallbackActivityInterface() { }
@Override
public void onTransitionCancelled(RecentsActivity activity, boolean activityVisible) {
@ -142,12 +142,12 @@ public final class FallbackActivityControllerHelper implements
if (!isAnimatingToRecents) {
rv.setContentAlpha(1);
}
createActivityController(getSwipeUpDestinationAndLength(
createActivityInterface(getSwipeUpDestinationAndLength(
activity.getDeviceProfile(), activity, new Rect()));
}
@Override
public void createActivityController(long transitionLength) {
public void createActivityInterface(long transitionLength) {
AnimatorSet animatorSet = new AnimatorSet();
if (isAnimatingToRecents) {
ObjectAnimator anim = ObjectAnimator.ofFloat(rv, CONTENT_ALPHA, 0, 1);

View File

@ -73,9 +73,9 @@ import java.util.function.BiPredicate;
import java.util.function.Consumer;
/**
* {@link ActivityControlHelper} for the in-launcher recents.
* {@link BaseActivityInterface} for the in-launcher recents.
*/
public final class LauncherActivityControllerHelper implements ActivityControlHelper<Launcher> {
public final class LauncherActivityInterface implements BaseActivityInterface<Launcher> {
private Runnable mAdjustInterpolatorsRunnable;
@ -214,8 +214,8 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
private boolean mIsAttachedToWindow;
@Override
public void createActivityController(long transitionLength) {
createActivityControllerInternal(activity, fromState, transitionLength, callback);
public void createActivityInterface(long transitionLength) {
createActivityInterfaceInternal(activity, fromState, transitionLength, callback);
// Creating the activity controller animation sometimes reapplies the launcher state
// (because we set the animation as the current state animation), so we reapply the
// attached state here as well to ensure recents is shown/hidden appropriately.
@ -312,7 +312,7 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
};
}
private void createActivityControllerInternal(Launcher activity, LauncherState fromState,
private void createActivityInterfaceInternal(Launcher activity, LauncherState fromState,
long transitionLength, Consumer<AnimatorPlaybackController> callback) {
LauncherState endState = OVERVIEW;
if (fromState == endState) {

View File

@ -98,14 +98,14 @@ public class OverviewCommandHelper {
@Override
protected boolean handleCommand(long elapsedTime) {
// TODO: Go to the next page if started from alt-tab.
return mHelper.getVisibleRecentsView() != null;
return mActivityInterface.getVisibleRecentsView() != null;
}
@Override
protected void onTransitionComplete() {
// TODO(b/138729100) This doesn't execute first time launcher is run
if (mTriggeredFromAltTab) {
RecentsView rv = (RecentsView) mHelper.getVisibleRecentsView();
RecentsView rv = (RecentsView) mActivityInterface.getVisibleRecentsView();
if (rv == null) {
return;
}
@ -130,7 +130,7 @@ public class OverviewCommandHelper {
@Override
protected boolean handleCommand(long elapsedTime) {
RecentsView recents = (RecentsView) mHelper.getVisibleRecentsView();
RecentsView recents = (RecentsView) mActivityInterface.getVisibleRecentsView();
if (recents == null) {
return false;
}
@ -146,7 +146,7 @@ public class OverviewCommandHelper {
private class RecentsActivityCommand<T extends BaseDraggingActivity> implements Runnable {
protected final ActivityControlHelper<T> mHelper;
protected final BaseActivityInterface<T> mActivityInterface;
private final long mCreateTime;
private final AppToOverviewAnimationProvider<T> mAnimationProvider;
@ -155,10 +155,10 @@ public class OverviewCommandHelper {
private ActivityInitListener mListener;
public RecentsActivityCommand() {
mHelper = mOverviewComponentObserver.getActivityControlHelper();
mActivityInterface = mOverviewComponentObserver.getActivityInterface();
mCreateTime = SystemClock.elapsedRealtime();
mAnimationProvider =
new AppToOverviewAnimationProvider<>(mHelper, RecentsModel.getRunningTaskId());
mAnimationProvider = new AppToOverviewAnimationProvider<>(mActivityInterface,
RecentsModel.getRunningTaskId());
// Preload the plan
mRecentsModel.getTasks(null);
@ -174,13 +174,13 @@ public class OverviewCommandHelper {
return;
}
if (mHelper.switchToRecentsIfVisible(this::onTransitionComplete)) {
if (mActivityInterface.switchToRecentsIfVisible(this::onTransitionComplete)) {
// If successfully switched, then return
return;
}
// Otherwise, start overview.
mListener = mHelper.createActivityInitListener(this::onActivityReady);
mListener = mActivityInterface.createActivityInitListener(this::onActivityReady);
mListener.registerAndStartActivity(mOverviewComponentObserver.getOverviewIntent(),
this::createWindowAnimation, mContext, MAIN_EXECUTOR.getHandler(),
mAnimationProvider.getRecentsLaunchDuration());
@ -190,7 +190,7 @@ public class OverviewCommandHelper {
// TODO: We need to fix this case with PIP, when an activity first enters PIP, it shows
// the menu activity which takes window focus, preventing the right condition from
// being run below
RecentsView recents = mHelper.getVisibleRecentsView();
RecentsView recents = mActivityInterface.getVisibleRecentsView();
if (recents != null) {
// Launch the next task
recents.showNextTask();
@ -207,7 +207,7 @@ public class OverviewCommandHelper {
if (!mUserEventLogged) {
activity.getUserEventDispatcher().logActionCommand(
LauncherLogProto.Action.Command.RECENTS_BUTTON,
mHelper.getContainerType(),
mActivityInterface.getContainerType(),
LauncherLogProto.ContainerType.TASKSWITCHER);
mUserEventLogged = true;
}

View File

@ -83,7 +83,7 @@ public class QuickstepTestInformationHandler extends TestInformationHandler {
OverviewComponentObserver observer = new OverviewComponentObserver(mContext,
new RecentsAnimationDeviceState(mContext));
try {
return observer.getActivityControlHelper().getCreatedActivity().getOverviewPanel();
return observer.getActivityInterface().getCreatedActivity().getOverviewPanel();
} finally {
observer.onDestroy();
}

View File

@ -65,7 +65,7 @@ public class SwipeSharedState implements RecentsAnimationListener {
@Override
public final void onRecentsAnimationCanceled(ThumbnailData thumbnailData) {
if (thumbnailData != null) {
mOverviewComponentObserver.getActivityControlHelper().switchToScreenshot(thumbnailData,
mOverviewComponentObserver.getActivityInterface().switchToScreenshot(thumbnailData,
() -> {
mLastRecentsAnimationController.cleanupScreenshot();
clearAnimationState();
@ -129,7 +129,7 @@ public class SwipeSharedState implements RecentsAnimationListener {
clearListenerState(false /* finishAnimation */);
boolean shouldMinimiseSplitScreen = mOverviewComponentObserver == null ? false
: mOverviewComponentObserver.getActivityControlHelper().shouldMinimizeSplitScreen();
: mOverviewComponentObserver.getActivityInterface().shouldMinimizeSplitScreen();
mRecentsAnimationListener = new RecentsAnimationCallbacks(shouldMinimiseSplitScreen);
mRecentsAnimationListener.addListener(this);
return mRecentsAnimationListener;

View File

@ -182,10 +182,10 @@ public class TouchInteractionService extends Service implements
return;
}
final ActivityControlHelper activityControl =
mOverviewComponentObserver.getActivityControlHelper();
final BaseActivityInterface activityInterface =
mOverviewComponentObserver.getActivityInterface();
UserEventDispatcher.newInstance(getBaseContext()).logActionBack(completed, downX, downY,
isButton, gestureSwipeLeft, activityControl.getContainerType());
isButton, gestureSwipeLeft, activityInterface.getContainerType());
if (completed && !isButton && shouldNotifyBackGesture()) {
UI_HELPER_EXECUTOR.execute(TouchInteractionService.this::tryNotifyBackGesture);
@ -373,7 +373,7 @@ public class TouchInteractionService extends Service implements
@UiThread
private void onAssistantVisibilityChanged() {
if (mDeviceState.isUserUnlocked()) {
mOverviewComponentObserver.getActivityControlHelper().onAssistantVisibilityChanged(
mOverviewComponentObserver.getActivityInterface().onAssistantVisibilityChanged(
mDeviceState.getAssistantVisibility());
}
}
@ -412,13 +412,16 @@ public class TouchInteractionService extends Service implements
MotionEvent event = (MotionEvent) ev;
if (event.getAction() == ACTION_DOWN) {
GestureState newGestureState = new GestureState(
mOverviewComponentObserver.getActivityInterface());
mLogId = ActiveGestureLog.INSTANCE.generateAndSetLogId();
sSwipeSharedState.setLogTraceId(mLogId);
if (mDeviceState.isInSwipeUpTouchRegion(event)) {
boolean useSharedState = mConsumer.useSharedSwipeState();
mConsumer.onConsumerAboutToBeSwitched();
mConsumer = newConsumer(useSharedState, event);
mConsumer = newConsumer(newGestureState, useSharedState, event);
ActiveGestureLog.INSTANCE.addLog("setInputConsumer", mConsumer.getType());
mUncheckedConsumer = mConsumer;
} else if (mDeviceState.isUserUnlocked() && mMode == Mode.NO_BUTTON
@ -426,8 +429,7 @@ public class TouchInteractionService extends Service implements
// Do not change mConsumer as if there is an ongoing QuickSwitch gesture, we should
// not interrupt it. QuickSwitch assumes that interruption can only happen if the
// next gesture is also quick switch.
mUncheckedConsumer = new AssistantInputConsumer(this,
mOverviewComponentObserver.getActivityControlHelper(),
mUncheckedConsumer = new AssistantInputConsumer(this, newGestureState,
InputConsumer.NO_OP, mInputMonitorCompat);
} else {
mUncheckedConsumer = InputConsumer.NO_OP;
@ -439,14 +441,16 @@ public class TouchInteractionService extends Service implements
DejankBinderTracker.disallowBinderTrackingInTests();
}
private InputConsumer newConsumer(boolean useSharedState, MotionEvent event) {
private InputConsumer newConsumer(GestureState gestureState, boolean useSharedState,
MotionEvent event) {
boolean canStartSystemGesture = mDeviceState.canStartSystemGesture();
if (!mDeviceState.isUserUnlocked()) {
if (canStartSystemGesture) {
// This handles apps launched in direct boot mode (e.g. dialer) as well as apps
// launched while device is locked even after exiting direct boot mode (e.g. camera).
return createDeviceLockedInputConsumer(mAM.getRunningTask(ACTIVITY_TYPE_ASSISTANT));
return createDeviceLockedInputConsumer(gestureState,
mAM.getRunningTask(ACTIVITY_TYPE_ASSISTANT));
} else {
return mResetGestureInputConsumer;
}
@ -455,24 +459,21 @@ public class TouchInteractionService extends Service implements
// When using sharedState, bypass systemState check as this is a followup gesture and the
// first gesture started in a valid system state.
InputConsumer base = canStartSystemGesture || useSharedState
? newBaseConsumer(useSharedState, event) : mResetGestureInputConsumer;
? newBaseConsumer(gestureState, useSharedState, event) : mResetGestureInputConsumer;
if (mMode == Mode.NO_BUTTON) {
final ActivityControlHelper activityControl =
mOverviewComponentObserver.getActivityControlHelper();
if (mDeviceState.canTriggerAssistantAction(event)) {
base = new AssistantInputConsumer(this, activityControl, base, mInputMonitorCompat);
base = new AssistantInputConsumer(this, gestureState, base, mInputMonitorCompat);
}
if (FeatureFlags.ENABLE_QUICK_CAPTURE_GESTURE.get()) {
// Put the Compose gesture as higher priority than the Assistant or base gestures
base = new QuickCaptureInputConsumer(this, base, mInputMonitorCompat,
activityControl);
base = new QuickCaptureInputConsumer(this, gestureState, base, mInputMonitorCompat);
}
if (mDeviceState.isScreenPinningActive()) {
// Note: we only allow accessibility to wrap this, and it replaces the previous
// base input consumer (which should be NO_OP anyway since topTaskLocked == true).
base = new ScreenPinnedInputConsumer(this, activityControl);
base = new ScreenPinnedInputConsumer(this, gestureState);
}
if (mDeviceState.isAccessibilityMenuAvailable()) {
@ -487,7 +488,8 @@ public class TouchInteractionService extends Service implements
return base;
}
private InputConsumer newBaseConsumer(boolean useSharedState, MotionEvent event) {
private InputConsumer newBaseConsumer(GestureState gestureState, boolean useSharedState,
MotionEvent event) {
RunningTaskInfo runningTaskInfo = DejankBinderTracker.whitelistIpcs(
() -> mAM.getRunningTask(0));
if (!useSharedState) {
@ -495,12 +497,9 @@ public class TouchInteractionService extends Service implements
}
if (mDeviceState.isKeyguardShowingOccluded()) {
// This handles apps showing over the lockscreen (e.g. camera)
return createDeviceLockedInputConsumer(runningTaskInfo);
return createDeviceLockedInputConsumer(gestureState, runningTaskInfo);
}
final ActivityControlHelper activityControl =
mOverviewComponentObserver.getActivityControlHelper();
boolean forceOverviewInputConsumer = false;
if (isExcludedAssistant(runningTaskInfo)) {
// In the case where we are in the excluded assistant state, ignore it and treat the
@ -523,16 +522,18 @@ public class TouchInteractionService extends Service implements
// consumer but with the next task as the running task
RunningTaskInfo info = new ActivityManager.RunningTaskInfo();
info.id = sSwipeSharedState.nextRunningTaskId;
return createOtherActivityInputConsumer(event, info);
} else if (sSwipeSharedState.goingToLauncher || activityControl.isResumed()
return createOtherActivityInputConsumer(gestureState, event, info);
} else if (sSwipeSharedState.goingToLauncher
|| gestureState.getActivityInterface().isResumed()
|| forceOverviewInputConsumer) {
return createOverviewInputConsumer(event);
} else if (ENABLE_QUICKSTEP_LIVE_TILE.get() && activityControl.isInLiveTileMode()) {
return createOverviewInputConsumer(event);
return createOverviewInputConsumer(gestureState, event);
} else if (ENABLE_QUICKSTEP_LIVE_TILE.get()
&& gestureState.getActivityInterface().isInLiveTileMode()) {
return createOverviewInputConsumer(gestureState, event);
} else if (mDeviceState.isGestureBlockedActivity(runningTaskInfo)) {
return mResetGestureInputConsumer;
} else {
return createOtherActivityInputConsumer(event, runningTaskInfo);
return createOtherActivityInputConsumer(gestureState, event, runningTaskInfo);
}
}
@ -542,52 +543,50 @@ public class TouchInteractionService extends Service implements
&& (info.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
}
private InputConsumer createOtherActivityInputConsumer(MotionEvent event,
RunningTaskInfo runningTaskInfo) {
private InputConsumer createOtherActivityInputConsumer(GestureState gestureState,
MotionEvent event, RunningTaskInfo runningTaskInfo) {
final boolean shouldDefer;
final BaseSwipeUpHandler.Factory factory;
ActivityControlHelper activityControlHelper =
mOverviewComponentObserver.getActivityControlHelper();
if (mMode == Mode.NO_BUTTON && !mOverviewComponentObserver.isHomeAndOverviewSame()) {
shouldDefer = !sSwipeSharedState.recentsAnimationFinishInterrupted;
factory = mFallbackNoButtonFactory;
} else {
shouldDefer = activityControlHelper.deferStartingActivity(mDeviceState, event);
shouldDefer = gestureState.getActivityInterface().deferStartingActivity(mDeviceState,
event);
factory = mWindowTreansformFactory;
}
final boolean disableHorizontalSwipe = mDeviceState.isInExclusionRegion(event);
return new OtherActivityInputConsumer(this, mDeviceState, runningTaskInfo, shouldDefer,
this::onConsumerInactive, sSwipeSharedState, mInputMonitorCompat,
disableHorizontalSwipe, activityControlHelper, factory, mLogId);
return new OtherActivityInputConsumer(this, mDeviceState, gestureState, runningTaskInfo,
shouldDefer, this::onConsumerInactive, sSwipeSharedState, mInputMonitorCompat,
disableHorizontalSwipe, factory, mLogId);
}
private InputConsumer createDeviceLockedInputConsumer(RunningTaskInfo taskInfo) {
private InputConsumer createDeviceLockedInputConsumer(GestureState gestureState,
RunningTaskInfo taskInfo) {
if (mMode == Mode.NO_BUTTON && taskInfo != null) {
return new DeviceLockedInputConsumer(this, mDeviceState, sSwipeSharedState,
mInputMonitorCompat, taskInfo.taskId, mLogId);
return new DeviceLockedInputConsumer(this, mDeviceState, gestureState,
sSwipeSharedState, mInputMonitorCompat, taskInfo.taskId, mLogId);
} else {
return mResetGestureInputConsumer;
}
}
public InputConsumer createOverviewInputConsumer(MotionEvent event) {
final ActivityControlHelper activityControl =
mOverviewComponentObserver.getActivityControlHelper();
BaseDraggingActivity activity = activityControl.getCreatedActivity();
public InputConsumer createOverviewInputConsumer(GestureState gestureState, MotionEvent event) {
BaseDraggingActivity activity = gestureState.getActivityInterface().getCreatedActivity();
if (activity == null) {
return mResetGestureInputConsumer;
}
if (activity.getRootView().hasWindowFocus() || sSwipeSharedState.goingToLauncher) {
return new OverviewInputConsumer(activity, mInputMonitorCompat,
false /* startingInActivityBounds */, activityControl);
return new OverviewInputConsumer(gestureState, activity, mInputMonitorCompat,
false /* startingInActivityBounds */);
} else {
final boolean disableHorizontalSwipe = mDeviceState.isInExclusionRegion(event);
return new OverviewWithoutFocusInputConsumer(activity, mInputMonitorCompat,
activityControl, disableHorizontalSwipe);
return new OverviewWithoutFocusInputConsumer(activity, gestureState,
mInputMonitorCompat, disableHorizontalSwipe);
}
}
@ -616,11 +615,11 @@ public class TouchInteractionService extends Service implements
return;
}
final ActivityControlHelper<BaseDraggingActivity> activityControl =
mOverviewComponentObserver.getActivityControlHelper();
if (activityControl.getCreatedActivity() == null) {
final BaseActivityInterface<BaseDraggingActivity> activityInterface =
mOverviewComponentObserver.getActivityInterface();
if (activityInterface.getCreatedActivity() == null) {
// Make sure that UI states will be initialized.
activityControl.createActivityInitListener((activity, wasVisible) -> {
activityInterface.createActivityInitListener((activity, wasVisible) -> {
AppLaunchTracker.INSTANCE.get(activity);
return false;
}).register();
@ -641,9 +640,9 @@ public class TouchInteractionService extends Service implements
if (!mDeviceState.isUserUnlocked()) {
return;
}
final ActivityControlHelper activityControl =
mOverviewComponentObserver.getActivityControlHelper();
final BaseDraggingActivity activity = activityControl.getCreatedActivity();
final BaseActivityInterface activityInterface =
mOverviewComponentObserver.getActivityInterface();
final BaseDraggingActivity activity = activityInterface.getCreatedActivity();
if (activity == null || activity.isStarted()) {
// We only care about the existing background activity.
return;
@ -675,7 +674,7 @@ public class TouchInteractionService extends Service implements
pw.println("TouchState:");
pw.println(" navMode=" + mMode);
boolean resumed = mOverviewComponentObserver != null
&& mOverviewComponentObserver.getActivityControlHelper().isResumed();
&& mOverviewComponentObserver.getActivityInterface().isResumed();
pw.println(" resumed=" + resumed);
pw.println(" useSharedState=" + mConsumer.useSharedSwipeState());
if (mConsumer.useSharedSwipeState()) {
@ -706,16 +705,20 @@ public class TouchInteractionService extends Service implements
}
}
private BaseSwipeUpHandler createWindowTransformSwipeHandler(RunningTaskInfo runningTask,
long touchTimeMs, boolean continuingLastGesture, boolean isLikelyToStartNewTask) {
return new WindowTransformSwipeHandler(mDeviceState, runningTask, this, touchTimeMs,
mOverviewComponentObserver, continuingLastGesture, mInputConsumer, mRecentsModel);
private BaseSwipeUpHandler createWindowTransformSwipeHandler(GestureState gestureState,
RunningTaskInfo runningTask, long touchTimeMs, boolean continuingLastGesture,
boolean isLikelyToStartNewTask) {
return new WindowTransformSwipeHandler(this, mDeviceState, gestureState, runningTask,
touchTimeMs, mOverviewComponentObserver, continuingLastGesture, mInputConsumer,
mRecentsModel);
}
private BaseSwipeUpHandler createFallbackNoButtonSwipeHandler(RunningTaskInfo runningTask,
long touchTimeMs, boolean continuingLastGesture, boolean isLikelyToStartNewTask) {
return new FallbackNoButtonInputConsumer(this, mOverviewComponentObserver, runningTask,
mRecentsModel, mInputConsumer, isLikelyToStartNewTask, continuingLastGesture);
private BaseSwipeUpHandler createFallbackNoButtonSwipeHandler(GestureState gestureState,
RunningTaskInfo runningTask, long touchTimeMs, boolean continuingLastGesture,
boolean isLikelyToStartNewTask) {
return new FallbackNoButtonInputConsumer(this, gestureState, mOverviewComponentObserver,
runningTask, mRecentsModel, mInputConsumer, isLikelyToStartNewTask,
continuingLastGesture);
}
protected boolean shouldNotifyBackGesture() {

View File

@ -26,8 +26,8 @@ import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs;
import static com.android.launcher3.util.RaceConditionTracker.ENTER;
import static com.android.launcher3.util.RaceConditionTracker.EXIT;
import static com.android.launcher3.util.SystemUiController.UI_STATE_OVERVIEW;
import static com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState.HIDE;
import static com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState.PEEK;
import static com.android.quickstep.BaseActivityInterface.AnimationFactory.ShelfAnimState.HIDE;
import static com.android.quickstep.BaseActivityInterface.AnimationFactory.ShelfAnimState.PEEK;
import static com.android.quickstep.MultiStateCallback.DEBUG_STATES;
import static com.android.quickstep.WindowTransformSwipeHandler.GestureEndTarget.HOME;
import static com.android.quickstep.WindowTransformSwipeHandler.GestureEndTarget.LAST_TASK;
@ -71,9 +71,9 @@ import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
import com.android.launcher3.util.RaceConditionTracker;
import com.android.launcher3.util.TraceHelper;
import com.android.quickstep.ActivityControlHelper.AnimationFactory;
import com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState;
import com.android.quickstep.ActivityControlHelper.HomeAnimationFactory;
import com.android.quickstep.BaseActivityInterface.AnimationFactory;
import com.android.quickstep.BaseActivityInterface.AnimationFactory.ShelfAnimState;
import com.android.quickstep.BaseActivityInterface.HomeAnimationFactory;
import com.android.quickstep.SysUINavigationMode.Mode;
import com.android.quickstep.inputconsumers.OverviewInputConsumer;
import com.android.quickstep.util.ActiveGestureLog;
@ -195,7 +195,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
*/
private static final int LOG_NO_OP_PAGE_INDEX = -1;
private RecentsAnimationDeviceState mDeviceState;
private final RecentsAnimationDeviceState mDeviceState;
private final GestureState mGestureState;
private GestureEndTarget mGestureEndTarget;
// Either RectFSpringAnim (if animating home) or ObjectAnimator (from mCurrentShift) otherwise
@ -228,12 +229,13 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
private final long mTouchTimeMs;
private long mLauncherFrameDrawnTime;
public WindowTransformSwipeHandler(RecentsAnimationDeviceState deviceState,
RunningTaskInfo runningTaskInfo, Context context, long touchTimeMs,
public WindowTransformSwipeHandler(Context context, RecentsAnimationDeviceState deviceState,
GestureState gestureState, RunningTaskInfo runningTaskInfo, long touchTimeMs,
OverviewComponentObserver overviewComponentObserver, boolean continuingLastGesture,
InputConsumerController inputConsumer, RecentsModel recentsModel) {
super(context, overviewComponentObserver, recentsModel, inputConsumer, runningTaskInfo.id);
super(context, gestureState, overviewComponentObserver, recentsModel, inputConsumer, runningTaskInfo.id);
mDeviceState = deviceState;
mGestureState = gestureState;
mTouchTimeMs = touchTimeMs;
mContinuingLastGesture = continuingLastGesture;
initStateCallbacks();
@ -349,7 +351,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
// as that will set the state as BACKGROUND_APP, overriding the animation to NORMAL.
if (mGestureEndTarget != HOME) {
Runnable initAnimFactory = () -> {
mAnimationFactory = mActivityControlHelper.prepareRecentsUI(mActivity,
mAnimationFactory = mActivityInterface.prepareRecentsUI(mActivity,
mWasLauncherAlreadyVisible, true,
this::onAnimatorPlaybackControllerCreated);
maybeUpdateRecentsAttachedState(false /* animate */);
@ -518,7 +520,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
return;
}
initTransitionEndpoints(mActivity.getDeviceProfile());
mAnimationFactory.createActivityController(mTransitionDragLength);
mAnimationFactory.createActivityInterface(mTransitionDragLength);
}
@Override
@ -688,9 +690,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
setTargetAlphaProvider(WindowTransformSwipeHandler::getHiddenTargetAlpha);
}
BaseDraggingActivity activity = mActivityControlHelper.getCreatedActivity();
BaseDraggingActivity activity = mActivityInterface.getCreatedActivity();
return activity == null ? InputConsumer.NO_OP
: new OverviewInputConsumer(activity, null, true, mActivityControlHelper);
: new OverviewInputConsumer(mGestureState, activity, null, true);
}
private void endRunningWindowAnim(boolean cancel) {
@ -882,7 +884,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
if (mGestureEndTarget == HOME) {
HomeAnimationFactory homeAnimFactory;
if (mActivity != null) {
homeAnimFactory = mActivityControlHelper.prepareHomeUI(mActivity);
homeAnimFactory = mActivityInterface.prepareHomeUI(mActivity);
} else {
homeAnimFactory = new HomeAnimationFactory() {
@NonNull
@ -994,7 +996,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
}
// Make sure recents is in its final state
maybeUpdateRecentsAttachedState(false);
mActivityControlHelper.onSwipeUpToHomeComplete(mActivity);
mActivityInterface.onSwipeUpToHomeComplete(mActivity);
}
});
return anim;
@ -1103,7 +1105,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
private void resetStateForAnimationCancel() {
boolean wasVisible = mWasLauncherAlreadyVisible || mGestureStarted;
mActivityControlHelper.onTransitionCancelled(mActivity, wasVisible);
mActivityInterface.onTransitionCancelled(mActivity, wasVisible);
// Leave the pending invisible flag, as it may be used by wallpaper open animation.
mActivity.clearForceInvisibleFlag(INVISIBLE_BY_STATE_HANDLER);
@ -1180,7 +1182,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
private void setupLauncherUiAfterSwipeUpToRecentsAnimation() {
endLauncherTransitionController();
mActivityControlHelper.onSwipeUpToRecentsComplete(mActivity);
mActivityInterface.onSwipeUpToRecentsComplete(mActivity);
if (mRecentsAnimationController != null) {
mRecentsAnimationController.setDeferCancelUntilNextTransition(true /* defer */,
true /* screenshot */);

View File

@ -48,7 +48,8 @@ import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.logging.UserEventDispatcher;
import com.android.quickstep.ActivityControlHelper;
import com.android.quickstep.BaseActivityInterface;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.SystemUiProxy;
import com.android.systemui.shared.system.InputMonitorCompat;
@ -80,7 +81,7 @@ public class AssistantInputConsumer extends DelegateInputConsumer {
private long mDragTime;
private float mLastProgress;
private int mDirection;
private ActivityControlHelper mActivityControlHelper;
private BaseActivityInterface mActivityInterface;
private final float mDragDistThreshold;
private final float mFlingDistThreshold;
@ -90,7 +91,7 @@ public class AssistantInputConsumer extends DelegateInputConsumer {
private final Context mContext;
private final GestureDetector mGestureDetector;
public AssistantInputConsumer(Context context, ActivityControlHelper activityControlHelper,
public AssistantInputConsumer(Context context, GestureState gestureState,
InputConsumer delegate, InputMonitorCompat inputMonitor) {
super(delegate, inputMonitor);
final Resources res = context.getResources();
@ -103,7 +104,7 @@ public class AssistantInputConsumer extends DelegateInputConsumer {
float slop = ViewConfiguration.get(context).getScaledTouchSlop();
mSquaredSlop = slop * slop;
mActivityControlHelper = activityControlHelper;
mActivityInterface = gestureState.getActivityInterface();
mGestureDetector = new GestureDetector(context, new AssistantGestureListener());
}
@ -233,8 +234,7 @@ public class AssistantInputConsumer extends DelegateInputConsumer {
UserEventDispatcher.newInstance(mContext)
.logActionOnContainer(gestureType, mDirection, NAVBAR);
BaseDraggingActivity launcherActivity = mActivityControlHelper
.getCreatedActivity();
BaseDraggingActivity launcherActivity = mActivityInterface.getCreatedActivity();
if (launcherActivity != null) {
launcherActivity.getRootView().performHapticFeedback(
13, // HapticFeedbackConstants.GESTURE_END

View File

@ -39,6 +39,7 @@ import android.view.ViewConfiguration;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.DefaultDisplay;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.LockScreenRecentsActivity;
import com.android.quickstep.MultiStateCallback;
@ -75,6 +76,7 @@ public class DeviceLockedInputConsumer implements InputConsumer,
private final Context mContext;
private final RecentsAnimationDeviceState mDeviceState;
private final GestureState mGestureState;
private final float mTouchSlopSquared;
private final SwipeSharedState mSwipeSharedState;
private final InputMonitorCompat mInputMonitorCompat;
@ -96,10 +98,11 @@ public class DeviceLockedInputConsumer implements InputConsumer,
private RecentsAnimationTargets mRecentsAnimationTargets;
public DeviceLockedInputConsumer(Context context, RecentsAnimationDeviceState deviceState,
SwipeSharedState swipeSharedState, InputMonitorCompat inputMonitorCompat,
int runningTaskId, int logId) {
GestureState gestureState, SwipeSharedState swipeSharedState,
InputMonitorCompat inputMonitorCompat, int runningTaskId, int logId) {
mContext = context;
mDeviceState = deviceState;
mGestureState = gestureState;
mTouchSlopSquared = squaredTouchSlop(context);
mSwipeSharedState = swipeSharedState;
mAppWindowAnimationHelper = new AppWindowAnimationHelper(context);

View File

@ -39,9 +39,10 @@ import com.android.launcher3.R;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.util.ObjectWrapper;
import com.android.quickstep.ActivityControlHelper.HomeAnimationFactory;
import com.android.quickstep.BaseActivityInterface.HomeAnimationFactory;
import com.android.quickstep.AnimatedFloat;
import com.android.quickstep.BaseSwipeUpHandler;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.MultiStateCallback;
import com.android.quickstep.OverviewComponentObserver;
@ -114,12 +115,13 @@ public class FallbackNoButtonInputConsumer extends
private final PointF mEndVelocityPxPerMs = new PointF(0, 0.5f);
private RunningWindowAnim mFinishAnimation;
public FallbackNoButtonInputConsumer(Context context,
public FallbackNoButtonInputConsumer(Context context, GestureState gestureState,
OverviewComponentObserver overviewComponentObserver,
RunningTaskInfo runningTaskInfo, RecentsModel recentsModel,
InputConsumerController inputConsumer,
boolean isLikelyToStartNewTask, boolean continuingLastGesture) {
super(context, overviewComponentObserver, recentsModel, inputConsumer, runningTaskInfo.id);
super(context, gestureState, overviewComponentObserver, recentsModel, inputConsumer,
runningTaskInfo.id);
mLauncherAlpha.value = 1;
mRunningTaskInfo = runningTaskInfo;

View File

@ -50,9 +50,10 @@ import com.android.launcher3.R;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.RaceConditionTracker;
import com.android.launcher3.util.TraceHelper;
import com.android.quickstep.ActivityControlHelper;
import com.android.quickstep.BaseActivityInterface;
import com.android.quickstep.BaseSwipeUpHandler;
import com.android.quickstep.BaseSwipeUpHandler.Factory;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.RecentsAnimationDeviceState;
import com.android.quickstep.SwipeSharedState;
@ -81,12 +82,13 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
public static final float QUICKSTEP_TOUCH_SLOP_RATIO = 3;
private final RecentsAnimationDeviceState mDeviceState;
private final GestureState mGestureState;
private final CachedEventDispatcher mRecentsViewDispatcher = new CachedEventDispatcher();
private final RunningTaskInfo mRunningTask;
private final SwipeSharedState mSwipeSharedState;
private final InputMonitorCompat mInputMonitorCompat;
private final SysUINavigationMode.Mode mMode;
private final ActivityControlHelper mActivityControlHelper;
private final BaseActivityInterface mActivityInterface;
private final BaseSwipeUpHandler.Factory mHandlerFactory;
@ -126,20 +128,19 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
private int mLogId;
public OtherActivityInputConsumer(Context base, RecentsAnimationDeviceState deviceState,
RunningTaskInfo runningTaskInfo, boolean isDeferredDownTarget,
Consumer<OtherActivityInputConsumer> onCompleteCallback,
GestureState gestureState, RunningTaskInfo runningTaskInfo,
boolean isDeferredDownTarget, Consumer<OtherActivityInputConsumer> onCompleteCallback,
SwipeSharedState swipeSharedState, InputMonitorCompat inputMonitorCompat,
boolean disableHorizontalSwipe, ActivityControlHelper activityControlHelper,
Factory handlerFactory, int logId) {
boolean disableHorizontalSwipe, Factory handlerFactory, int logId) {
super(base);
mLogId = logId;
mDeviceState = deviceState;
mGestureState = gestureState;
mMainThreadHandler = new Handler(Looper.getMainLooper());
mRunningTask = runningTaskInfo;
mMode = SysUINavigationMode.getMode(base);
mHandlerFactory = handlerFactory;
mActivityControlHelper = activityControlHelper;
mActivityInterface = mGestureState.getActivityInterface();
mMotionPauseDetector = new MotionPauseDetector(base);
mMotionPauseMinDisplacement = base.getResources().getDimension(
@ -318,7 +319,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
}
mInputMonitorCompat.pilferPointers();
mActivityControlHelper.closeOverlay();
mActivityInterface.closeOverlay();
ActivityManagerWrapper.getInstance().closeSystemWindows(
CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
@ -331,8 +332,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
ActiveGestureLog.INSTANCE.addLog("startRecentsAnimation");
RecentsAnimationCallbacks listenerSet = mSwipeSharedState.getActiveListener();
final BaseSwipeUpHandler handler = mHandlerFactory.newHandler(mRunningTask, touchTimeMs,
listenerSet != null, isLikelyToStartNewTask);
final BaseSwipeUpHandler handler = mHandlerFactory.newHandler(mGestureState, mRunningTask,
touchTimeMs, listenerSet != null, isLikelyToStartNewTask);
mInteractionHandler = handler;
handler.setGestureEndCallback(this::onInteractionGestureFinished);

View File

@ -26,7 +26,8 @@ import androidx.annotation.Nullable;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.Utilities;
import com.android.launcher3.views.BaseDragLayer;
import com.android.quickstep.ActivityControlHelper;
import com.android.quickstep.BaseActivityInterface;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@ -41,7 +42,7 @@ public class OverviewInputConsumer<T extends BaseDraggingActivity>
implements InputConsumer {
private final T mActivity;
private final ActivityControlHelper<T> mActivityControlHelper;
private final BaseActivityInterface<T> mActivityInterface;
private final BaseDragLayer mTarget;
private final InputMonitorCompat mInputMonitor;
@ -52,13 +53,12 @@ public class OverviewInputConsumer<T extends BaseDraggingActivity>
private final boolean mStartingInActivityBounds;
private boolean mTargetHandledTouch;
public OverviewInputConsumer(T activity, @Nullable InputMonitorCompat inputMonitor,
boolean startingInActivityBounds,
ActivityControlHelper<T> activityControlHelper) {
public OverviewInputConsumer(GestureState gestureState, T activity,
@Nullable InputMonitorCompat inputMonitor, boolean startingInActivityBounds) {
mActivity = activity;
mInputMonitor = inputMonitor;
mStartingInActivityBounds = startingInActivityBounds;
mActivityControlHelper = activityControlHelper;
mActivityInterface = gestureState.getActivityInterface();
mTarget = activity.getDragLayer();
if (startingInActivityBounds) {
@ -100,7 +100,7 @@ public class OverviewInputConsumer<T extends BaseDraggingActivity>
if (!mTargetHandledTouch && handled) {
mTargetHandledTouch = true;
if (!mStartingInActivityBounds) {
mActivityControlHelper.closeOverlay();
mActivityInterface.closeOverlay();
ActivityManagerWrapper.getInstance()
.closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
ActiveGestureLog.INSTANCE.addLog("startQuickstep");

View File

@ -35,8 +35,9 @@ import com.android.launcher3.Utilities;
import com.android.launcher3.logging.StatsLogUtils;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.quickstep.ActivityControlHelper;
import com.android.quickstep.BaseActivityInterface;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.GestureState;
import com.android.quickstep.util.ActiveGestureLog;
import com.android.quickstep.util.NavBarPosition;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@ -50,17 +51,17 @@ public class OverviewWithoutFocusInputConsumer implements InputConsumer {
private final float mSquaredTouchSlop;
private final Context mContext;
private final NavBarPosition mNavBarPosition;
private final ActivityControlHelper mActivityControlHelper;
private final BaseActivityInterface mActivityInterface;
private boolean mInterceptedTouch;
private VelocityTracker mVelocityTracker;
public OverviewWithoutFocusInputConsumer(Context context, InputMonitorCompat inputMonitor,
ActivityControlHelper activityControlHelper, boolean disableHorizontalSwipe) {
public OverviewWithoutFocusInputConsumer(Context context, GestureState gestureState,
InputMonitorCompat inputMonitor, boolean disableHorizontalSwipe) {
mInputMonitor = inputMonitor;
mDisableHorizontalSwipe = disableHorizontalSwipe;
mContext = context;
mActivityControlHelper = activityControlHelper;
mActivityInterface = gestureState.getActivityInterface();
mSquaredTouchSlop = Utilities.squaredTouchSlop(context);
mNavBarPosition = new NavBarPosition(context);
@ -149,7 +150,7 @@ public class OverviewWithoutFocusInputConsumer implements InputConsumer {
}
if (triggerQuickstep) {
mActivityControlHelper.closeOverlay();
mActivityInterface.closeOverlay();
ActivityManagerWrapper.getInstance()
.closeSystemWindows(CLOSE_SYSTEM_WINDOWS_REASON_RECENTS);
ActiveGestureLog.INSTANCE.addLog("startQuickstep");

View File

@ -35,7 +35,7 @@ import android.view.ViewConfiguration;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
import com.android.quickstep.ActivityControlHelper;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.views.RecentsView;
import com.android.systemui.shared.system.InputMonitorCompat;
@ -73,15 +73,16 @@ public class QuickCaptureInputConsumer<T extends BaseDraggingActivity>
private RecentsView mRecentsView;
public QuickCaptureInputConsumer(Context context, InputConsumer delegate,
InputMonitorCompat inputMonitor, ActivityControlHelper<T> activityControlHelper) {
public QuickCaptureInputConsumer(Context context, GestureState gestureState,
InputConsumer delegate, InputMonitorCompat inputMonitor) {
super(delegate, inputMonitor);
mContext = context;
float slop = ViewConfiguration.get(context).getScaledTouchSlop();
mSquaredSlop = slop * slop;
activityControlHelper.createActivityInitListener(this::onActivityInit).register();
gestureState.getActivityInterface().createActivityInitListener(this::onActivityInit)
.register();
}
@Override
@ -89,7 +90,7 @@ public class QuickCaptureInputConsumer<T extends BaseDraggingActivity>
return TYPE_QUICK_CAPTURE | mDelegate.getType();
}
private boolean onActivityInit(final T activity, Boolean alreadyOnHome) {
private boolean onActivityInit(final BaseDraggingActivity activity, Boolean alreadyOnHome) {
mRecentsView = activity.getOverviewPanel();
return true;

View File

@ -21,7 +21,7 @@ import android.view.MotionEvent;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
import com.android.quickstep.ActivityControlHelper;
import com.android.quickstep.GestureState;
import com.android.quickstep.InputConsumer;
import com.android.quickstep.util.MotionPauseDetector;
import com.android.quickstep.SystemUiProxy;
@ -38,14 +38,15 @@ public class ScreenPinnedInputConsumer implements InputConsumer {
private float mTouchDownY;
public ScreenPinnedInputConsumer(Context context, ActivityControlHelper activityControl) {
public ScreenPinnedInputConsumer(Context context, GestureState gestureState) {
mMotionPauseMinDisplacement = context.getResources().getDimension(
R.dimen.motion_pause_detector_min_displacement_from_app);
mMotionPauseDetector = new MotionPauseDetector(context, true /* makePauseHarderToTrigger*/);
mMotionPauseDetector.setOnMotionPauseListener(isPaused -> {
if (isPaused) {
SystemUiProxy.INSTANCE.get(context).stopScreenPinning();
BaseDraggingActivity launcherActivity = activityControl.getCreatedActivity();
BaseDraggingActivity launcherActivity = gestureState.getActivityInterface()
.getCreatedActivity();
if (launcherActivity != null) {
launcherActivity.getRootView().performHapticFeedback(
HapticFeedbackConstants.LONG_PRESS,

View File

@ -42,7 +42,7 @@ import java.util.function.Consumer;
* Utility class which abstracts out the logical differences between Launcher and RecentsActivity.
*/
@TargetApi(Build.VERSION_CODES.P)
public interface ActivityControlHelper<T extends BaseDraggingActivity> {
public interface BaseActivityInterface<T extends BaseDraggingActivity> {
void onTransitionCancelled(T activity, boolean activityVisible);
@ -112,7 +112,7 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
default void onRemoteAnimationReceived(RemoteAnimationTargets targets) { }
void createActivityController(long transitionLength);
void createActivityInterface(long transitionLength);
default void adjustActivityControllerInterpolators() { }

View File

@ -0,0 +1,36 @@
/*
* Copyright (C) 2019 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.quickstep;
import com.android.launcher3.BaseDraggingActivity;
/**
* Manages the state for an active system gesture, listens for events from the system and Launcher,
* and fires events when the states change.
*/
public class GestureState {
// Needed to interact with the current activity
private BaseActivityInterface mActivityInterface;
public GestureState(BaseActivityInterface activityInterface) {
mActivityInterface = activityInterface;
}
public <T extends BaseDraggingActivity> BaseActivityInterface<T> getActivityInterface() {
return mActivityInterface;
}
}

View File

@ -62,7 +62,7 @@ public final class OverviewComponentObserver {
private final Intent mFallbackIntent;
private final SparseIntArray mConfigChangesMap = new SparseIntArray();
private String mUpdateRegisteredPackage;
private ActivityControlHelper mActivityControlHelper;
private BaseActivityInterface mActivityInterface;
private Intent mOverviewIntent;
private boolean mIsHomeAndOverviewSame;
private boolean mIsDefaultHome;
@ -106,7 +106,7 @@ public final class OverviewComponentObserver {
}
/**
* Update overview intent and {@link ActivityControlHelper} based off the current launcher home
* Update overview intent and {@link BaseActivityInterface} based off the current launcher home
* component.
*/
private void updateOverviewTargets() {
@ -119,13 +119,13 @@ public final class OverviewComponentObserver {
// Set assistant visibility to 0 from launcher's perspective, ensures any elements that
// launcher made invisible become visible again before the new activity control helper
// becomes active.
if (mActivityControlHelper != null) {
mActivityControlHelper.onAssistantVisibilityChanged(0.f);
if (mActivityInterface != null) {
mActivityInterface.onAssistantVisibilityChanged(0.f);
}
if (!mDeviceState.isHomeDisabled() && (defaultHome == null || mIsDefaultHome)) {
// User default home is same as out home app. Use Overview integrated in Launcher.
mActivityControlHelper = new LauncherActivityControllerHelper();
mActivityInterface = new LauncherActivityInterface();
mIsHomeAndOverviewSame = true;
mOverviewIntent = mMyHomeIntent;
mCurrentHomeIntent.setComponent(mMyHomeIntent.getComponent());
@ -138,7 +138,7 @@ public final class OverviewComponentObserver {
} else {
// The default home app is a different launcher. Use the fallback Overview instead.
mActivityControlHelper = new FallbackActivityControllerHelper();
mActivityInterface = new FallbackActivityInterface();
mIsHomeAndOverviewSame = false;
mOverviewIntent = mFallbackIntent;
mCurrentHomeIntent.setComponent(defaultHome);
@ -230,7 +230,7 @@ public final class OverviewComponentObserver {
*
* @return the current activity control helper
*/
public ActivityControlHelper getActivityControlHelper() {
return mActivityControlHelper;
public BaseActivityInterface getActivityInterface() {
return mActivityInterface;
}
}