OSDN Git Service

Use instance methods to replace static methods in TaskbarShadowLauncherApps
authorutzcoz <utzcoz@outlook.com>
Sun, 14 Jun 2020 09:22:04 +0000 (17:22 +0800)
committerutzcoz <utzcoz@outlook.com>
Sun, 14 Jun 2020 09:22:04 +0000 (17:22 +0800)
Test: ./gradlew test

Signed-off-by: utzcoz <utzcoz@outlook.com>
app/src/test/java/com/farmerbb/taskbar/shadow/TaskbarShadowLauncherApps.java
app/src/test/java/com/farmerbb/taskbar/ui/TaskbarControllerTest.java

index 7fee78d..a666550 100644 (file)
@@ -8,30 +8,40 @@ import org.robolectric.annotation.Implements;
 import org.robolectric.shadows.ShadowLauncherApps;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import static android.os.Build.VERSION_CODES.LOLLIPOP;
 
 @Implements(value = LauncherApps.class, minSdk = LOLLIPOP)
 public class TaskbarShadowLauncherApps extends ShadowLauncherApps {
-    private static final List<String> enabledPackages = new ArrayList<>();
+    private Map<UserHandle, List<String>> enabledPackages = new HashMap<>();
 
-    public static void addEnabledPackages(String packageName) {
-        if (!enabledPackages.contains(packageName)) {
-            enabledPackages.add(packageName);
-        }
-    }
-
-    public static void removeEnabledPackage(String packageName) {
-        enabledPackages.remove(packageName);
+    public void reset() {
+        enabledPackages.clear();
     }
 
-    public static void reset() {
-        enabledPackages.clear();
+    /**
+     * Adds an enabled package to be checked by {@link #isPackageEnabled(String, UserHandle)}.
+     *
+     * @param userHandle  the user handle to be added.
+     * @param packageName the package name to be added.
+     */
+    public void addEnabledPackage(UserHandle userHandle, String packageName) {
+        List<String> packages = enabledPackages.get(userHandle);
+        if (packages == null) {
+            packages = new ArrayList<>();
+        }
+        if (!packages.contains(packageName)) {
+            packages.add(packageName);
+        }
+        enabledPackages.put(userHandle, packages);
     }
 
     @Implementation
     protected boolean isPackageEnabled(String packageName, UserHandle user) {
-        return enabledPackages.contains(packageName);
+        List<String> packages = enabledPackages.get(user);
+        return packages != null && packages.contains(packageName);
     }
 }
index 8b191a8..bddd15f 100644 (file)
@@ -7,6 +7,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.pm.ActivityInfo;
 import android.content.pm.LauncherActivityInfo;
+import android.content.pm.LauncherApps;
 import android.content.pm.PackageManager;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
@@ -48,6 +49,7 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.rule.PowerMockRule;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
 import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowUsageStatsManager.EventBuilder;
 import org.robolectric.util.ReflectionHelpers;
@@ -112,7 +114,6 @@ public class TaskbarControllerTest {
     @After
     public void tearDown() {
         prefs.edit().remove(PREF_START_BUTTON_IMAGE).apply();
-        TaskbarShadowLauncherApps.reset();
 
         uiController.onDestroyHost(host);
     }
@@ -612,9 +613,17 @@ public class TaskbarControllerTest {
         );
         assertEquals(0, realNumOfPinnedApps);
 
+        LauncherApps launcherApps =
+                (LauncherApps) context.getSystemService(Context.LAUNCHER_APPS_SERVICE);
+        TaskbarShadowLauncherApps taskbarShadowLauncherApps =
+                (TaskbarShadowLauncherApps) shadowOf(launcherApps);
         AppEntry appEntry = generateTestAppEntry(1);
         pinnedApps.add(appEntry);
-        TaskbarShadowLauncherApps.addEnabledPackages(appEntry.getPackageName());
+        taskbarShadowLauncherApps
+                .addEnabledPackage(
+                        UserHandle.getUserHandleForUid(DEFAULT_TEST_USER_ID),
+                        appEntry.getPackageName()
+                );
         realNumOfPinnedApps = uiController.filterRealPinnedApps(
                 context, pinnedApps, entries, applicationIdsToRemove
         );
@@ -632,6 +641,8 @@ public class TaskbarControllerTest {
         assertEquals(1, realNumOfPinnedApps);
         assertEquals(2, applicationIdsToRemove.size());
         assertEquals(1, entries.size());
+
+        taskbarShadowLauncherApps.reset();
     }
 
     @Test