Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7250,6 +7250,7 @@ package android.app.slice { method public android.app.slice.Slice bindSlice(android.content.Intent, java.util.List<android.app.slice.SliceSpec>); method public java.util.List<android.app.slice.SliceSpec> getPinnedSpecs(android.net.Uri); method public java.util.Collection<android.net.Uri> getSliceDescendants(android.net.Uri); method public android.net.Uri mapIntentToUri(android.content.Intent); method public void pinSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>); method public deprecated void registerSliceCallback(android.net.Uri, android.app.slice.SliceManager.SliceCallback, java.util.List<android.app.slice.SliceSpec>); method public deprecated void registerSliceCallback(android.net.Uri, android.app.slice.SliceManager.SliceCallback, java.util.List<android.app.slice.SliceSpec>, java.util.concurrent.Executor); core/java/android/app/slice/SliceManager.java +55 −2 Original line number Diff line number Diff line Loading @@ -313,6 +313,59 @@ public class SliceManager { } } /** * Turns a slice intent into a slice uri. Expects an explicit intent. If there is no * {@link android.content.ContentProvider} associated with the given intent this will throw * {@link IllegalArgumentException}. * * @param intent The intent associated with a slice. * @return The Slice Uri provided by the app or null if none is given. * @see Slice * @see SliceProvider#onMapIntentToUri(Intent) * @see Intent */ public @Nullable Uri mapIntentToUri(@NonNull Intent intent) { Preconditions.checkNotNull(intent, "intent"); Preconditions.checkArgument(intent.getComponent() != null || intent.getPackage() != null, "Slice intent must be explicit %s", intent); ContentResolver resolver = mContext.getContentResolver(); // Check if the intent has data for the slice uri on it and use that final Uri intentData = intent.getData(); if (intentData != null && SliceProvider.SLICE_TYPE.equals(resolver.getType(intentData))) { return intentData; } // Otherwise ask the app List<ResolveInfo> providers = mContext.getPackageManager().queryIntentContentProviders(intent, 0); if (providers == null || providers.isEmpty()) { throw new IllegalArgumentException("Unable to resolve intent " + intent); } String authority = providers.get(0).providerInfo.authority; Uri uri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) .authority(authority).build(); IContentProvider provider = resolver.acquireProvider(uri); if (provider == null) { throw new IllegalArgumentException("Unknown URI " + uri); } try { Bundle extras = new Bundle(); extras.putParcelable(SliceProvider.EXTRA_INTENT, intent); final Bundle res = provider.call(mContext.getPackageName(), SliceProvider.METHOD_MAP_ONLY_INTENT, null, extras); if (res == null) { return null; } return res.getParcelable(SliceProvider.EXTRA_SLICE); } catch (RemoteException e) { // Arbitrary and not worth documenting, as Activity // Manager will kill this process shortly anyway. return null; } finally { resolver.releaseProvider(provider); } } /** * Turns a slice intent into slice content. Expects an explicit intent. If there is no * {@link android.content.ContentProvider} associated with the given intent this will throw Loading @@ -329,7 +382,7 @@ public class SliceManager { @NonNull List<SliceSpec> supportedSpecs) { Preconditions.checkNotNull(intent, "intent"); Preconditions.checkArgument(intent.getComponent() != null || intent.getPackage() != null, "Slice intent must be explicit " + intent); "Slice intent must be explicit %s", intent); ContentResolver resolver = mContext.getContentResolver(); // Check if the intent has data for the slice uri on it and use that Loading @@ -340,7 +393,7 @@ public class SliceManager { // Otherwise ask the app List<ResolveInfo> providers = mContext.getPackageManager().queryIntentContentProviders(intent, 0); if (providers == null) { if (providers == null || providers.isEmpty()) { throw new IllegalArgumentException("Unable to resolve intent " + intent); } String authority = providers.get(0).providerInfo.authority; Loading core/java/android/app/slice/SliceProvider.java +11 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,10 @@ public abstract class SliceProvider extends ContentProvider { * @hide */ public static final String METHOD_MAP_INTENT = "map_slice"; /** * @hide */ public static final String METHOD_MAP_ONLY_INTENT = "map_only"; /** * @hide */ Loading Loading @@ -341,6 +345,13 @@ public abstract class SliceProvider extends ContentProvider { b.putParcelable(EXTRA_SLICE, null); } return b; } else if (method.equals(METHOD_MAP_ONLY_INTENT)) { Intent intent = extras.getParcelable(EXTRA_INTENT); if (intent == null) return null; Uri uri = onMapIntentToUri(intent); Bundle b = new Bundle(); b.putParcelable(EXTRA_SLICE, uri); return b; } else if (method.equals(METHOD_PIN)) { Uri uri = getUriWithoutUserId(extras.getParcelable(EXTRA_BIND_URI)); if (Binder.getCallingUid() != Process.SYSTEM_UID) { Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7250,6 +7250,7 @@ package android.app.slice { method public android.app.slice.Slice bindSlice(android.content.Intent, java.util.List<android.app.slice.SliceSpec>); method public java.util.List<android.app.slice.SliceSpec> getPinnedSpecs(android.net.Uri); method public java.util.Collection<android.net.Uri> getSliceDescendants(android.net.Uri); method public android.net.Uri mapIntentToUri(android.content.Intent); method public void pinSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>); method public deprecated void registerSliceCallback(android.net.Uri, android.app.slice.SliceManager.SliceCallback, java.util.List<android.app.slice.SliceSpec>); method public deprecated void registerSliceCallback(android.net.Uri, android.app.slice.SliceManager.SliceCallback, java.util.List<android.app.slice.SliceSpec>, java.util.concurrent.Executor);
core/java/android/app/slice/SliceManager.java +55 −2 Original line number Diff line number Diff line Loading @@ -313,6 +313,59 @@ public class SliceManager { } } /** * Turns a slice intent into a slice uri. Expects an explicit intent. If there is no * {@link android.content.ContentProvider} associated with the given intent this will throw * {@link IllegalArgumentException}. * * @param intent The intent associated with a slice. * @return The Slice Uri provided by the app or null if none is given. * @see Slice * @see SliceProvider#onMapIntentToUri(Intent) * @see Intent */ public @Nullable Uri mapIntentToUri(@NonNull Intent intent) { Preconditions.checkNotNull(intent, "intent"); Preconditions.checkArgument(intent.getComponent() != null || intent.getPackage() != null, "Slice intent must be explicit %s", intent); ContentResolver resolver = mContext.getContentResolver(); // Check if the intent has data for the slice uri on it and use that final Uri intentData = intent.getData(); if (intentData != null && SliceProvider.SLICE_TYPE.equals(resolver.getType(intentData))) { return intentData; } // Otherwise ask the app List<ResolveInfo> providers = mContext.getPackageManager().queryIntentContentProviders(intent, 0); if (providers == null || providers.isEmpty()) { throw new IllegalArgumentException("Unable to resolve intent " + intent); } String authority = providers.get(0).providerInfo.authority; Uri uri = new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT) .authority(authority).build(); IContentProvider provider = resolver.acquireProvider(uri); if (provider == null) { throw new IllegalArgumentException("Unknown URI " + uri); } try { Bundle extras = new Bundle(); extras.putParcelable(SliceProvider.EXTRA_INTENT, intent); final Bundle res = provider.call(mContext.getPackageName(), SliceProvider.METHOD_MAP_ONLY_INTENT, null, extras); if (res == null) { return null; } return res.getParcelable(SliceProvider.EXTRA_SLICE); } catch (RemoteException e) { // Arbitrary and not worth documenting, as Activity // Manager will kill this process shortly anyway. return null; } finally { resolver.releaseProvider(provider); } } /** * Turns a slice intent into slice content. Expects an explicit intent. If there is no * {@link android.content.ContentProvider} associated with the given intent this will throw Loading @@ -329,7 +382,7 @@ public class SliceManager { @NonNull List<SliceSpec> supportedSpecs) { Preconditions.checkNotNull(intent, "intent"); Preconditions.checkArgument(intent.getComponent() != null || intent.getPackage() != null, "Slice intent must be explicit " + intent); "Slice intent must be explicit %s", intent); ContentResolver resolver = mContext.getContentResolver(); // Check if the intent has data for the slice uri on it and use that Loading @@ -340,7 +393,7 @@ public class SliceManager { // Otherwise ask the app List<ResolveInfo> providers = mContext.getPackageManager().queryIntentContentProviders(intent, 0); if (providers == null) { if (providers == null || providers.isEmpty()) { throw new IllegalArgumentException("Unable to resolve intent " + intent); } String authority = providers.get(0).providerInfo.authority; Loading
core/java/android/app/slice/SliceProvider.java +11 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,10 @@ public abstract class SliceProvider extends ContentProvider { * @hide */ public static final String METHOD_MAP_INTENT = "map_slice"; /** * @hide */ public static final String METHOD_MAP_ONLY_INTENT = "map_only"; /** * @hide */ Loading Loading @@ -341,6 +345,13 @@ public abstract class SliceProvider extends ContentProvider { b.putParcelable(EXTRA_SLICE, null); } return b; } else if (method.equals(METHOD_MAP_ONLY_INTENT)) { Intent intent = extras.getParcelable(EXTRA_INTENT); if (intent == null) return null; Uri uri = onMapIntentToUri(intent); Bundle b = new Bundle(); b.putParcelable(EXTRA_SLICE, uri); return b; } else if (method.equals(METHOD_PIN)) { Uri uri = getUriWithoutUserId(extras.getParcelable(EXTRA_BIND_URI)); if (Binder.getCallingUid() != Process.SYSTEM_UID) { Loading