mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-27 15:26:58 +00:00
Merge "Reapply "Move widget picker tests to Robolectric"" into main
This commit is contained in:
@@ -27,12 +27,12 @@ import android.graphics.PorterDuff;
|
||||
import android.graphics.PorterDuffXfermode;
|
||||
import android.graphics.RectF;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Handler;
|
||||
import android.util.Log;
|
||||
import android.util.Size;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.launcher3.DeviceProfile;
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
@@ -45,6 +45,7 @@ import com.android.launcher3.model.WidgetItem;
|
||||
import com.android.launcher3.pm.ShortcutConfigActivityInfo;
|
||||
import com.android.launcher3.util.CancellableTask;
|
||||
import com.android.launcher3.util.Executors;
|
||||
import com.android.launcher3.util.LooperExecutor;
|
||||
import com.android.launcher3.views.ActivityContext;
|
||||
import com.android.launcher3.widget.util.WidgetSizes;
|
||||
|
||||
@@ -68,8 +69,7 @@ public class DatabaseWidgetPreviewLoader {
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates the widget preview on {@link AsyncTask#THREAD_POOL_EXECUTOR}. Must be
|
||||
* called on UI thread.
|
||||
* Generates the widget preview on {@link Executors#UI_HELPER_EXECUTOR}.
|
||||
*
|
||||
* @return a request id which can be used to cancel the request.
|
||||
*/
|
||||
@@ -78,7 +78,7 @@ public class DatabaseWidgetPreviewLoader {
|
||||
@NonNull WidgetItem item,
|
||||
@NonNull Size previewSize,
|
||||
@NonNull Consumer<Bitmap> callback) {
|
||||
Handler handler = Executors.UI_HELPER_EXECUTOR.getHandler();
|
||||
Handler handler = getLoaderExecutor().getHandler();
|
||||
CancellableTask<Bitmap> request = new CancellableTask<>(
|
||||
() -> generatePreview(item, previewSize.getWidth(), previewSize.getHeight()),
|
||||
MAIN_EXECUTOR,
|
||||
@@ -87,6 +87,12 @@ public class DatabaseWidgetPreviewLoader {
|
||||
return request;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
@NonNull
|
||||
public static LooperExecutor getLoaderExecutor() {
|
||||
return Executors.UI_HELPER_EXECUTOR;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a generated preview for a widget and if the preview should be saved in persistent
|
||||
* storage.
|
||||
|
||||
@@ -15,15 +15,12 @@
|
||||
*/
|
||||
package com.android.launcher3.util;
|
||||
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.os.Bundle;
|
||||
import android.os.Process;
|
||||
|
||||
import com.android.launcher3.LauncherSettings;
|
||||
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
|
||||
@@ -87,10 +84,10 @@ public class WidgetUtils {
|
||||
* Creates a {@link AppWidgetProviderInfo} for the provided component name
|
||||
*/
|
||||
public static AppWidgetProviderInfo createAppWidgetProviderInfo(ComponentName cn) {
|
||||
AppWidgetProviderInfo info = AppWidgetManager.getInstance(getApplicationContext())
|
||||
.getInstalledProvidersForPackage(
|
||||
getInstrumentation().getContext().getPackageName(), Process.myUserHandle())
|
||||
.get(0);
|
||||
ActivityInfo activityInfo = new ActivityInfo();
|
||||
activityInfo.applicationInfo = new ApplicationInfo();
|
||||
AppWidgetProviderInfo info = new AppWidgetProviderInfo();
|
||||
info.providerInfo = activityInfo;
|
||||
info.provider = cn;
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import static android.content.pm.ApplicationInfo.CATEGORY_UNDEFINED;
|
||||
import static android.content.pm.ApplicationInfo.CATEGORY_VIDEO;
|
||||
import static android.content.pm.ApplicationInfo.FLAG_INSTALLED;
|
||||
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@@ -35,7 +34,6 @@ import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
@@ -53,6 +51,7 @@ import com.android.launcher3.R;
|
||||
import com.android.launcher3.icons.IconCache;
|
||||
import com.android.launcher3.model.WidgetItem;
|
||||
import com.android.launcher3.util.Executors;
|
||||
import com.android.launcher3.util.WidgetUtils;
|
||||
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
@@ -152,11 +151,8 @@ public class WidgetRecommendationCategoryProviderTest {
|
||||
|
||||
doAnswer(invocation -> widgetLabel).when(mIconCache).getTitleNoCache(any());
|
||||
|
||||
AppWidgetProviderInfo providerInfo = AppWidgetManager.getInstance(getApplicationContext())
|
||||
.getInstalledProvidersForPackage(
|
||||
getInstrumentation().getContext().getPackageName(), Process.myUserHandle())
|
||||
.get(0);
|
||||
providerInfo.provider = ComponentName.createRelative(TEST_PACKAGE, widgetClassName);
|
||||
AppWidgetProviderInfo providerInfo = WidgetUtils.createAppWidgetProviderInfo(ComponentName
|
||||
.createRelative(TEST_PACKAGE, widgetClassName));
|
||||
|
||||
LauncherAppWidgetProviderInfo launcherAppWidgetProviderInfo =
|
||||
LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, providerInfo);
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.android.launcher3.widget.picker;
|
||||
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -49,8 +50,8 @@ import com.android.launcher3.icons.IconCache;
|
||||
import com.android.launcher3.model.WidgetItem;
|
||||
import com.android.launcher3.model.data.PackageItemInfo;
|
||||
import com.android.launcher3.util.ActivityContextWrapper;
|
||||
import com.android.launcher3.util.Executors;
|
||||
import com.android.launcher3.util.WidgetUtils;
|
||||
import com.android.launcher3.widget.DatabaseWidgetPreviewLoader;
|
||||
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
|
||||
import com.android.launcher3.widget.WidgetCell;
|
||||
import com.android.launcher3.widget.WidgetManagerHelper;
|
||||
@@ -112,7 +113,9 @@ public final class WidgetsListTableViewHolderBinderTest {
|
||||
TEST_PACKAGE,
|
||||
/* numOfWidgets= */ 3);
|
||||
mViewHolderBinder.bindViewHolder(viewHolder, entry, /* position= */ 0, EMPTY_LIST);
|
||||
Executors.MAIN_EXECUTOR.submit(() -> { }).get();
|
||||
// Wait for the loader to complete the preview loading
|
||||
DatabaseWidgetPreviewLoader.getLoaderExecutor().submit(() -> { }).get();
|
||||
getInstrumentation().waitForIdleSync();
|
||||
|
||||
// THEN the table container has one row, which contains 3 widgets.
|
||||
// View: .SampleWidget0 | .SampleWidget1 | .SampleWidget2
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.launcher3.widget.picker.search;
|
||||
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
|
||||
import static com.android.launcher3.util.WidgetUtils.createAppWidgetProviderInfo;
|
||||
@@ -163,7 +164,7 @@ public class SimpleWidgetsSearchAlgorithmTest {
|
||||
.when(mDataProvider)
|
||||
.getAllWidgets();
|
||||
mSimpleWidgetsSearchAlgorithm.doSearch("Ca", mSearchCallback);
|
||||
MAIN_EXECUTOR.submit(() -> { }).get();
|
||||
getInstrumentation().waitForIdleSync();
|
||||
verify(mSearchCallback).onSearchResult(
|
||||
matches("Ca"), argThat(a -> a != null && !a.isEmpty()));
|
||||
}
|
||||
@@ -43,6 +43,7 @@ class WidgetPreviewContainerSizesTest {
|
||||
private lateinit var context: Context
|
||||
private lateinit var deviceProfile: DeviceProfile
|
||||
private lateinit var testInvariantProfile: InvariantDeviceProfile
|
||||
private lateinit var widgetItemInvariantProfile: InvariantDeviceProfile
|
||||
|
||||
@Mock private lateinit var iconCache: IconCache
|
||||
|
||||
@@ -51,6 +52,11 @@ class WidgetPreviewContainerSizesTest {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
context = ActivityContextWrapper(ApplicationProvider.getApplicationContext())
|
||||
testInvariantProfile = LauncherAppState.getIDP(context)
|
||||
widgetItemInvariantProfile =
|
||||
InvariantDeviceProfile().apply {
|
||||
numRows = TEST_GRID_SIZE
|
||||
numColumns = TEST_GRID_SIZE
|
||||
}
|
||||
deviceProfile = testInvariantProfile.getDeviceProfile(context).copy(context)
|
||||
}
|
||||
|
||||
@@ -60,7 +66,8 @@ class WidgetPreviewContainerSizesTest {
|
||||
val expectedPreviewContainers = testSizes.values.toList()
|
||||
|
||||
for ((index, widgetSize) in testSizes.keys.withIndex()) {
|
||||
val widgetItem = createWidgetItem(widgetSize, context, testInvariantProfile, iconCache)
|
||||
val widgetItem =
|
||||
createWidgetItem(widgetSize, context, widgetItemInvariantProfile, iconCache)
|
||||
|
||||
assertWithMessage("size for $widgetSize should be: ${expectedPreviewContainers[index]}")
|
||||
.that(WidgetPreviewContainerSize.forItem(widgetItem, deviceProfile))
|
||||
@@ -70,6 +77,7 @@ class WidgetPreviewContainerSizesTest {
|
||||
|
||||
companion object {
|
||||
private const val TEST_PACKAGE = "com.google.test"
|
||||
private const val TEST_GRID_SIZE = 6
|
||||
|
||||
private val HANDHELD_TEST_SIZES: Map<Point, WidgetPreviewContainerSize> =
|
||||
mapOf(
|
||||
Reference in New Issue
Block a user