diff options
17 files changed, 170 insertions, 789 deletions
diff --git a/api/current.txt b/api/current.txt index 42d3ea17070f..1b97b8aa05dc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -10333,12 +10333,12 @@ package android.content.pm { ctor public LauncherApps.ShortcutQuery(); method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName); method public android.content.pm.LauncherApps.ShortcutQuery setChangedSince(long); - method public android.content.pm.LauncherApps.ShortcutQuery setIntent(android.content.Intent); + method public deprecated android.content.pm.LauncherApps.ShortcutQuery setIntent(android.content.Intent); method public android.content.pm.LauncherApps.ShortcutQuery setPackage(java.lang.String); method public android.content.pm.LauncherApps.ShortcutQuery setQueryFlags(int); method public android.content.pm.LauncherApps.ShortcutQuery setShortcutIds(java.util.List<java.lang.String>); field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4 - field public static final int FLAG_MATCH_CHOOSER = 16; // 0x10 + field public static final deprecated int FLAG_MATCH_CHOOSER = 16; // 0x10 field public static final int FLAG_MATCH_DYNAMIC = 1; // 0x1 field public static final int FLAG_MATCH_MANIFEST = 8; // 0x8 field public static final int FLAG_MATCH_PINNED = 2; // 0x2 @@ -10888,9 +10888,9 @@ package android.content.pm { method public int describeContents(); method public android.content.ComponentName getActivity(); method public java.util.Set<java.lang.String> getCategories(); - method public android.content.ComponentName[] getChooserComponentNames(); - method public android.os.PersistableBundle getChooserExtras(); - method public android.content.IntentFilter[] getChooserIntentFilters(); + method public deprecated android.content.ComponentName[] getChooserComponentNames(); + method public deprecated android.os.PersistableBundle getChooserExtras(); + method public deprecated android.content.IntentFilter[] getChooserIntentFilters(); method public java.lang.CharSequence getDisabledMessage(); method public android.os.PersistableBundle getExtras(); method public java.lang.String getId(); @@ -10903,7 +10903,7 @@ package android.content.pm { method public java.lang.CharSequence getShortLabel(); method public android.os.UserHandle getUserHandle(); method public boolean hasKeyFieldsOnly(); - method public boolean isChooser(); + method public deprecated boolean isChooser(); method public boolean isDeclaredInManifest(); method public boolean isDynamic(); method public boolean isEnabled(); @@ -10916,11 +10916,11 @@ package android.content.pm { public static class ShortcutInfo.Builder { ctor public ShortcutInfo.Builder(android.content.Context, java.lang.String); - method public android.content.pm.ShortcutInfo.Builder addChooserIntentFilter(android.content.IntentFilter, android.content.ComponentName); + method public deprecated android.content.pm.ShortcutInfo.Builder addChooserIntentFilter(android.content.IntentFilter, android.content.ComponentName); method public android.content.pm.ShortcutInfo build(); method public android.content.pm.ShortcutInfo.Builder setActivity(android.content.ComponentName); method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.Set<java.lang.String>); - method public android.content.pm.ShortcutInfo.Builder setChooserExtras(android.os.PersistableBundle); + method public deprecated android.content.pm.ShortcutInfo.Builder setChooserExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setDisabledMessage(java.lang.CharSequence); method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon); diff --git a/api/system-current.txt b/api/system-current.txt index e6381d140209..7fddb2a14b1f 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -10957,12 +10957,12 @@ package android.content.pm { ctor public LauncherApps.ShortcutQuery(); method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName); method public android.content.pm.LauncherApps.ShortcutQuery setChangedSince(long); - method public android.content.pm.LauncherApps.ShortcutQuery setIntent(android.content.Intent); + method public deprecated android.content.pm.LauncherApps.ShortcutQuery setIntent(android.content.Intent); method public android.content.pm.LauncherApps.ShortcutQuery setPackage(java.lang.String); method public android.content.pm.LauncherApps.ShortcutQuery setQueryFlags(int); method public android.content.pm.LauncherApps.ShortcutQuery setShortcutIds(java.util.List<java.lang.String>); field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4 - field public static final int FLAG_MATCH_CHOOSER = 16; // 0x10 + field public static final deprecated int FLAG_MATCH_CHOOSER = 16; // 0x10 field public static final int FLAG_MATCH_DYNAMIC = 1; // 0x1 field public static final int FLAG_MATCH_MANIFEST = 8; // 0x8 field public static final int FLAG_MATCH_PINNED = 2; // 0x2 @@ -11606,9 +11606,9 @@ package android.content.pm { method public int describeContents(); method public android.content.ComponentName getActivity(); method public java.util.Set<java.lang.String> getCategories(); - method public android.content.ComponentName[] getChooserComponentNames(); - method public android.os.PersistableBundle getChooserExtras(); - method public android.content.IntentFilter[] getChooserIntentFilters(); + method public deprecated android.content.ComponentName[] getChooserComponentNames(); + method public deprecated android.os.PersistableBundle getChooserExtras(); + method public deprecated android.content.IntentFilter[] getChooserIntentFilters(); method public java.lang.CharSequence getDisabledMessage(); method public android.os.PersistableBundle getExtras(); method public java.lang.String getId(); @@ -11621,7 +11621,7 @@ package android.content.pm { method public java.lang.CharSequence getShortLabel(); method public android.os.UserHandle getUserHandle(); method public boolean hasKeyFieldsOnly(); - method public boolean isChooser(); + method public deprecated boolean isChooser(); method public boolean isDeclaredInManifest(); method public boolean isDynamic(); method public boolean isEnabled(); @@ -11634,11 +11634,11 @@ package android.content.pm { public static class ShortcutInfo.Builder { ctor public ShortcutInfo.Builder(android.content.Context, java.lang.String); - method public android.content.pm.ShortcutInfo.Builder addChooserIntentFilter(android.content.IntentFilter, android.content.ComponentName); + method public deprecated android.content.pm.ShortcutInfo.Builder addChooserIntentFilter(android.content.IntentFilter, android.content.ComponentName); method public android.content.pm.ShortcutInfo build(); method public android.content.pm.ShortcutInfo.Builder setActivity(android.content.ComponentName); method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.Set<java.lang.String>); - method public android.content.pm.ShortcutInfo.Builder setChooserExtras(android.os.PersistableBundle); + method public deprecated android.content.pm.ShortcutInfo.Builder setChooserExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setDisabledMessage(java.lang.CharSequence); method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon); diff --git a/api/test-current.txt b/api/test-current.txt index 1e83b6082a13..5d668d2ecbb7 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -10369,12 +10369,12 @@ package android.content.pm { ctor public LauncherApps.ShortcutQuery(); method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName); method public android.content.pm.LauncherApps.ShortcutQuery setChangedSince(long); - method public android.content.pm.LauncherApps.ShortcutQuery setIntent(android.content.Intent); + method public deprecated android.content.pm.LauncherApps.ShortcutQuery setIntent(android.content.Intent); method public android.content.pm.LauncherApps.ShortcutQuery setPackage(java.lang.String); method public android.content.pm.LauncherApps.ShortcutQuery setQueryFlags(int); method public android.content.pm.LauncherApps.ShortcutQuery setShortcutIds(java.util.List<java.lang.String>); field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4 - field public static final int FLAG_MATCH_CHOOSER = 16; // 0x10 + field public static final deprecated int FLAG_MATCH_CHOOSER = 16; // 0x10 field public static final int FLAG_MATCH_DYNAMIC = 1; // 0x1 field public static final int FLAG_MATCH_MANIFEST = 8; // 0x8 field public static final int FLAG_MATCH_PINNED = 2; // 0x2 @@ -10928,9 +10928,9 @@ package android.content.pm { method public int describeContents(); method public android.content.ComponentName getActivity(); method public java.util.Set<java.lang.String> getCategories(); - method public android.content.ComponentName[] getChooserComponentNames(); - method public android.os.PersistableBundle getChooserExtras(); - method public android.content.IntentFilter[] getChooserIntentFilters(); + method public deprecated android.content.ComponentName[] getChooserComponentNames(); + method public deprecated android.os.PersistableBundle getChooserExtras(); + method public deprecated android.content.IntentFilter[] getChooserIntentFilters(); method public java.lang.CharSequence getDisabledMessage(); method public android.os.PersistableBundle getExtras(); method public java.lang.String getId(); @@ -10943,7 +10943,7 @@ package android.content.pm { method public java.lang.CharSequence getShortLabel(); method public android.os.UserHandle getUserHandle(); method public boolean hasKeyFieldsOnly(); - method public boolean isChooser(); + method public deprecated boolean isChooser(); method public boolean isDeclaredInManifest(); method public boolean isDynamic(); method public boolean isEnabled(); @@ -10956,11 +10956,11 @@ package android.content.pm { public static class ShortcutInfo.Builder { ctor public ShortcutInfo.Builder(android.content.Context, java.lang.String); - method public android.content.pm.ShortcutInfo.Builder addChooserIntentFilter(android.content.IntentFilter, android.content.ComponentName); + method public deprecated android.content.pm.ShortcutInfo.Builder addChooserIntentFilter(android.content.IntentFilter, android.content.ComponentName); method public android.content.pm.ShortcutInfo build(); method public android.content.pm.ShortcutInfo.Builder setActivity(android.content.ComponentName); method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.Set<java.lang.String>); - method public android.content.pm.ShortcutInfo.Builder setChooserExtras(android.os.PersistableBundle); + method public deprecated android.content.pm.ShortcutInfo.Builder setChooserExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setDisabledMessage(java.lang.CharSequence); method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle); method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon); diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl index 41311eb04837..c08bd1db8302 100644 --- a/core/java/android/content/pm/ILauncherApps.aidl +++ b/core/java/android/content/pm/ILauncherApps.aidl @@ -55,8 +55,7 @@ interface ILauncherApps { String callingPackage, String packageName, int flags, in UserHandle user); ParceledListSlice getShortcuts(String callingPackage, long changedSince, String packageName, - in List shortcutIds, in ComponentName componentName, in Intent intent, int flags, - in UserHandle user); + in List shortcutIds, in ComponentName componentName, int flags, in UserHandle user); void pinShortcuts(String callingPackage, String packageName, in List<String> shortcutIds, in UserHandle user); boolean startShortcut(String callingPackage, String packageName, String id, diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index abdef084aacc..912ce3d49ba1 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -275,11 +275,8 @@ public class LauncherApps { @Deprecated public static final int FLAG_GET_MANIFEST = FLAG_MATCH_MANIFEST; - /** - * Include chooser shortcuts in the result. - * STOPSHIP TODO: Unless explicitly requesting chooser fields, we should strip out chooser - * relevant fields from the Shortcut. This should also be adequately documented. - */ + /** @deprecated punted, don't use. */ + @Deprecated public static final int FLAG_MATCH_CHOOSER = 1 << 4; /** @@ -319,7 +316,6 @@ public class LauncherApps { FLAG_MATCH_DYNAMIC, FLAG_MATCH_PINNED, FLAG_MATCH_MANIFEST, - FLAG_MATCH_CHOOSER, FLAG_GET_KEY_FIELDS_ONLY, }) @Retention(RetentionPolicy.SOURCE) @@ -336,9 +332,6 @@ public class LauncherApps { @Nullable ComponentName mActivity; - @Nullable - Intent mIntent; - @QueryFlags int mQueryFlags; @@ -382,11 +375,9 @@ public class LauncherApps { return this; } - /** - * If non-null, returns only shortcuts with intent filters that match this intent. - */ + /** @deprecated punted, don't use. */ + @Deprecated public ShortcutQuery setIntent(@Nullable Intent intent) { - mIntent = intent; return this; } @@ -704,7 +695,7 @@ public class LauncherApps { try { return mService.getShortcuts(mContext.getPackageName(), query.mChangedSince, query.mPackage, query.mShortcutIds, query.mActivity, - query.mIntent, query.mQueryFlags, user) + query.mQueryFlags, user) .getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/core/java/android/content/pm/ShortcutInfo.java b/core/java/android/content/pm/ShortcutInfo.java index 520169499718..3f4a09072540 100644 --- a/core/java/android/content/pm/ShortcutInfo.java +++ b/core/java/android/content/pm/ShortcutInfo.java @@ -21,7 +21,6 @@ import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.TaskStackBuilder; import android.content.ComponentName; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -40,12 +39,10 @@ import android.util.ArraySet; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.util.MemInfoReader; import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -99,14 +96,6 @@ public final class ShortcutInfo implements Parcelable { public static final int FLAG_ADAPTIVE_BITMAP = 1 << 9; /** @hide */ - public static final int FLAG_CHOOSER = 1 << 10; - - /** - * TODO: Add FLAG_CHOOSER_INFO_OMITTED to reflect that chooser info was omitted in the Shortcut - * due to the context in which it was retrieved. - * TODO: Add a FLAG_LAUNCHABLE to reflect whether or not the Shortcut has a launchable intent - * @hide - */ @IntDef(flag = true, value = { FLAG_DYNAMIC, @@ -119,7 +108,6 @@ public final class ShortcutInfo implements Parcelable { FLAG_STRINGS_RESOLVED, FLAG_IMMUTABLE, FLAG_ADAPTIVE_BITMAP, - FLAG_CHOOSER, }) @Retention(RetentionPolicy.SOURCE) public @interface ShortcutFlags {} @@ -214,24 +202,6 @@ public final class ShortcutInfo implements Parcelable { @Nullable private PersistableBundle[] mIntentPersistableExtrases; - /** - * If used in a chooser, extras that should be added into the intent passed through. - */ - @Nullable - private PersistableBundle mChooserExtras; - - /** - * Intent filters to be used if the shortcut is to be used in a chooser context. - */ - @Nullable - private IntentFilter[] mChooserIntentFilters; - - /** - * Component names corresponding to the above intent filters. - */ - @Nullable - private ComponentName[] mChooserComponentNames; - private int mRank; /** @@ -281,13 +251,6 @@ public final class ShortcutInfo implements Parcelable { mDisabledMessageResId = b.mDisabledMessageResId; mCategories = cloneCategories(b.mCategories); mIntents = cloneIntents(b.mIntents); - if (b.mChooserIntentFilters != null) { - mChooserIntentFilters = b.mChooserIntentFilters.toArray(new IntentFilter[0]); - } - if (b.mChooserComponentNames != null) { - mChooserComponentNames = b.mChooserComponentNames.toArray(new ComponentName[0]); - } - mChooserExtras = b.mChooserExtras; fixUpIntentExtras(); mRank = b.mRank; mExtras = b.mExtras; @@ -368,28 +331,8 @@ public final class ShortcutInfo implements Parcelable { if (mTitle == null && mTitleResId == 0) { throw new IllegalArgumentException("Short label must be provided"); } - - // For a shortcut to be valid, there should either be an Intent, or a non-empty set of - // intent filters. - if (mIntents == null || mIntents.length == 0) { - Preconditions.checkNotNull(mChooserIntentFilters, - "Intent must be provided if not a chooser target"); - Preconditions.checkNotNull(mChooserComponentNames, - "Intent must be provided if not a chooser target"); - } - - // If ChooserIntentFilter are provided, they should match the length of the provided - // component names. - if (mChooserIntentFilters != null) { - if (mChooserComponentNames == null - || mChooserIntentFilters.length != mChooserComponentNames.length) { - throw new IllegalArgumentException("Inconsistent intent filters and " - + "component names given"); - } - if (mChooserIntentFilters.length == 0 || mChooserComponentNames.length == 0) { - throw new IllegalArgumentException("Empty intent filter and component names given"); - } - } + Preconditions.checkNotNull(mIntents, "Shortcut Intent must be provided"); + Preconditions.checkArgument(mIntents.length > 0, "Shortcut Intent must be provided"); } /** @@ -434,10 +377,6 @@ public final class ShortcutInfo implements Parcelable { mDisabledMessageResName = source.mDisabledMessageResName; mIconResName = source.mIconResName; } - // TODO: Omit these by default and add a new clone flag. - mChooserIntentFilters = source.mChooserIntentFilters; - mChooserComponentNames = source.mChooserComponentNames; - mChooserExtras = source.mChooserExtras; } else { // Set this bit. mFlags |= FLAG_KEY_FIELDS_ONLY; @@ -565,25 +504,6 @@ public final class ShortcutInfo implements Parcelable { } /** - * Whether the shortcut has any intentFilter matching the passed in one. - * @hide - */ - @VisibleForTesting - public boolean hasMatchingFilter(ContentResolver resolver, Intent intent) { - if (mChooserIntentFilters == null) { - return false; - } - for (IntentFilter filter : mChooserIntentFilters) { - int match = filter.match(resolver, intent, false, TAG); - if (match > 0) { - return true; - } - } - return false; - } - - - /** * Extract the entry name from a fully-donated resource name. * e.g. "com.android.app1:drawable/icon1" -> "icon1" * @hide @@ -766,15 +686,6 @@ public final class ShortcutInfo implements Parcelable { if (source.mExtras != null) { mExtras = source.mExtras; } - if (source.mChooserExtras != null) { - mChooserExtras = source.mChooserExtras; - } - if (source.mChooserIntentFilters != null) { - mChooserIntentFilters = source.mChooserIntentFilters; - } - if (source.mChooserComponentNames != null) { - mChooserComponentNames = source.mChooserComponentNames; - } } /** @@ -836,12 +747,6 @@ public final class ShortcutInfo implements Parcelable { private PersistableBundle mExtras; - private PersistableBundle mChooserExtras; - - private List<IntentFilter> mChooserIntentFilters; - - private List<ComponentName> mChooserComponentNames; - /** * Old style constructor. * @hide @@ -1127,37 +1032,17 @@ public final class ShortcutInfo implements Parcelable { return this; } - /** - * Extras that can be added which will be added to the Intent used to launch the app if - * launched from a chooser context. - */ + /** @deprecated punted, don't use. */ + @Deprecated @NonNull public Builder setChooserExtras(@NonNull PersistableBundle extras) { - mChooserExtras = extras; return this; } - /** - * IntentFilters and the components that should resolve a match for a given chooser target. - * If multiple matches are found, the component corresponding to the closest match will be - * used. - * - * @param filter IntendFilter that if matched will have the intent forwarded to the given - * component - * @param name The component that an intent that passes this filter will resolve to. - */ + /** @deprecated punted, don't use. */ + @Deprecated public Builder addChooserIntentFilter(@NonNull IntentFilter filter, @NonNull ComponentName name) { - Preconditions.checkNotNull(filter, "intent filter cannot be null"); - Preconditions.checkNotNull(name, "component name cannot be null"); - - if (mChooserIntentFilters == null || mChooserComponentNames == null) { - mChooserIntentFilters = new ArrayList<>(); - mChooserComponentNames = new ArrayList<>(); - } - - mChooserIntentFilters.add(filter); - mChooserComponentNames.add(name); return this; } @@ -1361,28 +1246,25 @@ public final class ShortcutInfo implements Parcelable { return mIntentPersistableExtrases; } - /** - * Retrieve the extras that will be added in to any intent launched through the chooser. - */ + /** @deprecated punted, don't use. */ + @Deprecated @NonNull public PersistableBundle getChooserExtras() { - return mChooserExtras; + return new PersistableBundle(); } - /** - * Retrieve the list of intent filters for chooser targets. - */ + /** @deprecated punted, don't use. */ + @Deprecated @NonNull public IntentFilter[] getChooserIntentFilters() { - return mChooserIntentFilters; + return new IntentFilter[0]; } - /** - * Retrieve the list of component names corresponding to the above intent filters. - */ + /** @deprecated punted, don't use. */ + @Deprecated @NonNull public ComponentName[] getChooserComponentNames() { - return mChooserComponentNames; + return new ComponentName[0]; } /** @@ -1506,9 +1388,10 @@ public final class ShortcutInfo implements Parcelable { return hasFlags(FLAG_PINNED); } - /** Return whether a shortcut can be shown in the chooser. */ + /** @deprecated punted, don't use. */ + @Deprecated public boolean isChooser() { - return hasFlags(FLAG_CHOOSER); + return false; } /** @@ -1539,14 +1422,6 @@ public final class ShortcutInfo implements Parcelable { return isPinned() && !(isDynamic() || isManifestShortcut()); } - /** - * @return true if pinned but neither static nor dynamic. - * @hide - */ - public boolean isDynamicOrChooser() { - return hasFlags(FLAG_DYNAMIC) || hasFlags(FLAG_CHOOSER); - } - /** @hide */ public boolean isOriginallyFromManifest() { return hasFlags(FLAG_IMMUTABLE); @@ -1829,19 +1704,6 @@ public final class ShortcutInfo implements Parcelable { mCategories.add(source.readString().intern()); } } - - // We put a placeholder empty array in to keep the parcelable order, but can do away with - // them at this point if they're empty. - mChooserComponentNames = source.readParcelableArray(cl, ComponentName.class); - if (mChooserComponentNames.length == 0) { - mChooserComponentNames = null; - } - - mChooserIntentFilters = source.readParcelableArray(cl, IntentFilter.class); - if (mChooserIntentFilters.length == 0) { - mChooserIntentFilters = null; - } - mChooserExtras = source.readPersistableBundle(cl); } @Override @@ -1888,17 +1750,6 @@ public final class ShortcutInfo implements Parcelable { } else { dest.writeInt(0); } - if (mChooserComponentNames != null) { - dest.writeParcelableArray(mChooserComponentNames, flags); - } else { - dest.writeParcelableArray(new ComponentName[0], flags); - } - if (mChooserIntentFilters != null) { - dest.writeParcelableArray(mChooserIntentFilters, flags); - } else { - dest.writeParcelableArray(new IntentFilter[0], flags); - } - dest.writePersistableBundle(mChooserExtras); } public static final Creator<ShortcutInfo> CREATOR = diff --git a/core/java/android/content/pm/ShortcutServiceInternal.java b/core/java/android/content/pm/ShortcutServiceInternal.java index 3de19d19bfc3..7b7d8ae42528 100644 --- a/core/java/android/content/pm/ShortcutServiceInternal.java +++ b/core/java/android/content/pm/ShortcutServiceInternal.java @@ -45,8 +45,8 @@ public abstract class ShortcutServiceInternal { getShortcuts(int launcherUserId, @NonNull String callingPackage, long changedSince, @Nullable String packageName, @Nullable List<String> shortcutIds, - @Nullable ComponentName componentName, @Nullable Intent intent, - @ShortcutQuery.QueryFlags int flags, int userId); + @Nullable ComponentName componentName, @ShortcutQuery.QueryFlags int flags, + int userId); public abstract boolean isPinnedByCaller(int launcherUserId, @NonNull String callingPackage, diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index c235ebd4720d..df65659dface 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -23,21 +23,15 @@ import android.app.usage.UsageStatsManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.IntentSender; import android.content.IntentSender.SendIntentException; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; import android.content.pm.LabeledIntent; -import android.content.pm.LauncherApps; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; -import android.content.pm.ParceledListSlice; import android.content.pm.ResolveInfo; -import android.content.pm.ShortcutInfo; -import android.content.pm.ShortcutManager; import android.database.DataSetObserver; import android.graphics.Color; import android.graphics.drawable.Drawable; @@ -362,7 +356,6 @@ public class ChooserActivity extends ResolverActivity { mChooserListAdapter.addServiceResults(null, Lists.newArrayList(mCallerChooserTargets)); } mChooserRowAdapter = new ChooserRowAdapter(mChooserListAdapter); - mChooserRowAdapter.updateRowScales(); mChooserRowAdapter.registerDataSetObserver(new OffsetDataSetObserver(adapterView)); adapterView.setAdapter(mChooserRowAdapter); if (listView != null) { @@ -849,9 +842,7 @@ public class ChooserActivity extends ResolverActivity { return false; } intent.setComponent(mChooserTarget.getComponentName()); - if (mChooserTarget.getIntentExtras() != null) { - intent.putExtras(mChooserTarget.getIntentExtras()); - } + intent.putExtras(mChooserTarget.getIntentExtras()); // Important: we will ignore the target security checks in ActivityManager // if and only if the ChooserTarget's target package is the same package @@ -934,8 +925,6 @@ public class ChooserActivity extends ResolverActivity { private static final int MAX_SERVICE_TARGETS = 8; private static final int MAX_TARGETS_PER_SERVICE = 4; - private boolean mAreChooserShortcutsRetrieved; - private final List<ChooserTargetInfo> mServiceTargets = new ArrayList<>(); private final List<TargetInfo> mCallerTargets = new ArrayList<>(); private boolean mShowServiceTargets; @@ -1027,21 +1016,6 @@ public class ChooserActivity extends ResolverActivity { if (mServiceTargets != null) { pruneServiceTargets(); } - - if (DEBUG) Log.d(TAG, "Adding pushed chooser targets"); - - if (!mAreChooserShortcutsRetrieved) { - LauncherApps launcherApps = getLauncherApps(); - LauncherApps.ShortcutQuery query = new LauncherApps.ShortcutQuery(); - query.setIntent(getTargetIntent()); - query.setQueryFlags(LauncherApps.ShortcutQuery.FLAG_MATCH_CHOOSER); - List<ShortcutInfo> shortcuts = launcherApps.getShortcuts(query, - android.os.Process.myUserHandle()); - if (DEBUG) Log.d(TAG, "Adding " + shortcuts.size() + " chooser shortcuts"); - addShortcuts(shortcuts); - mAreChooserShortcutsRetrieved = true; - } - if (DEBUG) Log.d(TAG, "List built querying services"); queryTargetServices(this); } @@ -1067,7 +1041,6 @@ public class ChooserActivity extends ResolverActivity { public int getServiceTargetCount() { if (!mShowServiceTargets) { - if (DEBUG) Log.d("TAG", "Hiding service targets"); return 0; } return Math.min(mServiceTargets.size(), MAX_SERVICE_TARGETS); @@ -1159,71 +1132,6 @@ public class ChooserActivity extends ResolverActivity { notifyDataSetChanged(); } - // TODO: Pushed targets need to be scored correctly - public void addShortcuts(List<ShortcutInfo> infos) { - for (ShortcutInfo info : infos) { - List<ChooserTarget> newTargets = new ArrayList<>(); - final ComponentName cn = info.getActivity(); - ActivityInfo ai; - ResolveInfo ri = new ResolveInfo(); - if (cn != null) { - try { - ai = getPackageManager().getActivityInfo(cn, 0); - ri.activityInfo = ai; - UserManager userManager = - (UserManager) getSystemService(Context.USER_SERVICE); - ri.iconResourceId = ai.icon; - ri.labelRes = ai.labelRes; - ri.resolvePackageName = ai.packageName; - ri.activityInfo.applicationInfo = new ApplicationInfo( - ri.activityInfo.applicationInfo); - ri.activityInfo.applicationInfo = ai.applicationInfo; - ri.activityInfo.applicationInfo.uid = getUserId(); - } catch (PackageManager.NameNotFoundException ignored) { - if (DEBUG) Log.d(TAG, "Package not found, skipping this shortcut"); - continue; - } - } - - DisplayResolveInfo resolveInfo = new DisplayResolveInfo(getTargetIntent(), - ri, - info.getShortLabel(), - info.getLongLabel(), - getTargetIntent()); - - int bestMatch = 0; - ComponentName bestComponent = null; - for (int i = 0; i < info.getChooserIntentFilters().length; i++) { - int newMatch = info.getChooserIntentFilters()[i] - .match(getContentResolver(), getTargetIntent(), false, TAG); - if (DEBUG) Log.d(TAG, "A match was found with value: " + newMatch); - if (newMatch > bestMatch) { - bestMatch = newMatch; - bestComponent = info.getChooserComponentNames()[i]; - } - } - if (bestMatch == 0) { - Log.e(TAG, "Unexpectedly, no match was found for the provided chooser intent"); - return; - } - - Bundle extrasToAdd = - info.getChooserExtras() == null ? null: new Bundle(info.getChooserExtras()); - if (DEBUG) Log.d(TAG, "Adding service target " + info.getShortLabel()); - newTargets.add(new ChooserTarget( - info.getShortLabel(), - info.getIcon(), - 1, - bestComponent, - extrasToAdd)); - addServiceResults(resolveInfo, newTargets); - } - if (mChooserRowAdapter != null) { - mChooserRowAdapter.updateRowScales(); - } - setShowServiceTargets(true); - } - /** * Set to true to reveal all service targets at once. */ @@ -1338,7 +1246,37 @@ public class ChooserActivity extends ResolverActivity { @Override public void onChanged() { super.onChanged(); - updateRowScales(); + final int rcount = getServiceTargetRowCount(); + if (mServiceTargetScale == null + || mServiceTargetScale.length != rcount) { + RowScale[] old = mServiceTargetScale; + int oldRCount = old != null ? old.length : 0; + mServiceTargetScale = new RowScale[rcount]; + if (old != null && rcount > 0) { + System.arraycopy(old, 0, mServiceTargetScale, 0, + Math.min(old.length, rcount)); + } + + for (int i = rcount; i < oldRCount; i++) { + old[i].cancelAnimation(); + } + + for (int i = oldRCount; i < rcount; i++) { + final RowScale rs = new RowScale(ChooserRowAdapter.this, 0.f, 1.f) + .setInterpolator(mInterpolator); + mServiceTargetScale[i] = rs; + } + + // Start the animations in a separate loop. + // The process of starting animations will result in + // binding views to set up initial values, and we must + // have ALL of the new RowScale objects created above before + // we get started. + for (int i = oldRCount; i < rcount; i++) { + mServiceTargetScale[i].startAnimation(); + } + } + notifyDataSetChanged(); } @@ -1355,40 +1293,6 @@ public class ChooserActivity extends ResolverActivity { }); } - void updateRowScales() { - final int rcount = getServiceTargetRowCount(); - if (mServiceTargetScale == null - || mServiceTargetScale.length != rcount) { - if (DEBUG) Log.d(TAG, "Row scales need adjusting to " + rcount + " rows."); - RowScale[] old = mServiceTargetScale; - int oldRCount = old != null ? old.length : 0; - mServiceTargetScale = new RowScale[rcount]; - if (old != null && rcount > 0) { - System.arraycopy(old, 0, mServiceTargetScale, 0, - Math.min(old.length, rcount)); - } - - for (int i = rcount; i < oldRCount; i++) { - old[i].cancelAnimation(); - } - - for (int i = oldRCount; i < rcount; i++) { - final RowScale rs = new RowScale(ChooserRowAdapter.this, 0.f, 1.f) - .setInterpolator(mInterpolator); - mServiceTargetScale[i] = rs; - } - - // Start the animations in a separate loop. - // The process of starting animations will result in - // binding views to set up initial values, and we must - // have ALL of the new RowScale objects created above before - // we get started. - for (int i = oldRCount; i < rcount; i++) { - mServiceTargetScale[i].startAnimation(); - } - } - } - private float getRowScale(int rowPosition) { final int start = getCallerTargetRowCount(); final int end = start + getServiceTargetRowCount(); @@ -1659,10 +1563,6 @@ public class ChooserActivity extends ResolverActivity { } } - public LauncherApps getLauncherApps() { - return (LauncherApps) getSystemService(Context.LAUNCHER_APPS_SERVICE); - } - static class ServiceResultInfo { public final DisplayResolveInfo originalTarget; public final List<ChooserTarget> resultTargets; diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java index 3dfecc646169..1080a9fcfe71 100644 --- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java @@ -16,17 +16,6 @@ package com.android.internal.app; -import android.app.Instrumentation; -import android.content.ComponentName; -import android.content.IntentFilter; -import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; -import android.content.pm.LauncherApps; -import android.content.pm.PackageManager; -import android.content.pm.ShortcutInfo; -import android.content.pm.ShortcutManager; -import android.graphics.drawable.Icon; -import android.os.SystemClock; import com.android.internal.R; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; @@ -59,31 +48,25 @@ import static com.android.internal.app.ChooserWrapperActivity.sOverrides; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.isA; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.times; /** * Chooser activity instrumentation tests */ @RunWith(AndroidJUnit4.class) public class ChooserActivityTest { - private Instrumentation instrumentation; - - @Before - public void setUp() { - instrumentation = InstrumentationRegistry.getInstrumentation(); - sOverrides.reset(); - } - @Rule public ActivityTestRule<ChooserWrapperActivity> mActivityRule = new ActivityTestRule<>(ChooserWrapperActivity.class, false, false); + @Before + public void cleanOverrideData() { + sOverrides.reset(); + } + @Test public void customTitle() throws InterruptedException { Intent sendIntent = createSendImageIntent(); @@ -252,6 +235,7 @@ public class ChooserActivityTest { chosen[0] = targetInfo.getResolveInfo(); return true; }; + // Make a stable copy of the components as the original list may be modified List<ResolvedComponentInfo> stableCopy = createResolvedComponentsForTestWithOtherProfile(2); @@ -340,32 +324,6 @@ public class ChooserActivityTest { assertThat(chosen[0], is(toChoose)); } - public void pushedChooserTarget() { - ResolveInfo[] chosen = new ResolveInfo[1]; - sOverrides.onSafelyStartCallback = targetInfo -> { - chosen[0] = targetInfo.getResolveInfo(); - return true; - }; - - setChooserShortcuts(1); - List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2); - when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(), - Mockito.anyBoolean(), - Mockito.isA(List.class))).thenReturn(resolvedComponentInfos); - - Intent sendIntent = createSendImageIntent(); - final ChooserWrapperActivity activity = mActivityRule - .launchActivity(Intent.createChooser(sendIntent, null)); - - waitForIdle(); - - onView(withText("short chooser label 0")) - .perform(click()); - waitForIdle(); - assertThat(chosen[0].resolvePackageName, - is(ResolverDataProvider.createActivityInfo(0).packageName)); - } - private Intent createSendImageIntent() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); @@ -413,48 +371,4 @@ public class ChooserActivityTest { } return packageStats.mChooserCounts.get(action).getOrDefault(annotation, 0); } - - private void setChooserShortcuts(int numShortcuts) { - ArrayList<ShortcutInfo> shortcuts = new ArrayList<>(); - for (int i = 0; i < numShortcuts; i++) { - shortcuts.add(makeShortcut(i)); - } - when(sOverrides.launcherApps.getShortcuts( - Mockito.isA(LauncherApps.ShortcutQuery.class), - Mockito.eq(UserHandle.SYSTEM))) - .thenReturn(shortcuts); - } - - private ShortcutInfo makeShortcut(int i) { - try { - IntentFilter filter = new IntentFilter(Intent.ACTION_SEND, "image/jpeg"); - - ComponentName component = new ComponentName("foo.bar", "foo.bar" + ".MainActivity"); - ShortcutInfo.Builder b = new ShortcutInfo.Builder(instrumentation.getContext(), "" + i) - .setActivity(component) - .setShortLabel("short chooser label " + i) - .setLongLabel("long chooser label" + i) - .setRank(i) - .setIntent(createSendImageIntent()) - .setIcon(Icon.createWithResource(instrumentation.getContext(), - android.R.drawable.ic_menu_add)) - .addChooserIntentFilter( - filter, - component); - - sOverrides.createPackageManager = pm -> { - final PackageManager spied = spy(pm); - try { - doAnswer(invocation -> ResolverDataProvider.createActivityInfo(i)) - .when(spied).getActivityInfo( - Mockito.isA(ComponentName.class), Mockito.anyInt()); - } catch (Exception e) { - // this is ok, just not found - e.printStackTrace(); - } - return spied; - }; - return b.build(); - } catch (Exception e) {return null;} - } }
\ No newline at end of file diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java index 0dac2602740f..c446f3c79ea8 100644 --- a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java +++ b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java @@ -18,7 +18,6 @@ package com.android.internal.app; import android.app.usage.UsageStatsManager; import android.content.Context; -import android.content.pm.LauncherApps; import android.content.pm.PackageManager; import java.util.function.Function; @@ -75,11 +74,6 @@ public class ChooserWrapperActivity extends ChooserActivity { return super.getPackageManager(); } - @Override - public LauncherApps getLauncherApps() { - return sOverrides.launcherApps; - } - /** * We cannot directly mock the activity created since instrumentation creates it. * <p> @@ -88,7 +82,6 @@ public class ChooserWrapperActivity extends ChooserActivity { static class OverrideData { @SuppressWarnings("Since15") public Function<PackageManager, PackageManager> createPackageManager; - public LauncherApps launcherApps; public Function<TargetInfo, Boolean> onSafelyStartCallback; public ResolverListController resolverListController; public Boolean isVoiceInteraction; @@ -97,7 +90,6 @@ public class ChooserWrapperActivity extends ChooserActivity { onSafelyStartCallback = null; isVoiceInteraction = null; createPackageManager = null; - launcherApps = mock(LauncherApps.class); resolverListController = mock(ResolverListController.class); } } diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index e1426fdcf3ef..0b40fc533b5f 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -445,8 +445,8 @@ public class LauncherAppsService extends SystemService { @Override public ParceledListSlice getShortcuts(String callingPackage, long changedSince, - String packageName, List shortcutIds, ComponentName componentName, Intent intent, - int flags, UserHandle targetUser) { + String packageName, List shortcutIds, ComponentName componentName, int flags, + UserHandle targetUser) { ensureShortcutPermission(callingPackage); if (!canAccessProfile(callingPackage, targetUser, "Cannot get shortcuts") || !isUserEnabled(targetUser)) { @@ -457,17 +457,11 @@ public class LauncherAppsService extends SystemService { "To query by shortcut ID, package name must also be set"); } - if ((flags & ShortcutQuery.FLAG_MATCH_CHOOSER) == 0 - && intent != null) { - throw new IllegalArgumentException("Supplied an intent in the query, but did " - + "not request chooser targets"); - } - // TODO(b/29399275): Eclipse compiler requires explicit List<ShortcutInfo> cast below. return new ParceledListSlice<>((List<ShortcutInfo>) mShortcutServiceInternal.getShortcuts(getCallingUserId(), callingPackage, changedSince, packageName, shortcutIds, - componentName, intent, flags, targetUser.getIdentifier())); + componentName, flags, targetUser.getIdentifier())); } @Override @@ -915,7 +909,6 @@ public class LauncherAppsService extends SystemService { cookie.packageName, /* changedSince= */ 0, packageName, /* shortcutIds=*/ null, /* component= */ null, - /* intent= */ null, ShortcutQuery.FLAG_GET_KEY_FIELDS_ONLY | ShortcutQuery.FLAG_GET_ALL_KINDS , userId); diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java index 6f7e0de4b8ee..5035e6820be8 100644 --- a/services/core/java/com/android/server/pm/ShortcutPackage.java +++ b/services/core/java/com/android/server/pm/ShortcutPackage.java @@ -20,7 +20,6 @@ import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.ComponentName; import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.content.pm.ShortcutInfo; import android.content.res.Resources; @@ -32,7 +31,6 @@ import android.util.Log; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; import com.android.internal.util.XmlUtils; import com.android.server.pm.ShortcutService.ShortcutOperation; @@ -70,9 +68,6 @@ class ShortcutPackage extends ShortcutPackageItem { private static final String TAG_EXTRAS = "extras"; private static final String TAG_SHORTCUT = "shortcut"; private static final String TAG_CATEGORIES = "categories"; - private static final String TAG_CHOOSER_EXTRAS = "chooser-extras"; - private static final String TAG_CHOOSER_INTENT_FILTERS = "chooser-intent-filters"; - private static final String TAG_CHOOSER_COMPONENT_NAMES = "chooser-component-names"; private static final String ATTR_NAME = "name"; private static final String ATTR_CALL_COUNT = "call-count"; @@ -96,7 +91,6 @@ class ShortcutPackage extends ShortcutPackageItem { private static final String ATTR_ICON_RES_ID = "icon-res"; private static final String ATTR_ICON_RES_NAME = "icon-resname"; private static final String ATTR_BITMAP_PATH = "bitmap-path"; - private static final String ATTR_COMPONENT_NAMES = "component-names"; private static final String NAME_CATEGORIES = "categories"; @@ -206,7 +200,7 @@ class ShortcutPackage extends ShortcutPackageItem { if (shortcut != null) { mShortcutUser.mService.removeIcon(getPackageUserId(), shortcut); shortcut.clearFlags(ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_PINNED - | ShortcutInfo.FLAG_MANIFEST | ShortcutInfo.FLAG_CHOOSER); + | ShortcutInfo.FLAG_MANIFEST); } return shortcut; } @@ -232,7 +226,7 @@ class ShortcutPackage extends ShortcutPackageItem { Preconditions.checkArgument(newShortcut.isEnabled(), "add/setDynamicShortcuts() cannot publish disabled shortcuts"); - addCorrectDynamicFlags(newShortcut); + newShortcut.addFlags(ShortcutInfo.FLAG_DYNAMIC); final ShortcutInfo oldShortcut = mShortcuts.get(newShortcut.getId()); @@ -256,17 +250,6 @@ class ShortcutPackage extends ShortcutPackageItem { addShortcutInner(newShortcut); } - // TODO: Sample code & JavaDoc for ShortcutManager needs updating to reflect the fact that - // Chooser shortcuts are not always dynamic. - public void addCorrectDynamicFlags(@NonNull ShortcutInfo shortcut) { - if (shortcut.getIntent() != null) { - shortcut.addFlags(ShortcutInfo.FLAG_DYNAMIC); - } - if (!ArrayUtils.isEmpty(shortcut.getChooserIntentFilters())) { - shortcut.addFlags(ShortcutInfo.FLAG_CHOOSER); - } - } - /** * Remove all shortcuts that aren't pinned nor dynamic. */ @@ -299,11 +282,11 @@ class ShortcutPackage extends ShortcutPackageItem { boolean changed = false; for (int i = mShortcuts.size() - 1; i >= 0; i--) { final ShortcutInfo si = mShortcuts.valueAt(i); - if (si.isDynamic() || si.isChooser()) { + if (si.isDynamic()) { changed = true; si.setTimestamp(now); - si.clearFlags(ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_CHOOSER); + si.clearFlags(ShortcutInfo.FLAG_DYNAMIC); si.setRank(0); // It may still be pinned, so clear the rank. } } @@ -372,8 +355,7 @@ class ShortcutPackage extends ShortcutPackageItem { if (oldShortcut.isPinned()) { oldShortcut.setRank(0); - oldShortcut.clearFlags(ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_MANIFEST - | ShortcutInfo.FLAG_CHOOSER); + oldShortcut.clearFlags(ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_MANIFEST); if (disable) { oldShortcut.addFlags(ShortcutInfo.FLAG_DISABLED); } @@ -1133,8 +1115,8 @@ class ShortcutPackage extends ShortcutPackageItem { // Don't adjust ranks for manifest shortcuts. continue; } - // At this point, it must be dynamic or a chooser. - if (!si.isDynamicOrChooser()) { + // At this point, it must be dynamic. + if (!si.isDynamic()) { s.wtf("Non-dynamic shortcut found."); continue; } @@ -1311,7 +1293,7 @@ class ShortcutPackage extends ShortcutPackageItem { ShortcutService.writeAttr(out, ATTR_FLAGS, si.getFlags() & ~(ShortcutInfo.FLAG_HAS_ICON_FILE | ShortcutInfo.FLAG_HAS_ICON_RES - | ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_CHOOSER)); + | ShortcutInfo.FLAG_DYNAMIC)); } else { // When writing for backup, ranks shouldn't be saved, since shortcuts won't be restored // as dynamic. @@ -1334,36 +1316,15 @@ class ShortcutPackage extends ShortcutPackageItem { } final Intent[] intentsNoExtras = si.getIntentsNoExtras(); final PersistableBundle[] intentsExtras = si.getIntentPersistableExtrases(); - if (intentsNoExtras != null) { - final int numIntents = intentsNoExtras.length; - for (int i = 0; i < numIntents; i++) { - out.startTag(null, TAG_INTENT); - ShortcutService.writeAttr(out, ATTR_INTENT_NO_EXTRA, intentsNoExtras[i]); - ShortcutService.writeTagExtra(out, TAG_EXTRAS, intentsExtras[i]); - out.endTag(null, TAG_INTENT); - } - } - ShortcutService.writeTagExtra(out, TAG_EXTRAS, si.getExtras()); - - ShortcutService.writeTagExtra(out, TAG_CHOOSER_EXTRAS, si.getChooserExtras()); - - final IntentFilter[] intentFilters = si.getChooserIntentFilters(); - if (intentFilters != null) { - for (int i = 0; i < intentFilters.length; i++) { - out.startTag(null, TAG_CHOOSER_INTENT_FILTERS); - intentFilters[i].writeToXml(out); - out.endTag(null, TAG_CHOOSER_INTENT_FILTERS); - } + final int numIntents = intentsNoExtras.length; + for (int i = 0; i < numIntents; i++) { + out.startTag(null, TAG_INTENT); + ShortcutService.writeAttr(out, ATTR_INTENT_NO_EXTRA, intentsNoExtras[i]); + ShortcutService.writeTagExtra(out, TAG_EXTRAS, intentsExtras[i]); + out.endTag(null, TAG_INTENT); } - final ComponentName[] componentNames = si.getChooserComponentNames(); - if (componentNames != null) { - for (int i = 0; i < componentNames.length; i++) { - out.startTag(null, TAG_CHOOSER_COMPONENT_NAMES); - ShortcutService.writeAttr(out, ATTR_COMPONENT_NAMES, componentNames[i]); - out.endTag(null, TAG_CHOOSER_COMPONENT_NAMES); - } - } + ShortcutService.writeTagExtra(out, TAG_EXTRAS, si.getExtras()); out.endTag(null, TAG_SHORTCUT); } @@ -1436,9 +1397,6 @@ class ShortcutPackage extends ShortcutPackageItem { String iconResName; String bitmapPath; ArraySet<String> categories = null; - PersistableBundle chooserExtras; - List<IntentFilter> chooserIntentFilters = new ArrayList<>(); - List<ComponentName> chooserComponentNames = new ArrayList<>(); id = ShortcutService.parseStringAttribute(parser, ATTR_ID); activityComponent = ShortcutService.parseComponentNameAttribute(parser, @@ -1499,18 +1457,6 @@ class ShortcutPackage extends ShortcutPackageItem { } } continue; - case TAG_CHOOSER_EXTRAS: - chooserExtras = PersistableBundle.restoreFromXml(parser); - continue; - case TAG_CHOOSER_COMPONENT_NAMES: - chooserComponentNames.add(ShortcutService.parseComponentNameAttribute(parser, - ATTR_ACTIVITY)); - continue; - case TAG_CHOOSER_INTENT_FILTERS: - IntentFilter toAdd = new IntentFilter(); - toAdd.readFromXml(parser); - chooserIntentFilters.add(toAdd); - continue; } throw ShortcutService.throwForInvalidTag(depth, tag); } @@ -1604,10 +1550,10 @@ class ShortcutPackage extends ShortcutPackageItem { // Verify each shortcut's status. for (int i = mShortcuts.size() - 1; i >= 0; i--) { final ShortcutInfo si = mShortcuts.valueAt(i); - if (!(si.isDeclaredInManifest() || si.isDynamicOrChooser() || si.isPinned())) { + if (!(si.isDeclaredInManifest() || si.isDynamic() || si.isPinned())) { failed = true; Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId() - + " is not manifest, dynamic, chooser or pinned."); + + " is not manifest, dynamic or pinned."); } if (si.isDeclaredInManifest() && si.isDynamic()) { failed = true; @@ -1649,11 +1595,6 @@ class ShortcutPackage extends ShortcutPackageItem { Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId() + " has a dummy target activity"); } - if (si.getIntent() == null && !si.isChooser()) { - failed = true; - Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId() - + " has a null intent, but is not a chooser"); - } } if (failed) { diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index 9bf689527864..0a0ef587e756 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -27,7 +27,6 @@ import android.app.usage.UsageStatsManagerInternal; import android.appwidget.AppWidgetProviderInfo; import android.content.BroadcastReceiver; import android.content.ComponentName; -import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -65,7 +64,6 @@ import android.os.FileUtils; import android.os.Handler; import android.os.LocaleList; import android.os.Looper; -import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.PersistableBundle; import android.os.Process; @@ -1754,7 +1752,6 @@ public class ShortcutService extends IShortcutService.Stub { ps.clearAllImplicitRanks(); assignImplicitRanks(newShortcuts); - // TODO: Consider removing Chooser fields. If so, the FLAG_CHOOSER should be removed for (int i = 0; i < size; i++) { final ShortcutInfo source = newShortcuts.get(i); fixUpIncomingShortcutInfo(source, /* forUpdate= */ true); @@ -1794,13 +1791,6 @@ public class ShortcutService extends IShortcutService.Stub { if (replacingIcon || source.hasStringResources()) { fixUpShortcutResourceNamesAndValues(target); } - - // While updating, we keep the dynamic flag as it previously was, but refresh the - // chooser flag. - // TODO: If we support clearing Chooser fields, we should also remove the flag. - if (target.getChooserIntentFilters() != null) { - target.addFlags(ShortcutInfo.FLAG_CHOOSER); - } } // Lastly, adjust the ranks. @@ -1864,7 +1854,6 @@ public class ShortcutService extends IShortcutService.Stub { return true; } - // TODO: Ensure non-launchable shortcuts can not be pinned @Override public boolean requestPinShortcut(String packageName, ShortcutInfo shortcut, IntentSender resultIntent, int userId) { @@ -2020,7 +2009,7 @@ public class ShortcutService extends IShortcutService.Stub { return getShortcutsWithQueryLocked( packageName, userId, ShortcutInfo.CLONE_REMOVE_FOR_CREATOR, - ShortcutInfo::isDynamicOrChooser); + ShortcutInfo::isDynamic); } } @@ -2213,14 +2202,6 @@ public class ShortcutService extends IShortcutService.Stub { synchronized (mLock) { throwIfUserLockedL(userId); - // For the chooser, we just check is the system is calling. - // STOPSHIP: We need to implement a new permission here rather than this terrible check. - // The packageName check is to try to distinguish between when an actual - // launcher is making the call, and when it's the system. - if (isCallerSystem() && packageName.equals("android")) { - return true; - } - final ShortcutUser user = getUserShortcutsLocked(userId); // Always trust the cached component. @@ -2393,7 +2374,7 @@ public class ShortcutService extends IShortcutService.Stub { public List<ShortcutInfo> getShortcuts(int launcherUserId, @NonNull String callingPackage, long changedSince, @Nullable String packageName, @Nullable List<String> shortcutIds, - @Nullable ComponentName componentName, @Nullable Intent intent, + @Nullable ComponentName componentName, int queryFlags, int userId) { final ArrayList<ShortcutInfo> ret = new ArrayList<>(); @@ -2415,13 +2396,13 @@ public class ShortcutService extends IShortcutService.Stub { if (packageName != null) { getShortcutsInnerLocked(launcherUserId, callingPackage, packageName, shortcutIds, changedSince, - componentName, intent, queryFlags, userId, ret, cloneFlag); + componentName, queryFlags, userId, ret, cloneFlag); } else { final List<String> shortcutIdsF = shortcutIds; getUserShortcutsLocked(userId).forAllPackages(p -> { getShortcutsInnerLocked(launcherUserId, callingPackage, p.getPackageName(), shortcutIdsF, changedSince, - componentName, intent, queryFlags, userId, ret, cloneFlag); + componentName, queryFlags, userId, ret, cloneFlag); }); } } @@ -2430,7 +2411,7 @@ public class ShortcutService extends IShortcutService.Stub { private void getShortcutsInnerLocked(int launcherUserId, @NonNull String callingPackage, @Nullable String packageName, @Nullable List<String> shortcutIds, long changedSince, - @Nullable ComponentName componentName, Intent intent, int queryFlags, + @Nullable ComponentName componentName, int queryFlags, int userId, ArrayList<ShortcutInfo> ret, int cloneFlag) { final ArraySet<String> ids = shortcutIds == null ? null : new ArraySet<>(shortcutIds); @@ -2455,15 +2436,6 @@ public class ShortcutService extends IShortcutService.Stub { return false; } } - if (intent != null - && !si.hasMatchingFilter(mContext.getContentResolver(), intent)) { - return false; - } - - if (((queryFlags & ShortcutQuery.FLAG_MATCH_CHOOSER) != 0) - && si.isChooser()) { - return true; - } if (((queryFlags & ShortcutQuery.FLAG_GET_DYNAMIC) != 0) && si.isDynamic()) { return true; diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java index 0f51c49bfaba..d0d23f8338b7 100644 --- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java @@ -36,7 +36,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.annotation.NonNull; -import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.Activity; import android.app.ActivityManager; @@ -1345,23 +1344,20 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { protected ShortcutInfo makeShortcut(String id) { return makeShortcut( id, "Title-" + id, /* activity =*/ null, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); } @Deprecated // Title was renamed to short label. protected ShortcutInfo makeShortcutWithTitle(String id, String title) { return makeShortcut( id, title, /* activity =*/ null, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); } protected ShortcutInfo makeShortcutWithShortLabel(String id, String shortLabel) { return makeShortcut( id, shortLabel, /* activity =*/ null, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); } /** @@ -1370,8 +1366,7 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { protected ShortcutInfo makeShortcutWithTimestamp(String id, long timestamp) { final ShortcutInfo s = makeShortcut( id, "Title-" + id, /* activity =*/ null, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); s.setTimestamp(timestamp); return s; } @@ -1383,8 +1378,7 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { ComponentName activity) { final ShortcutInfo s = makeShortcut( id, "Title-" + id, activity, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); s.setTimestamp(timestamp); return s; } @@ -1395,27 +1389,7 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { protected ShortcutInfo makeShortcutWithIcon(String id, Icon icon) { return makeShortcut( id, "Title-" + id, /* activity =*/ null, icon, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); - } - - protected ShortcutInfo makeChooserShortcut(String id, int i, boolean includeIntent) { - List<IntentFilter> filters = new ArrayList<>(); - List<ComponentName> componentNames = new ArrayList<>(); - for(int j = 0; j < i; j++) { - final IntentFilter filter = new IntentFilter(); - filter.addAction("view"); - filters.add(filter); - - componentNames.add(new ComponentName("xxxx", "yy" + i)); - } - Intent intent = null; - if (includeIntent) { - intent = makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class); - } - return makeShortcut( - id, "Title-" + id, /* activity =*/ null, /* icon */ null, - intent, /* rank =*/ 0, filters, componentNames); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); } protected ShortcutInfo makePackageShortcut(String packageName, String id) { @@ -1424,8 +1398,7 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { setCaller(packageName); ShortcutInfo s = makeShortcut( id, "Title-" + id, /* activity =*/ null, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); setCaller(origCaller); // restore the caller return s; @@ -1449,52 +1422,39 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase { protected ShortcutInfo makeShortcutWithActivity(String id, ComponentName activity) { return makeShortcut( id, "Title-" + id, activity, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilters =*/ null, /* chooserComponentNames =*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); } protected ShortcutInfo makeShortcutWithIntent(String id, Intent intent) { return makeShortcut( id, "Title-" + id, /* activity =*/ null, /* icon =*/ null, - intent, /* rank =*/ 0, /* chooserFilters =*/ null, - /* chooserComponentNames =*/ null); - + intent, /* rank =*/ 0); } protected ShortcutInfo makeShortcutWithActivityAndTitle(String id, ComponentName activity, String title) { return makeShortcut( id, title, activity, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0, - /* chooserFilters =*/ null, /* chooserComponentNames =*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), /* rank =*/ 0); } protected ShortcutInfo makeShortcutWithActivityAndRank(String id, ComponentName activity, int rank) { return makeShortcut( id, "Title-" + id, activity, /* icon =*/ null, - makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), rank, - /* chooserFilters =*/ null, /* chooserComponentNames =*/ null); + makeIntent(Intent.ACTION_VIEW, ShortcutActivity.class), rank); } /** * Make a shortcut with details. */ protected ShortcutInfo makeShortcut(String id, String title, ComponentName activity, - Icon icon, Intent intent, int rank, @Nullable List<IntentFilter> chooserFilters, - @Nullable List<ComponentName> chooserComponentNames) { + Icon icon, Intent intent, int rank) { final ShortcutInfo.Builder b = new ShortcutInfo.Builder(mClientContext, id) .setActivity(new ComponentName(mClientContext.getPackageName(), "main")) .setShortLabel(title) - .setRank(rank); - if (intent != null) { - b.setIntent(intent); - } - if (chooserFilters != null) { - for (int i = 0; i < chooserFilters.size(); i++) { - b.addChooserIntentFilter(chooserFilters.get(i), chooserComponentNames.get(i)); - } - } + .setRank(rank) + .setIntent(intent); if (icon != null) { b.setIcon(icon); } diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java index dd0871ae49e0..9861aa177135 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java @@ -17,7 +17,6 @@ package com.android.server.pm; import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyOrNull; import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.anyStringOrNull; -import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllChooser; import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllDisabled; import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllDynamic; import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils.assertAllDynamicOrPinned; @@ -58,7 +57,6 @@ import static com.android.server.pm.shortcutmanagertest.ShortcutManagerTestUtils import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -261,9 +259,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { icon1, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity2.class, "key1", "val1", "nest", makeBundle("key", 123)), - /* weight */ 10, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 10); final ShortcutInfo si2 = makeShortcut( "shortcut2", @@ -271,18 +267,14 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* activity */ null, icon2, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* weight */ 12, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 12); final ShortcutInfo si3 = makeShortcut( "shortcut3", "Title 3", /* activity */ null, icon3, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* weight */ 13, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 13); assertTrue(mManager.setDynamicShortcuts(list(si1, si2, si3))); assertShortcutIds(assertAllNotKeyFieldsOnly( @@ -993,10 +985,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { makeShortcut("s2"), makeShortcut("s3"), makeShortcut("s4"), - makeShortcut("s5"), - makeChooserShortcut("s6", 2, true), - makeChooserShortcut("s7", 2, true), - makeChooserShortcut("s8", 1, true)))); + makeShortcut("s5") + ))); }); runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { assertTrue(mManager.setDynamicShortcuts(list( @@ -1004,13 +994,11 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { makeShortcut("s2"), makeShortcut("s3"), makeShortcut("s4"), - makeShortcut("s5"), - makeChooserShortcut("s6", 2, true), - makeChooserShortcut("s7", 2, true), - makeChooserShortcut("s8", 1, true)))); + makeShortcut("s5") + ))); }); runWithCaller(LAUNCHER_1, UserHandle.USER_SYSTEM, () -> { - mLauncherApps.pinShortcuts(CALLING_PACKAGE_1, list("s2", "s3", "s6"), + mLauncherApps.pinShortcuts(CALLING_PACKAGE_1, list("s2", "s3"), getCallingUser()); mLauncherApps.pinShortcuts(CALLING_PACKAGE_2, list("s4", "s5"), getCallingUser()); @@ -1023,20 +1011,19 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mManager.removeDynamicShortcuts(list("s1")); mManager.removeDynamicShortcuts(list("s3")); mManager.removeDynamicShortcuts(list("s5")); - mManager.removeDynamicShortcuts(list("s7")); }); runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { assertShortcutIds(assertAllDynamic( mManager.getDynamicShortcuts()), - "s3", "s4", "s5", "s6", "s7", "s8"); + "s3", "s4", "s5"); assertShortcutIds(assertAllPinned( mManager.getPinnedShortcuts()), - "s2", "s3", "s6"); + "s2", "s3"); }); runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { assertShortcutIds(assertAllDynamic( mManager.getDynamicShortcuts()), - "s2", "s4", "s6", "s8"); + "s2", "s4"); assertShortcutIds(assertAllPinned( mManager.getPinnedShortcuts()), "s4", "s5"); @@ -1073,10 +1060,10 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { assertShortcutIds(assertAllDynamic( mManager.getDynamicShortcuts()), - "s3", "s4", "s5", "s6", "s7", "s8"); + "s3", "s4", "s5"); assertShortcutIds(assertAllPinned( mManager.getPinnedShortcuts()), - "s2", "s3", "s6"); + "s2", "s3"); ShortcutInfo s = getCallerShortcut("s2"); assertTrue(s.hasIconResource()); @@ -1092,7 +1079,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { runWithCaller(CALLING_PACKAGE_2, UserHandle.USER_SYSTEM, () -> { assertShortcutIds(assertAllDynamic( mManager.getDynamicShortcuts()), - "s2", "s4", "s6", "s8"); + "s2", "s4"); assertShortcutIds(assertAllPinned( mManager.getPinnedShortcuts()), "s4", "s5"); @@ -1189,46 +1176,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { }); } - public void testUpdateShortcuts_chooser() { - runWithCaller(CALLING_PACKAGE_1, UserHandle.USER_SYSTEM, () -> { - assertTrue(mManager.setDynamicShortcuts(list( - makeShortcut("s1"), - makeChooserShortcut("s2", 2, false), - makeChooserShortcut("s3", 2, false) - ))); - - assertFalse(getCallerShortcut("s1").isChooser()); - assertTrue(getCallerShortcut("s2").isChooser()); - assertTrue(getCallerShortcut("s3").isChooser()); - - ShortcutInfo s = getCallerShortcut("s1"); - assertNull(s.getChooserIntentFilters()); - assertNull(s.getChooserComponentNames()); - - assertTrue(getCallerShortcut("s1").isDynamic()); - assertFalse(getCallerShortcut("s2").isDynamic()); - assertFalse(getCallerShortcut("s3").isDynamic()); - - - // Replace 2 with a chooser shortcut - mManager.updateShortcuts(list(makeChooserShortcut("s1", 2, true))); - - s = getCallerShortcut("s1"); - assertEquals(2, s.getChooserIntentFilters().length); - assertEquals(2, s.getChooserComponentNames().length); - - assertShortcutIds(assertAllChooser( - mManager.getDynamicShortcuts()), - "s1", "s2", "s3"); - - assertTrue(getCallerShortcut("s1").isDynamic()); - assertFalse(getCallerShortcut("s2").isDynamic()); - assertFalse(getCallerShortcut("s3").isDynamic()); - }); - } - - - // === Test for launcher side APIs === + // === Test for launcher side APIs === public void testGetShortcuts() { @@ -1539,17 +1487,15 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* icon =*/ null, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity2.class, "key1", "val1", "nest", makeBundle("key", 123)), - /* weight */ 10, /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 10); final ShortcutInfo s1_2 = makeShortcut( - "s2", "Title 2", + "s2", + "Title 2", /* activity */ null, /* icon =*/ null, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* weight */ 12, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 12); assertTrue(mManager.setDynamicShortcuts(list(s1_1, s1_2))); dumpsysOnLogcat(); @@ -1562,9 +1508,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* icon =*/ null, makeIntent(Intent.ACTION_ANSWER, ShortcutActivity2.class, "key1", "val1", "nest", makeBundle("key", 123)), - /* weight */ 10, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 10); assertTrue(mManager.setDynamicShortcuts(list(s2_1))); dumpsysOnLogcat(); @@ -2733,12 +2677,10 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { final ShortcutInfo s1_2 = makeShortcut( "s2", "Title 2", - /* activity */ null, - /* icon =*/ null, + /* activity */ null, + /* icon =*/ null, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* rank */ 12, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* rank */ 12); final ShortcutInfo s1_3 = makeShortcut("s3"); @@ -2753,9 +2695,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* icon =*/ null, makeIntent(Intent.ACTION_ANSWER, ShortcutActivity.class, "key1", "val1", "nest", makeBundle("key", 123)), - /* weight */ 10, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 10); assertTrue(mManager.setDynamicShortcuts(list(s2_1))); }); @@ -3175,9 +3115,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { icon1, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity2.class, "key1", "val1", "nest", makeBundle("key", 123)), - /* weight */ 10, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 10); final ShortcutInfo si2 = makeShortcut( "s2", @@ -3185,9 +3123,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* activity */ null, icon2, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* weight */ 12, - /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 12); assertTrue(mManager.setDynamicShortcuts(list(si1, si2))); @@ -3205,8 +3141,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { makeComponent(ShortcutActivity.class), icon1, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity2.class, - "key1", "val1", "nest", makeBundle("key", 123)), /* weight */ 10, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null); + "key1", "val1", "nest", makeBundle("key", 123)), + /* weight */ 10); final ShortcutInfo si2 = makeShortcut( "s2", @@ -3214,8 +3150,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* activity */ null, icon2, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* weight */ 12, /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 12); assertTrue(mManager.setDynamicShortcuts(list(si1, si2))); @@ -3237,8 +3172,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { icon1, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity2.class, "key1", "val1", "nest", makeBundle("key", 123)), - /* weight */ 10, /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 10); final ShortcutInfo si2 = makeShortcut( "s2", @@ -3246,8 +3180,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { /* activity */ null, icon2, makeIntent(Intent.ACTION_ASSIST, ShortcutActivity3.class), - /* weight */ 12, /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null); + /* weight */ 12); assertTrue(mManager.setDynamicShortcuts(list(si1, si2))); @@ -6884,12 +6817,10 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest { mManager.setDynamicShortcuts(list( makeShortcut("ms1", "title1", new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), - /* icon */ null, new Intent("action1"), /* rank */ 0, - /* chooserFilter=*/ null, /* chooserComponentNames=*/ null), + /* icon */ null, new Intent("action1"), /* rank */ 0), makeShortcut("ms2", "title2", new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()), - /* icon */ null, new Intent("action1"), /* rank */ 0, /* chooserFilter=*/ null, - /* chooserComponentNames=*/ null))); + /* icon */ null, new Intent("action1"), /* rank */ 0))); }); runWithCaller(LAUNCHER_1, USER_0, () -> { diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java index 7c5eb07f0a78..cd98654e1bdb 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java +++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest2.java @@ -34,7 +34,6 @@ import android.Manifest.permission; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Intent; -import android.content.IntentFilter; import android.content.pm.ShortcutInfo; import android.content.res.Resources; import android.graphics.BitmapFactory; @@ -93,6 +92,11 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { assertExpectException( RuntimeException.class, + "intents cannot contain null", + () -> new ShortcutInfo.Builder(getTestContext(), "id").setIntent(null)); + + assertExpectException( + RuntimeException.class, "action must be set", () -> new ShortcutInfo.Builder(getTestContext(), "id").setIntent(new Intent())); @@ -137,19 +141,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { "disabledMessage cannot be empty", () -> new ShortcutInfo.Builder(getTestContext(), "id").setDisabledMessage("")); - - assertExpectException( - RuntimeException.class, - "component name cannot be null", - () -> new ShortcutInfo.Builder(getTestContext(), "id") - .addChooserIntentFilter(new IntentFilter(Intent.ACTION_SEND), null)); - - assertExpectException( - RuntimeException.class, - "intent filter cannot be null", - () -> new ShortcutInfo.Builder(getTestContext(), "id") - .addChooserIntentFilter(null, new ComponentName("xxx", "s"))); - assertExpectException(NullPointerException.class, "action must be set", () -> new ShortcutInfo.Builder(getTestContext(), "id").setIntent(new Intent())); @@ -248,10 +239,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { PersistableBundle pb = new PersistableBundle(); pb.putInt("k", 1); - IntentFilter chooserFilter = new IntentFilter(); - chooserFilter.addAction(Intent.ACTION_VIEW); - PersistableBundle pb2 = new PersistableBundle(); - pb2.putInt("l", 1); si = new ShortcutInfo.Builder(getTestContext()) .setId("id") @@ -264,8 +251,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { .setCategories(set(ShortcutInfo.SHORTCUT_CATEGORY_CONVERSATION, "xyz")) .setRank(123) .setExtras(pb) - .addChooserIntentFilter(chooserFilter, new ComponentName("a", "b")) - .setChooserExtras(pb2) .build(); si.addFlags(ShortcutInfo.FLAG_PINNED); si.setBitmapPath("abc"); @@ -296,12 +281,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { assertEquals(null, si.getTextResName()); assertEquals(0, si.getDisabledMessageResourceId()); assertEquals(null, si.getDisabledMessageResName()); - - assertEquals(1, si.getChooserIntentFilters().length); - assertEquals(Intent.ACTION_VIEW, si.getChooserIntentFilters()[0].getAction(0)); - assertEquals(1, si.getChooserComponentNames().length); - assertEquals(new ComponentName("a", "b"), si.getChooserComponentNames()[0]); - assertEquals(1, si.getChooserExtras().getInt("l")); } public void testShortcutInfoParcel_resId() { @@ -310,10 +289,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { PersistableBundle pb = new PersistableBundle(); pb.putInt("k", 1); - IntentFilter chooserFilter = new IntentFilter(); - chooserFilter.addAction(Intent.ACTION_VIEW); - PersistableBundle pb2 = new PersistableBundle(); - pb2.putInt("l", 1); si = new ShortcutInfo.Builder(getTestContext()) .setId("id") @@ -326,8 +301,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { .setCategories(set(ShortcutInfo.SHORTCUT_CATEGORY_CONVERSATION, "xyz")) .setRank(123) .setExtras(pb) - .addChooserIntentFilter(chooserFilter, new ComponentName("a", "b")) - .setChooserExtras(pb2) .build(); si.addFlags(ShortcutInfo.FLAG_PINNED); si.setBitmapPath("abc"); @@ -364,11 +337,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { PersistableBundle pb = new PersistableBundle(); pb.putInt("k", 1); - IntentFilter chooserFilter = new IntentFilter(); - chooserFilter.addAction(Intent.ACTION_VIEW); - PersistableBundle pb2 = new PersistableBundle(); - pb2.putInt("l", 1); - ShortcutInfo sorig = new ShortcutInfo.Builder(mClientContext) .setId("id") .setActivity(new ComponentName("a", "b")) @@ -380,8 +348,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { .setIntent(makeIntent("action", ShortcutActivity.class, "key", "val")) .setRank(123) .setExtras(pb) - .addChooserIntentFilter(chooserFilter, new ComponentName("a", "b")) - .setChooserExtras(pb2) .build(); sorig.addFlags(ShortcutInfo.FLAG_PINNED); sorig.setBitmapPath("abc"); @@ -411,12 +377,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { assertEquals(456, si.getIconResourceId()); assertEquals("string/r456", si.getIconResName()); - assertEquals(1, si.getChooserIntentFilters().length); - assertEquals(Intent.ACTION_VIEW, si.getChooserIntentFilters()[0].getAction(0)); - assertEquals(1, si.getChooserComponentNames().length); - assertEquals(new ComponentName("a", "b"), si.getChooserComponentNames()[0]); - assertEquals(1, si.getChooserExtras().getInt("l")); - si = sorig.clone(ShortcutInfo.CLONE_REMOVE_FOR_CREATOR); assertEquals(mClientContext.getPackageName(), si.getPackage()); @@ -484,10 +444,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { PersistableBundle pb = new PersistableBundle(); pb.putInt("k", 1); - IntentFilter chooserFilter = new IntentFilter(); - chooserFilter.addAction(Intent.ACTION_VIEW); - PersistableBundle pb2 = new PersistableBundle(); - pb2.putInt("l", 1); ShortcutInfo sorig = new ShortcutInfo.Builder(mClientContext) .setId("id") .setActivity(new ComponentName("a", "b")) @@ -499,8 +455,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { .setIntent(makeIntent("action", ShortcutActivity.class, "key", "val")) .setRank(123) .setExtras(pb) - .addChooserIntentFilter(chooserFilter, new ComponentName("a", "b")) - .setChooserExtras(pb2) .build(); sorig.addFlags(ShortcutInfo.FLAG_PINNED); sorig.setBitmapPath("abc"); @@ -533,12 +487,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { assertEquals(456, si.getIconResourceId()); assertEquals("string/r456", si.getIconResName()); - assertEquals(1, si.getChooserIntentFilters().length); - assertEquals(Intent.ACTION_VIEW, si.getChooserIntentFilters()[0].getAction(0)); - assertEquals(1, si.getChooserComponentNames().length); - assertEquals(new ComponentName("a", "b"), si.getChooserComponentNames()[0]); - assertEquals(1, si.getChooserExtras().getInt("l")); - si = sorig.clone(ShortcutInfo.CLONE_REMOVE_FOR_CREATOR); assertEquals(mClientContext.getPackageName(), si.getPackage()); @@ -654,10 +602,6 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { public void testShortcutInfoCopyNonNullFieldsFrom() throws InterruptedException { PersistableBundle pb = new PersistableBundle(); pb.putInt("k", 1); - IntentFilter chooserFilter = new IntentFilter(); - chooserFilter.addAction(Intent.ACTION_VIEW); - PersistableBundle pb2 = new PersistableBundle(); - pb2.putInt("l", 1); ShortcutInfo sorig = new ShortcutInfo.Builder(getTestContext()) .setId("id") .setActivity(new ComponentName("a", "b")) @@ -769,12 +713,12 @@ public class ShortcutManagerTest2 extends BaseShortcutManagerTest { assertEquals(999, si.getRank()); - PersistableBundle pb3 = new PersistableBundle(); - pb3.putInt("x", 99); + PersistableBundle pb2 = new PersistableBundle(); + pb2.putInt("x", 99); si = sorig.clone(/* flags=*/ 0); si.copyNonNullFieldsFrom(new ShortcutInfo.Builder(getTestContext()).setId("id") - .setExtras(pb3).build()); + .setExtras(pb2).build()); assertEquals("text", si.getText()); assertEquals(99, si.getExtras().getInt("x")); } diff --git a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java index c34293347814..922f08da643f 100644 --- a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java +++ b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java @@ -512,13 +512,6 @@ public class ShortcutManagerTestUtils { return actualShortcuts; } - public static List<ShortcutInfo> assertAllChooser(List<ShortcutInfo> actualShortcuts) { - for (ShortcutInfo s : actualShortcuts) { - assertTrue("ID " + s.getId(), s.isChooser()); - } - return actualShortcuts; - } - public static List<ShortcutInfo> assertAllPinned(List<ShortcutInfo> actualShortcuts) { for (ShortcutInfo s : actualShortcuts) { assertTrue("ID " + s.getId(), s.isPinned()); |