Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 241a3a82 authored by Jason Monk's avatar Jason Monk Committed by android-build-merger
Browse files

Merge "Add API to get currently pinned slices" into pi-dev

am: 98c1d17c

Change-Id: Ie71c82c8cc7734cf123adbc6342ca4154c04ba53
parents 5fe2c734 98c1d17c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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);
+12 −0
Original line number Diff line number Diff line
@@ -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>
+7 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
    }
+19 −5
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -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