Snap for 7732471 from 0b6246f5a0 to tm-release
Change-Id: I8d098c42dc63dd5a0b3ed20d09c67a11f9489727
This commit is contained in:
@@ -270,7 +270,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
TaskAnimationManager taskAnimationManager, GestureState gestureState,
|
||||
long touchTimeMs, boolean continuingLastGesture,
|
||||
InputConsumerController inputConsumer) {
|
||||
super(context, deviceState, gestureState, new TransformParams());
|
||||
super(context, deviceState, gestureState);
|
||||
mActivityInterface = gestureState.getActivityInterface();
|
||||
mActivityInitListener = mActivityInterface.createActivityInitListener(this::onActivityInit);
|
||||
mInputConsumerProxy =
|
||||
|
||||
@@ -80,7 +80,7 @@ public abstract class SwipeUpAnimationLogic implements
|
||||
protected boolean mIsSwipeForStagedSplit;
|
||||
|
||||
public SwipeUpAnimationLogic(Context context, RecentsAnimationDeviceState deviceState,
|
||||
GestureState gestureState, TransformParams transformParams) {
|
||||
GestureState gestureState) {
|
||||
mContext = context;
|
||||
mDeviceState = deviceState;
|
||||
mGestureState = gestureState;
|
||||
|
||||
+4
-1
@@ -50,6 +50,7 @@ import com.android.quickstep.AnimatedFloat;
|
||||
import com.android.quickstep.GestureState;
|
||||
import com.android.quickstep.OverviewComponentObserver;
|
||||
import com.android.quickstep.RecentsAnimationDeviceState;
|
||||
import com.android.quickstep.RemoteTargetGluer;
|
||||
import com.android.quickstep.SwipeUpAnimationLogic;
|
||||
import com.android.quickstep.SwipeUpAnimationLogic.RunningWindowAnim;
|
||||
import com.android.quickstep.util.AppCloseConfig;
|
||||
@@ -254,7 +255,9 @@ abstract class SwipeUpGestureTutorialController extends TutorialController {
|
||||
|
||||
ViewSwipeUpAnimation(Context context, RecentsAnimationDeviceState deviceState,
|
||||
GestureState gestureState) {
|
||||
super(context, deviceState, gestureState, new FakeTransformParams());
|
||||
super(context, deviceState, gestureState);
|
||||
mRemoteTargetHandles[0] = new RemoteTargetGluer.RemoteTargetHandle(
|
||||
mRemoteTargetHandles[0].getTaskViewSimulator(), new FakeTransformParams());
|
||||
}
|
||||
|
||||
void initDp(DeviceProfile dp) {
|
||||
|
||||
@@ -31,6 +31,7 @@ public class GroupedTaskView extends TaskView {
|
||||
private Task mSecondaryTask;
|
||||
private TaskThumbnailView mSnapshotView2;
|
||||
private CancellableTask mThumbnailLoadRequest2;
|
||||
private SplitConfigurationOptions.StagedSplitBounds mSplitBoundsConfig;
|
||||
|
||||
public GroupedTaskView(Context context) {
|
||||
super(context);
|
||||
@@ -57,7 +58,7 @@ public class GroupedTaskView extends TaskView {
|
||||
mTaskIdContainer[1] = secondary.key.id;
|
||||
mTaskIdAttributeContainer[1] = new TaskIdAttributeContainer(secondary, mSnapshotView2);
|
||||
mSnapshotView2.bind(secondary);
|
||||
adjustThumbnailBoundsForSplit(splitBoundsConfig, orientedState);
|
||||
mSplitBoundsConfig = splitBoundsConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -121,6 +122,21 @@ public class GroupedTaskView extends TaskView {
|
||||
public void onRecycle() {
|
||||
super.onRecycle();
|
||||
mSnapshotView2.setThumbnail(mSecondaryTask, null);
|
||||
mSplitBoundsConfig = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
|
||||
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
|
||||
setMeasuredDimension(widthSize, heightSize);
|
||||
if (mSplitBoundsConfig == null || mSnapshotView == null || mSnapshotView2 == null) {
|
||||
return;
|
||||
}
|
||||
getPagedOrientationHandler().measureGroupedTaskViewThumbnailBounds(mSnapshotView,
|
||||
mSnapshotView2, widthSize, heightSize, mSplitBoundsConfig,
|
||||
mActivity.getDeviceProfile());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -128,16 +144,4 @@ public class GroupedTaskView extends TaskView {
|
||||
super.setOverlayEnabled(overlayEnabled);
|
||||
mSnapshotView2.setOverlayEnabled(overlayEnabled);
|
||||
}
|
||||
|
||||
private void adjustThumbnailBoundsForSplit(
|
||||
SplitConfigurationOptions.StagedSplitBounds splitBoundsConfig,
|
||||
RecentsOrientedState orientedState) {
|
||||
if (splitBoundsConfig == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
orientedState.getOrientationHandler().setGroupedTaskViewThumbnailBounds(
|
||||
mSnapshotView, mSnapshotView2, this, splitBoundsConfig,
|
||||
mActivity.getDeviceProfile());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -408,22 +408,30 @@ public class LandscapePagedViewHandler implements PagedOrientationHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGroupedTaskViewThumbnailBounds(View mSnapshotView, View mSnapshotView2,
|
||||
View taskParent, SplitConfigurationOptions.StagedSplitBounds splitBoundsConfig,
|
||||
DeviceProfile dp) {
|
||||
public void measureGroupedTaskViewThumbnailBounds(View primarySnapshot, View secondarySnapshot,
|
||||
int parentWidth, int parentHeight,
|
||||
SplitConfigurationOptions.StagedSplitBounds splitBoundsConfig, DeviceProfile dp) {
|
||||
int spaceAboveSnapshot = dp.overviewTaskThumbnailTopMarginPx;
|
||||
int totalThumbnailHeight = taskParent.getHeight() - spaceAboveSnapshot;
|
||||
int totalThumbnailWidth = taskParent.getWidth();
|
||||
int totalThumbnailHeight = parentHeight - spaceAboveSnapshot;
|
||||
int dividerBar = splitBoundsConfig.visualDividerBounds.width();
|
||||
ViewGroup.LayoutParams primaryLp = mSnapshotView.getLayoutParams();
|
||||
ViewGroup.LayoutParams secondaryLp = mSnapshotView2.getLayoutParams();
|
||||
int primarySnapshotHeight;
|
||||
int primarySnapshotWidth;
|
||||
int secondarySnapshotHeight;
|
||||
int secondarySnapshotWidth;
|
||||
|
||||
primaryLp.width = totalThumbnailWidth;
|
||||
primaryLp.height = (int) (totalThumbnailHeight * splitBoundsConfig.leftTaskPercent);
|
||||
primarySnapshotWidth = parentWidth;
|
||||
primarySnapshotHeight = (int) (totalThumbnailHeight * splitBoundsConfig.leftTaskPercent);
|
||||
|
||||
secondaryLp.width = totalThumbnailWidth;
|
||||
secondaryLp.height = totalThumbnailHeight - primaryLp.height - dividerBar;
|
||||
mSnapshotView2.setTranslationY(primaryLp.height + spaceAboveSnapshot + dividerBar);
|
||||
secondarySnapshotWidth = parentWidth;
|
||||
secondarySnapshotHeight = totalThumbnailHeight - primarySnapshotHeight - dividerBar;
|
||||
secondarySnapshot.setTranslationY(primarySnapshotHeight + spaceAboveSnapshot + dividerBar);
|
||||
primarySnapshot.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(primarySnapshotWidth, View.MeasureSpec.EXACTLY),
|
||||
View.MeasureSpec.makeMeasureSpec(primarySnapshotHeight, View.MeasureSpec.EXACTLY));
|
||||
secondarySnapshot.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(secondarySnapshotWidth, View.MeasureSpec.EXACTLY),
|
||||
View.MeasureSpec.makeMeasureSpec(secondarySnapshotHeight,
|
||||
View.MeasureSpec.EXACTLY));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -162,7 +162,8 @@ public interface PagedOrientationHandler {
|
||||
SplitConfigurationOptions.StagedSplitBounds splitInfo,
|
||||
@SplitConfigurationOptions.StagePosition int desiredStagePosition);
|
||||
|
||||
void setGroupedTaskViewThumbnailBounds(View mSnapshot1, View mSnapshot2, View taskParent,
|
||||
void measureGroupedTaskViewThumbnailBounds(View primarySnapshot, View secondarySnapshot,
|
||||
int parentWidth, int parentHeight,
|
||||
SplitConfigurationOptions.StagedSplitBounds splitBoundsConfig, DeviceProfile dp);
|
||||
|
||||
// Overview TaskMenuView methods
|
||||
|
||||
@@ -35,7 +35,6 @@ import android.view.MotionEvent;
|
||||
import android.view.Surface;
|
||||
import android.view.VelocityTracker;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
@@ -513,35 +512,46 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setGroupedTaskViewThumbnailBounds(View mSnapshotView, View mSnapshotView2,
|
||||
View taskParent, SplitConfigurationOptions.StagedSplitBounds splitBoundsConfig,
|
||||
DeviceProfile dp) {
|
||||
public void measureGroupedTaskViewThumbnailBounds(View primarySnapshot, View secondarySnapshot,
|
||||
int parentWidth, int parentHeight,
|
||||
SplitConfigurationOptions.StagedSplitBounds splitBoundsConfig, DeviceProfile dp) {
|
||||
int spaceAboveSnapshot = dp.overviewTaskThumbnailTopMarginPx;
|
||||
int totalThumbnailHeight = taskParent.getHeight() - spaceAboveSnapshot;
|
||||
int totalThumbnailWidth = taskParent.getWidth();
|
||||
int dividerBar = (dp.isLandscape ?
|
||||
splitBoundsConfig.visualDividerBounds.width() :
|
||||
splitBoundsConfig.visualDividerBounds.height());
|
||||
ViewGroup.LayoutParams primaryLp = mSnapshotView.getLayoutParams();
|
||||
ViewGroup.LayoutParams secondaryLp = mSnapshotView2.getLayoutParams();
|
||||
|
||||
int totalThumbnailHeight = parentHeight - spaceAboveSnapshot;
|
||||
int dividerBar = (splitBoundsConfig.appsStackedVertically ?
|
||||
splitBoundsConfig.visualDividerBounds.height() :
|
||||
splitBoundsConfig.visualDividerBounds.width());
|
||||
int primarySnapshotHeight;
|
||||
int primarySnapshotWidth;
|
||||
int secondarySnapshotHeight;
|
||||
int secondarySnapshotWidth;
|
||||
float taskPercent = splitBoundsConfig.appsStackedVertically ?
|
||||
splitBoundsConfig.topTaskPercent : splitBoundsConfig.leftTaskPercent;
|
||||
if (dp.isLandscape) {
|
||||
primaryLp.height = totalThumbnailHeight;
|
||||
primaryLp.width = (int) (totalThumbnailWidth * splitBoundsConfig.leftTaskPercent);
|
||||
primarySnapshotHeight = totalThumbnailHeight;
|
||||
primarySnapshotWidth = (int) (parentWidth * taskPercent);
|
||||
|
||||
secondaryLp.height = totalThumbnailHeight;
|
||||
secondaryLp.width = totalThumbnailWidth - primaryLp.width - dividerBar;
|
||||
mSnapshotView2.setTranslationX(primaryLp.width + dividerBar);
|
||||
mSnapshotView2.setTranslationY(spaceAboveSnapshot);
|
||||
secondarySnapshotHeight = totalThumbnailHeight;
|
||||
secondarySnapshotWidth = parentWidth - primarySnapshotWidth - dividerBar;
|
||||
int translationX = primarySnapshotWidth + dividerBar;
|
||||
secondarySnapshot.setTranslationX(translationX);
|
||||
secondarySnapshot.setTranslationY(spaceAboveSnapshot);
|
||||
} else {
|
||||
primaryLp.width = totalThumbnailWidth;
|
||||
primaryLp.height = (int) (totalThumbnailHeight * splitBoundsConfig.topTaskPercent);
|
||||
primarySnapshotWidth = parentWidth;
|
||||
primarySnapshotHeight = (int) (totalThumbnailHeight * taskPercent);
|
||||
|
||||
secondaryLp.width = totalThumbnailWidth;
|
||||
secondaryLp.height = totalThumbnailHeight - primaryLp.height - dividerBar;
|
||||
mSnapshotView2.setTranslationY(primaryLp.height + spaceAboveSnapshot + dividerBar);
|
||||
mSnapshotView2.setTranslationX(0);
|
||||
secondarySnapshotWidth = parentWidth;
|
||||
secondarySnapshotHeight = totalThumbnailHeight - primarySnapshotHeight - dividerBar;
|
||||
int translationY = primarySnapshotHeight + spaceAboveSnapshot + dividerBar;
|
||||
secondarySnapshot.setTranslationY(translationY);
|
||||
secondarySnapshot.setTranslationX(0);
|
||||
}
|
||||
primarySnapshot.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(primarySnapshotWidth, View.MeasureSpec.EXACTLY),
|
||||
View.MeasureSpec.makeMeasureSpec(primarySnapshotHeight, View.MeasureSpec.EXACTLY));
|
||||
secondarySnapshot.measure(
|
||||
View.MeasureSpec.makeMeasureSpec(secondarySnapshotWidth, View.MeasureSpec.EXACTLY),
|
||||
View.MeasureSpec.makeMeasureSpec(secondarySnapshotHeight,
|
||||
View.MeasureSpec.EXACTLY));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -93,7 +93,13 @@ public final class SplitConfigurationOptions {
|
||||
// This class is orientation-agnostic, so we compute both for later use
|
||||
public final float topTaskPercent;
|
||||
public final float leftTaskPercent;
|
||||
|
||||
/**
|
||||
* If {@code true}, that means at the time of creation of this object, the
|
||||
* split-screened apps were vertically stacked. This is useful in scenarios like
|
||||
* rotation where the bounds won't change, but this variable can indicate what orientation
|
||||
* the bounds were originally in
|
||||
*/
|
||||
public final boolean appsStackedVertically;
|
||||
|
||||
public StagedSplitBounds(Rect leftTopBounds, Rect rightBottomBounds) {
|
||||
this.leftTopBounds = leftTopBounds;
|
||||
@@ -103,10 +109,12 @@ public final class SplitConfigurationOptions {
|
||||
// vertical apps, horizontal divider
|
||||
this.visualDividerBounds = new Rect(leftTopBounds.left, leftTopBounds.bottom,
|
||||
leftTopBounds.right, rightBottomBounds.top);
|
||||
appsStackedVertically = true;
|
||||
} else {
|
||||
// horizontal apps, vertical divider
|
||||
this.visualDividerBounds = new Rect(leftTopBounds.right, leftTopBounds.top,
|
||||
rightBottomBounds.left, leftTopBounds.bottom);
|
||||
appsStackedVertically = false;
|
||||
}
|
||||
|
||||
leftTaskPercent = this.leftTopBounds.width() / (float) rightBottomBounds.right;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.android.launcher3.util.rule;
|
||||
|
||||
import static androidx.test.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.FileUtils;
|
||||
import android.os.ParcelFileDescriptor.AutoCloseInputStream;
|
||||
import android.util.Log;
|
||||
@@ -45,11 +46,30 @@ public class FailureWatcher extends TestWatcher {
|
||||
return new Statement() {
|
||||
@Override
|
||||
public void evaluate() throws Throwable {
|
||||
boolean success = false;
|
||||
try {
|
||||
Log.d("b/196820244", "Before evaluate");
|
||||
mDevice.executeShellCommand("cmd statusbar tracing start");
|
||||
FailureWatcher.super.apply(base, description).evaluate();
|
||||
Log.d("b/196820244", "After evaluate");
|
||||
success = true;
|
||||
} finally {
|
||||
// Save artifact for Launcher Winscope trace.
|
||||
mDevice.executeShellCommand("cmd statusbar tracing stop");
|
||||
final Context nexusLauncherContext =
|
||||
getInstrumentation().getTargetContext()
|
||||
.createPackageContext("com.google.android.apps.nexuslauncher",
|
||||
0);
|
||||
final File launcherTrace =
|
||||
new File(nexusLauncherContext.getFilesDir(), "launcher_trace.pb");
|
||||
if (success) {
|
||||
mDevice.executeShellCommand("rm " + launcherTrace);
|
||||
} else {
|
||||
mDevice.executeShellCommand("mv " + launcherTrace + " "
|
||||
+ diagFile(description, "LauncherWinscope", "pb"));
|
||||
}
|
||||
|
||||
// Detect touch events coming from physical screen.
|
||||
if (mLauncher.hadNontestEvents()) {
|
||||
throw new AssertionError(
|
||||
"Launcher received events not sent by the test. This may mean "
|
||||
|
||||
Reference in New Issue
Block a user