Fixing various quickscrup controls for fallback activity

> Not auto advancing to next task when swiping from home
> Starting from the current tile, when scrubing on recents activity

Bug: 79558175
Change-Id: I2975dbb254ba0004b34ce5d86d9733faad4943ff
This commit is contained in:
Sunny Goyal
2018-05-11 11:25:25 -07:00
parent 7f71198dc8
commit 9829060491
5 changed files with 43 additions and 12 deletions

View File

@@ -15,6 +15,7 @@
*/
package com.android.quickstep;
import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
import static com.android.launcher3.LauncherState.FAST_OVERVIEW;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.allapps.AllAppsTransitionController.ALL_APPS_PROGRESS;
@@ -24,10 +25,15 @@ import static com.android.systemui.shared.system.NavigationBarCompat.HIT_TARGET_
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.annotation.TargetApi;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.view.View;
@@ -52,21 +58,23 @@ import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.RecentsViewContainer;
import com.android.systemui.shared.system.RemoteAnimationTargetCompat;
import java.util.Objects;
import java.util.function.BiPredicate;
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> {
LayoutListener createLayoutListener(T activity);
/**
* Updates the UI to indicate quick interaction.
* @return true if there any any UI change as a result of this
*/
boolean onQuickInteractionStart(T activity, boolean activityVisible);
void onQuickInteractionStart(T activity, @Nullable RunningTaskInfo taskInfo,
boolean activityVisible);
float getTranslationYForQuickScrub(T activity);
@@ -120,10 +128,14 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
}
@Override
public boolean onQuickInteractionStart(Launcher activity, boolean activityVisible) {
public void onQuickInteractionStart(Launcher activity, RunningTaskInfo taskInfo,
boolean activityVisible) {
LauncherState fromState = activity.getStateManager().getState();
activity.getStateManager().goToState(FAST_OVERVIEW, activityVisible);
return !fromState.overviewUi;
QuickScrubController controller = activity.<RecentsView>getOverviewPanel()
.getQuickScrubController();
controller.onQuickScrubStart(activityVisible && !fromState.overviewUi, this);
}
@Override
@@ -311,10 +323,27 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
class FallbackActivityControllerHelper implements ActivityControlHelper<RecentsActivity> {
private final ComponentName mHomeComponent;
private final Handler mUiHandler = new Handler(Looper.getMainLooper());
public FallbackActivityControllerHelper(ComponentName homeComponent) {
mHomeComponent = homeComponent;
}
@Override
public boolean onQuickInteractionStart(RecentsActivity activity, boolean activityVisible) {
// Activity does not need any UI change for quickscrub.
return false;
public void onQuickInteractionStart(RecentsActivity activity, RunningTaskInfo taskInfo,
boolean activityVisible) {
QuickScrubController controller = activity.<RecentsView>getOverviewPanel()
.getQuickScrubController();
// TODO: match user is as well
boolean startingFromHome = !activityVisible &&
(taskInfo == null || Objects.equals(taskInfo.topActivity, mHomeComponent));
controller.onQuickScrubStart(startingFromHome, this);
if (activityVisible) {
mUiHandler.postDelayed(controller::onFinishedTransitionToQuickScrub,
OVERVIEW_TRANSITION_MS);
}
}
@Override
@@ -465,6 +494,7 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> {
public AlphaProperty getAlphaProperty(RecentsActivity activity) {
return activity.getDragLayer().getAlphaProperty(0);
}
}
interface LayoutListener {

View File

@@ -138,7 +138,7 @@ public class OverviewCommandHelper {
} else {
// The default home app is a different launcher. Use the fallback Overview instead.
overviewComponent = new ComponentName(mContext, RecentsActivity.class);
mActivityControlHelper = new FallbackActivityControllerHelper();
mActivityControlHelper = new FallbackActivityControllerHelper(defaultHome);
overviewIntentCategory = Intent.CATEGORY_DEFAULT;
// User's default home app can change as a result of package updates of this app (such

View File

@@ -350,8 +350,7 @@ public class TouchInteractionService extends Service {
mStartPending = true;
Runnable action = () -> {
mQuickScrubController.onQuickScrubStart(mActivityHelper.onQuickInteractionStart(
mActivity, true), mActivityHelper);
mActivityHelper.onQuickInteractionStart(mActivity, null, true);
mQuickScrubController.onQuickScrubProgress(mLastProgress);
mStartPending = false;

View File

@@ -171,6 +171,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
private final ActivityInitListener mActivityInitListener;
private final int mRunningTaskId;
private final RunningTaskInfo mRunningTaskInfo;
private ThumbnailData mTaskSnapshot;
private MultiStateCallback mStateCallback;
@@ -207,6 +208,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
WindowTransformSwipeHandler(RunningTaskInfo runningTaskInfo, Context context, long touchTimeMs,
ActivityControlHelper<T> controller) {
mContext = context;
mRunningTaskInfo = runningTaskInfo;
mRunningTaskId = runningTaskInfo.id;
mTouchTimeMs = touchTimeMs;
mActivityControlHelper = controller;
@@ -772,8 +774,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> {
mLauncherTransitionController = null;
}
mActivityControlHelper.onQuickInteractionStart(mActivity, false);
mQuickScrubController.onQuickScrubStart(false, mActivityControlHelper);
mActivityControlHelper.onQuickInteractionStart(mActivity, mRunningTaskInfo, false);
// Inform the last progress in case we skipped before.
mQuickScrubController.onQuickScrubProgress(mCurrentQuickScrubProgress);

View File

@@ -35,6 +35,7 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity> {
public FallbackRecentsView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setOverviewStateEnabled(true);
getQuickScrubController().onFinishedTransitionToQuickScrub();
}
@Override