Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42cbdee2 authored by Alex Chau's avatar Alex Chau Committed by Android (Google) Code Review
Browse files

Merge "Add split support for 3P launcher" into sc-v2-dev

parents eea4379a 2a93bc5b
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -25,13 +25,6 @@
        android:clipToPadding="false"
        android:visibility="invisible" />

    <com.android.quickstep.views.SplitPlaceholderView
        android:id="@+id/split_placeholder"
        android:layout_width="match_parent"
        android:layout_height="@dimen/split_placeholder_size"
        android:background="@android:color/darker_gray"
        android:visibility="gone" />

    <include
        android:id="@+id/overview_actions_view"
        layout="@layout/overview_actions_container" />
+34 −0
Original line number Diff line number Diff line
@@ -24,14 +24,22 @@ import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TR
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_TRANSLATE_Y;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_SCRIM_FADE;
import static com.android.launcher3.states.StateAnimationConfig.SKIP_OVERVIEW;
import static com.android.quickstep.fallback.RecentsState.OVERVIEW_SPLIT_SELECT;
import static com.android.quickstep.views.RecentsView.ADJACENT_PAGE_HORIZONTAL_OFFSET;
import static com.android.quickstep.views.RecentsView.FULLSCREEN_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_GRID_PROGRESS;
import static com.android.quickstep.views.RecentsView.RECENTS_SCALE_PROPERTY;
import static com.android.quickstep.views.RecentsView.TASK_MODALNESS;
import static com.android.quickstep.views.RecentsView.TASK_PRIMARY_SPLIT_TRANSLATION;
import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_SPLIT_TRANSLATION;
import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_TRANSLATION;
import static com.android.quickstep.views.TaskView.FLAG_UPDATE_ALL;

import android.util.FloatProperty;
import android.util.Pair;

import androidx.annotation.NonNull;

import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.anim.PropertySetter;
import com.android.launcher3.statemanager.StateManager.StateHandler;
@@ -100,5 +108,31 @@ public class FallbackRecentsStateController implements StateHandler<RecentsState

        setter.setViewBackgroundColor(mActivity.getScrimView(), state.getScrimColor(mActivity),
                config.getInterpolator(ANIM_SCRIM_FADE, LINEAR));

        RecentsState currentState = mActivity.getStateManager().getState();
        if (isSplitSelectionState(state) && !isSplitSelectionState(currentState)) {
            setter.add(mRecentsView.createSplitSelectInitAnimation().buildAnim());
        }

        Pair<FloatProperty, FloatProperty> taskViewsFloat =
                mRecentsView.getPagedOrientationHandler().getSplitSelectTaskOffset(
                        TASK_PRIMARY_SPLIT_TRANSLATION, TASK_SECONDARY_SPLIT_TRANSLATION,
                        mActivity.getDeviceProfile());
        setter.setFloat(mRecentsView, taskViewsFloat.second, 0, LINEAR);
        if (isSplitSelectionState(state)) {
            mRecentsView.applySplitPrimaryScrollOffset();
            setter.setFloat(mRecentsView, taskViewsFloat.first,
                    mRecentsView.getSplitSelectTranslation(), LINEAR);
        } else {
            mRecentsView.resetSplitPrimaryScrollOffset();
            setter.setFloat(mRecentsView, taskViewsFloat.first, 0, LINEAR);
        }
    }

    /**
     * @return true if {@param toState} is {@link RecentsState#OVERVIEW_SPLIT_SELECT}
     */
    private boolean isSplitSelectionState(@NonNull RecentsState toState) {
        return toState == OVERVIEW_SPLIT_SELECT;
    }
}
+9 −9
Original line number Diff line number Diff line
@@ -19,12 +19,12 @@ import static com.android.quickstep.GestureState.GestureEndTarget.RECENTS;
import static com.android.quickstep.fallback.RecentsState.DEFAULT;
import static com.android.quickstep.fallback.RecentsState.HOME;
import static com.android.quickstep.fallback.RecentsState.MODAL_TASK;
import static com.android.quickstep.fallback.RecentsState.OVERVIEW_SPLIT_SELECT;

import android.animation.AnimatorSet;
import android.annotation.TargetApi;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
@@ -35,6 +35,7 @@ import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.statemanager.StateManager.StateListener;
import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.quickstep.FallbackActivityInterface;
import com.android.quickstep.GestureState;
import com.android.quickstep.RecentsActivity;
@@ -206,6 +207,13 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity, RecentsSta
        }
    }

    @Override
    public void initiateSplitSelect(TaskView taskView,
            @SplitConfigurationOptions.StagePosition int stagePosition) {
        super.initiateSplitSelect(taskView, stagePosition);
        mActivity.getStateManager().goToState(OVERVIEW_SPLIT_SELECT);
    }

    @Override
    public void onStateTransitionStart(RecentsState toState) {
        setOverviewStateEnabled(true);
@@ -245,12 +253,4 @@ public class FallbackRecentsView extends RecentsView<RecentsActivity, RecentsSta
        // Do not let touch escape to siblings below this view.
        return result || mActivity.getStateManager().getState().overviewUi();
    }

    @Override
    protected void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Reset modal state if full configuration changes
        setModalStateEnabled(false);
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ public class RecentsState implements BaseState<RecentsState> {
            FLAG_DISABLE_RESTORE | FLAG_NON_INTERACTIVE | FLAG_FULL_SCREEN | FLAG_OVERVIEW_UI);
    public static final RecentsState HOME = new RecentsState(3, 0);
    public static final RecentsState BG_LAUNCHER = new LauncherState(4, 0);
    public static final RecentsState OVERVIEW_SPLIT_SELECT = new RecentsState(5,
            FLAG_SHOW_AS_GRID | FLAG_SCRIM | FLAG_OVERVIEW_UI);

    public final int ordinal;
    private final int mFlags;
+7 −6
Original line number Diff line number Diff line
@@ -17,8 +17,9 @@ import android.widget.ImageView;

import androidx.annotation.Nullable;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAnimUtils;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
@@ -43,7 +44,7 @@ public class FloatingTaskView extends FrameLayout {

    private SplitPlaceholderView mSplitPlaceholderView;
    private RectF mStartingPosition;
    private final Launcher mLauncher;
    private final BaseDraggingActivity mActivity;
    private final boolean mIsRtl;
    private final Rect mOutline = new Rect();
    private PagedOrientationHandler mOrientationHandler;
@@ -59,7 +60,7 @@ public class FloatingTaskView extends FrameLayout {

    public FloatingTaskView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mLauncher = Launcher.getLauncher(context);
        mActivity = BaseActivity.fromContext(context);
        mIsRtl = Utilities.isRtl(getResources());
    }

@@ -114,7 +115,7 @@ public class FloatingTaskView extends FrameLayout {
    public void updateInitialPositionForView(TaskView originalView) {
        View thumbnail = originalView.getThumbnail();
        Rect viewBounds = new Rect(0, 0, thumbnail.getWidth(), thumbnail.getHeight());
        Utilities.getBoundsForViewInDragLayer(mLauncher.getDragLayer(), thumbnail, viewBounds,
        Utilities.getBoundsForViewInDragLayer(mActivity.getDragLayer(), thumbnail, viewBounds,
                true /* ignoreTransform */, null /* recycle */,
                mStartingPosition);
        mStartingPosition.offset(originalView.getTranslationX(), originalView.getTranslationY());
@@ -161,7 +162,7 @@ public class FloatingTaskView extends FrameLayout {
        // Position the floating view exactly on top of the original
        lp.topMargin = Math.round(pos.top);
        if (mIsRtl) {
            lp.setMarginStart(mLauncher.getDeviceProfile().widthPx - Math.round(pos.right));
            lp.setMarginStart(mActivity.getDeviceProfile().widthPx - Math.round(pos.right));
        } else {
            lp.setMarginStart(Math.round(pos.left));
        }
@@ -174,7 +175,7 @@ public class FloatingTaskView extends FrameLayout {

    public void addAnimation(PendingAnimation animation, RectF startingBounds, Rect endBounds,
            View viewToCover, boolean fadeWithThumbnail) {
        final BaseDragLayer dragLayer = mLauncher.getDragLayer();
        final BaseDragLayer dragLayer = mActivity.getDragLayer();
        int[] dragLayerBounds = new int[2];
        dragLayer.getLocationOnScreen(dragLayerBounds);
        SplitOverlayProperties prop = new SplitOverlayProperties(endBounds,
Loading