Merge changes Ifd147d6f,I72629a27 into main
* changes:
decoupling task animation lifecycle from recents lifecycle
fixing a state cycle issue in recents window where we set home instead of bg_launcher
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
index fc66bec..707d4b3 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarLauncherStateController.java
@@ -786,6 +786,9 @@
}
protected void stashHotseat(boolean stash) {
+ // align taskbar with the hotseat icons before performing any animation
+ mControllers.taskbarViewController.setLauncherIconAlignment(/* alignmentRatio = */ 1,
+ mLauncher.getDeviceProfile());
TaskbarStashController stashController = mControllers.taskbarStashController;
stashController.updateStateForFlag(FLAG_STASHED_FOR_BUBBLES, stash);
Runnable swapHotseatWithTaskbar = new Runnable() {
@@ -898,19 +901,6 @@
mHotseatTranslationXAnimation.cancel();
mHotseatTranslationXAnimation = null;
}
- Runnable postAnimationAction = new Runnable() {
- @Override
- public void run() {
- mHotseatTranslationXAnimation = null;
- // We only need to align the task bar when on launcher home screen
- if (mControllers.taskbarStashController.isOnHome()) {
- mControllers.taskbarViewController.setLauncherIconAlignment(
- /* alignmentRatio = */ 1,
- mLauncher.getDeviceProfile()
- );
- }
- }
- };
Hotseat hotseat = mLauncher.getHotseat();
AnimatorSet translationXAnimation = new AnimatorSet();
MultiProperty iconsTranslationX = mLauncher.getHotseat()
@@ -933,14 +923,12 @@
}
}
if (!animate) {
- postAnimationAction.run();
return;
}
mHotseatTranslationXAnimation = translationXAnimation;
translationXAnimation.setStartDelay(FADE_OUT_ANIM_POSITION_DURATION_MS);
translationXAnimation.setDuration(FADE_IN_ANIM_ALPHA_DURATION_MS);
translationXAnimation.setInterpolator(Interpolators.EMPHASIZED);
- translationXAnimation.addListener(AnimatorListeners.forEndCallback(postAnimationAction));
translationXAnimation.start();
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
index 7fed381..c5d649e 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
@@ -1492,6 +1492,38 @@
return bubbles;
}
+ /**
+ * Returns the distance between the top left corner of the bubble bar to the center of the dot
+ * of the selected bubble.
+ */
+ PointF getSelectedBubbleDotDistanceFromTopLeft() {
+ if (mSelectedBubbleView == null) {
+ return new PointF(0, 0);
+ }
+ final int indexOfSelectedBubble = indexOfChild(mSelectedBubbleView);
+ final boolean onLeft = mBubbleBarLocation.isOnLeft(isLayoutRtl());
+ final float selectedBubbleTx = isExpanded()
+ ? getExpandedBubbleTranslationX(indexOfSelectedBubble, getChildCount(), onLeft)
+ : getCollapsedBubbleTranslationX(indexOfSelectedBubble, getChildCount(), onLeft);
+ PointF selectedBubbleDotCenter = mSelectedBubbleView.getDotCenter();
+
+ return new PointF(
+ selectedBubbleTx + selectedBubbleDotCenter.x,
+ mBubbleBarPadding + mPointerSize + selectedBubbleDotCenter.y);
+ }
+
+ int getSelectedBubbleDotColor() {
+ return mSelectedBubbleView == null ? 0 : mSelectedBubbleView.getDotColor();
+ }
+
+ int getPointerSize() {
+ return mPointerSize;
+ }
+
+ float getBubbleElevation() {
+ return mBubbleElevation;
+ }
+
/** Interface for BubbleBarView to communicate with its controller. */
interface Controller {
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
index c164eec..da9dcf7 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
@@ -42,6 +42,7 @@
import com.android.launcher3.taskbar.TaskbarInsetsController;
import com.android.launcher3.taskbar.TaskbarStashController;
import com.android.launcher3.taskbar.bubbles.animation.BubbleBarViewAnimator;
+import com.android.launcher3.taskbar.bubbles.flyout.BubbleBarFlyoutPositioner;
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController;
import com.android.launcher3.util.MultiPropertyFactory;
import com.android.launcher3.util.MultiValueAlpha;
@@ -63,6 +64,8 @@
private static final float APP_ICON_SMALL_DP = 44f;
private static final float APP_ICON_MEDIUM_DP = 48f;
private static final float APP_ICON_LARGE_DP = 52f;
+ /** The dot size is defined as a percentage of the icon size. */
+ private static final float DOT_TO_BUBBLE_SIZE_RATIO = 0.228f;
private final SystemUiProxy mSystemUiProxy;
private final TaskbarActivityContext mActivity;
private final BubbleBarView mBarView;
@@ -208,6 +211,59 @@
};
}
+ private BubbleBarFlyoutPositioner createFlyoutPositioner() {
+ return new BubbleBarFlyoutPositioner() {
+
+ @Override
+ public boolean isOnLeft() {
+ return mBarView.getBubbleBarLocation().isOnLeft(mBarView.isLayoutRtl());
+ }
+
+ @Override
+ public float getTargetTy() {
+ return mBarView.getTranslationY() - mBarView.getHeight();
+ }
+
+ @Override
+ @NonNull
+ public PointF getDistanceToCollapsedPosition() {
+ // the flyout animates from the selected bubble dot. calculate the distance it needs
+ // to translate itself to its starting position.
+ PointF distanceToDotCenter = mBarView.getSelectedBubbleDotDistanceFromTopLeft();
+
+ // if we're gravitating left, return the distance between the top left corner of the
+ // bubble bar and the bottom left corner of the dot.
+ // if we're gravitating right, return the distance between the top right corner of
+ // the bubble bar and the bottom right corner of the dot.
+ float distanceX = isOnLeft()
+ ? distanceToDotCenter.x - getCollapsedSize() / 2
+ : mBarView.getWidth() - distanceToDotCenter.x - getCollapsedSize() / 2;
+ float distanceY = distanceToDotCenter.y + getCollapsedSize() / 2;
+ return new PointF(distanceX, distanceY);
+ }
+
+ @Override
+ public float getCollapsedSize() {
+ return mIconSize * DOT_TO_BUBBLE_SIZE_RATIO;
+ }
+
+ @Override
+ public int getCollapsedColor() {
+ return mBarView.getSelectedBubbleDotColor();
+ }
+
+ @Override
+ public float getCollapsedElevation() {
+ return mBarView.getBubbleElevation();
+ }
+
+ @Override
+ public float getDistanceToRevealTriangle() {
+ return getDistanceToCollapsedPosition().y - mBarView.getPointerSize();
+ }
+ };
+ }
+
private void onBubbleClicked(BubbleView bubbleView) {
bubbleView.markSeen();
BubbleBarItem bubble = bubbleView.getBubble();
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleView.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleView.java
index 561df5c..707655c 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleView.java
@@ -22,6 +22,7 @@
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Path;
+import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
@@ -67,8 +68,7 @@
private float mAnimatingToDotScale;
// The current scale value of the dot
private float mDotScale;
-
- private boolean mProvideShadowOutline = true;
+ private boolean mDotSuppressedForBubbleUpdate = false;
// TODO: (b/273310265) handle RTL
// Whether the bubbles are positioned on the left or right side of the screen
@@ -300,6 +300,10 @@
}
void updateDotVisibility(boolean animate) {
+ if (mDotSuppressedForBubbleUpdate) {
+ // if the dot is suppressed for
+ return;
+ }
final float targetScale = hasUnseenContent() ? 1f : 0f;
if (animate) {
animateDotScale(targetScale);
@@ -317,6 +321,20 @@
}
}
+ /**
+ * Suppresses or un-suppresses drawing the dot due to an update for this bubble.
+ *
+ * <p>If the dot is being suppressed and is already visible, it remains visible because it is
+ * used as a starting point for the animation. If the dot is being unsuppressed, it is
+ * redrawn if needed.
+ */
+ public void suppressDotForBubbleUpdate(boolean suppress) {
+ mDotSuppressedForBubbleUpdate = suppress;
+ if (!suppress) {
+ showDotIfNeeded(/* animate= */ false);
+ }
+ }
+
boolean hasUnseenContent() {
return mBubble != null
&& mBubble instanceof BubbleBarBubble
@@ -353,8 +371,8 @@
}
void showDotIfNeeded(boolean animate) {
- // only show the dot if we have unseen content
- if (!hasUnseenContent()) {
+ // only show the dot if we have unseen content and it's not suppressed
+ if (!hasUnseenContent() || mDotSuppressedForBubbleUpdate) {
return;
}
if (animate) {
@@ -406,6 +424,23 @@
}).start();
}
+ /**
+ * Returns the distance from the top left corner of this bubble view to the center of its dot.
+ */
+ public PointF getDotCenter() {
+ float[] dotPosition =
+ mOnLeft ? mDotRenderer.getLeftDotPosition() : mDotRenderer.getRightDotPosition();
+ getDrawingRect(mTempBounds);
+ float dotCenterX = mTempBounds.width() * dotPosition[0];
+ float dotCenterY = mTempBounds.height() * dotPosition[1];
+ return new PointF(dotCenterX, dotCenterY);
+ }
+
+ /** Returns the dot color. */
+ public int getDotColor() {
+ return mDotColor;
+ }
+
@Override
public String toString() {
String toString = mBubble != null ? mBubble.getKey() : "null";
diff --git a/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java b/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java
index eef1f96..341c868 100644
--- a/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java
+++ b/quickstep/src/com/android/quickstep/dagger/QuickstepBaseAppComponent.java
@@ -20,6 +20,7 @@
import com.android.launcher3.dagger.LauncherBaseAppComponent;
import com.android.launcher3.model.WellbeingModel;
import com.android.quickstep.logging.SettingsChangeLogger;
+import com.android.quickstep.util.AsyncClockEventDelegate;
/**
* Launcher Quickstep base component for Dagger injection.
@@ -33,4 +34,6 @@
SettingsChangeLogger getSettingsChangeLogger();
WellbeingModel getWellbeingModel();
+
+ AsyncClockEventDelegate getAsyncClockEventDelegate();
}
diff --git a/quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java b/quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java
index 38ae303..4a84b1b 100644
--- a/quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java
+++ b/quickstep/src/com/android/quickstep/util/AsyncClockEventDelegate.java
@@ -32,23 +32,33 @@
import androidx.annotation.WorkerThread;
+import com.android.launcher3.dagger.ApplicationContext;
+import com.android.launcher3.dagger.LauncherAppSingleton;
+import com.android.launcher3.dagger.LauncherBaseAppComponent;
+import com.android.launcher3.util.DaggerSingletonObject;
+import com.android.launcher3.util.DaggerSingletonTracker;
+import com.android.launcher3.util.ExecutorUtil;
import com.android.launcher3.util.MainThreadInitializedObject;
import com.android.launcher3.util.SafeCloseable;
import com.android.launcher3.util.SettingsCache;
import com.android.launcher3.util.SettingsCache.OnChangeListener;
import com.android.launcher3.util.SimpleBroadcastReceiver;
+import com.android.quickstep.dagger.QuickstepBaseAppComponent;
import java.util.ArrayList;
import java.util.List;
+import javax.inject.Inject;
+
/**
* Extension of {@link ClockEventDelegate} to support async event registration
*/
+@LauncherAppSingleton
public class AsyncClockEventDelegate extends ClockEventDelegate
implements OnChangeListener, SafeCloseable {
- public static final MainThreadInitializedObject<AsyncClockEventDelegate> INSTANCE =
- new MainThreadInitializedObject<>(AsyncClockEventDelegate::new);
+ public static final DaggerSingletonObject<AsyncClockEventDelegate> INSTANCE =
+ new DaggerSingletonObject<>(QuickstepBaseAppComponent::getAsyncClockEventDelegate);
private final Context mContext;
private final SimpleBroadcastReceiver mReceiver =
@@ -61,10 +71,12 @@
private boolean mFormatRegistered = false;
private boolean mDestroyed = false;
- private AsyncClockEventDelegate(Context context) {
+ @Inject
+ AsyncClockEventDelegate(@ApplicationContext Context context, DaggerSingletonTracker tracker) {
super(context);
mContext = context;
mReceiver.register(mContext, ACTION_TIME_CHANGED, ACTION_TIMEZONE_CHANGED);
+ ExecutorUtil.executeSyncOnMainOrFail(() -> tracker.addCloseable(this));
}
@Override
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendControllerTest.kt
index f3fff9f..59900b1 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarAutohideSuspendControllerTest.kt
@@ -41,15 +41,14 @@
@EmulatedDevices(["pixelTablet2023"])
class TaskbarAutohideSuspendControllerTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @get:Rule(order = 0) val animatorTestRule = AnimatorTestRule(this)
- @get:Rule(order = 1)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val animatorTestRule = AnimatorTestRule(this)
+ @get:Rule(order = 2)
val systemUiProxyRule = TestRule { base, _ ->
object : Statement() {
override fun evaluate() {
getInstrumentation().runOnMainSync {
- context.applicationContext.putObject(
+ context.putObject(
SystemUiProxy.INSTANCE,
object : SystemUiProxy(context) {
override fun notifyTaskbarAutohideSuspend(suspend: Boolean) {
@@ -62,8 +61,8 @@
}
}
}
- @get:Rule(order = 2) val taskbarModeRule = TaskbarModeRule(context)
- @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 3) val taskbarModeRule = TaskbarModeRule(context)
+ @get:Rule(order = 4) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var autohideSuspendController: TaskbarAutohideSuspendController
@InjectController lateinit var stashController: TaskbarStashController
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarDesktopModeControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarDesktopModeControllerTest.kt
index 72bbfc9..455b6c5 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarDesktopModeControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarDesktopModeControllerTest.kt
@@ -16,7 +16,6 @@
package com.android.launcher3.taskbar
-import androidx.test.platform.app.InstrumentationRegistry
import com.android.launcher3.taskbar.TaskbarBackgroundRenderer.Companion.MAX_ROUNDNESS
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
import com.android.launcher3.taskbar.rules.TaskbarWindowSandboxContext
@@ -30,12 +29,8 @@
@LauncherMultivalentJUnit.EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
class TaskbarDesktopModeControllerTest {
- private val context =
- TaskbarWindowSandboxContext.create(
- InstrumentationRegistry.getInstrumentation().targetContext
- )
-
- @get:Rule(order = 0) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@TaskbarUnitTestRule.InjectController
lateinit var taskbarDesktopModeController: TaskbarDesktopModeController
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarEduTooltipControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarEduTooltipControllerTest.kt
index 961d4dc..e575efd 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarEduTooltipControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarEduTooltipControllerTest.kt
@@ -17,7 +17,6 @@
package com.android.launcher3.taskbar.test
import android.util.Log
-import androidx.test.platform.app.InstrumentationRegistry
import com.android.launcher3.Utilities
import com.android.launcher3.taskbar.TOOLTIP_STEP_FEATURES
import com.android.launcher3.taskbar.TOOLTIP_STEP_NONE
@@ -52,30 +51,21 @@
@Ignore
class TaskbarEduTooltipControllerTest {
- private val context =
- TaskbarWindowSandboxContext.create(
- InstrumentationRegistry.getInstrumentation().targetContext
- )
-
- @get:Rule(order = 0)
- val tooltipStepPreferenceRule =
- TaskbarPreferenceRule(
- context,
- OnboardingPrefs.TASKBAR_EDU_TOOLTIP_STEP.prefItem,
- )
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
@get:Rule(order = 1)
+ val tooltipStepPreferenceRule =
+ TaskbarPreferenceRule(context, OnboardingPrefs.TASKBAR_EDU_TOOLTIP_STEP.prefItem)
+
+ @get:Rule(order = 2)
val searchEduPreferenceRule =
- TaskbarPreferenceRule(
- context,
- OnboardingPrefs.TASKBAR_SEARCH_EDU_SEEN,
- )
+ TaskbarPreferenceRule(context, OnboardingPrefs.TASKBAR_SEARCH_EDU_SEEN)
- @get:Rule(order = 2) val taskbarPinningPreferenceRule = TaskbarPinningPreferenceRule(context)
+ @get:Rule(order = 3) val taskbarPinningPreferenceRule = TaskbarPinningPreferenceRule(context)
- @get:Rule(order = 3) val taskbarModeRule = TaskbarModeRule(context)
+ @get:Rule(order = 4) val taskbarModeRule = TaskbarModeRule(context)
- @get:Rule(order = 4) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 5) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var taskbarEduTooltipController: TaskbarEduTooltipController
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarScrimViewControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarScrimViewControllerTest.kt
index 3524961..12e84b8 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarScrimViewControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarScrimViewControllerTest.kt
@@ -42,11 +42,10 @@
@RunWith(LauncherMultivalentJUnit::class)
@EmulatedDevices(["pixelTablet2023"])
class TaskbarScrimViewControllerTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @get:Rule(order = 0) val taskbarModeRule = TaskbarModeRule(context)
- @get:Rule(order = 1) val animatorTestRule = AnimatorTestRule(this)
- @get:Rule(order = 2) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarModeRule = TaskbarModeRule(context)
+ @get:Rule(order = 2) val animatorTestRule = AnimatorTestRule(this)
+ @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var scrimViewController: TaskbarScrimViewController
@@ -132,7 +131,7 @@
@TaskbarMode(PINNED)
fun testOnClick_scrimShown_performsSystemBack() {
var backPressed = false
- context.applicationContext.putObject(
+ context.putObject(
SystemUiProxy.INSTANCE,
object : SystemUiProxy(context) {
override fun onBackPressed() {
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarStashControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarStashControllerTest.kt
index d7ce4ed..de73ce7 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarStashControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarStashControllerTest.kt
@@ -63,12 +63,11 @@
@EnableFlags(FLAG_ENABLE_BUBBLE_BAR)
@EmulatedDevices(["pixelTablet2023"])
class TaskbarStashControllerTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @get:Rule(order = 0) val taskbarModeRule = TaskbarModeRule(context)
- @get:Rule(order = 1) val taskbarPinningPreferenceRule = TaskbarPinningPreferenceRule(context)
- @get:Rule(order = 2) val animatorTestRule = AnimatorTestRule(this)
- @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarModeRule = TaskbarModeRule(context)
+ @get:Rule(order = 2) val taskbarPinningPreferenceRule = TaskbarPinningPreferenceRule(context)
+ @get:Rule(order = 3) val animatorTestRule = AnimatorTestRule(this)
+ @get:Rule(order = 4) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var stashController: TaskbarStashController
@InjectController lateinit var viewController: TaskbarViewController
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewControllerTest.kt
index 4aac1dc..b13eafe 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarViewControllerTest.kt
@@ -17,7 +17,6 @@
package com.android.launcher3.taskbar
import android.view.View
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.taskbar.TaskbarViewController.DIVIDER_VIEW_POSITION_OFFSET
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule
import com.android.launcher3.taskbar.rules.TaskbarUnitTestRule.InjectController
@@ -33,19 +32,23 @@
@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
/**
* Legend for the comments below:
+ * ```
* A: All Apps Button
* H: Hotseat item
* |: Divider
* R: Recent item
+ * ```
*
* The comments are formatted in two lines:
+ * ```
* // Items in taskbar, e.g. A | HHHHHH
* // Index of items relative to Hotseat: -1 -.5 012345
+ * ```
*/
class TaskbarViewControllerTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
- @get:Rule val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var taskbarViewController: TaskbarViewController
@@ -59,7 +62,7 @@
/* isAllAppsButton = */ true,
/* isTaskbarDividerView = */ false,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ -1
+ /* recentTaskIndex = */ -1,
)
// [>A<] | [HHHHHH]
// -1 -.5 012345
@@ -77,7 +80,7 @@
/* isAllAppsButton = */ true,
/* isTaskbarDividerView = */ false,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ -1
+ /* recentTaskIndex = */ -1,
)
// [HHHHHH] | [>A<]
// 012345 5.5 6
@@ -94,7 +97,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ true,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ -1
+ /* recentTaskIndex = */ -1,
)
// [A] >|< [HHHHHH]
// -1 -.5 012345
@@ -112,7 +115,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ true,
/* isDividerForRecents = */ true,
- /* recentTaskIndex = */ -1
+ /* recentTaskIndex = */ -1,
)
// [A] [HHHHHH] >|< [RR]
// -1 012345 5.5 67
@@ -130,7 +133,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ true,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ -1
+ /* recentTaskIndex = */ -1,
)
// [HHHHHH] >|< [A]
// 012345 5.5 6
@@ -148,7 +151,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ true,
/* isDividerForRecents = */ true,
- /* recentTaskIndex = */ -1
+ /* recentTaskIndex = */ -1,
)
// [HHHHHH][A] >|< [RR]
// 012345 6 6.5 78
@@ -167,7 +170,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ false,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ recentTaskIndex
+ /* recentTaskIndex = */ recentTaskIndex,
)
// [A][HHHHHH] | [>R<R]
// -1 012345 5.5 6 7
@@ -186,7 +189,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ false,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ recentTaskIndex
+ /* recentTaskIndex = */ recentTaskIndex,
)
// [A][HHHHHH] | [R>R<]
// -1 012345 5.5 6 7
@@ -205,7 +208,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ false,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ recentTaskIndex
+ /* recentTaskIndex = */ recentTaskIndex,
)
// [HHHHHH][A] | [>R<R]
// 012345 6 6.5 7 8
@@ -224,7 +227,7 @@
/* isAllAppsButton = */ false,
/* isTaskbarDividerView = */ false,
/* isDividerForRecents = */ false,
- /* recentTaskIndex = */ recentTaskIndex
+ /* recentTaskIndex = */ recentTaskIndex,
)
// [HHHHHH][A] | [R>R<]
// 012345 6 6.5 7 8
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt
index f783e40..60c94a8 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt
@@ -44,13 +44,9 @@
@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
class TaskbarAllAppsControllerTest {
- @get:Rule
- val taskbarUnitTestRule =
- TaskbarUnitTestRule(
- this,
- TaskbarWindowSandboxContext.create(getInstrumentation().targetContext),
- )
- @get:Rule val animatorTestRule = AnimatorTestRule(this)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 2) val animatorTestRule = AnimatorTestRule(this)
@InjectController lateinit var allAppsController: TaskbarAllAppsController
@InjectController lateinit var overlayController: TaskbarOverlayController
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewControllerTest.kt
index 04f02e9..516220a 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsViewControllerTest.kt
@@ -47,13 +47,12 @@
@EmulatedDevices(["pixelFoldable2023"])
class TaskbarAllAppsViewControllerTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @get:Rule(order = 0) val taskbarModeRule = TaskbarModeRule(context)
- @get:Rule(order = 1)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarModeRule = TaskbarModeRule(context)
+ @get:Rule(order = 2)
val allAppsVisitedPreferenceRule =
TaskbarPreferenceRule(context, ALL_APPS_VISITED_COUNT.prefItem)
- @get:Rule(order = 2) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
+ @get:Rule(order = 3) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var overlayController: TaskbarOverlayController
@InjectController lateinit var stashController: TaskbarStashController
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayControllerTest.kt
index 4fa821d..1113129 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/overlay/TaskbarOverlayControllerTest.kt
@@ -18,7 +18,6 @@
import android.app.ActivityManager.RunningTaskInfo
import android.view.MotionEvent
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.AbstractFloatingView
import com.android.launcher3.AbstractFloatingView.TYPE_OPTIONS_POPUP
import com.android.launcher3.AbstractFloatingView.TYPE_TASKBAR_ALL_APPS
@@ -42,12 +41,8 @@
@EmulatedDevices(["pixelFoldable2023"])
class TaskbarOverlayControllerTest {
- @get:Rule
- val taskbarUnitTestRule =
- TaskbarUnitTestRule(
- this,
- TaskbarWindowSandboxContext.create(getInstrumentation().targetContext),
- )
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarUnitTestRule = TaskbarUnitTestRule(this, context)
@InjectController lateinit var overlayController: TaskbarOverlayController
private val taskbarContext: TaskbarActivityContext
@@ -223,9 +218,8 @@
}
private class TestOverlayView
- private constructor(
- private val overlayContext: TaskbarOverlayContext,
- ) : AbstractFloatingView(overlayContext, null) {
+ private constructor(private val overlayContext: TaskbarOverlayContext) :
+ AbstractFloatingView(overlayContext, null) {
var type = TYPE_OPTIONS_POPUP
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRule.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRule.kt
index c48947e..74b154a 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRule.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRule.kt
@@ -61,7 +61,7 @@
val mode = taskbarMode.mode
getInstrumentation().runOnMainSync {
- context.applicationContext.putObject(
+ context.putObject(
DisplayController.INSTANCE,
object : DisplayController(context) {
override fun getInfo(): Info {
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRuleTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRuleTest.kt
index f7e4576..0dd1324 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRuleTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarModeRuleTest.kt
@@ -16,7 +16,6 @@
package com.android.launcher3.taskbar.rules
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.InvariantDeviceProfile
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.PINNED
import com.android.launcher3.taskbar.rules.TaskbarModeRule.Mode.THREE_BUTTONS
@@ -35,9 +34,8 @@
@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
class TaskbarModeRuleTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @get:Rule val taskbarModeRule = TaskbarModeRule(context)
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val taskbarModeRule = TaskbarModeRule(context)
@Test
@TaskbarMode(TRANSIENT)
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPinningPreferenceRuleTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPinningPreferenceRuleTest.kt
index a515405..977e7a5 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPinningPreferenceRuleTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPinningPreferenceRuleTest.kt
@@ -16,13 +16,13 @@
package com.android.launcher3.taskbar.rules
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.util.DisplayController
import com.android.launcher3.util.LauncherMultivalentJUnit
import com.android.launcher3.util.LauncherMultivalentJUnit.EmulatedDevices
import com.android.launcher3.util.window.WindowManagerProxy
import com.google.android.apps.nexuslauncher.deviceemulator.TestWindowManagerProxy
import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.Description
import org.junit.runner.RunWith
@@ -31,7 +31,7 @@
@RunWith(LauncherMultivalentJUnit::class)
@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
class TaskbarPinningPreferenceRuleTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
+ @get:Rule val context = TaskbarWindowSandboxContext.create()
private val preferenceRule = TaskbarPinningPreferenceRule(context)
@@ -55,7 +55,7 @@
@Test
fun testEnableDesktopPinning_verifyDisplayController() {
- context.applicationContext.putObject(
+ context.putObject(
WindowManagerProxy.INSTANCE,
TestWindowManagerProxy(context).apply { isInDesktopMode = true },
)
@@ -69,7 +69,7 @@
@Test
fun testDisableDesktopPinning_verifyDisplayController() {
- context.applicationContext.putObject(
+ context.putObject(
WindowManagerProxy.INSTANCE,
TestWindowManagerProxy(context).apply { isInDesktopMode = true },
)
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRule.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRule.kt
index a76a77d..e42ca9e 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRule.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRule.kt
@@ -29,11 +29,12 @@
* The original preference value is restored on teardown.
*/
class TaskbarPreferenceRule<T : Any>(
- context: TaskbarWindowSandboxContext,
- private val constantItem: ConstantItem<T>
+ private val context: TaskbarWindowSandboxContext,
+ private val constantItem: ConstantItem<T>,
) : TestRule {
- private val prefs = LauncherPrefs.get(context)
+ private val prefs: LauncherPrefs
+ get() = LauncherPrefs.get(context)
var value: T
get() = prefs.get(constantItem)
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRuleTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRuleTest.kt
index 46817d2..b7e6fa3 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRuleTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarPreferenceRuleTest.kt
@@ -16,11 +16,11 @@
package com.android.launcher3.taskbar.rules
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.LauncherPrefs.Companion.TASKBAR_PINNING
import com.android.launcher3.util.LauncherMultivalentJUnit
import com.android.launcher3.util.LauncherMultivalentJUnit.EmulatedDevices
import com.google.common.truth.Truth.assertThat
+import org.junit.Rule
import org.junit.Test
import org.junit.runner.Description
import org.junit.runner.RunWith
@@ -30,7 +30,7 @@
@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
class TaskbarPreferenceRuleTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
+ @get:Rule val context = TaskbarWindowSandboxContext.create()
private val preferenceRule = TaskbarPreferenceRule(context, TASKBAR_PINNING)
@Test
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarUnitTestRuleTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarUnitTestRuleTest.kt
index 52ca78d..7daa142 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarUnitTestRuleTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarUnitTestRuleTest.kt
@@ -19,7 +19,6 @@
import android.platform.test.annotations.DisableFlags
import android.platform.test.annotations.EnableFlags
import android.platform.test.flag.junit.SetFlagsRule
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import com.android.launcher3.taskbar.TaskbarActivityContext
import com.android.launcher3.taskbar.TaskbarKeyguardController
import com.android.launcher3.taskbar.TaskbarManager
@@ -43,9 +42,8 @@
@EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
class TaskbarUnitTestRuleTest {
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @get:Rule(order = 0) val setFlagsRule = SetFlagsRule()
+ @get:Rule(order = 0) val context = TaskbarWindowSandboxContext.create()
+ @get:Rule(order = 1) val setFlagsRule = SetFlagsRule()
@Test
fun testSetup_taskbarInitialized() {
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContext.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContext.kt
index ee21df8..741be50 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContext.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContext.kt
@@ -16,46 +16,19 @@
package com.android.launcher3.taskbar.rules
-import android.content.Context
import android.content.ContextWrapper
-import android.os.Bundle
-import android.view.Display
-import com.android.launcher3.util.MainThreadInitializedObject
-import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext
+import com.android.launcher3.util.MainThreadInitializedObject.ObjectSandbox
+import com.android.launcher3.util.SandboxApplication
+import org.junit.rules.TestRule
-/**
- * Sandbox wrapper where [createWindowContext] provides contexts that are still sandboxed within
- * [application].
- *
- * Taskbar can create window contexts, which need to operate under the same sandbox application, but
- * [Context.getApplicationContext] by default returns the actual application. For this reason,
- * [SandboxContext] overrides [getApplicationContext] to return itself, which prevents leaving the
- * sandbox. [SandboxContext] and the real application have different sets of
- * [MainThreadInitializedObject] instances, so overriding the application prevents the latter set
- * from leaking into the sandbox. Similarly, this implementation overrides [getApplicationContext]
- * to return the original sandboxed [application], and it wraps created windowed contexts to
- * propagate this [application].
- */
-class TaskbarWindowSandboxContext
-private constructor(private val application: SandboxContext, base: Context) : ContextWrapper(base) {
-
- override fun createWindowContext(type: Int, options: Bundle?): Context {
- return TaskbarWindowSandboxContext(application, super.createWindowContext(type, options))
- }
-
- override fun createWindowContext(display: Display, type: Int, options: Bundle?): Context {
- return TaskbarWindowSandboxContext(
- application,
- super.createWindowContext(display, type, options),
- )
- }
-
- override fun getApplicationContext(): SandboxContext = application
+/** Sandbox Context for running Taskbar tests. */
+class TaskbarWindowSandboxContext private constructor(base: SandboxApplication) :
+ ContextWrapper(base), ObjectSandbox by base, TestRule by base {
companion object {
- /** Creates a [TaskbarWindowSandboxContext] to sandbox [base] for Taskbar tests. */
- fun create(base: Context): TaskbarWindowSandboxContext {
- return SandboxContext(base).let { TaskbarWindowSandboxContext(it, it) }
+ /** Creates a [SandboxApplication] for Taskbar tests. */
+ fun create(): TaskbarWindowSandboxContext {
+ return TaskbarWindowSandboxContext(SandboxApplication())
}
}
}
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContextTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContextTest.kt
deleted file mode 100644
index 4834d48..0000000
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/rules/TaskbarWindowSandboxContextTest.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3.taskbar.rules
-
-import android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
-import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
-import com.android.launcher3.util.LauncherMultivalentJUnit
-import com.android.launcher3.util.MainThreadInitializedObject.SandboxContext
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(LauncherMultivalentJUnit::class)
-@LauncherMultivalentJUnit.EmulatedDevices(["pixelFoldable2023", "pixelTablet2023"])
-class TaskbarWindowSandboxContextTest {
-
- private val context = TaskbarWindowSandboxContext.create(getInstrumentation().targetContext)
-
- @Test
- fun testCreateWindowContext_applicationContextSandboxed() {
- val windowContext = context.createWindowContext(TYPE_APPLICATION_OVERLAY, null)
- assertThat(windowContext.applicationContext).isInstanceOf(SandboxContext::class.java)
- }
-
- @Test
- fun testCreateWindowContext_nested_applicationContextSandboxed() {
- val windowContext = context.createWindowContext(TYPE_APPLICATION_OVERLAY, null)
- val nestedContext = windowContext.createWindowContext(TYPE_APPLICATION_OVERLAY, null)
- assertThat(nestedContext.applicationContext).isInstanceOf(SandboxContext::class.java)
- }
-}
diff --git a/res/layout/user_folder_icon_normalized.xml b/res/layout/user_folder_icon_normalized.xml
index 43a8aac..002e7b7 100644
--- a/res/layout/user_folder_icon_normalized.xml
+++ b/res/layout/user_folder_icon_normalized.xml
@@ -40,12 +40,11 @@
<com.android.launcher3.folder.FolderNameEditText
android:id="@+id/folder_name"
android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
+ android:layout_height="match_parent"
style="@style/TextHeadline"
android:layout_weight="1"
android:background="@android:color/transparent"
- android:gravity="center_horizontal"
+ android:gravity="center"
android:hint="@string/folder_hint_text"
android:imeOptions="flagNoExtractUi"
android:importantForAutofill="no"
diff --git a/src/com/android/launcher3/folder/Folder.java b/src/com/android/launcher3/folder/Folder.java
index 7bec768..5defef3 100644
--- a/src/com/android/launcher3/folder/Folder.java
+++ b/src/com/android/launcher3/folder/Folder.java
@@ -317,10 +317,7 @@
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
| InputType.TYPE_TEXT_FLAG_CAP_WORDS);
mFolderName.forceDisableSuggestions(true);
- mFolderName.setPadding(mFolderName.getPaddingLeft(),
- (getFooterHeight() - mFolderName.getLineHeight()) / 2,
- mFolderName.getPaddingRight(),
- (getFooterHeight() - mFolderName.getLineHeight()) / 2);
+
mKeyboardInsetAnimationCallback = new KeyboardInsetAnimationCallback(this);
setWindowInsetsAnimationCallback(mKeyboardInsetAnimationCallback);
diff --git a/src/com/android/launcher3/folder/FolderPagedView.java b/src/com/android/launcher3/folder/FolderPagedView.java
index 9dc2d24..fe26194 100644
--- a/src/com/android/launcher3/folder/FolderPagedView.java
+++ b/src/com/android/launcher3/folder/FolderPagedView.java
@@ -373,8 +373,9 @@
// Update footer
mPageIndicator.setVisibility(getPageCount() > 1 ? View.VISIBLE : View.GONE);
// Set the gravity as LEFT or RIGHT instead of START, as START depends on the actual text.
- mFolder.getFolderName().setGravity(getPageCount() > 1
- ? (mIsRtl ? Gravity.RIGHT : Gravity.LEFT) : Gravity.CENTER_HORIZONTAL);
+ int horizontalGravity = getPageCount() > 1
+ ? (mIsRtl ? Gravity.RIGHT : Gravity.LEFT) : Gravity.CENTER_HORIZONTAL;
+ mFolder.getFolderName().setGravity(horizontalGravity | Gravity.CENTER_VERTICAL);
}
public int getDesiredWidth() {
diff --git a/src/com/android/launcher3/util/SettingsCache.java b/src/com/android/launcher3/util/SettingsCache.java
index a52f75b..a1ed499 100644
--- a/src/com/android/launcher3/util/SettingsCache.java
+++ b/src/com/android/launcher3/util/SettingsCache.java
@@ -91,7 +91,7 @@
new DaggerSingletonObject<>(LauncherBaseAppComponent::getSettingsCache);
@Inject
- SettingsCache(@ApplicationContext final Context context, DaggerSingletonTracker tracker) {
+ SettingsCache(@ApplicationContext Context context, DaggerSingletonTracker tracker) {
super(new Handler(Looper.getMainLooper()));
mResolver = context.getContentResolver();
ExecutorUtil.executeSyncOnMainOrFail(() -> tracker.addCloseable(this));
diff --git a/tests/multivalentTests/src/com/android/launcher3/folder/PreviewItemManagerTest.kt b/tests/multivalentTests/src/com/android/launcher3/folder/PreviewItemManagerTest.kt
index d236551..111ffaa 100644
--- a/tests/multivalentTests/src/com/android/launcher3/folder/PreviewItemManagerTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/folder/PreviewItemManagerTest.kt
@@ -29,7 +29,6 @@
import com.android.launcher3.icons.BaseIconFactory
import com.android.launcher3.icons.FastBitmapDrawable
import com.android.launcher3.icons.UserBadgeDrawable
-import com.android.launcher3.model.ModelTestRule
import com.android.launcher3.model.data.FolderInfo
import com.android.launcher3.model.data.ItemInfo
import com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ARCHIVED
@@ -45,7 +44,6 @@
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -54,8 +52,6 @@
@RunWith(AndroidJUnit4::class)
class PreviewItemManagerTest {
- @get:Rule val modelTestRule = ModelTestRule()
-
private lateinit var previewItemManager: PreviewItemManager
private lateinit var context: Context
private lateinit var folderItems: ArrayList<ItemInfo>
@@ -99,8 +95,8 @@
BaseIconFactory(
context,
context.resources.configuration.densityDpi,
- previewItemManager.mIconSize
- )
+ previewItemManager.mIconSize,
+ ),
)
// Set second icon to be non-themed.
@@ -111,8 +107,8 @@
BaseIconFactory(
context,
context.resources.configuration.densityDpi,
- previewItemManager.mIconSize
- )
+ previewItemManager.mIconSize,
+ ),
)
// Set third icon to be themed with badge.
@@ -123,8 +119,8 @@
BaseIconFactory(
context,
context.resources.configuration.densityDpi,
- previewItemManager.mIconSize
- )
+ previewItemManager.mIconSize,
+ ),
)
folderApps[2].bitmap = folderApps[2].bitmap.withFlags(profileFlagOp(UserIconInfo.TYPE_WORK))
@@ -137,8 +133,8 @@
BaseIconFactory(
context,
context.resources.configuration.densityDpi,
- previewItemManager.mIconSize
- )
+ previewItemManager.mIconSize,
+ ),
)
defaultThemedIcons = get(context).get(THEMED_ICONS)
diff --git a/tests/multivalentTests/src/com/android/launcher3/icons/IconCacheTest.java b/tests/multivalentTests/src/com/android/launcher3/icons/IconCacheTest.java
index 519108d..ce00b28 100644
--- a/tests/multivalentTests/src/com/android/launcher3/icons/IconCacheTest.java
+++ b/tests/multivalentTests/src/com/android/launcher3/icons/IconCacheTest.java
@@ -68,7 +68,6 @@
import com.android.launcher3.util.ApplicationInfoWrapper;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.PackageUserKey;
-import com.android.launcher3.util.RoboApiWrapper;
import com.google.common.truth.Truth;
@@ -148,7 +147,6 @@
@Test
public void launcherActivityInfo_cached_in_memory() {
- RoboApiWrapper.INSTANCE.initialize();
ComponentName cn = new ComponentName(TEST_PACKAGE, TEST_ACTIVITY);
UserHandle user = myUserHandle();
ComponentKey cacheKey = new ComponentKey(cn, user);
@@ -213,7 +211,6 @@
@Test
public void item_kept_in_db_if_nothing_changes() {
- RoboApiWrapper.INSTANCE.initialize();
ComponentName cn = new ComponentName(TEST_PACKAGE, TEST_ACTIVITY);
UserHandle user = myUserHandle();
@@ -232,7 +229,6 @@
@Test
public void item_updated_in_db_if_appInfo_changes() {
- RoboApiWrapper.INSTANCE.initialize();
ComponentName cn = new ComponentName(TEST_PACKAGE, TEST_ACTIVITY);
UserHandle user = myUserHandle();
@@ -253,7 +249,6 @@
@Test
public void item_removed_in_db_if_item_removed() {
- RoboApiWrapper.INSTANCE.initialize();
ComponentName cn = new ComponentName(TEST_PACKAGE, TEST_ACTIVITY);
UserHandle user = myUserHandle();
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.kt b/tests/multivalentTests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.kt
index 43dc36b..ce04682 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/model/AddWorkspaceItemsTaskTest.kt
@@ -27,7 +27,6 @@
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.times
@@ -44,8 +43,6 @@
@RunWith(AndroidJUnit4::class)
class AddWorkspaceItemsTaskTest : AbstractWorkspaceModelTest() {
- @get:Rule val modelTestRule = ModelTestRule()
-
private lateinit var mDataModelCallbacks: MyCallbacks
private val mWorkspaceItemSpaceFinder: WorkspaceItemSpaceFinder = mock()
@@ -121,18 +118,8 @@
@Test
fun givenMultipleItems_whenExecuteTask_thenAddThem() {
val itemsToAdd =
- arrayOf(
- getNewItem(),
- getExistingItem(),
- getNewItem(),
- getNewItem(),
- getExistingItem(),
- )
- givenNewItemSpaces(
- NewItemSpace(1, 3, 3),
- NewItemSpace(2, 0, 0),
- NewItemSpace(2, 0, 1),
- )
+ arrayOf(getNewItem(), getExistingItem(), getNewItem(), getNewItem(), getExistingItem())
+ givenNewItemSpaces(NewItemSpace(1, 3, 3), NewItemSpace(2, 0, 0), NewItemSpace(2, 0, 1))
val nonEmptyScreenIds = listOf(0, 1)
val addedItems = testAddItems(nonEmptyScreenIds, *itemsToAdd)
@@ -173,7 +160,7 @@
eq(IntArray.wrap(*nonEmptyScreenIds.toIntArray())),
eq(IntArray()),
eq(1),
- eq(1)
+ eq(1),
)
}
@@ -183,7 +170,7 @@
*/
private fun testAddItems(
nonEmptyScreenIds: List<Int>,
- vararg itemsToAdd: WorkspaceItemInfo
+ vararg itemsToAdd: WorkspaceItemInfo,
): List<AddedItem> {
setupWorkspaces(nonEmptyScreenIds)
val task = newTask(*itemsToAdd)
@@ -220,7 +207,7 @@
override fun bindAppsAdded(
newScreens: IntArray?,
addNotAnimated: ArrayList<ItemInfo>,
- addAnimated: ArrayList<ItemInfo>
+ addAnimated: ArrayList<ItemInfo>,
) {
addedItems.addAll(addAnimated.map { AddedItem(it, true) })
addedItems.addAll(addNotAnimated.map { AddedItem(it, false) })
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/AsyncBindingTest.kt b/tests/multivalentTests/src/com/android/launcher3/model/AsyncBindingTest.kt
index dce75b9..c91577f 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/AsyncBindingTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/model/AsyncBindingTest.kt
@@ -64,8 +64,6 @@
@get:Rule val setFlagsRule = SetFlagsRule()
- @get:Rule val modelTestRule = ModelTestRule()
-
@Spy private var callbacks = MyCallbacks()
@Mock private lateinit var itemInflater: ItemInflater<*>
@@ -203,7 +201,7 @@
pendingTasks: RunnableList,
onCompleteSignal: RunnableList,
workspaceItemCount: Int,
- isBindSync: Boolean
+ isBindSync: Boolean,
) {
this.pendingTasks = pendingTasks
this.onCompleteSignal = onCompleteSignal
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java b/tests/multivalentTests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
index 535080a..600af42 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
+++ b/tests/multivalentTests/src/com/android/launcher3/model/CacheDataUpdatedTaskTest.java
@@ -64,11 +64,7 @@
@RunWith(AndroidJUnit4.class)
public class CacheDataUpdatedTaskTest {
- @Rule(order = 0)
- public TestRule testStabilityRule = new TestStabilityRule();
-
- @Rule(order = 1)
- public ModelTestRule mModelTestRule = new ModelTestRule();
+ @Rule public TestRule testStabilityRule = new TestStabilityRule();
private static final String PENDING_APP_1 = TEST_PACKAGE + ".pending1";
private static final String PENDING_APP_2 = TEST_PACKAGE + ".pending2";
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java b/tests/multivalentTests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
index e14e145..1e2431f 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
+++ b/tests/multivalentTests/src/com/android/launcher3/model/DefaultLayoutProviderTest.java
@@ -39,7 +39,6 @@
import org.junit.After;
import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -50,8 +49,6 @@
@RunWith(AndroidJUnit4.class)
public class DefaultLayoutProviderTest {
- @Rule public ModelTestRule rule = new ModelTestRule();
-
private LauncherModelHelper mModelHelper;
private LauncherModelHelper.SandboxModelContext mTargetContext;
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/FirstScreenBroadcastHelperTest.kt b/tests/multivalentTests/src/com/android/launcher3/model/FirstScreenBroadcastHelperTest.kt
index d2d9512..9cc380e 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/FirstScreenBroadcastHelperTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/model/FirstScreenBroadcastHelperTest.kt
@@ -34,7 +34,6 @@
import com.android.launcher3.util.PackageManagerHelper
import com.android.launcher3.util.PackageUserKey
import junit.framework.Assert.assertEquals
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
@@ -46,8 +45,6 @@
@RunWith(AndroidJUnit4::class)
class FirstScreenBroadcastHelperTest {
- @get:Rule val modelTestRule = ModelTestRule()
-
private val context = spy(InstrumentationRegistry.getInstrumentation().targetContext)
private val mockPmHelper = mock<PackageManagerHelper>()
private val expectedAppPackage = "appPackageExpected"
@@ -70,7 +67,7 @@
container = CONTAINER_HOTSEAT
intent = expectedIntent
},
- LauncherAppWidgetInfo().apply { providerName = expectedComponentName }
+ LauncherAppWidgetInfo().apply { providerName = expectedComponentName },
)
@Test
@@ -89,7 +86,7 @@
val sessionInfoMap: HashMap<PackageUserKey, SessionInfo> =
hashMapOf(
PackageUserKey(unexpectedAppPackage, UserHandle(0)) to sessionInfoExpected,
- PackageUserKey(expectedAppPackage, UserHandle(0)) to sessionInfoUnexpected
+ PackageUserKey(expectedAppPackage, UserHandle(0)) to sessionInfoUnexpected,
)
// When
@@ -98,7 +95,7 @@
packageManagerHelper = mockPmHelper,
firstScreenItems = firstScreenItems,
userKeyToSessionMap = sessionInfoMap,
- allWidgets = listOf()
+ allWidgets = listOf(),
)
// Then
@@ -108,7 +105,7 @@
installerPackage = expectedInstallerPackage,
pendingWorkspaceItems = mutableSetOf(expectedAppPackage),
pendingHotseatItems = mutableSetOf(expectedAppPackage),
- pendingWidgetItems = mutableSetOf(expectedAppPackage)
+ pendingWidgetItems = mutableSetOf(expectedAppPackage),
)
)
@@ -133,7 +130,7 @@
providerName = expectedComponentName
screenId = 0
}
- )
+ ),
)
// Then
@@ -143,7 +140,7 @@
installerPackage = expectedInstallerPackage,
installedHotseatItems = mutableSetOf(expectedAppPackage),
installedWorkspaceItems = mutableSetOf(expectedAppPackage),
- firstScreenInstalledWidgets = mutableSetOf(expectedAppPackage)
+ firstScreenInstalledWidgets = mutableSetOf(expectedAppPackage),
)
)
assertEquals(expectedResult, actualResult)
@@ -178,8 +175,8 @@
LauncherAppWidgetInfo().apply {
providerName = unexpectedComponentName
screenId = 0
- }
- )
+ },
+ ),
)
// Then
@@ -190,7 +187,7 @@
installedHotseatItems = mutableSetOf(),
installedWorkspaceItems = mutableSetOf(),
firstScreenInstalledWidgets = mutableSetOf(expectedAppPackage),
- secondaryScreenInstalledWidgets = mutableSetOf(expectedAppPackage2)
+ secondaryScreenInstalledWidgets = mutableSetOf(expectedAppPackage2),
)
)
assertEquals(expectedResult, actualResult)
@@ -224,7 +221,7 @@
packageManagerHelper = mockPmHelper,
firstScreenItems = firstScreenItems,
userKeyToSessionMap = sessionInfoMap,
- allWidgets = listOf()
+ allWidgets = listOf(),
)
// Then
@@ -232,7 +229,7 @@
listOf(
FirstScreenBroadcastModel(
installerPackage = expectedInstallerPackage,
- pendingCollectionItems = mutableSetOf(expectedAppPackage)
+ pendingCollectionItems = mutableSetOf(expectedAppPackage),
)
)
assertEquals(expectedResult, actualResult)
@@ -259,7 +256,7 @@
firstScreenInstalledWidgets =
mutableSetOf<String>().apply { repeat(20) { add(it.toString()) } },
secondaryScreenInstalledWidgets =
- mutableSetOf<String>().apply { repeat(20) { add(it.toString()) } }
+ mutableSetOf<String>().apply { repeat(20) { add(it.toString()) } },
)
// When
@@ -334,7 +331,7 @@
installedWorkspaceItems = mutableSetOf("installedWorkspaceItems"),
installedHotseatItems = mutableSetOf("installedHotseatItems"),
firstScreenInstalledWidgets = mutableSetOf("firstScreenInstalledWidgetItems"),
- secondaryScreenInstalledWidgets = mutableSetOf("secondaryInstalledWidgetItems")
+ secondaryScreenInstalledWidgets = mutableSetOf("secondaryInstalledWidgetItems"),
)
)
val expectedPendingIntent =
@@ -342,7 +339,7 @@
context,
0 /* requestCode */,
Intent(),
- PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
+ PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE,
)
// When
@@ -354,40 +351,40 @@
assertEquals(
"com.android.launcher3.action.FIRST_SCREEN_ACTIVE_INSTALLS",
- argumentCaptor.value.action
+ argumentCaptor.value.action,
)
assertEquals(expectedInstallerPackage, argumentCaptor.value.`package`)
assertEquals(
expectedPendingIntent,
- argumentCaptor.value.getParcelableExtra("verificationToken")
+ argumentCaptor.value.getParcelableExtra("verificationToken"),
)
assertEquals(
arrayListOf("pendingCollectionItem"),
- argumentCaptor.value.getStringArrayListExtra("folderItem")
+ argumentCaptor.value.getStringArrayListExtra("folderItem"),
)
assertEquals(
arrayListOf("pendingWorkspaceItem"),
- argumentCaptor.value.getStringArrayListExtra("workspaceItem")
+ argumentCaptor.value.getStringArrayListExtra("workspaceItem"),
)
assertEquals(
arrayListOf("pendingHotseatItems"),
- argumentCaptor.value.getStringArrayListExtra("hotseatItem")
+ argumentCaptor.value.getStringArrayListExtra("hotseatItem"),
)
assertEquals(
arrayListOf("pendingWidgetItems"),
- argumentCaptor.value.getStringArrayListExtra("widgetItem")
+ argumentCaptor.value.getStringArrayListExtra("widgetItem"),
)
assertEquals(
arrayListOf("installedWorkspaceItems"),
- argumentCaptor.value.getStringArrayListExtra("workspaceInstalledItems")
+ argumentCaptor.value.getStringArrayListExtra("workspaceInstalledItems"),
)
assertEquals(
arrayListOf("installedHotseatItems"),
- argumentCaptor.value.getStringArrayListExtra("hotseatInstalledItems")
+ argumentCaptor.value.getStringArrayListExtra("hotseatInstalledItems"),
)
assertEquals(
arrayListOf("firstScreenInstalledWidgetItems", "secondaryInstalledWidgetItems"),
- argumentCaptor.value.getStringArrayListExtra("widgetInstalledItems")
+ argumentCaptor.value.getStringArrayListExtra("widgetInstalledItems"),
)
}
}
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/FolderIconLoadTest.kt b/tests/multivalentTests/src/com/android/launcher3/model/FolderIconLoadTest.kt
index 4ca47e3..e8f778f 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/FolderIconLoadTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/model/FolderIconLoadTest.kt
@@ -30,7 +30,6 @@
import com.google.common.truth.Truth.assertWithMessage
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -39,8 +38,6 @@
@RunWith(AndroidJUnit4::class)
class FolderIconLoadTest {
- @get:Rule(order = 0) val modelTestRule = ModelTestRule()
-
private lateinit var modelHelper: LauncherModelHelper
private val uniqueActivities =
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/LoaderCursorTest.java b/tests/multivalentTests/src/com/android/launcher3/model/LoaderCursorTest.java
index ac911b3..b4945d7 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/LoaderCursorTest.java
+++ b/tests/multivalentTests/src/com/android/launcher3/model/LoaderCursorTest.java
@@ -67,7 +67,6 @@
import org.junit.After;
import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -78,8 +77,6 @@
@RunWith(AndroidJUnit4.class)
public class LoaderCursorTest {
- @Rule public ModelTestRule rule = new ModelTestRule();
-
private LauncherModelHelper mModelHelper;
private LauncherAppState mApp;
private PackageManagerHelper mPmHelper;
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/ModelTestRule.kt b/tests/multivalentTests/src/com/android/launcher3/model/ModelTestRule.kt
deleted file mode 100644
index ad2c2a4..0000000
--- a/tests/multivalentTests/src/com/android/launcher3/model/ModelTestRule.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3.model
-
-import com.android.launcher3.util.RoboApiWrapper
-import org.junit.rules.TestWatcher
-import org.junit.runner.Description
-
-class ModelTestRule : TestWatcher() {
- override fun starting(description: Description?) {
- RoboApiWrapper.initialize()
- }
-}
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java b/tests/multivalentTests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
index a0d9da9..0f1fc00 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
+++ b/tests/multivalentTests/src/com/android/launcher3/model/PackageInstallStateChangedTaskTest.java
@@ -37,7 +37,6 @@
import org.junit.After;
import org.junit.Before;
-import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -48,8 +47,6 @@
@RunWith(AndroidJUnit4.class)
public class PackageInstallStateChangedTaskTest {
- @Rule public ModelTestRule mModelTestRule = new ModelTestRule();
-
private static final String PENDING_APP_1 = TEST_PACKAGE + ".pending1";
private static final String PENDING_APP_2 = TEST_PACKAGE + ".pending2";
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt b/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
index c7abce6..ed8b397 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt
@@ -58,7 +58,6 @@
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertWithMessage
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
@@ -77,8 +76,6 @@
@RunWith(AndroidJUnit4::class)
class WorkspaceItemProcessorTest {
- @get:Rule val modelTestRule = ModelTestRule()
-
@Mock private lateinit var mockIconRequestInfo: IconRequestInfo<WorkspaceItemInfo>
@Mock private lateinit var mockWorkspaceInfo: WorkspaceItemInfo
@Mock private lateinit var mockBgDataModel: BgDataModel
diff --git a/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemSpaceFinderTest.kt b/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemSpaceFinderTest.kt
index ae8e966..dd03eee 100644
--- a/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemSpaceFinderTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/model/WorkspaceItemSpaceFinderTest.kt
@@ -21,7 +21,6 @@
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -30,8 +29,6 @@
@RunWith(AndroidJUnit4::class)
class WorkspaceItemSpaceFinderTest : AbstractWorkspaceModelTest() {
- @get:Rule val modelTestRule = ModelTestRule()
-
private val mItemSpaceFinder = WorkspaceItemSpaceFinder()
@Before
@@ -52,7 +49,7 @@
mExistingScreens,
mNewScreens,
spanX,
- spanY
+ spanY,
)
.let { NewItemSpace.fromIntArray(it) }
@@ -62,7 +59,7 @@
newItemSpace.cellX,
newItemSpace.cellY,
spanX,
- spanY
+ spanY,
)
)
.isTrue()
@@ -171,7 +168,7 @@
screen0 = listOf(Rect(2, 0, 5, 2)),
screen1 = fullScreenSpaces, // full screens are skipped
screen2 = fullScreenSpaces, // full screens are skipped
- screen3 = emptyScreenSpaces
+ screen3 = emptyScreenSpaces,
)
val spaceFound = findSpace(3, 1)
diff --git a/tests/multivalentTests/src/com/android/launcher3/pm/InstallSessionTrackerTest.kt b/tests/multivalentTests/src/com/android/launcher3/pm/InstallSessionTrackerTest.kt
index d860710..15a9964 100644
--- a/tests/multivalentTests/src/com/android/launcher3/pm/InstallSessionTrackerTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/pm/InstallSessionTrackerTest.kt
@@ -26,7 +26,6 @@
import androidx.test.filters.SdkSuppress
import androidx.test.filters.SmallTest
import com.android.launcher3.Flags.FLAG_ENABLE_SUPPORT_FOR_ARCHIVING
-import com.android.launcher3.model.ModelTestRule
import com.android.launcher3.util.Executors.MODEL_EXECUTOR
import com.android.launcher3.util.LauncherModelHelper
import com.android.launcher3.util.PackageUserKey
@@ -45,9 +44,7 @@
@SmallTest
@RunWith(AndroidJUnit4::class)
class InstallSessionTrackerTest {
- @get:Rule(order = 0) val setFlagsRule = SetFlagsRule()
-
- @get:Rule(order = 1) val modelTestRule = ModelTestRule()
+ @get:Rule val setFlagsRule = SetFlagsRule()
private val mockInstallSessionHelper: InstallSessionHelper = mock()
private val mockCallback: InstallSessionTracker.Callback = mock()
@@ -67,7 +64,7 @@
mockInstallSessionHelper,
mockCallback,
mockPackageInstaller,
- launcherApps
+ launcherApps,
)
}
diff --git a/tests/multivalentTests/src/com/android/launcher3/pm/UserCacheTest.kt b/tests/multivalentTests/src/com/android/launcher3/pm/UserCacheTest.kt
index 482dced..5f08c31 100644
--- a/tests/multivalentTests/src/com/android/launcher3/pm/UserCacheTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/pm/UserCacheTest.kt
@@ -20,7 +20,6 @@
import android.os.UserHandle
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
-import com.android.launcher3.model.ModelTestRule
import com.android.launcher3.util.Executors.MODEL_EXECUTOR
import com.android.launcher3.util.LauncherModelHelper
import com.android.launcher3.util.TestUtil
@@ -28,15 +27,12 @@
import com.google.common.truth.Truth.assertThat
import org.junit.After
import org.junit.Before
-import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class UserCacheTest {
- @get:Rule val modelTestRule = ModelTestRule()
-
private val launcherModelHelper = LauncherModelHelper()
private val sandboxContext = launcherModelHelper.sandboxContext
private lateinit var userCache: UserCache
diff --git a/tests/src/com/android/launcher3/model/PackageUpdatedTaskTest.kt b/tests/src/com/android/launcher3/model/PackageUpdatedTaskTest.kt
index 05f626d..d9af07a 100644
--- a/tests/src/com/android/launcher3/model/PackageUpdatedTaskTest.kt
+++ b/tests/src/com/android/launcher3/model/PackageUpdatedTaskTest.kt
@@ -58,8 +58,7 @@
@RunWith(AndroidJUnit4::class)
class PackageUpdatedTaskTest {
- @get:Rule(order = 0) val setFlagsRule = SetFlagsRule()
- @get:Rule(order = 1) val modelTestRule = ModelTestRule()
+ @get:Rule val setFlagsRule = SetFlagsRule()
private val mUser = UserHandle(0)
private val mDataModel: BgDataModel = BgDataModel()
diff --git a/tests/src/com/android/launcher3/util/RoboApiWrapper.kt b/tests/src/com/android/launcher3/util/RoboApiWrapper.kt
index 583652d..7f74e56 100644
--- a/tests/src/com/android/launcher3/util/RoboApiWrapper.kt
+++ b/tests/src/com/android/launcher3/util/RoboApiWrapper.kt
@@ -24,12 +24,10 @@
object RoboApiWrapper {
- fun initialize() {}
-
fun registerInputStream(
contentResolver: ContentResolver,
uri: Uri,
- inputStreamSupplier: Supplier<InputStream>
+ inputStreamSupplier: Supplier<InputStream>,
) {}
fun waitForLooperSync(looper: Looper) {}
diff --git a/tests/src_deviceless/com/android/launcher3/util/RoboApiWrapper.kt b/tests/src_deviceless/com/android/launcher3/util/RoboApiWrapper.kt
index 9232268..a2b8303 100644
--- a/tests/src_deviceless/com/android/launcher3/util/RoboApiWrapper.kt
+++ b/tests/src_deviceless/com/android/launcher3/util/RoboApiWrapper.kt
@@ -16,70 +16,19 @@
package com.android.launcher3.util
-import android.content.ComponentName
import android.content.ContentResolver
-import android.content.Intent
-import android.content.IntentFilter
-import android.content.pm.ApplicationInfo
-import android.content.pm.LauncherActivityInfo
-import android.content.pm.LauncherApps
import android.net.Uri
import android.os.Looper
-import android.os.Process
-import androidx.test.platform.app.InstrumentationRegistry
import java.io.InputStream
import java.util.function.Supplier
-import org.mockito.Mockito
-import org.mockito.kotlin.whenever
-import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows
object RoboApiWrapper {
- fun initialize() {
- Shadows.shadowOf(
- RuntimeEnvironment.getApplication().getSystemService(LauncherApps::class.java)
- )
- .addEnabledPackage(
- Process.myUserHandle(),
- InstrumentationRegistry.getInstrumentation().context.packageName
- )
- LauncherModelHelper.ACTIVITY_LIST.forEach {
- installApp(ComponentName(InstrumentationRegistry.getInstrumentation().context, it))
- }
- }
-
- private fun installApp(componentName: ComponentName) {
- val app = RuntimeEnvironment.getApplication()
- val user = Process.myUserHandle()
-
- val pm = Shadows.shadowOf(app.packageManager)
- val ai = pm.addActivityIfNotPresent(componentName)
- pm.addIntentFilterForActivity(
- componentName,
- IntentFilter(Intent.ACTION_MAIN).apply { addCategory(Intent.CATEGORY_LAUNCHER) }
- )
-
- val li = Mockito.mock(LauncherActivityInfo::class.java)
- val appInfo = ApplicationInfo().apply { flags = 0 }
- Mockito.doReturn(ai).whenever(li).activityInfo
- Mockito.doReturn(appInfo).whenever(li).applicationInfo
- Mockito.doReturn(user).whenever(li).user
- Mockito.doReturn(1f).whenever(li).loadingProgress
- Mockito.doReturn(componentName).whenever(li).componentName
-
- Shadows.shadowOf(app.getSystemService(LauncherApps::class.java)).apply {
- addActivity(user, li)
- addEnabledPackage(user, componentName.packageName)
- setActivityEnabled(user, componentName)
- addApplicationInfo(user, componentName.packageName, ai.applicationInfo)
- }
- }
-
fun registerInputStream(
contentResolver: ContentResolver,
uri: Uri,
- inputStreamSupplier: Supplier<InputStream>
+ inputStreamSupplier: Supplier<InputStream>,
) {
Shadows.shadowOf(contentResolver).registerInputStreamSupplier(uri, inputStreamSupplier)
}