Merge "Place split selection placeholder view based on option selected" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a0c3bbfd2c
@@ -113,7 +113,7 @@ public final class RecentsViewStateController extends
|
|||||||
ANIM_OVERVIEW_ACTIONS_FADE, LINEAR));
|
ANIM_OVERVIEW_ACTIONS_FADE, LINEAR));
|
||||||
|
|
||||||
float splitPlaceholderAlpha = state.areElementsVisible(mLauncher, SPLIT_PLACHOLDER_VIEW) ?
|
float splitPlaceholderAlpha = state.areElementsVisible(mLauncher, SPLIT_PLACHOLDER_VIEW) ?
|
||||||
0.7f : 0;
|
0.85f : 0;
|
||||||
propertySetter.setFloat(mRecentsView.getSplitPlaceholder(), ALPHA_FLOAT,
|
propertySetter.setFloat(mRecentsView.getSplitPlaceholder(), ALPHA_FLOAT,
|
||||||
splitPlaceholderAlpha, LINEAR);
|
splitPlaceholderAlpha, LINEAR);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,20 @@
|
|||||||
|
|
||||||
package com.android.quickstep.util;
|
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.Executors.MAIN_EXECUTOR;
|
||||||
import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_BOTTOM_OR_RIGHT;
|
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 static com.android.launcher3.util.SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT;
|
||||||
|
|
||||||
import android.animation.AnimatorSet;
|
import android.animation.AnimatorSet;
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
import android.view.Gravity;
|
||||||
import android.view.SurfaceControl;
|
import android.view.SurfaceControl;
|
||||||
import android.window.TransitionInfo;
|
import android.window.TransitionInfo;
|
||||||
|
|
||||||
@@ -33,7 +37,10 @@ import androidx.annotation.Nullable;
|
|||||||
|
|
||||||
import com.android.launcher3.BaseActivity;
|
import com.android.launcher3.BaseActivity;
|
||||||
import com.android.launcher3.BaseQuickstepLauncher;
|
import com.android.launcher3.BaseQuickstepLauncher;
|
||||||
|
import com.android.launcher3.DeviceProfile;
|
||||||
|
import com.android.launcher3.InsettableFrameLayout;
|
||||||
import com.android.launcher3.LauncherAnimationRunner;
|
import com.android.launcher3.LauncherAnimationRunner;
|
||||||
|
import com.android.launcher3.R;
|
||||||
import com.android.launcher3.WrappedAnimationRunnerImpl;
|
import com.android.launcher3.WrappedAnimationRunnerImpl;
|
||||||
import com.android.launcher3.WrappedLauncherAnimationRunner;
|
import com.android.launcher3.WrappedLauncherAnimationRunner;
|
||||||
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
|
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
|
||||||
@@ -115,6 +122,26 @@ public class SplitSelectStateController {
|
|||||||
resetState();
|
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
|
@Nullable
|
||||||
public SplitPositionOption getActiveSplitPositionOption() {
|
public SplitPositionOption getActiveSplitPositionOption() {
|
||||||
return mInitialPosition;
|
return mInitialPosition;
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ import com.android.quickstep.util.LayoutUtils;
|
|||||||
import com.android.quickstep.util.MultiValueUpdateListener;
|
import com.android.quickstep.util.MultiValueUpdateListener;
|
||||||
import com.android.quickstep.util.RecentsOrientedState;
|
import com.android.quickstep.util.RecentsOrientedState;
|
||||||
import com.android.quickstep.util.SplitScreenBounds;
|
import com.android.quickstep.util.SplitScreenBounds;
|
||||||
|
import com.android.quickstep.util.SplitSelectStateController;
|
||||||
import com.android.quickstep.util.SurfaceTransactionApplier;
|
import com.android.quickstep.util.SurfaceTransactionApplier;
|
||||||
import com.android.quickstep.util.TaskViewSimulator;
|
import com.android.quickstep.util.TaskViewSimulator;
|
||||||
import com.android.quickstep.util.TransformParams;
|
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) {
|
public void initiateSplitSelect(TaskView taskView, SplitPositionOption splitPositionOption) {
|
||||||
mSplitHiddenTaskView = taskView;
|
mSplitHiddenTaskView = taskView;
|
||||||
mSplitPlaceholderView.getSplitController().setInitialTaskSelect(taskView,
|
SplitSelectStateController splitController = mSplitPlaceholderView.getSplitController();
|
||||||
|
splitController.setInitialTaskSelect(taskView,
|
||||||
splitPositionOption);
|
splitPositionOption);
|
||||||
mSplitHiddenTaskViewIndex = indexOfChild(taskView);
|
mSplitHiddenTaskViewIndex = indexOfChild(taskView);
|
||||||
|
mSplitPlaceholderView.setLayoutParams(
|
||||||
|
splitController.getLayoutParamsForActivePosition(getResources(),
|
||||||
|
mActivity.getDeviceProfile()));
|
||||||
|
mSplitPlaceholderView.setIcon(taskView.getIconView());
|
||||||
}
|
}
|
||||||
|
|
||||||
public PendingAnimation createSplitSelectInitAnimation() {
|
public PendingAnimation createSplitSelectInitAnimation() {
|
||||||
|
|||||||
@@ -19,11 +19,12 @@ package com.android.quickstep.views;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.util.FloatProperty;
|
import android.util.FloatProperty;
|
||||||
import android.view.View;
|
import android.view.Gravity;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
|
||||||
import com.android.quickstep.util.SplitSelectStateController;
|
import com.android.quickstep.util.SplitSelectStateController;
|
||||||
|
|
||||||
public class SplitPlaceholderView extends View {
|
public class SplitPlaceholderView extends FrameLayout {
|
||||||
|
|
||||||
public static final FloatProperty<SplitPlaceholderView> ALPHA_FLOAT =
|
public static final FloatProperty<SplitPlaceholderView> ALPHA_FLOAT =
|
||||||
new FloatProperty<SplitPlaceholderView>("SplitViewAlpha") {
|
new FloatProperty<SplitPlaceholderView>("SplitViewAlpha") {
|
||||||
@@ -40,6 +41,7 @@ public class SplitPlaceholderView extends View {
|
|||||||
};
|
};
|
||||||
|
|
||||||
private SplitSelectStateController mSplitController;
|
private SplitSelectStateController mSplitController;
|
||||||
|
private IconView mIcon;
|
||||||
|
|
||||||
public SplitPlaceholderView(Context context, AttributeSet attrs) {
|
public SplitPlaceholderView(Context context, AttributeSet attrs) {
|
||||||
super(context, attrs);
|
super(context, attrs);
|
||||||
@@ -52,4 +54,15 @@ public class SplitPlaceholderView extends View {
|
|||||||
public SplitSelectStateController getSplitController() {
|
public SplitSelectStateController getSplitController() {
|
||||||
return mSplitController;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -311,21 +311,31 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
|
|||||||
@Override
|
@Override
|
||||||
public List<SplitPositionOption> getSplitPositionOptions(DeviceProfile dp) {
|
public List<SplitPositionOption> getSplitPositionOptions(DeviceProfile dp) {
|
||||||
List<SplitPositionOption> options = new ArrayList<>(1);
|
List<SplitPositionOption> options = new ArrayList<>(1);
|
||||||
|
// Add both left and right options if we're in tablet mode
|
||||||
// TODO: Add in correct icons
|
// TODO: Add in correct icons
|
||||||
if (dp.isSeascape()) { // or seascape
|
if (dp.isTablet && dp.isLandscape) {
|
||||||
// Add left/right options
|
|
||||||
options.add(new SplitPositionOption(
|
options.add(new SplitPositionOption(
|
||||||
R.drawable.ic_split_screen, R.string.split_screen_position_right,
|
R.drawable.ic_split_screen, R.string.split_screen_position_right,
|
||||||
STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN));
|
STAGE_POSITION_BOTTOM_OR_RIGHT, STAGE_TYPE_MAIN));
|
||||||
} else if (dp.isLandscape) {
|
|
||||||
options.add(new SplitPositionOption(
|
options.add(new SplitPositionOption(
|
||||||
R.drawable.ic_split_screen, R.string.split_screen_position_left,
|
R.drawable.ic_split_screen, R.string.split_screen_position_left,
|
||||||
STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN));
|
STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN));
|
||||||
} else {
|
} else {
|
||||||
// Only add top option
|
if (dp.isSeascape()) {
|
||||||
options.add(new SplitPositionOption(
|
// Add left/right options
|
||||||
R.drawable.ic_split_screen, R.string.split_screen_position_top,
|
options.add(new SplitPositionOption(
|
||||||
STAGE_POSITION_TOP_OR_LEFT, STAGE_TYPE_MAIN));
|
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;
|
return options;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user