Merge "DO NOT MERGE - Merge RQ3A.210605.005"

This commit is contained in:
Xin Li
2021-06-21 05:49:03 +00:00
committed by Gerrit Code Review
10 changed files with 176 additions and 25 deletions
-12
View File
@@ -91,9 +91,6 @@ LOCAL_FULL_LIBS_MANIFEST_FILES := $(LOCAL_PATH)/AndroidManifest-common.xml
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
include $(BUILD_PACKAGE)
#
@@ -127,9 +124,6 @@ LOCAL_FULL_LIBS_MANIFEST_FILES := \
LOCAL_MANIFEST_FILE := go/AndroidManifest.xml
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
include $(BUILD_PACKAGE)
#
@@ -206,9 +200,6 @@ LOCAL_FULL_LIBS_MANIFEST_FILES := \
LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
include $(BUILD_PACKAGE)
@@ -259,9 +250,6 @@ LOCAL_FULL_LIBS_MANIFEST_FILES := \
LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml
LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.*
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
LOCAL_LICENSE_CONDITIONS := notice
LOCAL_NOTICE_FILE := $(LOCAL_PATH)/NOTICE
include $(BUILD_PACKAGE)
@@ -147,10 +147,10 @@ public class TaskOverlayFactory implements ResourceBasedOverride {
public void initOverlay(Task task, ThumbnailData thumbnail, Matrix matrix,
boolean rotated) {
getActionsView().updateDisabledFlags(DISABLED_NO_THUMBNAIL, thumbnail == null);
final boolean isAllowedByPolicy = mThumbnailView.isRealSnapshot();
if (thumbnail != null) {
getActionsView().updateDisabledFlags(DISABLED_ROTATED, rotated);
final boolean isAllowedByPolicy = thumbnail.isRealSnapshot;
getActionsView().setCallbacks(new OverlayUICallbacks() {
@Override
@@ -73,7 +73,6 @@ import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.FloatProperty;
import android.util.Property;
import android.util.SparseBooleanArray;
import android.view.HapticFeedbackConstants;
import android.view.KeyEvent;
@@ -1488,7 +1487,9 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
}
int scrollDiff = newScroll[i] - oldScroll[i] + offset;
if (scrollDiff != 0) {
Property translationProperty = mOrientationHandler.getPrimaryViewTranslate();
FloatProperty translationProperty = child instanceof TaskView
? ((TaskView) child).getPrimaryFillDismissGapTranslationProperty()
: mOrientationHandler.getPrimaryViewTranslate();
ResourceProvider rp = DynamicResource.provider(mActivity);
SpringProperty sp = new SpringProperty(SpringProperty.FLAG_CAN_SPRING_ON_END)
@@ -1883,7 +1884,11 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
? modalLeftOffsetSize
: modalRightOffsetSize;
float totalTranslation = translation + modalTranslation;
mOrientationHandler.getPrimaryViewTranslate().set(getChildAt(i),
View child = getChildAt(i);
FloatProperty translationProperty = child instanceof TaskView
? ((TaskView) child).getPrimaryTaskOffsetTranslationProperty()
: mOrientationHandler.getPrimaryViewTranslate();
translationProperty.set(child,
totalTranslation * mOrientationHandler.getPrimaryTranslationDirectionFactor());
}
updateCurveProperties();
@@ -447,13 +447,14 @@ public class TaskThumbnailView extends View implements PluginListener<OverviewSc
}
/**
* Returns whether the snapshot is real.
* Returns whether the snapshot is real. If the device is locked for the user of the task,
* the snapshot used will be an app-theme generated snapshot instead of a real snapshot.
*/
public boolean isRealSnapshot() {
if (mThumbnailData == null) {
return false;
}
return mThumbnailData.isRealSnapshot;
return mThumbnailData.isRealSnapshot && !mTask.isLocked;
}
/**
@@ -153,6 +153,58 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
}
};
private static final FloatProperty<TaskView> FILL_DISMISS_GAP_TRANSLATION_X =
new FloatProperty<TaskView>("fillDismissGapTranslationX") {
@Override
public void setValue(TaskView taskView, float v) {
taskView.setFillDismissGapTranslationX(v);
}
@Override
public Float get(TaskView taskView) {
return taskView.mFillDismissGapTranslationX;
}
};
private static final FloatProperty<TaskView> FILL_DISMISS_GAP_TRANSLATION_Y =
new FloatProperty<TaskView>("fillDismissGapTranslationY") {
@Override
public void setValue(TaskView taskView, float v) {
taskView.setFillDismissGapTranslationY(v);
}
@Override
public Float get(TaskView taskView) {
return taskView.mFillDismissGapTranslationY;
}
};
private static final FloatProperty<TaskView> TASK_OFFSET_TRANSLATION_X =
new FloatProperty<TaskView>("taskOffsetTranslationX") {
@Override
public void setValue(TaskView taskView, float v) {
taskView.setTaskOffsetTranslationX(v);
}
@Override
public Float get(TaskView taskView) {
return taskView.mTaskOffsetTranslationX;
}
};
private static final FloatProperty<TaskView> TASK_OFFSET_TRANSLATION_Y =
new FloatProperty<TaskView>("taskOffsetTranslationY") {
@Override
public void setValue(TaskView taskView, float v) {
taskView.setTaskOffsetTranslationY(v);
}
@Override
public Float get(TaskView taskView) {
return taskView.mTaskOffsetTranslationY;
}
};
private final OnAttachStateChangeListener mTaskMenuStateListener =
new OnAttachStateChangeListener() {
@Override
@@ -180,6 +232,13 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
private final FullscreenDrawParams mCurrentFullscreenParams;
private final BaseDraggingActivity mActivity;
// Various causes of changing primary translation, which we aggregate to setTranslationX/Y().
// TODO: We should do this for secondary translation properties as well.
private float mFillDismissGapTranslationX;
private float mFillDismissGapTranslationY;
private float mTaskOffsetTranslationX;
private float mTaskOffsetTranslationY;
private ObjectAnimator mIconAndDimAnimator;
private float mIconScaleAnimStartProgress = 0;
private float mFocusTransitionProgress = 1;
@@ -619,6 +678,8 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
protected void resetViewTransforms() {
setCurveScale(1);
mFillDismissGapTranslationX = mTaskOffsetTranslationX = 0f;
mFillDismissGapTranslationY = mTaskOffsetTranslationY = 0f;
setTranslationX(0f);
setTranslationY(0f);
setTranslationZ(0);
@@ -835,6 +896,44 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
return mCurveScale;
}
private void setFillDismissGapTranslationX(float x) {
mFillDismissGapTranslationX = x;
applyTranslationX();
}
private void setFillDismissGapTranslationY(float y) {
mFillDismissGapTranslationY = y;
applyTranslationY();
}
private void setTaskOffsetTranslationX(float x) {
mTaskOffsetTranslationX = x;
applyTranslationX();
}
private void setTaskOffsetTranslationY(float y) {
mTaskOffsetTranslationY = y;
applyTranslationY();
}
private void applyTranslationX() {
setTranslationX(mFillDismissGapTranslationX + mTaskOffsetTranslationX);
}
private void applyTranslationY() {
setTranslationY(mFillDismissGapTranslationY + mTaskOffsetTranslationY);
}
public FloatProperty<TaskView> getPrimaryFillDismissGapTranslationProperty() {
return getPagedOrientationHandler().getPrimaryValue(
FILL_DISMISS_GAP_TRANSLATION_X, FILL_DISMISS_GAP_TRANSLATION_Y);
}
public FloatProperty<TaskView> getPrimaryTaskOffsetTranslationProperty() {
return getPagedOrientationHandler().getPrimaryValue(
TASK_OFFSET_TRANSLATION_X, TASK_OFFSET_TRANSLATION_Y);
}
@Override
public boolean hasOverlappingRendering() {
// TODO: Clip-out the icon region from the thumbnail, since they are overlapping.
@@ -115,7 +115,7 @@ public class CheckLongPressHelper {
private void triggerLongPress() {
if ((mView.getParent() != null)
&& mView.hasWindowFocus()
&& (!mView.isPressed() || mListener == null)
&& (!mView.isPressed() || mListener != null)
&& !mHasPerformedLongPress) {
boolean handled;
if (mListener != null) {
@@ -42,12 +42,12 @@ import com.android.launcher3.util.OverScroller;
public class LandscapePagedViewHandler implements PagedOrientationHandler {
@Override
public int getPrimaryValue(int x, int y) {
public <T> T getPrimaryValue(T x, T y) {
return y;
}
@Override
public int getSecondaryValue(int x, int y) {
public <T> T getSecondaryValue(T x, T y) {
return x;
}
@@ -83,8 +83,8 @@ public interface PagedOrientationHandler {
boolean getRecentsRtlSetting(Resources resources);
float getDegreesRotated();
int getRotation();
int getPrimaryValue(int x, int y);
int getSecondaryValue(int x, int y);
<T> T getPrimaryValue(T x, T y);
<T> T getSecondaryValue(T x, T y);
void delegateScrollTo(PagedView pagedView, int secondaryScroll, int primaryScroll);
/** Uses {@params pagedView}.getScroll[X|Y]() method for the secondary amount*/
void delegateScrollTo(PagedView pagedView, int primaryScroll);
@@ -40,12 +40,12 @@ import com.android.launcher3.util.OverScroller;
public class PortraitPagedViewHandler implements PagedOrientationHandler {
@Override
public int getPrimaryValue(int x, int y) {
public <T> T getPrimaryValue(T x, T y) {
return x;
}
@Override
public int getSecondaryValue(int x, int y) {
public <T> T getSecondaryValue(T x, T y) {
return y;
}
@@ -210,6 +210,64 @@ public class Background extends LauncherInstrumentation.VisibleContainer {
}
mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, TASK_START_EVENT);
}
/** Swipes left to switch to the previous app. */
public Background quickSwitchToPreviousAppSwipeLeft() {
try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
LauncherInstrumentation.Closable c =
mLauncher.addContextLayer("want to quick switch to the previous app")) {
verifyActiveContainer();
quickSwitchToPreviousAppSwipeLeft(getExpectedStateForQuickSwitch());
return new Background(mLauncher);
}
}
protected void quickSwitchToPreviousAppSwipeLeft(int expectedState) {
final boolean launcherWasVisible = mLauncher.isLauncherVisible();
boolean transposeInLandscape = false;
switch (mLauncher.getNavigationModel()) {
case TWO_BUTTON:
transposeInLandscape = true;
// Fall through, zero button and two button modes behave the same.
case ZERO_BUTTON: {
final int startX;
final int startY;
final int endX;
final int endY;
if (mLauncher.getDevice().isNaturalOrientation() || !transposeInLandscape) {
// Swipe from the bottom right to the bottom left of the screen.
startX = mLauncher.getDevice().getDisplayWidth();
startY = getSwipeStartY();
endX = 0;
endY = startY;
} else {
// Swipe from the bottom right to the top right of the screen.
startX = getSwipeStartX();
startY = mLauncher.getRealDisplaySize().y - 1;
endX = startX;
endY = 0;
}
final boolean isZeroButton =
mLauncher.getNavigationModel()
== LauncherInstrumentation.NavigationModel.ZERO_BUTTON;
mLauncher.swipeToState(startX, startY, endX, endY, 20, expectedState,
launcherWasVisible && isZeroButton
? LauncherInstrumentation.GestureScope.INSIDE_TO_OUTSIDE
: LauncherInstrumentation.GestureScope.OUTSIDE_WITH_PILFER);
break;
}
case THREE_BUTTON:
// Double press the recents button.
UiObject2 recentsButton = mLauncher.waitForSystemUiObject("recent_apps");
mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, SQUARE_BUTTON_EVENT);
mLauncher.runToState(() -> recentsButton.click(), OVERVIEW_STATE_ORDINAL);
mLauncher.getOverview();
mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, SQUARE_BUTTON_EVENT);
recentsButton.click();
break;
}
mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, TASK_START_EVENT);
}
protected String getSwipeHeightRequestName() {
return TestProtocol.REQUEST_BACKGROUND_TO_OVERVIEW_SWIPE_HEIGHT;