diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java index 9097c8b4c2..0652d48c11 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java @@ -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); } diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java index c1c8c1bb55..01d51f82cb 100644 --- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java +++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java @@ -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; diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index db651a8eab..e0d2702fd4 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -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 ALPHA_FLOAT = new FloatProperty("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); + } } diff --git a/src/com/android/launcher3/touch/PortraitPagedViewHandler.java b/src/com/android/launcher3/touch/PortraitPagedViewHandler.java index b2cc31bcd0..31586e7428 100644 --- a/src/com/android/launcher3/touch/PortraitPagedViewHandler.java +++ b/src/com/android/launcher3/touch/PortraitPagedViewHandler.java @@ -311,21 +311,31 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler { @Override public List getSplitPositionOptions(DeviceProfile dp) { List 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_TOP_OR_LEFT, STAGE_TYPE_MAIN)); - } else if (dp.isLandscape) { + 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 { - // Only add top option - options.add(new SplitPositionOption( - R.drawable.ic_split_screen, R.string.split_screen_position_top, - STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN)); + 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, + STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN)); + } else { + // Only add top option + options.add(new SplitPositionOption( + R.drawable.ic_split_screen, R.string.split_screen_position_top, + STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN)); + } } return options; }