Implement swipe gesture for staged split in landscape

* Maintain task split percentages when swiping up.
* Split percentages not maintained in GroupedTaskView, however.
That is a TODO.

Bug: 181704764, 181705607
Test: Swiped up in landscape with home rotation on/off.
Portrait still works.

Change-Id: Iec62abae34f6ccadf98e2afdc9409cf3160f8223
This commit is contained in:
Vinit Nayak
2021-08-24 17:24:49 -07:00
parent c8295216d5
commit 8b78c138d4
6 changed files with 109 additions and 37 deletions
@@ -25,6 +25,7 @@ import static com.android.launcher3.util.SplitConfigurationOptions.STAGE_TYPE_MA
import android.content.res.Resources;
import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
@@ -40,6 +41,7 @@ import android.widget.LinearLayout;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.SplitConfigurationOptions;
import com.android.launcher3.util.SplitConfigurationOptions.SplitPositionOption;
import com.android.launcher3.views.BaseDragLayer;
@@ -467,6 +469,44 @@ public class PortraitPagedViewHandler implements PagedOrientationHandler {
mTmpRectF.roundOut(out2);
}
@Override
public void setSplitTaskSwipeRect(DeviceProfile dp, Rect outRect,
SplitConfigurationOptions.StagedSplitBounds splitInfo, int desiredStagePosition) {
boolean isLandscape = dp.isLandscape;
float diff;
if (desiredStagePosition == SplitConfigurationOptions.STAGE_POSITION_TOP_OR_LEFT) {
if (isLandscape) {
diff = outRect.width() * (1f - splitInfo.mLeftTaskPercent);
outRect.right -= diff;
} else {
diff = outRect.height() * (1f - splitInfo.mTopTaskPercent);
outRect.bottom -= diff;
}
} else {
if (isLandscape) {
diff = outRect.width() * splitInfo.mLeftTaskPercent;
outRect.left += diff;
} else {
diff = outRect.height() * splitInfo.mTopTaskPercent;
outRect.top += diff;
}
}
}
@Override
public void setLeashSplitOffset(Point splitOffset, DeviceProfile dp,
SplitConfigurationOptions.StagedSplitBounds splitInfo, int desiredStagePosition) {
if (desiredStagePosition == STAGE_POSITION_BOTTOM_OR_RIGHT) {
if (dp.isLandscape) {
splitOffset.x = splitInfo.mLeftTopBounds.width() +
splitInfo.mDividerBounds.width() / 2;
} else {
splitOffset.y = splitInfo.mLeftTopBounds.height() +
splitInfo.mDividerBounds.height() / 2;
}
}
}
@Override
public FloatProperty getSplitSelectTaskOffset(FloatProperty primary, FloatProperty secondary,
DeviceProfile dp) {