intent.putExtra(EXTRA_CELL_ID, cellId);
U.sendBroadcast(context, intent);
- if(shouldShowPlaceholder) {
- String providerName =
- pref.getString(generateProviderPrefKey(cellId), PREF_DEFAULT_NULL);
- if(!providerName.equals(PREF_DEFAULT_NULL)) {
- ComponentName componentName = ComponentName.unflattenFromString(providerName);
-
- List<AppWidgetProviderInfo> providerInfoList = appWidgetManager.getInstalledProvidersForProfile(Process.myUserHandle());
- for(AppWidgetProviderInfo info : providerInfoList) {
- if(info.provider.equals(componentName)) {
- U.showToast(context, context.getString(R.string.tb_widget_restore_toast, info.loadLabel(context.getPackageManager())), Toast.LENGTH_SHORT);
- break;
- }
- }
- }
+ if (shouldShowPlaceholder) {
+ showPlaceholderToast(context, appWidgetManager, cellId, pref);
}
previouslySelectedCell = -1;
return PREF_DASHBOARD_WIDGET_PREFIX + cellId + PREF_DASHBOARD_WIDGET_PLACEHOLDER_SUFFIX;
}
+ @VisibleForTesting
+ void showPlaceholderToast(Context context,
+ AppWidgetManager appWidgetManager,
+ int cellId,
+ SharedPreferences pref) {
+ String providerName = pref.getString(generateProviderPrefKey(cellId), PREF_DEFAULT_NULL);
+ if (providerName != null && !PREF_DEFAULT_NULL.equals(providerName)) {
+ ComponentName componentName = ComponentName.unflattenFromString(providerName);
+
+ List<AppWidgetProviderInfo> providerInfoList =
+ appWidgetManager.getInstalledProvidersForProfile(Process.myUserHandle());
+ for (AppWidgetProviderInfo info : providerInfoList) {
+ if (info.provider.equals(componentName)) {
+ String text =
+ context.getString(
+ R.string.tb_widget_restore_toast,
+ info.loadLabel(context.getPackageManager())
+ );
+ U.showToast(context, text, Toast.LENGTH_SHORT);
+ break;
+ }
+ }
+ }
+ }
+
private void cellLongClick(View view) {
fadeOut(false);
--- /dev/null
+package com.farmerbb.taskbar.shadow;
+
+import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProviderInfo;
+import android.os.UserHandle;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.shadows.ShadowAppWidgetManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Implements(AppWidgetManager.class)
+public class TaskbarShadowAppWidgetManager extends ShadowAppWidgetManager {
+ private Multimap<UserHandle, AppWidgetProviderInfo> installedProvidersForProfile =
+ HashMultimap.create();
+
+ public void addInstalledProvidersForProfile(UserHandle userHandle,
+ AppWidgetProviderInfo appWidgetProviderInfo) {
+ installedProvidersForProfile.put(userHandle, appWidgetProviderInfo);
+ }
+
+ @Implementation
+ protected List<AppWidgetProviderInfo> getInstalledProvidersForProfile(UserHandle profile) {
+ return new ArrayList<>(installedProvidersForProfile.get(profile));
+ }
+}
package com.farmerbb.taskbar.ui;
+import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.SharedPreferences;
+import android.os.Process;
import android.view.View;
import android.widget.LinearLayout;
import com.farmerbb.taskbar.R;
import com.farmerbb.taskbar.helper.LauncherHelper;
import com.farmerbb.taskbar.mockito.BooleanAnswer;
+import com.farmerbb.taskbar.shadow.TaskbarShadowAppWidgetManager;
+import com.farmerbb.taskbar.shadow.TaskbarShadowAppWidgetProviderInfo;
import com.farmerbb.taskbar.util.TaskbarPosition;
import com.farmerbb.taskbar.util.U;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowToast;
import static com.farmerbb.taskbar.Constants.DEFAULT_TEST_CELL_ID;
+import static com.farmerbb.taskbar.Constants.TEST_LABEL;
import static com.farmerbb.taskbar.Constants.TEST_NAME;
import static com.farmerbb.taskbar.Constants.TEST_PACKAGE;
+import static com.farmerbb.taskbar.Constants.UNSUPPORTED;
import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_LEFT;
import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_RIGHT;
import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_VERTICAL_LEFT;
import static com.farmerbb.taskbar.util.Constants.PREF_DASHBOARD_WIDGET_PLACEHOLDER_SUFFIX;
import static com.farmerbb.taskbar.util.Constants.PREF_DASHBOARD_WIDGET_PREFIX;
import static com.farmerbb.taskbar.util.Constants.PREF_DASHBOARD_WIDGET_PROVIDER_SUFFIX;
+import static com.farmerbb.taskbar.util.Constants.PREF_DEFAULT_NULL;
import static com.farmerbb.taskbar.util.Constants.PREF_DONT_STOP_DASHBOARD;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
import static org.powermock.api.mockito.PowerMockito.when;
+import static org.robolectric.Shadows.shadowOf;
@RunWith(RobolectricTestRunner.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*",
info.provider = new ComponentName(TEST_PACKAGE, TEST_NAME);
int cellId = DEFAULT_TEST_CELL_ID;
int appWidgetId = 100;
- prefs.edit().putString(
- PREF_DASHBOARD_WIDGET_PREFIX
- + cellId
- + PREF_DASHBOARD_WIDGET_PLACEHOLDER_SUFFIX,
- ""
- );
+ prefs.edit().putString(uiController.generateProviderPlaceholderPrefKey(cellId), "").apply();
uiController.saveWidgetInfo(context, info, cellId, appWidgetId);
assertEquals(
appWidgetId,
);
}
+ @Test
+ @Config(shadows = {TaskbarShadowAppWidgetManager.class,
+ TaskbarShadowAppWidgetProviderInfo.class})
+ public void testShowPlaceholderToast() {
+ AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
+ int cellId = DEFAULT_TEST_CELL_ID;
+ String providerPrefKey = uiController.generateProviderPrefKey(cellId);
+
+ TaskbarShadowAppWidgetManager shadowAppWidgetManager =
+ (TaskbarShadowAppWidgetManager) shadowOf(appWidgetManager);
+ AppWidgetProviderInfo info = new AppWidgetProviderInfo();
+ info.provider = new ComponentName(TEST_PACKAGE, TEST_NAME);
+ TaskbarShadowAppWidgetProviderInfo shadowAppWidgetProviderInfo =
+ (TaskbarShadowAppWidgetProviderInfo) Shadow.extract(info);
+ shadowAppWidgetProviderInfo.label = TEST_LABEL;
+ shadowAppWidgetManager.addInstalledProvidersForProfile(Process.myUserHandle(), info);
+
+ prefs.edit().putString(providerPrefKey, null).apply();
+ uiController.showPlaceholderToast(context, appWidgetManager, cellId, prefs);
+ assertNull(ShadowToast.getLatestToast());
+
+ prefs.edit().putString(providerPrefKey, PREF_DEFAULT_NULL).apply();
+ uiController.showPlaceholderToast(context, appWidgetManager, cellId, prefs);
+ assertNull(ShadowToast.getLatestToast());
+
+ prefs
+ .edit()
+ .putString(providerPrefKey, info.provider.flattenToString() + UNSUPPORTED)
+ .apply();
+ uiController.showPlaceholderToast(context, appWidgetManager, cellId, prefs);
+ assertNull(ShadowToast.getLatestToast());
+
+ prefs.edit().putString(providerPrefKey, info.provider.flattenToString()).apply();
+ uiController.showPlaceholderToast(context, appWidgetManager, cellId, prefs);
+ String lastToast = ShadowToast.getTextOfLatestToast();
+ assertNotNull(lastToast);
+ String expectedText = context.getString(R.string.tb_widget_restore_toast, TEST_LABEL);
+ assertEquals(expectedText, lastToast);
+ }
+
private void verifyViewPadding(View view, int left, int top, int right, int bottom) {
assertEquals(left, view.getPaddingLeft());
assertEquals(top, view.getPaddingTop());