From 7a6a05f0ccc8c57496d0a1e2b0882ab7de3175e5 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Thu, 10 Mar 2016 17:01:08 -0800 Subject: [PATCH] Test for ShortcutManager.updateShortcuts(), also ... fix bugs Bug 27548047 Change-Id: Ia55d35521912dcba2fb1bb9c20588a83d1a2d004 --- .../java/android/content/pm/ShortcutInfo.java | 17 +- .../server/pm/LauncherAppsService.java | 8 +- .../server/pm/ShortcutManagerTest.java | 380 +++++++++++++----- 3 files changed, 304 insertions(+), 101 deletions(-) diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index 83a70cd1a7695..e41136c0038a2 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -160,10 +160,12 @@ public class ShortcutInfo implements Parcelable { mIcon = b.mIcon; mTitle = b.mTitle; mIntent = b.mIntent; - final Bundle intentExtras = mIntent.getExtras(); - if (intentExtras != null) { - mIntent.replaceExtras((Bundle) null); - mIntentPersistableExtras = new PersistableBundle(intentExtras); + if (mIntent != null) { + final Bundle intentExtras = mIntent.getExtras(); + if (intentExtras != null) { + mIntent.replaceExtras((Bundle) null); + mIntentPersistableExtras = new PersistableBundle(intentExtras); + } } mWeight = b.mWeight; mExtras = b.mExtras; @@ -194,6 +196,7 @@ public class ShortcutInfo implements Parcelable { if ((cloneFlags & CLONE_REMOVE_ICON) == 0) { mIcon = source.mIcon; + mBitmapPath = source.mBitmapPath; } mTitle = source.mTitle; @@ -204,8 +207,6 @@ public class ShortcutInfo implements Parcelable { mWeight = source.mWeight; mExtras = source.mExtras; mIconResourceId = source.mIconResourceId; - mBitmapPath = source.mBitmapPath; - } else { // Set this bit. mFlags |= FLAG_KEY_FIELDS_ONLY; @@ -231,9 +232,9 @@ public class ShortcutInfo implements Parcelable { * @hide */ public void copyNonNullFieldsFrom(ShortcutInfo source) { - Preconditions.checkState(mId == source.mId, "ID must match"); + Preconditions.checkState(mId.equals(source.mId), "ID must match"); Preconditions.checkState(mPackageName.equals(source.mPackageName), - "Package namae must match"); + "Package name must match"); if (source.mActivityComponent != null) { mActivityComponent = source.mActivityComponent; diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index e90fb3208d858..ff6886cc8456f 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -51,6 +51,7 @@ import android.provider.Settings; import android.util.Log; import android.util.Slog; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.PackageMonitor; import com.android.internal.util.Preconditions; import com.android.server.LocalServices; @@ -76,6 +77,7 @@ public class LauncherAppsService extends SystemService { publishBinderService(Context.LAUNCHER_APPS_SERVICE, mLauncherAppsImpl); } + @VisibleForTesting static class LauncherAppsImpl extends ILauncherApps.Stub { private static final boolean DEBUG = false; private static final String TAG = "LauncherAppsService"; @@ -167,7 +169,8 @@ public class LauncherAppsService extends SystemService { /** * Checks if the caller is in the same group as the userToCheck. */ - private void ensureInUserProfiles(UserHandle userToCheck, String message) { + @VisibleForTesting // We override it in unit tests + void ensureInUserProfiles(UserHandle userToCheck, String message) { final int callingUserId = UserHandle.getCallingUserId(); final int targetUserId = userToCheck.getIdentifier(); @@ -187,7 +190,8 @@ public class LauncherAppsService extends SystemService { } } - private void verifyCallingPackage(String callingPackage) { + @VisibleForTesting // We override it in unit tests + void verifyCallingPackage(String callingPackage) { int packageUid = -1; try { packageUid = mPm.getPackageUid(callingPackage, diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java index 2f4beaa36da4d..f2c42dbb012bc 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest.java @@ -15,13 +15,18 @@ */ package com.android.server.pm; +import static org.mockito.Mockito.mock; + import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.pm.ILauncherApps; +import android.content.pm.LauncherApps; import android.content.pm.LauncherApps.ShortcutQuery; +import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.content.pm.ShortcutServiceInternal; @@ -30,10 +35,12 @@ import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.drawable.Icon; +import android.os.BaseBundle; import android.os.Bundle; import android.os.FileUtils; import android.os.ParcelFileDescriptor; import android.os.UserHandle; +import android.os.UserManager; import android.test.AndroidTestCase; import android.test.mock.MockContext; import android.test.suitebuilder.annotation.SmallTest; @@ -43,6 +50,7 @@ import com.android.frameworks.servicestests.R; import com.android.internal.util.Preconditions; import com.android.server.LocalServices; import com.android.server.SystemService; +import com.android.server.pm.LauncherAppsService.LauncherAppsImpl; import com.android.server.pm.ShortcutService.ConfigConstants; import com.android.server.pm.ShortcutService.FileOutputStreamWithPath; @@ -75,7 +83,11 @@ import java.util.Set; -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner * TODO: Add checks with assertAllNotHaveIcon() + * + * TODO: separate, detailed tests for ShortcutInfo (CTS?) * + * * TODO: Cross-user test (do in CTS?) + * */ @SmallTest public class ShortcutManagerTest extends AndroidTestCase { @@ -87,11 +99,19 @@ public class ShortcutManagerTest extends AndroidTestCase { */ private static final boolean ENABLE_DUMP = false; // DO NOT SUBMIT WITH true - /** Context used in the client side */ - private final class ClientContext extends MockContext { + private class BaseContext extends MockContext { @Override - public String getPackageName() { - return mInjectedClientPackage; + public Object getSystemService(String name) { + switch (name) { + case Context.USER_SERVICE: + return mMockUserManager; + } + throw new UnsupportedOperationException(); + } + + @Override + public PackageManager getPackageManager() { + return mMockPackageManager; } @Override @@ -100,14 +120,18 @@ public class ShortcutManagerTest extends AndroidTestCase { } } - /** Context used in the service side */ - private final class ServiceContext extends MockContext { + /** Context used in the client side */ + private class ClientContext extends BaseContext { @Override - public Resources getResources() { - return ShortcutManagerTest.this.getContext().getResources(); + public String getPackageName() { + return mInjectedClientPackage; } } + /** Context used in the service side */ + private final class ServiceContext extends BaseContext { + } + /** ShortcutService with injection override methods. */ private final class ShortcutServiceTestable extends ShortcutService { public ShortcutServiceTestable(Context context) { @@ -170,7 +194,7 @@ public class ShortcutManagerTest extends AndroidTestCase { } /** ShortcutManager with injection override methods. */ - private final class ShortcutManagerTestable extends ShortcutManager { + private class ShortcutManagerTestable extends ShortcutManager { public ShortcutManagerTestable(Context context, ShortcutServiceTestable service) { super(context, service); } @@ -181,6 +205,27 @@ public class ShortcutManagerTest extends AndroidTestCase { } } + private class LauncherAppImplTestable extends LauncherAppsImpl { + public LauncherAppImplTestable(Context context) { + super(context); + } + + @Override + public void ensureInUserProfiles(UserHandle userToCheck, String message) { + // SKIP + } + + @Override + public void verifyCallingPackage(String callingPackage) { + // SKIP + } + } + + private class LauncherAppsTestable extends LauncherApps { + public LauncherAppsTestable(Context context, ILauncherApps service) { + super(context, service); + } + } public static class ShortcutActivity extends Activity { } @@ -198,6 +243,9 @@ public class ShortcutManagerTest extends AndroidTestCase { private ShortcutManagerTestable mManager; private ShortcutServiceInternal mInternal; + private LauncherAppImplTestable mLauncherAppImpl; + private LauncherAppsTestable mLauncherApps; + private File mInjectedFilePathRoot; private long mInjectedCurrentTimeLillis; @@ -209,6 +257,9 @@ public class ShortcutManagerTest extends AndroidTestCase { private Map mInjectedPackageUidMap; + private PackageManager mMockPackageManager; + private UserManager mMockUserManager; + private static final String CALLING_PACKAGE_1 = "com.android.test.1"; private static final int CALLING_UID_1 = 10001; @@ -246,6 +297,9 @@ public class ShortcutManagerTest extends AndroidTestCase { mServiceContext = new ServiceContext(); mClientContext = new ClientContext(); + mMockPackageManager = mock(PackageManager.class); + mMockUserManager = mock(UserManager.class); + // Prepare injection values. mInjectedCurrentTimeLillis = START_TIME; @@ -280,6 +334,9 @@ public class ShortcutManagerTest extends AndroidTestCase { mInternal = LocalServices.getService(ShortcutServiceInternal.class); + mLauncherAppImpl = new LauncherAppImplTestable(mServiceContext); + mLauncherApps = new LauncherAppsTestable(mClientContext, mLauncherAppImpl); + // Load the setting file. mService.onBootPhase(SystemService.PHASE_LOCK_SETTINGS_READY); } @@ -315,6 +372,10 @@ public class ShortcutManagerTest extends AndroidTestCase { return UserHandle.getUserId(mInjectedCallingUid); } + private UserHandle getCallingUser() { + return UserHandle.of(getCallingUserId()); + } + /** For debugging */ private void dumpsysOnLogcat() { if (!ENABLE_DUMP) return; @@ -434,7 +495,6 @@ public class ShortcutManagerTest extends AndroidTestCase { return s; } - /** * Make multiple shortcuts with IDs. */ @@ -446,6 +506,10 @@ public class ShortcutManagerTest extends AndroidTestCase { return ret; } + private ShortcutInfo.Builder makeShortcutBuilder() { + return new ShortcutInfo.Builder(mClientContext); + } + /** * Make a shortcut with details. */ @@ -663,6 +727,10 @@ public class ShortcutManagerTest extends AndroidTestCase { } } + private void assertBundleEmpty(BaseBundle b) { + assertTrue(b == null || b.size() == 0); + } + private ShortcutInfo getPackageShortcut(String packageName, String shortcutId, int userId) { return mService.getPackageShortcutForTest(packageName, shortcutId, userId); } @@ -1132,65 +1200,61 @@ public class ShortcutManagerTest extends AndroidTestCase { setCaller(LAUNCHER_1); // Check hasIconResource()/hasIconFile(). - assertShortcutIds(assertAllHaveIconResId(mInternal.getShortcutInfo( - getCallingPackage(), CALLING_PACKAGE_1, Arrays.asList("res32x32"), - getCallingUserId())), "res32x32"); + assertShortcutIds(assertAllHaveIconResId(mLauncherApps.getShortcutInfo( + CALLING_PACKAGE_1, Arrays.asList("res32x32"), + getCallingUser())), "res32x32"); - assertShortcutIds(assertAllHaveIconResId(mInternal.getShortcutInfo( - getCallingPackage(), CALLING_PACKAGE_1, Arrays.asList("res64x64"), - getCallingUserId())), "res64x64"); + assertShortcutIds(assertAllHaveIconResId(mLauncherApps.getShortcutInfo( + CALLING_PACKAGE_1, Arrays.asList("res64x64"), getCallingUser())), + "res64x64"); - assertShortcutIds(assertAllHaveIconFile(mInternal.getShortcutInfo( - getCallingPackage(), CALLING_PACKAGE_1, Arrays.asList("bmp32x32"), - getCallingUserId())), "bmp32x32"); - assertShortcutIds(assertAllHaveIconFile(mInternal.getShortcutInfo( - getCallingPackage(), CALLING_PACKAGE_1, Arrays.asList("bmp64x64"), - getCallingUserId())), "bmp64x64"); - assertShortcutIds(assertAllHaveIconFile(mInternal.getShortcutInfo( - getCallingPackage(), CALLING_PACKAGE_1, Arrays.asList("bmp512x512"), - getCallingUserId())), "bmp512x512"); + assertShortcutIds(assertAllHaveIconFile(mLauncherApps.getShortcutInfo( + CALLING_PACKAGE_1, Arrays.asList("bmp32x32"), getCallingUser())), + "bmp32x32"); + + assertShortcutIds(assertAllHaveIconFile(mLauncherApps.getShortcutInfo( + CALLING_PACKAGE_1, Arrays.asList("bmp64x64"), getCallingUser())), + "bmp64x64"); + + assertShortcutIds(assertAllHaveIconFile(mLauncherApps.getShortcutInfo( + CALLING_PACKAGE_1, Arrays.asList("bmp512x512"), getCallingUser())), + "bmp512x512"); // Check assertEquals( R.drawable.black_32x32, - mInternal.getShortcutIconResId(getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "res32x32"), getCallingUserId())); + mLauncherApps.getShortcutIconResId( + makePackageShortcut(CALLING_PACKAGE_1, "res32x32"), getCallingUser())); assertEquals( R.drawable.black_64x64, - mInternal.getShortcutIconResId( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "res64x64"), getCallingUserId())); + mLauncherApps.getShortcutIconResId( + + makePackageShortcut(CALLING_PACKAGE_1, "res64x64"), getCallingUser())); assertEquals( 0, // because it's not a resource - mInternal.getShortcutIconResId( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "bmp32x32"), getCallingUserId())); + mLauncherApps.getShortcutIconResId( + makePackageShortcut(CALLING_PACKAGE_1, "bmp32x32"), getCallingUser())); assertEquals( 0, // because it's not a resource - mInternal.getShortcutIconResId( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "bmp64x64"), getCallingUserId())); + mLauncherApps.getShortcutIconResId( + makePackageShortcut(CALLING_PACKAGE_1, "bmp64x64"), getCallingUser())); assertEquals( 0, // because it's not a resource - mInternal.getShortcutIconResId( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "bmp512x512"), getCallingUserId())); + mLauncherApps.getShortcutIconResId( + makePackageShortcut(CALLING_PACKAGE_1, "bmp512x512"), getCallingUser())); - bmp = pfdToBitmap(mInternal.getShortcutIconFd( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "bmp32x32"), getCallingUserId())); + bmp = pfdToBitmap(mLauncherApps.getShortcutIconFd( + makePackageShortcut(CALLING_PACKAGE_1, "bmp32x32"), getCallingUser())); assertBitmapSize(32, 32, bmp); - bmp = pfdToBitmap(mInternal.getShortcutIconFd( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "bmp64x64"), getCallingUserId())); + bmp = pfdToBitmap(mLauncherApps.getShortcutIconFd( + makePackageShortcut(CALLING_PACKAGE_1, "bmp64x64"), getCallingUser())); assertBitmapSize(64, 64, bmp); - bmp = pfdToBitmap(mInternal.getShortcutIconFd( - getCallingPackage(), - makePackageShortcut(CALLING_PACKAGE_1, "bmp512x512"), getCallingUserId())); + bmp = pfdToBitmap(mLauncherApps.getShortcutIconFd( + makePackageShortcut(CALLING_PACKAGE_1, "bmp512x512"), getCallingUser())); assertBitmapSize(128, 128, bmp); // TODO Test the content URI case too. @@ -1300,11 +1364,146 @@ public class ShortcutManagerTest extends AndroidTestCase { assertFalse(p11_1_3.getName().contains("_")); } + public void testUpdateShortcuts() { + runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { + assertTrue(mManager.setDynamicShortcuts(Arrays.asList( + makeShortcut("s1"), + makeShortcut("s2"), + makeShortcut("s3"), + makeShortcut("s4"), + makeShortcut("s5") + ))); + }); + runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { + assertTrue(mManager.setDynamicShortcuts(Arrays.asList( + makeShortcut("s1"), + makeShortcut("s2"), + makeShortcut("s3"), + makeShortcut("s4"), + makeShortcut("s5") + ))); + }); + runWithCaller(LAUNCHER_1, UserHandle.USER_SYSTEM, () -> { + mLauncherApps.pinShortcuts(CALLING_PACKAGE_1, Arrays.asList("s2", "s3"), + getCallingUser()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_2, Arrays.asList("s4", "s5"), + getCallingUser()); + }); + runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { + mManager.deleteDynamicShortcut("s1"); + mManager.deleteDynamicShortcut("s2"); + }); + runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { + mManager.deleteDynamicShortcut("s1"); + mManager.deleteDynamicShortcut("s3"); + mManager.deleteDynamicShortcut("s5"); + }); + runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { + assertShortcutIds(assertAllDynamic( + mManager.getDynamicShortcuts()), + "s3", "s4", "s5"); + assertShortcutIds(assertAllPinned( + mManager.getPinnedShortcuts()), + "s2", "s3"); + }); + runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { + assertShortcutIds(assertAllDynamic( + mManager.getDynamicShortcuts()), + "s2", "s4"); + assertShortcutIds(assertAllPinned( + mManager.getPinnedShortcuts()), + "s4", "s5"); + }); + + runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { + ShortcutInfo s2 = makeShortcutBuilder() + .setId("s2") + .setIcon(Icon.createWithResource(mContext, R.drawable.black_32x32)) + .build(); + + ShortcutInfo s4 = makeShortcutBuilder() + .setId("s4") + .setTitle("new title") + .build(); + + mManager.updateShortcuts(Arrays.asList(s2, s4)); + }); + runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { + ShortcutInfo s2 = makeShortcutBuilder() + .setId("s2") + .setIntent(makeIntent(Intent.ACTION_ANSWER, ShortcutActivity.class, + "key1", "val1")) + .build(); + + ShortcutInfo s4 = makeShortcutBuilder() + .setId("s4") + .setIntent(new Intent(Intent.ACTION_ALL_APPS)) + .build(); + + mManager.updateShortcuts(Arrays.asList(s2, s4)); + }); + + runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { + assertShortcutIds(assertAllDynamic( + mManager.getDynamicShortcuts()), + "s3", "s4", "s5"); + assertShortcutIds(assertAllPinned( + mManager.getPinnedShortcuts()), + "s2", "s3"); + + ShortcutInfo s = getCallerShortcut("s2"); + assertTrue(s.hasIconResource()); + assertEquals(R.drawable.black_32x32, s.getIconResourceId()); + assertEquals("Title-s2", s.getTitle()); + + s = getCallerShortcut("s4"); + assertFalse(s.hasIconResource()); + assertEquals(0, s.getIconResourceId()); + assertEquals("new title", s.getTitle()); + }); + runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { + assertShortcutIds(assertAllDynamic( + mManager.getDynamicShortcuts()), + "s2", "s4"); + assertShortcutIds(assertAllPinned( + mManager.getPinnedShortcuts()), + "s4", "s5"); + + ShortcutInfo s = getCallerShortcut("s2"); + assertFalse(s.hasIconResource()); + assertEquals(0, s.getIconResourceId()); + assertEquals("Title-s2", s.getTitle()); + assertEquals(Intent.ACTION_ANSWER, s.getIntent().getAction()); + assertEquals(1, s.getIntent().getExtras().size()); + + s = getCallerShortcut("s4"); + assertFalse(s.hasIconResource()); + assertEquals(0, s.getIconResourceId()); + assertEquals("Title-s4", s.getTitle()); + assertEquals(Intent.ACTION_ALL_APPS, s.getIntent().getAction()); + assertBundleEmpty(s.getIntent().getExtras()); + }); + // TODO Check with other fields too. + + // TODO Check bitmap removal too. + } + // TODO: updateShortcuts() // TODO: getPinnedShortcuts() // === Test for launcher side APIs === + private static ShortcutQuery buildQuery(long changedSince, + String packageName, ComponentName componentName, + /* @ShortcutQuery.QueryFlags */ int flags) { + final ShortcutQuery q = new ShortcutQuery(); + q.setChangedSince(changedSince); + q.setPackage(packageName); + q.setActivity(componentName); + q.setQueryFlags(flags); + return q; + } + public void testGetShortcuts() { // Set up shortcuts. @@ -1330,56 +1529,55 @@ public class ShortcutManagerTest extends AndroidTestCase { // Get dynamic assertAllDynamic(assertAllHaveTitle(assertAllNotHaveIntents(assertShortcutIds( assertAllNotKeyFieldsOnly( - mInternal.getShortcuts(getCallingPackage(), /* time =*/ 0, CALLING_PACKAGE_1, - /* activity =*/ null, - ShortcutQuery.FLAG_GET_DYNAMIC, getCallingUserId())), + mLauncherApps.getShortcuts(buildQuery(/* time =*/ 0, CALLING_PACKAGE_1, + /* activity =*/ null, ShortcutQuery.FLAG_GET_DYNAMIC), getCallingUser())), "s1", "s2")))); // Get pinned assertShortcutIds( - mInternal.getShortcuts(getCallingPackage(), /* time =*/ 0, CALLING_PACKAGE_1, + mLauncherApps.getShortcuts(buildQuery(/* time =*/ 0, CALLING_PACKAGE_1, /* activity =*/ null, - ShortcutQuery.FLAG_GET_PINNED, getCallingUserId()) + ShortcutQuery.FLAG_GET_PINNED), getCallingUser()) /* none */); // Get both, with timestamp assertAllDynamic(assertAllHaveTitle(assertAllNotHaveIntents(assertShortcutIds( - assertAllNotKeyFieldsOnly(mInternal.getShortcuts(getCallingPackage(), + assertAllNotKeyFieldsOnly(mLauncherApps.getShortcuts(buildQuery( /* time =*/ 1000, CALLING_PACKAGE_2, /* activity =*/ null, - ShortcutQuery.FLAG_GET_PINNED | ShortcutQuery.FLAG_GET_DYNAMIC, - getCallingUserId())), + ShortcutQuery.FLAG_GET_PINNED | ShortcutQuery.FLAG_GET_DYNAMIC), + getCallingUser())), "s2", "s3")))); // FLAG_GET_KEY_FIELDS_ONLY assertAllDynamic(assertAllNotHaveTitle(assertAllNotHaveIntents(assertShortcutIds( - assertAllKeyFieldsOnly(mInternal.getShortcuts(getCallingPackage(), + assertAllKeyFieldsOnly(mLauncherApps.getShortcuts(buildQuery( /* time =*/ 1000, CALLING_PACKAGE_2, /* activity =*/ null, - ShortcutQuery.FLAG_GET_DYNAMIC | ShortcutQuery.FLAG_GET_KEY_FIELDS_ONLY, - getCallingUserId())), + ShortcutQuery.FLAG_GET_DYNAMIC | ShortcutQuery.FLAG_GET_KEY_FIELDS_ONLY), + getCallingUser())), "s2", "s3")))); // Pin some shortcuts. - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_2, - Arrays.asList("s3", "s4"), getCallingUserId()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_2, + Arrays.asList("s3", "s4"), getCallingUser()); // Pinned ones only assertAllPinned(assertAllHaveTitle(assertAllNotHaveIntents(assertShortcutIds( - assertAllNotKeyFieldsOnly(mInternal.getShortcuts(getCallingPackage(), + assertAllNotKeyFieldsOnly(mLauncherApps.getShortcuts(buildQuery( /* time =*/ 1000, CALLING_PACKAGE_2, /* activity =*/ null, - ShortcutQuery.FLAG_GET_PINNED, - getCallingUserId())), + ShortcutQuery.FLAG_GET_PINNED), + getCallingUser())), "s3")))); // All packages. assertShortcutIds(assertAllNotKeyFieldsOnly( - mInternal.getShortcuts(getCallingPackage(), + mLauncherApps.getShortcuts(buildQuery( /* time =*/ 5000, /* package= */ null, /* activity =*/ null, - ShortcutQuery.FLAG_GET_DYNAMIC | ShortcutQuery.FLAG_GET_PINNED, - getCallingUserId())), + ShortcutQuery.FLAG_GET_DYNAMIC | ShortcutQuery.FLAG_GET_PINNED), + getCallingUser())), "s1", "s3"); // TODO More tests: pinned but dynamic, filter by activity @@ -1423,8 +1621,8 @@ public class ShortcutManagerTest extends AndroidTestCase { // Pin some. setCaller(LAUNCHER_1); - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_1, - Arrays.asList("s2"), getCallingUserId()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_1, + Arrays.asList("s2"), getCallingUser()); dumpsysOnLogcat(); @@ -1442,20 +1640,20 @@ public class ShortcutManagerTest extends AndroidTestCase { // Note we don't guarantee the orders. list = assertShortcutIds(assertAllHaveTitle(assertAllNotHaveIntents( assertAllNotKeyFieldsOnly( - mInternal.getShortcutInfo(getCallingPackage(), CALLING_PACKAGE_1, - Arrays.asList("s2", "s1", "s3", null), getCallingUserId())))), + mLauncherApps.getShortcutInfo(CALLING_PACKAGE_1, + Arrays.asList("s2", "s1", "s3", null), getCallingUser())))), "s1", "s2"); assertEquals("Title 1", findById(list, "s1").getTitle()); assertEquals("Title 2", findById(list, "s2").getTitle()); assertShortcutIds(assertAllHaveTitle(assertAllNotHaveIntents( - mInternal.getShortcutInfo(getCallingPackage(), CALLING_PACKAGE_1, - Arrays.asList("s3"), getCallingUserId()))) + mLauncherApps.getShortcutInfo(CALLING_PACKAGE_1, + Arrays.asList("s3"), getCallingUser()))) /* none */); list = assertShortcutIds(assertAllHaveTitle(assertAllNotHaveIntents( - mInternal.getShortcutInfo(getCallingPackage(), CALLING_PACKAGE_2, - Arrays.asList("s1", "s2", "s3"), getCallingUserId()))), + mLauncherApps.getShortcutInfo(CALLING_PACKAGE_2, + Arrays.asList("s1", "s2", "s3"), getCallingUser()))), "s1"); assertEquals("ABC", findById(list, "s1").getTitle()); } @@ -1481,14 +1679,14 @@ public class ShortcutManagerTest extends AndroidTestCase { // Pin some. setCaller(LAUNCHER_1); - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_1, - Arrays.asList("s2", "s3"), getCallingUserId()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_1, + Arrays.asList("s2", "s3"), getCallingUser()); - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_2, - Arrays.asList("s3", "s4", "s5"), getCallingUserId()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_2, + Arrays.asList("s3", "s4", "s5"), getCallingUser()); - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_3, - Arrays.asList("s3"), getCallingUserId()); // Note ID doesn't exist + mLauncherApps.pinShortcuts(CALLING_PACKAGE_3, + Arrays.asList("s3"), getCallingUser()); // Note ID doesn't exist // Delete some. setCaller(CALLING_PACKAGE_1); @@ -1511,18 +1709,18 @@ public class ShortcutManagerTest extends AndroidTestCase { // CALLING_PACKAGE_1 deleted s2, but it's pinned, so it still exists. assertShortcutIds(assertAllPinned(assertAllNotKeyFieldsOnly( - mInternal.getShortcuts(getCallingPackage(), /* time =*/ 0, CALLING_PACKAGE_1, - /* activity =*/ null, ShortcutQuery.FLAG_GET_PINNED, getCallingUserId()))), + mLauncherApps.getShortcuts(buildQuery(/* time =*/ 0, CALLING_PACKAGE_1, + /* activity =*/ null, ShortcutQuery.FLAG_GET_PINNED), getCallingUser()))), "s2"); assertShortcutIds(assertAllPinned(assertAllNotKeyFieldsOnly( - mInternal.getShortcuts(getCallingPackage(), /* time =*/ 0, CALLING_PACKAGE_2, - /* activity =*/ null, ShortcutQuery.FLAG_GET_PINNED, getCallingUserId()))), + mLauncherApps.getShortcuts(buildQuery(/* time =*/ 0, CALLING_PACKAGE_2, + /* activity =*/ null, ShortcutQuery.FLAG_GET_PINNED), getCallingUser()))), "s3", "s4"); assertShortcutIds(assertAllPinned(assertAllNotKeyFieldsOnly( - mInternal.getShortcuts(getCallingPackage(), /* time =*/ 0, CALLING_PACKAGE_3, - /* activity =*/ null, ShortcutQuery.FLAG_GET_PINNED, getCallingUserId()))) + mLauncherApps.getShortcuts(buildQuery(/* time =*/ 0, CALLING_PACKAGE_3, + /* activity =*/ null, ShortcutQuery.FLAG_GET_PINNED), getCallingUser()))) /* none */); } @@ -1561,11 +1759,11 @@ public class ShortcutManagerTest extends AndroidTestCase { // Pin all. setCaller(LAUNCHER_1); - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_1, - Arrays.asList("s1", "s2"), getCallingUserId()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_1, + Arrays.asList("s1", "s2"), getCallingUser()); - mInternal.pinShortcuts(getCallingPackage(), CALLING_PACKAGE_2, - Arrays.asList("s1"), getCallingUserId()); + mLauncherApps.pinShortcuts(CALLING_PACKAGE_2, + Arrays.asList("s1"), getCallingUser()); // Just to make it complicated, delete some. setCaller(CALLING_PACKAGE_1);