Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7266,6 +7266,7 @@ package android.app.slice { public class SliceManager { method public android.app.slice.Slice bindSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>); method public android.app.slice.Slice bindSlice(android.content.Intent, java.util.List<android.app.slice.SliceSpec>); method public java.util.List<android.net.Uri> getPinnedSlices(); 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); core/java/android/app/slice/ISliceManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ interface ISliceManager { SliceSpec[] getPinnedSpecs(in Uri uri, String pkg); int checkSlicePermission(in Uri uri, String pkg, int pid, int uid); void grantPermissionFromUser(in Uri uri, String pkg, String callingPkg, boolean allSlices); Uri[] getPinnedSlices(String pkg); byte[] getBackupPayload(int user); void applyRestore(in byte[] payload, int user); Loading core/java/android/app/slice/SliceManager.java +12 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,18 @@ public class SliceManager { } } /** * Get the list of currently pinned slices for this app. * @see SliceProvider#onSlicePinned */ public @NonNull List<Uri> getPinnedSlices() { try { return Arrays.asList(mService.getPinnedSlices(mContext.getPackageName())); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Obtains a list of slices that are descendants of the specified Uri. * <p> Loading services/core/java/com/android/server/slice/PinnedSliceState.java +7 −5 Original line number Diff line number Diff line Loading @@ -14,9 +14,6 @@ package com.android.server.slice; import static android.app.slice.SliceManager.PERMISSION_GRANTED; import android.app.slice.Slice; import android.app.slice.SliceProvider; import android.app.slice.SliceSpec; import android.content.ContentProviderClient; Loading @@ -33,7 +30,6 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; Loading @@ -54,18 +50,24 @@ public class PinnedSliceState { private final ArraySet<String> mPinnedPkgs = new ArraySet<>(); @GuardedBy("mLock") private final ArrayMap<IBinder, ListenerInfo> mListeners = new ArrayMap<>(); private final String mPkg; @GuardedBy("mLock") private SliceSpec[] mSupportedSpecs = null; private final DeathRecipient mDeathRecipient = this::handleRecheckListeners; private boolean mSlicePinned; public PinnedSliceState(SliceManagerService service, Uri uri) { public PinnedSliceState(SliceManagerService service, Uri uri, String pkg) { mService = service; mUri = uri; mPkg = pkg; mLock = mService.getLock(); } public String getPkg() { return mPkg; } public SliceSpec[] getSpecs() { return mSupportedSpecs; } Loading services/core/java/com/android/server/slice/SliceManagerService.java +19 −5 Original line number Diff line number Diff line Loading @@ -148,12 +148,26 @@ public class SliceManagerService extends ISliceManager.Stub { } /// ----- ISliceManager stuff ----- @Override public Uri[] getPinnedSlices(String pkg) { verifyCaller(pkg); ArrayList<Uri> ret = new ArrayList<>(); synchronized (mLock) { for (PinnedSliceState state : mPinnedSlicesByUri.values()) { if (Objects.equals(pkg, state.getPkg())) { ret.add(state.getUri()); } } } return ret.toArray(new Uri[ret.size()]); } @Override public void pinSlice(String pkg, Uri uri, SliceSpec[] specs, IBinder token) throws RemoteException { verifyCaller(pkg); enforceAccess(pkg, uri); uri = maybeAddUserId(uri, Binder.getCallingUserHandle().getIdentifier()); getOrCreatePinnedSlice(uri).pin(pkg, specs, token); getOrCreatePinnedSlice(uri, pkg).pin(pkg, specs, token); } @Override Loading Loading @@ -302,11 +316,11 @@ public class SliceManagerService extends ISliceManager.Stub { } } private PinnedSliceState getOrCreatePinnedSlice(Uri uri) { private PinnedSliceState getOrCreatePinnedSlice(Uri uri, String pkg) { synchronized (mLock) { PinnedSliceState manager = mPinnedSlicesByUri.get(uri); if (manager == null) { manager = createPinnedSlice(uri); manager = createPinnedSlice(uri, pkg); mPinnedSlicesByUri.put(uri, manager); } return manager; Loading @@ -314,8 +328,8 @@ public class SliceManagerService extends ISliceManager.Stub { } @VisibleForTesting protected PinnedSliceState createPinnedSlice(Uri uri) { return new PinnedSliceState(this, uri); protected PinnedSliceState createPinnedSlice(Uri uri, String pkg) { return new PinnedSliceState(this, uri, pkg); } public Object getLock() { Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -7266,6 +7266,7 @@ package android.app.slice { public class SliceManager { method public android.app.slice.Slice bindSlice(android.net.Uri, java.util.List<android.app.slice.SliceSpec>); method public android.app.slice.Slice bindSlice(android.content.Intent, java.util.List<android.app.slice.SliceSpec>); method public java.util.List<android.net.Uri> getPinnedSlices(); 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);
core/java/android/app/slice/ISliceManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ interface ISliceManager { SliceSpec[] getPinnedSpecs(in Uri uri, String pkg); int checkSlicePermission(in Uri uri, String pkg, int pid, int uid); void grantPermissionFromUser(in Uri uri, String pkg, String callingPkg, boolean allSlices); Uri[] getPinnedSlices(String pkg); byte[] getBackupPayload(int user); void applyRestore(in byte[] payload, int user); Loading
core/java/android/app/slice/SliceManager.java +12 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,18 @@ public class SliceManager { } } /** * Get the list of currently pinned slices for this app. * @see SliceProvider#onSlicePinned */ public @NonNull List<Uri> getPinnedSlices() { try { return Arrays.asList(mService.getPinnedSlices(mContext.getPackageName())); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Obtains a list of slices that are descendants of the specified Uri. * <p> Loading
services/core/java/com/android/server/slice/PinnedSliceState.java +7 −5 Original line number Diff line number Diff line Loading @@ -14,9 +14,6 @@ package com.android.server.slice; import static android.app.slice.SliceManager.PERMISSION_GRANTED; import android.app.slice.Slice; import android.app.slice.SliceProvider; import android.app.slice.SliceSpec; import android.content.ContentProviderClient; Loading @@ -33,7 +30,6 @@ import android.util.Log; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; Loading @@ -54,18 +50,24 @@ public class PinnedSliceState { private final ArraySet<String> mPinnedPkgs = new ArraySet<>(); @GuardedBy("mLock") private final ArrayMap<IBinder, ListenerInfo> mListeners = new ArrayMap<>(); private final String mPkg; @GuardedBy("mLock") private SliceSpec[] mSupportedSpecs = null; private final DeathRecipient mDeathRecipient = this::handleRecheckListeners; private boolean mSlicePinned; public PinnedSliceState(SliceManagerService service, Uri uri) { public PinnedSliceState(SliceManagerService service, Uri uri, String pkg) { mService = service; mUri = uri; mPkg = pkg; mLock = mService.getLock(); } public String getPkg() { return mPkg; } public SliceSpec[] getSpecs() { return mSupportedSpecs; } Loading
services/core/java/com/android/server/slice/SliceManagerService.java +19 −5 Original line number Diff line number Diff line Loading @@ -148,12 +148,26 @@ public class SliceManagerService extends ISliceManager.Stub { } /// ----- ISliceManager stuff ----- @Override public Uri[] getPinnedSlices(String pkg) { verifyCaller(pkg); ArrayList<Uri> ret = new ArrayList<>(); synchronized (mLock) { for (PinnedSliceState state : mPinnedSlicesByUri.values()) { if (Objects.equals(pkg, state.getPkg())) { ret.add(state.getUri()); } } } return ret.toArray(new Uri[ret.size()]); } @Override public void pinSlice(String pkg, Uri uri, SliceSpec[] specs, IBinder token) throws RemoteException { verifyCaller(pkg); enforceAccess(pkg, uri); uri = maybeAddUserId(uri, Binder.getCallingUserHandle().getIdentifier()); getOrCreatePinnedSlice(uri).pin(pkg, specs, token); getOrCreatePinnedSlice(uri, pkg).pin(pkg, specs, token); } @Override Loading Loading @@ -302,11 +316,11 @@ public class SliceManagerService extends ISliceManager.Stub { } } private PinnedSliceState getOrCreatePinnedSlice(Uri uri) { private PinnedSliceState getOrCreatePinnedSlice(Uri uri, String pkg) { synchronized (mLock) { PinnedSliceState manager = mPinnedSlicesByUri.get(uri); if (manager == null) { manager = createPinnedSlice(uri); manager = createPinnedSlice(uri, pkg); mPinnedSlicesByUri.put(uri, manager); } return manager; Loading @@ -314,8 +328,8 @@ public class SliceManagerService extends ISliceManager.Stub { } @VisibleForTesting protected PinnedSliceState createPinnedSlice(Uri uri) { return new PinnedSliceState(this, uri); protected PinnedSliceState createPinnedSlice(Uri uri, String pkg) { return new PinnedSliceState(this, uri, pkg); } public Object getLock() { Loading