OSDN Git Service

Don't allow shortcuts with non-main activities
authorMakoto Onuki <omakoto@google.com>
Thu, 14 Jul 2016 01:03:13 +0000 (18:03 -0700)
committerMakoto Onuki <omakoto@google.com>
Thu, 14 Jul 2016 17:49:22 +0000 (10:49 -0700)
Bug 30122758

Change-Id: Id9ead6706d5460fec3d68c7457e3097f30a9a080

services/core/java/com/android/server/pm/ShortcutService.java
services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java

index 5f8cbbf..730217d 100644 (file)
@@ -1444,6 +1444,10 @@ public class ShortcutService extends IShortcutService.Stub {
                     shortcut.getPackage().equals(shortcut.getActivity().getPackageName()),
                     "Cannot publish shortcut: activity " + shortcut.getActivity() + " does not"
                     + " belong to package " + shortcut.getPackage());
+            Preconditions.checkState(
+                    injectIsMainActivity(shortcut.getActivity(), shortcut.getUserId()),
+                    "Cannot publish shortcut: activity " + shortcut.getActivity() + " is not"
+                            + " main activity");
         }
 
         if (!forUpdate) {
index f570ff2..d546092 100644 (file)
@@ -130,7 +130,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest {
         assertExpectException(NullPointerException.class, "action must be set",
                 () -> new ShortcutInfo.Builder(getTestContext(), "id").setIntent(new Intent()));
 
-        // same for add.
         assertExpectException(
                 IllegalArgumentException.class, "Short label must be provided", () -> {
             ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), "id")
@@ -139,6 +138,7 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest {
             assertTrue(getManager().setDynamicShortcuts(list(si)));
         });
 
+        // same for add.
         assertExpectException(
                 IllegalArgumentException.class, "Short label must be provided", () -> {
             ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), "id")
@@ -147,7 +147,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest {
             assertTrue(getManager().addDynamicShortcuts(list(si)));
         });
 
-        // same for add.
         assertExpectException(NullPointerException.class, "Intent must be provided", () -> {
             ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), "id")
                     .setActivity(new ComponentName(getTestContext().getPackageName(), "s"))
@@ -181,6 +180,33 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest {
                     .build();
             assertTrue(getManager().addDynamicShortcuts(list(si)));
         });
+
+        // Now all activities are not main.
+        mMainActivityChecker = (component, userId) -> false;
+
+        assertExpectException(
+                IllegalStateException.class, "is not main", () -> {
+                    ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), "id")
+                            .setActivity(new ComponentName(getTestContext(), "s"))
+                            .build();
+                    assertTrue(getManager().setDynamicShortcuts(list(si)));
+                });
+        // For add
+        assertExpectException(
+                IllegalStateException.class, "is not main", () -> {
+                    ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), "id")
+                            .setActivity(new ComponentName(getTestContext(), "s"))
+                            .build();
+                    assertTrue(getManager().addDynamicShortcuts(list(si)));
+                });
+        // For update
+        assertExpectException(
+                IllegalStateException.class, "is not main", () -> {
+                    ShortcutInfo si = new ShortcutInfo.Builder(getTestContext(), "id")
+                            .setActivity(new ComponentName(getTestContext(), "s"))
+                            .build();
+                    assertTrue(getManager().updateShortcuts(list(si)));
+                });
     }
 
     public void testShortcutInfoParcel() {