Merging ub-launcher3-master, build 5437471
am: 01aea983ef
Change-Id: I4648285b8687059b4d6570a6e2bc9903396bd113
This commit is contained in:
+5
-10
@@ -16,15 +16,6 @@
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := libPluginCore
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
|
||||
LOCAL_SRC_FILES := libs/plugin_core.jar
|
||||
LOCAL_UNINSTALLABLE_MODULE := true
|
||||
LOCAL_SDK_VERSION := current
|
||||
include $(BUILD_PREBUILT)
|
||||
|
||||
#
|
||||
# Build rule for plugin lib (needed to write a plugin).
|
||||
#
|
||||
@@ -33,7 +24,11 @@ LOCAL_USE_AAPT2 := true
|
||||
LOCAL_AAPT2_ONLY := true
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
|
||||
LOCAL_STATIC_JAVA_LIBRARIES:= libPluginCore
|
||||
ifneq (,$(wildcard frameworks/base))
|
||||
LOCAL_STATIC_JAVA_LIBRARIES:= PluginCoreLib
|
||||
else
|
||||
LOCAL_STATIC_JAVA_LIBRARIES:= libPluginCore
|
||||
endif
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(call all-java-files-under, src_plugins)
|
||||
|
||||
Binary file not shown.
+2
-2
@@ -59,7 +59,7 @@ public abstract class RecentsUiFactory {
|
||||
private static final float RECENTS_PREPARE_SCALE = 1.33f;
|
||||
|
||||
public static TouchController[] createTouchControllers(Launcher launcher) {
|
||||
Mode mode = SysUINavigationMode.INSTANCE.get(launcher).getMode();
|
||||
Mode mode = SysUINavigationMode.getMode(launcher);
|
||||
|
||||
ArrayList<TouchController> list = new ArrayList<>();
|
||||
list.add(launcher.getDragController());
|
||||
@@ -106,7 +106,7 @@ public abstract class RecentsUiFactory {
|
||||
* @param launcher the launcher activity
|
||||
*/
|
||||
public static void prepareToShowOverview(Launcher launcher) {
|
||||
if (FeatureFlags.SWIPE_HOME.get()) {
|
||||
if (SysUINavigationMode.getMode(launcher) == Mode.NO_BUTTON) {
|
||||
// Overview lives on the side, so doesn't scale in from above.
|
||||
return;
|
||||
}
|
||||
|
||||
+3
-2
@@ -20,8 +20,9 @@ import static com.android.launcher3.LauncherAnimUtils.OVERVIEW_TRANSITION_MS;
|
||||
import android.os.RemoteException;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.allapps.AllAppsTransitionController;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.quickstep.RecentsModel;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.util.LayoutUtils;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
import com.android.systemui.shared.recents.ISystemUiProxy;
|
||||
@@ -76,7 +77,7 @@ public class BackgroundAppState extends OverviewState {
|
||||
|
||||
@Override
|
||||
public int getVisibleElements(Launcher launcher) {
|
||||
if (FeatureFlags.SWIPE_HOME.get()) {
|
||||
if (SysUINavigationMode.getMode(launcher) == Mode.NO_BUTTON) {
|
||||
return super.getVisibleElements(launcher);
|
||||
}
|
||||
// Hide shelf content (e.g. QSB) because we fade it in when swiping up.
|
||||
|
||||
+3
-2
@@ -36,11 +36,12 @@ import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherStateManager;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.touch.AbstractStateChangeTouchController;
|
||||
import com.android.launcher3.touch.SwipeDetector;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
import com.android.quickstep.views.TaskView;
|
||||
|
||||
@@ -105,7 +106,7 @@ public class QuickSwitchTouchController extends AbstractStateChangeTouchControll
|
||||
private void setupInterpolators(AnimatorSetBuilder animatorSetBuilder) {
|
||||
animatorSetBuilder.setInterpolator(ANIM_WORKSPACE_FADE, DEACCEL_2);
|
||||
animatorSetBuilder.setInterpolator(ANIM_ALL_APPS_FADE, DEACCEL_2);
|
||||
if (FeatureFlags.SWIPE_HOME.get()) {
|
||||
if (SysUINavigationMode.getMode(mLauncher) == Mode.NO_BUTTON) {
|
||||
// Overview lives to the left of workspace, so translate down later than over
|
||||
animatorSetBuilder.setInterpolator(ANIM_WORKSPACE_TRANSLATE, ACCEL_2);
|
||||
animatorSetBuilder.setInterpolator(ANIM_VERTICAL_PROGRESS, ACCEL_2);
|
||||
|
||||
+1
-1
@@ -123,7 +123,7 @@ public abstract class TaskViewTouchController<T extends BaseDraggingActivity>
|
||||
if (mRecentsView.isTaskViewVisible(view) && mActivity.getDragLayer()
|
||||
.isEventOverView(view, ev)) {
|
||||
mTaskBeingDragged = view;
|
||||
if (!SysUINavigationMode.INSTANCE.get(mActivity).getMode().hasGestures) {
|
||||
if (!SysUINavigationMode.getMode(mActivity).hasGestures) {
|
||||
// Don't allow swipe down to open if we don't support swipe up
|
||||
// to enter overview.
|
||||
directionsToDetectScroll = SwipeDetector.DIRECTION_POSITIVE;
|
||||
|
||||
+5
-7
@@ -16,6 +16,7 @@
|
||||
package com.android.quickstep;
|
||||
|
||||
import static android.view.View.TRANSLATION_Y;
|
||||
|
||||
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
|
||||
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
@@ -24,7 +25,6 @@ import static com.android.launcher3.allapps.AllAppsTransitionController.SPRING_D
|
||||
import static com.android.launcher3.allapps.AllAppsTransitionController.SPRING_STIFFNESS;
|
||||
import static com.android.launcher3.anim.Interpolators.DEACCEL_3;
|
||||
import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
import static com.android.quickstep.SysUINavigationMode.Mode.NO_BUTTON;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@@ -45,16 +45,15 @@ import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.LauncherInitListener;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherStateManager;
|
||||
import com.android.launcher3.Workspace;
|
||||
import com.android.launcher3.allapps.AllAppsTransitionController;
|
||||
import com.android.launcher3.allapps.DiscoveryBounce;
|
||||
import com.android.launcher3.anim.AnimatorPlaybackController;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
import com.android.launcher3.anim.SpringObjectAnimator;
|
||||
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto;
|
||||
import com.android.launcher3.views.FloatingIconView;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.util.ClipAnimationHelper;
|
||||
import com.android.quickstep.util.LayoutUtils;
|
||||
import com.android.quickstep.views.RecentsView;
|
||||
@@ -76,8 +75,7 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
|
||||
@Override
|
||||
public int getSwipeUpDestinationAndLength(DeviceProfile dp, Context context, Rect outRect) {
|
||||
LayoutUtils.calculateLauncherTaskSize(context, dp, outRect);
|
||||
if (dp.isVerticalBarLayout()
|
||||
&& SysUINavigationMode.INSTANCE.get(context).getMode() != NO_BUTTON) {
|
||||
if (dp.isVerticalBarLayout() && SysUINavigationMode.getMode(context) != Mode.NO_BUTTON) {
|
||||
Rect targetInsets = dp.getInsets();
|
||||
int hotseatInset = dp.isSeascape() ? targetInsets.left : targetInsets.right;
|
||||
return dp.hotseatBarSizePx + hotseatInset;
|
||||
@@ -254,8 +252,8 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
|
||||
|
||||
AnimatorSet anim = new AnimatorSet();
|
||||
if (!activity.getDeviceProfile().isVerticalBarLayout()
|
||||
&& !FeatureFlags.SWIPE_HOME.get()) {
|
||||
// Don't animate the shelf when SWIPE_HOME is true, because we update it atomically.
|
||||
&& SysUINavigationMode.getMode(activity) != Mode.NO_BUTTON) {
|
||||
// Don't animate the shelf when the mode is NO_BUTTON, because we update it atomically.
|
||||
Animator shiftAnim = createShelfProgressAnim(activity,
|
||||
fromState.getVerticalProgress(activity),
|
||||
endState.getVerticalProgress(activity));
|
||||
|
||||
+4
-2
@@ -45,10 +45,10 @@ import android.view.VelocityTracker;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.util.Preconditions;
|
||||
import com.android.launcher3.util.RaceConditionTracker;
|
||||
import com.android.launcher3.util.TraceHelper;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.WindowTransformSwipeHandler.GestureEndTarget;
|
||||
import com.android.quickstep.util.CachedEventDispatcher;
|
||||
import com.android.quickstep.util.MotionPauseDetector;
|
||||
@@ -83,6 +83,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
private final InputConsumerController mInputConsumer;
|
||||
private final SwipeSharedState mSwipeSharedState;
|
||||
private final InputMonitorCompat mInputMonitorCompat;
|
||||
private final SysUINavigationMode.Mode mMode;
|
||||
|
||||
private final int mDisplayRotation;
|
||||
private final Rect mStableInsets = new Rect();
|
||||
@@ -127,6 +128,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
mRunningTask = runningTaskInfo;
|
||||
mRecentsModel = recentsModel;
|
||||
mHomeIntent = homeIntent;
|
||||
mMode = SysUINavigationMode.getMode(base);
|
||||
|
||||
mMotionPauseDetector = new MotionPauseDetector(base);
|
||||
mOnCompleteCallback = onCompleteCallback;
|
||||
@@ -250,7 +252,7 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
|
||||
// Move
|
||||
mInteractionHandler.updateDisplacement(displacement - mStartDisplacement);
|
||||
|
||||
if (FeatureFlags.SWIPE_HOME.get()) {
|
||||
if (mMode == Mode.NO_BUTTON) {
|
||||
boolean isLandscape = isNavBarOnLeft() || isNavBarOnRight();
|
||||
float orthogonalDisplacement = !isLandscape
|
||||
? ev.getX() - mDownPos.x
|
||||
|
||||
+8
-5
@@ -25,7 +25,6 @@ import static com.android.launcher3.anim.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.anim.Interpolators.OVERSHOOT_1_2;
|
||||
import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE;
|
||||
import static com.android.launcher3.config.FeatureFlags.QUICKSTEP_SPRINGS;
|
||||
import static com.android.launcher3.config.FeatureFlags.SWIPE_HOME;
|
||||
import static com.android.launcher3.util.RaceConditionTracker.ENTER;
|
||||
import static com.android.launcher3.util.RaceConditionTracker.EXIT;
|
||||
import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION;
|
||||
@@ -85,6 +84,7 @@ import com.android.quickstep.ActivityControlHelper.ActivityInitListener;
|
||||
import com.android.quickstep.ActivityControlHelper.AnimationFactory;
|
||||
import com.android.quickstep.ActivityControlHelper.AnimationFactory.ShelfAnimState;
|
||||
import com.android.quickstep.ActivityControlHelper.HomeAnimationFactory;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.util.ClipAnimationHelper;
|
||||
import com.android.quickstep.util.RectFSpringAnim;
|
||||
import com.android.quickstep.util.RemoteAnimationTargetSet;
|
||||
@@ -232,6 +232,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
private final ActivityControlHelper<T> mActivityControlHelper;
|
||||
private final ActivityInitListener mActivityInitListener;
|
||||
|
||||
private final SysUINavigationMode.Mode mMode;
|
||||
|
||||
private final int mRunningTaskId;
|
||||
private ThumbnailData mTaskSnapshot;
|
||||
|
||||
@@ -272,6 +274,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
mClipAnimationHelper = new ClipAnimationHelper(context);
|
||||
mTransformParams = new ClipAnimationHelper.TransformParams();
|
||||
|
||||
mMode = SysUINavigationMode.getMode(context);
|
||||
initStateCallbacks();
|
||||
}
|
||||
|
||||
@@ -584,7 +587,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
final boolean passed = mCurrentShift.value >= MIN_PROGRESS_FOR_OVERVIEW;
|
||||
if (passed != mPassedOverviewThreshold) {
|
||||
mPassedOverviewThreshold = passed;
|
||||
if (mRecentsView != null && !SWIPE_HOME.get()) {
|
||||
if (mRecentsView != null && mMode != Mode.NO_BUTTON) {
|
||||
mRecentsView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY,
|
||||
HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
|
||||
}
|
||||
@@ -744,7 +747,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
}
|
||||
final boolean reachedOverviewThreshold = currentShift >= MIN_PROGRESS_FOR_OVERVIEW;
|
||||
if (!isFling) {
|
||||
if (SWIPE_HOME.get()) {
|
||||
if (mMode == Mode.NO_BUTTON) {
|
||||
if (mIsShelfPeeking) {
|
||||
endTarget = RECENTS;
|
||||
} else if (goingToNewTask) {
|
||||
@@ -766,7 +769,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
startShift = currentShift;
|
||||
interpolator = endTarget == RECENTS ? OVERSHOOT_1_2 : DEACCEL;
|
||||
} else {
|
||||
if (SWIPE_HOME.get() && endVelocity < 0 && !mIsShelfPeeking) {
|
||||
if (mMode == Mode.NO_BUTTON && endVelocity < 0 && !mIsShelfPeeking) {
|
||||
// If swiping at a diagonal, base end target on the faster velocity.
|
||||
endTarget = goingToNewTask && Math.abs(velocity.x) > Math.abs(endVelocity)
|
||||
? NEW_TASK : HOME;
|
||||
@@ -817,7 +820,7 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity>
|
||||
if (mRecentsView != null) {
|
||||
duration = Math.max(duration, mRecentsView.getScroller().getDuration());
|
||||
}
|
||||
if (SWIPE_HOME.get()) {
|
||||
if (mMode == Mode.NO_BUTTON) {
|
||||
setShelfState(ShelfAnimState.OVERVIEW, interpolator, duration);
|
||||
}
|
||||
} else if (endTarget == NEW_TASK || endTarget == LAST_TASK) {
|
||||
|
||||
+1
-1
@@ -130,7 +130,7 @@ public class LauncherRecentsView extends RecentsView<Launcher> {
|
||||
ClipAnimationHelper helper) {
|
||||
AnimatorSet anim = super.createAdjacentPageAnimForTaskLaunch(tv, helper);
|
||||
|
||||
if (!SysUINavigationMode.INSTANCE.get(mActivity).getMode().hasGestures) {
|
||||
if (!SysUINavigationMode.getMode(mActivity).hasGestures) {
|
||||
// Hotseat doesn't move when opening recents with the button,
|
||||
// so don't animate it here either.
|
||||
return anim;
|
||||
|
||||
@@ -37,14 +37,17 @@ import android.util.Base64;
|
||||
import com.android.launcher3.AbstractFloatingView;
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherState;
|
||||
import com.android.launcher3.LauncherState.ScaleAndTranslation;
|
||||
import com.android.launcher3.LauncherStateManager;
|
||||
import com.android.launcher3.LauncherStateManager.StateHandler;
|
||||
import com.android.launcher3.QuickstepAppTransitionManagerImpl;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.dragndrop.DragLayer;
|
||||
import com.android.quickstep.OverviewInteractionState;
|
||||
import com.android.quickstep.RecentsModel;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.SysUINavigationMode.NavigationModeChangeListener;
|
||||
import com.android.quickstep.util.RemoteFadeOutAnimationListener;
|
||||
import com.android.systemui.shared.system.ActivityCompat;
|
||||
@@ -186,4 +189,13 @@ public class UiFactory extends RecentsUiFactory {
|
||||
out.toByteArray(), Base64.NO_WRAP | Base64.NO_PADDING));
|
||||
return true;
|
||||
}
|
||||
|
||||
public static ScaleAndTranslation getOverviewScaleAndTranslationForNormalState(Launcher l) {
|
||||
if (SysUINavigationMode.getMode(l) == Mode.NO_BUTTON) {
|
||||
float offscreenTranslationX = l.getDragLayer().getWidth()
|
||||
- l.getOverviewPanel().getPaddingStart();
|
||||
return new ScaleAndTranslation(1f, offscreenTranslationX, 0f);
|
||||
}
|
||||
return new ScaleAndTranslation(1.1f, 0f, 0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,10 +27,8 @@ import android.util.Log;
|
||||
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.allapps.DiscoveryBounce;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.util.MainThreadInitializedObject;
|
||||
import com.android.launcher3.util.UiThreadHelper;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.systemui.shared.recents.ISystemUiProxy;
|
||||
|
||||
import androidx.annotation.WorkerThread;
|
||||
@@ -150,8 +148,6 @@ public class OverviewInteractionState {
|
||||
}
|
||||
|
||||
private void onNavigationModeChanged(SysUINavigationMode.Mode mode) {
|
||||
FeatureFlags.SWIPE_HOME.updateStorage(mContext, mode == Mode.NO_BUTTON);
|
||||
|
||||
mSwipeUpEnabled = mode.hasGestures;
|
||||
resetHomeBounceSeenOnQuickstepEnabledFirstTime();
|
||||
mBgHandler.obtainMessage(MSG_APPLY_FLAGS).sendToTarget();
|
||||
|
||||
@@ -48,6 +48,10 @@ public class SysUINavigationMode {
|
||||
}
|
||||
}
|
||||
|
||||
public static Mode getMode(Context context) {
|
||||
return INSTANCE.get(context).getMode();
|
||||
}
|
||||
|
||||
public static MainThreadInitializedObject<SysUINavigationMode> INSTANCE =
|
||||
new MainThreadInitializedObject<>(SysUINavigationMode::new);
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@ import androidx.annotation.IntDef;
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
|
||||
@@ -116,7 +118,7 @@ public class LayoutUtils {
|
||||
}
|
||||
|
||||
public static int getShelfTrackingDistance(Context context, DeviceProfile dp) {
|
||||
if (FeatureFlags.SWIPE_HOME.get()) {
|
||||
if (SysUINavigationMode.getMode(context) == Mode.NO_BUTTON) {
|
||||
// Track the bottom of the window rather than the top of the shelf.
|
||||
int shelfHeight = dp.hotseatBarSizePx + dp.getInsets().bottom;
|
||||
int spaceBetweenShelfAndRecents = (int) context.getResources().getDimension(
|
||||
|
||||
@@ -34,9 +34,11 @@ import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.views.ScrimView;
|
||||
import com.android.quickstep.SysUINavigationMode;
|
||||
import com.android.quickstep.SysUINavigationMode.Mode;
|
||||
import com.android.quickstep.SysUINavigationMode.NavigationModeChangeListener;
|
||||
|
||||
/**
|
||||
* Scrim used for all-apps and shelf in Overview
|
||||
@@ -45,7 +47,7 @@ import com.android.launcher3.views.ScrimView;
|
||||
* From normal state to overview state, the shelf just fades in and does not move
|
||||
* From overview state to all-apps state the shelf moves up and fades in to cover the screen
|
||||
*/
|
||||
public class ShelfScrimView extends ScrimView {
|
||||
public class ShelfScrimView extends ScrimView implements NavigationModeChangeListener {
|
||||
|
||||
// If the progress is more than this, shelf follows the finger, otherwise it moves faster to
|
||||
// cover the whole screen
|
||||
@@ -78,6 +80,8 @@ public class ShelfScrimView extends ScrimView {
|
||||
private final Path mRemainingScreenPath = new Path();
|
||||
private boolean mRemainingScreenPathValid = false;
|
||||
|
||||
private Mode mSysUINavigationMode;
|
||||
|
||||
public ShelfScrimView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mMaxScrimAlpha = Math.round(OVERVIEW.getWorkspaceScrimAlpha(mLauncher) * 255);
|
||||
@@ -97,6 +101,24 @@ public class ShelfScrimView extends ScrimView {
|
||||
mRemainingScreenPathValid = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
onNavigationModeChanged(SysUINavigationMode.INSTANCE.get(getContext())
|
||||
.addModeChangeListener(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
SysUINavigationMode.INSTANCE.get(getContext()).removeModeChangeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNavigationModeChanged(Mode newMode) {
|
||||
mSysUINavigationMode = newMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reInitUi() {
|
||||
DeviceProfile dp = mLauncher.getDeviceProfile();
|
||||
@@ -137,7 +159,7 @@ public class ShelfScrimView extends ScrimView {
|
||||
if (mProgress >= 1) {
|
||||
mRemainingScreenColor = 0;
|
||||
mShelfColor = 0;
|
||||
if (FeatureFlags.SWIPE_HOME.get()
|
||||
if (mSysUINavigationMode == Mode.NO_BUTTON
|
||||
&& mLauncher.getStateManager().getState() == BACKGROUND_APP) {
|
||||
// Show the shelf background when peeking during swipe up.
|
||||
mShelfColor = setColorAlphaBound(mEndScrim, mMidAlpha);
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.quickstep;
|
||||
|
||||
import static androidx.test.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import static com.android.quickstep.NavigationModeSwitchRule.Mode.ALL;
|
||||
import static com.android.quickstep.NavigationModeSwitchRule.Mode.THREE_BUTTON;
|
||||
import static com.android.quickstep.NavigationModeSwitchRule.Mode.TWO_BUTTON;
|
||||
@@ -26,18 +27,23 @@ import static com.android.systemui.shared.system.QuickStepContract.NAV_BAR_MODE_
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.test.uiautomator.UiDevice;
|
||||
|
||||
import com.android.launcher3.tapl.LauncherInstrumentation;
|
||||
import com.android.launcher3.tapl.TestHelpers;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.rules.TestRule;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runners.model.Statement;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Test rule that allows executing a test with Quickstep on and then Quickstep off.
|
||||
* The test should be annotated with @QuickstepOnOff.
|
||||
@@ -72,9 +78,9 @@ public class NavigationModeSwitchRule implements TestRule {
|
||||
@Override
|
||||
public void evaluate() throws Throwable {
|
||||
final Context context = getInstrumentation().getContext();
|
||||
final String prevOverlayPkg = LauncherInstrumentation.isGesturalMode(context)
|
||||
final String prevOverlayPkg = QuickStepContract.isGesturalMode(context)
|
||||
? NAV_BAR_MODE_GESTURAL_OVERLAY
|
||||
: LauncherInstrumentation.isSwipeUpMode(context)
|
||||
: QuickStepContract.isSwipeUpMode(context)
|
||||
? NAV_BAR_MODE_2BUTTON_OVERLAY
|
||||
: NAV_BAR_MODE_3BUTTON_OVERLAY;
|
||||
final LauncherInstrumentation.NavigationModel originalMode =
|
||||
@@ -144,4 +150,4 @@ public class NavigationModeSwitchRule implements TestRule {
|
||||
return base;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -60,7 +60,7 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest {
|
||||
}
|
||||
|
||||
private void startTestApps() throws Exception {
|
||||
startAppFast(resolveSystemApp(Intent.CATEGORY_APP_MARKET));
|
||||
startAppFast(resolveSystemApp(Intent.CATEGORY_APP_BROWSER));
|
||||
startAppFast(resolveSystemApp(Intent.CATEGORY_APP_CALCULATOR));
|
||||
startAppFast(resolveSystemApp(Intent.CATEGORY_APP_CONTACTS));
|
||||
|
||||
|
||||
@@ -199,12 +199,7 @@ public class LauncherState {
|
||||
}
|
||||
|
||||
public ScaleAndTranslation getOverviewScaleAndTranslation(Launcher launcher) {
|
||||
if (FeatureFlags.SWIPE_HOME.get()) {
|
||||
float offscreenTranslationX = launcher.getDragLayer().getWidth()
|
||||
- launcher.getOverviewPanel().getPaddingStart();
|
||||
return new ScaleAndTranslation(1f, offscreenTranslationX, 0f);
|
||||
}
|
||||
return new ScaleAndTranslation(1.1f, 0f, 0f);
|
||||
return UiFactory.getOverviewScaleAndTranslationForNormalState(launcher);
|
||||
}
|
||||
|
||||
public void onStateEnabled(Launcher launcher) {
|
||||
|
||||
@@ -110,10 +110,6 @@ abstract class BaseFlags {
|
||||
public static final TogglableFlag ENABLE_QUICKSTEP_LIVE_TILE = new TogglableFlag(
|
||||
"ENABLE_QUICKSTEP_LIVE_TILE", false, "Enable live tile in Quickstep overview");
|
||||
|
||||
public static final ToggleableGlobalSettingsFlag SWIPE_HOME
|
||||
= new ToggleableGlobalSettingsFlag("SWIPE_HOME", false,
|
||||
"Swiping up on the nav bar goes home. Swipe and hold goes to recent apps.");
|
||||
|
||||
public static final TogglableFlag ENABLE_HINTS_IN_OVERVIEW = new TogglableFlag(
|
||||
"ENABLE_HINTS_IN_OVERVIEW", false,
|
||||
"Show chip hints and gleams on the overview screen");
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.content.Context;
|
||||
import android.os.CancellationSignal;
|
||||
|
||||
import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.LauncherState.ScaleAndTranslation;
|
||||
import com.android.launcher3.LauncherStateManager.StateHandler;
|
||||
import com.android.launcher3.dragndrop.DragLayer;
|
||||
import com.android.launcher3.util.TouchController;
|
||||
@@ -67,4 +68,9 @@ public class UiFactory {
|
||||
public static void prepareToShowOverview(Launcher launcher) { }
|
||||
|
||||
public static void setBackButtonAlpha(Launcher launcher, float alpha, boolean animate) { }
|
||||
|
||||
|
||||
public static ScaleAndTranslation getOverviewScaleAndTranslationForNormalState(Launcher l) {
|
||||
return new ScaleAndTranslation(1.1f, 0f, 0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.android.launcher3.touch;
|
||||
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.anyFloat;
|
||||
import static org.mockito.Matchers.anyObject;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
@@ -149,7 +150,7 @@ public class SwipeDetectorTest {
|
||||
mGenerator.put(0, 100, 100);
|
||||
mGenerator.move(0, 100, 100 + mTouchSlop);
|
||||
// TODO: actually calculate the following parameters and do exact value checks.
|
||||
verify(mMockListener).onDrag(anyFloat());
|
||||
verify(mMockListener).onDrag(anyFloat(), anyObject());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -20,6 +20,8 @@ import static androidx.test.InstrumentationRegistry.getInstrumentation;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import static java.lang.System.exit;
|
||||
|
||||
import android.app.Instrumentation;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -29,6 +31,7 @@ import android.content.pm.LauncherActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.util.Log;
|
||||
import android.view.Surface;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
@@ -78,9 +81,10 @@ public abstract class AbstractLauncherUiTest {
|
||||
public static final long DEFAULT_ACTIVITY_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
|
||||
public static final long DEFAULT_BROADCAST_TIMEOUT_SECS = 5;
|
||||
|
||||
public static final long SHORT_UI_TIMEOUT= 300;
|
||||
public static final long SHORT_UI_TIMEOUT = 300;
|
||||
public static final long DEFAULT_UI_TIMEOUT = 10000;
|
||||
protected static final int LONG_WAIT_TIME_MS = 60000;
|
||||
private static final String TAG = "AbstractLauncherUiTest";
|
||||
|
||||
protected MainThreadExecutor mMainThreadExecutor = new MainThreadExecutor();
|
||||
protected final UiDevice mDevice;
|
||||
@@ -107,10 +111,12 @@ public abstract class AbstractLauncherUiTest {
|
||||
@Rule
|
||||
public LauncherActivityRule mActivityMonitor = new LauncherActivityRule();
|
||||
|
||||
@Rule public ShellCommandRule mDefaultLauncherRule =
|
||||
@Rule
|
||||
public ShellCommandRule mDefaultLauncherRule =
|
||||
TestHelpers.isInLauncherProcess() ? ShellCommandRule.setDefaultLauncher() : null;
|
||||
|
||||
@Rule public ShellCommandRule mDisableHeadsUpNotification =
|
||||
@Rule
|
||||
public ShellCommandRule mDisableHeadsUpNotification =
|
||||
ShellCommandRule.disableHeadsUpNotification();
|
||||
|
||||
// Annotation for tests that need to be run in portrait and landscape modes.
|
||||
@@ -164,9 +170,17 @@ public abstract class AbstractLauncherUiTest {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
// Limits UI tests affecting tests running after them.
|
||||
waitForModelLoaded();
|
||||
public void tearDown() {
|
||||
try {
|
||||
// Limits UI tests affecting tests running after them.
|
||||
waitForModelLoaded();
|
||||
} catch (Throwable t) {
|
||||
Log.e(TAG,
|
||||
"Couldn't deinit after a test, exiting tests, see logs for failures that "
|
||||
+ "could have caused this",
|
||||
t);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
protected void lockRotation(boolean naturalOrientation) throws RemoteException {
|
||||
@@ -189,6 +203,7 @@ public abstract class AbstractLauncherUiTest {
|
||||
|
||||
/**
|
||||
* Scrolls the {@param container} until it finds an object matching {@param condition}.
|
||||
*
|
||||
* @return the matching object.
|
||||
*/
|
||||
protected UiObject2 scrollAndFind(UiObject2 container, BySelector condition) {
|
||||
|
||||
@@ -207,8 +207,8 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest {
|
||||
// Test that ensureWorkspaceIsScrollable adds a page by dragging an icon there.
|
||||
executeOnLauncher(launcher -> assertFalse("Initial workspace state is scrollable",
|
||||
isWorkspaceScrollable(launcher)));
|
||||
assertNull("Play Store app was found on empty workspace",
|
||||
workspace.tryGetWorkspaceAppIcon("Play Store"));
|
||||
assertNull("Chrome app was found on empty workspace",
|
||||
workspace.tryGetWorkspaceAppIcon("Chrome"));
|
||||
|
||||
workspace.ensureWorkspaceIsScrollable();
|
||||
|
||||
@@ -218,8 +218,8 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest {
|
||||
executeOnLauncher(
|
||||
launcher -> assertTrue("ensureScrollable didn't make workspace scrollable",
|
||||
isWorkspaceScrollable(launcher)));
|
||||
assertNotNull("ensureScrollable didn't add Play Store app",
|
||||
workspace.tryGetWorkspaceAppIcon("Play Store"));
|
||||
assertNotNull("ensureScrollable didn't add Chrome app",
|
||||
workspace.tryGetWorkspaceAppIcon("Chrome"));
|
||||
|
||||
// Test flinging workspace.
|
||||
workspace.flingBackward();
|
||||
@@ -235,10 +235,10 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest {
|
||||
assertTrue("Launcher internal state is not Home", isInState(LauncherState.NORMAL));
|
||||
|
||||
// Test starting a workspace app.
|
||||
final AppIcon app = workspace.tryGetWorkspaceAppIcon("Play Store");
|
||||
assertNotNull("No Play Store app in workspace", app);
|
||||
final AppIcon app = workspace.tryGetWorkspaceAppIcon("Chrome");
|
||||
assertNotNull("No Chrome app in workspace", app);
|
||||
assertNotNull("AppIcon.launch returned null",
|
||||
app.launch(resolveSystemApp(Intent.CATEGORY_APP_MARKET)));
|
||||
app.launch(resolveSystemApp(Intent.CATEGORY_APP_BROWSER)));
|
||||
executeOnLauncher(launcher -> assertTrue(
|
||||
"Launcher activity is the top activity; expecting another activity to be the top "
|
||||
+ "one",
|
||||
|
||||
@@ -95,7 +95,7 @@ public class BindWidgetTest extends AbstractLauncherUiTest {
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
public void tearDown() {
|
||||
if (mCursor != null) {
|
||||
mCursor.close();
|
||||
}
|
||||
|
||||
@@ -48,8 +48,7 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer {
|
||||
mLauncher.addContextLayer("want to fling forward in overview")) {
|
||||
LauncherInstrumentation.log("Overview.flingForward before fling");
|
||||
final UiObject2 overview = verifyActiveContainer();
|
||||
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
|
||||
overview.setGestureMargins(margin, 0, 0, 0);
|
||||
overview.setGestureMargins(mLauncher.getEdgeSensitivityWidth(), 0, 0, 0);
|
||||
overview.fling(Direction.LEFT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
|
||||
mLauncher.waitForIdle();
|
||||
verifyActiveContainer();
|
||||
@@ -86,8 +85,7 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer {
|
||||
mLauncher.addContextLayer("want to fling backward in overview")) {
|
||||
LauncherInstrumentation.log("Overview.flingBackward before fling");
|
||||
final UiObject2 overview = verifyActiveContainer();
|
||||
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
|
||||
overview.setGestureMargins(0, 0, margin, 0);
|
||||
overview.setGestureMargins(0, 0, mLauncher.getEdgeSensitivityWidth(), 0);
|
||||
overview.fling(Direction.RIGHT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
|
||||
mLauncher.waitForIdle();
|
||||
verifyActiveContainer();
|
||||
|
||||
@@ -22,7 +22,6 @@ import android.app.UiAutomation;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Point;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
@@ -36,6 +35,7 @@ import android.view.MotionEvent;
|
||||
import android.view.Surface;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.test.uiautomator.By;
|
||||
@@ -44,15 +44,18 @@ import androidx.test.uiautomator.Configurator;
|
||||
import androidx.test.uiautomator.UiDevice;
|
||||
import androidx.test.uiautomator.UiObject2;
|
||||
import androidx.test.uiautomator.Until;
|
||||
|
||||
import com.android.launcher3.TestProtocol;
|
||||
import com.android.systemui.shared.system.QuickStepContract;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
import org.junit.Assert;
|
||||
|
||||
/**
|
||||
* The main tapl object. The only object that can be explicitly constructed by the using code. It
|
||||
@@ -61,8 +64,6 @@ import org.junit.Assert;
|
||||
public final class LauncherInstrumentation {
|
||||
|
||||
private static final String TAG = "Tapl";
|
||||
private static final String NAV_BAR_INTERACTION_MODE_RES_NAME =
|
||||
"config_navBarInteractionMode";
|
||||
private static final int ZERO_BUTTON_STEPS_FROM_BACKGROUND_TO_HOME = 20;
|
||||
|
||||
// Types for launcher containers that the user is interacting with. "Background" is a
|
||||
@@ -149,6 +150,8 @@ public final class LauncherInstrumentation {
|
||||
} catch (IOException e) {
|
||||
fail(e.toString());
|
||||
}
|
||||
|
||||
assertTrue("Phone is locked", !hasSystemUiObject("keyguard_status_view"));
|
||||
}
|
||||
|
||||
Context getContext() {
|
||||
@@ -169,11 +172,11 @@ public final class LauncherInstrumentation {
|
||||
// Workaround, use constructed context because both the instrumentation context and the
|
||||
// app context are not constructed with resources that take overlays into account
|
||||
final Context ctx = baseContext.createPackageContext("android", 0);
|
||||
if (isGesturalMode(ctx)) {
|
||||
if (QuickStepContract.isGesturalMode(ctx)) {
|
||||
return NavigationModel.ZERO_BUTTON;
|
||||
} else if (isSwipeUpMode(ctx)) {
|
||||
} else if (QuickStepContract.isSwipeUpMode(ctx)) {
|
||||
return NavigationModel.TWO_BUTTON;
|
||||
} else if (isLegacyMode(ctx)) {
|
||||
} else if (QuickStepContract.isLegacyMode(ctx)) {
|
||||
return NavigationModel.THREE_BUTTON;
|
||||
} else {
|
||||
fail("Can't detect navigation mode");
|
||||
@@ -245,10 +248,10 @@ public final class LauncherInstrumentation {
|
||||
final NavigationModel navigationModel = getNavigationModel();
|
||||
assertTrue("Presence of recents button doesn't match the interaction mode",
|
||||
(navigationModel == NavigationModel.THREE_BUTTON) ==
|
||||
mDevice.hasObject(By.res(SYSTEMUI_PACKAGE, "recent_apps")));
|
||||
hasSystemUiObject("recent_apps"));
|
||||
assertTrue("Presence of home button doesn't match the interaction mode",
|
||||
(navigationModel != NavigationModel.ZERO_BUTTON) ==
|
||||
mDevice.hasObject(By.res(SYSTEMUI_PACKAGE, "home")));
|
||||
hasSystemUiObject("home"));
|
||||
log("verifyContainerType: " + containerType);
|
||||
|
||||
try (Closable c = addContextLayer(
|
||||
@@ -477,6 +480,10 @@ public final class LauncherInstrumentation {
|
||||
WAIT_TIME_MS));
|
||||
}
|
||||
|
||||
private boolean hasSystemUiObject(String resId) {
|
||||
return mDevice.hasObject(By.res(SYSTEMUI_PACKAGE, resId));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
UiObject2 waitForSystemUiObject(String resId) {
|
||||
final UiObject2 object = mDevice.wait(
|
||||
@@ -600,37 +607,20 @@ public final class LauncherInstrumentation {
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isGesturalMode(Context context) {
|
||||
return QuickStepContract.isGesturalMode(
|
||||
getSystemIntegerRes(context, NAV_BAR_INTERACTION_MODE_RES_NAME));
|
||||
}
|
||||
|
||||
public static boolean isSwipeUpMode(Context context) {
|
||||
return QuickStepContract.isSwipeUpMode(
|
||||
getSystemIntegerRes(context, NAV_BAR_INTERACTION_MODE_RES_NAME));
|
||||
}
|
||||
|
||||
public static boolean isLegacyMode(Context context) {
|
||||
return QuickStepContract.isLegacyMode(
|
||||
getSystemIntegerRes(context, NAV_BAR_INTERACTION_MODE_RES_NAME));
|
||||
}
|
||||
|
||||
private static int getSystemIntegerRes(Context context, String resName) {
|
||||
Resources res = context.getResources();
|
||||
int resId = res.getIdentifier(resName, "integer", "android");
|
||||
|
||||
if (resId != 0) {
|
||||
return res.getInteger(resId);
|
||||
} else {
|
||||
Log.e(TAG, "Failed to get system resource ID. Incompatible framework version?");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
static void sleep(int duration) {
|
||||
try {
|
||||
Thread.sleep(duration);
|
||||
} catch (InterruptedException e) {
|
||||
}
|
||||
}
|
||||
|
||||
int getEdgeSensitivityWidth() {
|
||||
try {
|
||||
return QuickStepContract.getEdgeSensitivityWidth(
|
||||
mInstrumentation.getTargetContext().createPackageContext("android", 0)) + 1;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
fail("Can't get edge sensitivity: " + e);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -114,7 +114,7 @@ public final class Workspace extends Home {
|
||||
if (!isWorkspaceScrollable(workspace)) {
|
||||
dragIconToWorkspace(
|
||||
mLauncher,
|
||||
getHotseatAppIcon("Play Store"),
|
||||
getHotseatAppIcon("Chrome"),
|
||||
new Point(mLauncher.getDevice().getDisplayWidth(),
|
||||
workspace.getVisibleBounds().centerY()),
|
||||
(int) (ICON_DRAG_SPEED * mLauncher.getDisplayDensity()));
|
||||
@@ -148,8 +148,7 @@ public final class Workspace extends Home {
|
||||
*/
|
||||
public void flingForward() {
|
||||
final UiObject2 workspace = verifyActiveContainer();
|
||||
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
|
||||
workspace.setGestureMargins(0, 0, margin, 0);
|
||||
workspace.setGestureMargins(0, 0, mLauncher.getEdgeSensitivityWidth(), 0);
|
||||
workspace.fling(Direction.RIGHT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
|
||||
mLauncher.waitForIdle();
|
||||
verifyActiveContainer();
|
||||
@@ -161,8 +160,7 @@ public final class Workspace extends Home {
|
||||
*/
|
||||
public void flingBackward() {
|
||||
final UiObject2 workspace = verifyActiveContainer();
|
||||
final int margin = (int) (50 * mLauncher.getDisplayDensity()) + 1;
|
||||
workspace.setGestureMargins(margin, 0, 0, 0);
|
||||
workspace.setGestureMargins(mLauncher.getEdgeSensitivityWidth(), 0, 0, 0);
|
||||
workspace.fling(Direction.LEFT, (int) (FLING_SPEED * mLauncher.getDisplayDensity()));
|
||||
mLauncher.waitForIdle();
|
||||
verifyActiveContainer();
|
||||
|
||||
Reference in New Issue
Block a user