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

Commit 0e162720 authored by Vinit Nayak's avatar Vinit Nayak
Browse files

Place split selection placeholder view based on option selected

* Add first split app's choosen icon inside the view

TODO: Update animation of where selected app goes.

Bug: 181704764
Test: Tested tablet + phone, real and fake landscape
Change-Id: Ia3c635b056f2ac3812a0df001bbbb38bde26f6af
parent 70938389
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ public final class RecentsViewStateController extends
                        ANIM_OVERVIEW_ACTIONS_FADE, LINEAR));

        float splitPlaceholderAlpha = state.areElementsVisible(mLauncher, SPLIT_PLACHOLDER_VIEW) ?
                0.7f : 0;
                0.85f : 0;
        propertySetter.setFloat(mRecentsView.getSplitPlaceholder(), ALPHA_FLOAT,
                splitPlaceholderAlpha, LINEAR);
    }
+27 −0
Original line number Diff line number Diff line
@@ -16,16 +16,20 @@

package com.android.quickstep.util;

import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT;
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT;

import android.animation.AnimatorSet;
import android.app.ActivityOptions;
import android.content.res.Resources;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.util.Pair;
import android.view.Gravity;
import android.view.SurfaceControl;
import android.window.TransitionInfo;

@@ -33,7 +37,10 @@ import androidx.annotation.Nullable;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.BaseQuickstepLauncher;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.LauncherAnimationRunner;
import com.android.launcher3.R;
import com.android.launcher3.WrappedAnimationRunnerImpl;
import com.android.launcher3.WrappedLauncherAnimationRunner;
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
@@ -115,6 +122,26 @@ public class SplitSelectStateController {
        resetState();
    }

    /**
     * @return {@link InsettableFrameLayout.LayoutParams} to correctly position the
     * split placeholder view
     */
    public InsettableFrameLayout.LayoutParams getLayoutParamsForActivePosition(Resources resources,
            DeviceProfile deviceProfile) {
        InsettableFrameLayout.LayoutParams params =
                new InsettableFrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT);
        boolean topLeftPosition = mInitialPosition.mStagePosition == STAGE_POSITION_TOP_OR_LEFT;
        if (deviceProfile.isLandscape) {
            params.width = (int) resources.getDimension(R.dimen.split_placeholder_size);
            params.gravity = topLeftPosition ? Gravity.START : Gravity.END;
        } else {
            params.height = (int) resources.getDimension(R.dimen.split_placeholder_size);
            params.gravity = Gravity.TOP;
        }

        return params;
    }

    @Nullable
    public SplitPositionOption getActiveSplitPositionOption() {
        return mInitialPosition;
+7 −1
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ import com.android.quickstep.util.LayoutUtils;
import com.android.quickstep.util.MultiValueUpdateListener;
import com.android.quickstep.util.RecentsOrientedState;
import com.android.quickstep.util.SplitScreenBounds;
import com.android.quickstep.util.SplitSelectStateController;
import com.android.quickstep.util.SurfaceTransactionApplier;
import com.android.quickstep.util.TaskViewSimulator;
import com.android.quickstep.util.TransformParams;
@@ -2753,9 +2754,14 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T

    public void initiateSplitSelect(TaskView taskView, SplitPositionOption splitPositionOption) {
        mSplitHiddenTaskView = taskView;
        mSplitPlaceholderView.getSplitController().setInitialTaskSelect(taskView,
        SplitSelectStateController splitController = mSplitPlaceholderView.getSplitController();
        splitController.setInitialTaskSelect(taskView,
                splitPositionOption);
        mSplitHiddenTaskViewIndex = indexOfChild(taskView);
        mSplitPlaceholderView.setLayoutParams(
                splitController.getLayoutParamsForActivePosition(getResources(),
                        mActivity.getDeviceProfile()));
        mSplitPlaceholderView.setIcon(taskView.getIconView());
    }

    public PendingAnimation createSplitSelectInitAnimation() {
+15 −2
Original line number Diff line number Diff line
@@ -19,11 +19,12 @@ package com.android.quickstep.views;
import android.content.Context;
import android.util.AttributeSet;
import android.util.FloatProperty;
import android.view.View;
import android.view.Gravity;
import android.widget.FrameLayout;

import com.android.quickstep.util.SplitSelectStateController;

public class SplitPlaceholderView extends View {
public class SplitPlaceholderView extends FrameLayout {

    public static final FloatProperty<SplitPlaceholderView> ALPHA_FLOAT =
            new FloatProperty<SplitPlaceholderView>("SplitViewAlpha") {
@@ -40,6 +41,7 @@ public class SplitPlaceholderView extends View {
            };

    private SplitSelectStateController mSplitController;
    private IconView mIcon;

    public SplitPlaceholderView(Context context, AttributeSet attrs) {
        super(context, attrs);
@@ -52,4 +54,15 @@ public class SplitPlaceholderView extends View {
    public SplitSelectStateController getSplitController() {
        return mSplitController;
    }

    public void setIcon(IconView icon) {
        if (mIcon == null) {
            mIcon = new IconView(getContext());
            addView(mIcon);
        }
        mIcon.setDrawable(icon.getDrawable());
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(icon.getLayoutParams());
        params.gravity = Gravity.CENTER;
        mIcon.setLayoutParams(params);
    }
}
+18 −8
Original line number Diff line number Diff line
@@ -311,12 +311,21 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
    @Override
    public List<SplitPositionOption> getSplitPositionOptions(DeviceProfile dp) {
        List<SplitPositionOption> options = new ArrayList<>(1);
        // Add both left and right options if we're in tablet mode
        // TODO: Add in correct icons
        if (dp.isSeascape()) { // or seascape
            // Add left/right options
        if (dp.isTablet && dp.isLandscape) {
            options.add(new SplitPositionOption(
                    R.drawable.ic_split_screen, R.string.split_screen_position_right,
                    STAGE_POSITION_BOTTOM_OR_RIGHT, STAGE_TYPE_MAIN));
            options.add(new SplitPositionOption(
                    R.drawable.ic_split_screen, R.string.split_screen_position_left,
                    STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN));
        } else {
            if (dp.isSeascape()) {
                // Add left/right options
                options.add(new SplitPositionOption(
                        R.drawable.ic_split_screen, R.string.split_screen_position_right,
                        STAGE_POSITION_BOTTOM_OR_RIGHT, STAGE_TYPE_MAIN));
            } else if (dp.isLandscape) {
                options.add(new SplitPositionOption(
                        R.drawable.ic_split_screen, R.string.split_screen_position_left,
@@ -327,6 +336,7 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
                        R.drawable.ic_split_screen, R.string.split_screen_position_top,
                        STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN));
            }
        }
        return options;
    }