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

Commit 199286b0 authored by Jason Monk's avatar Jason Monk
Browse files

Fix pinned slices returning different Uris.

Test: cts
Bug: 77980070
Change-Id: I3c5ba18e40a58371e2c9ccade9d565b38ad12a54
parent a87e56c9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.Handler;
import android.os.Process;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
import android.util.ArraySet;
import android.util.Log;

import java.util.ArrayList;
@@ -513,7 +514,7 @@ public abstract class SliceProvider extends ContentProvider {
                    .detectAll()
                    .penaltyDeath()
                    .build());
            return onBindSlice(sliceUri, supportedSpecs);
            return onBindSlice(sliceUri, new ArraySet<>(supportedSpecs));
        } finally {
            StrictMode.setThreadPolicy(oldPolicy);
        }
+6 −5
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import android.content.pm.PackageManagerInternal;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Binder;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
@@ -52,7 +51,6 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.AtomicFile;
import android.util.Slog;
import android.util.Xml.Encoding;

@@ -71,9 +69,7 @@ import org.xmlpull.v1.XmlSerializer;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -136,11 +132,16 @@ public class SliceManagerService extends ISliceManager.Stub {
    @Override
    public Uri[] getPinnedSlices(String pkg) {
        verifyCaller(pkg);
        int callingUser = Binder.getCallingUserHandle().getIdentifier();
        ArrayList<Uri> ret = new ArrayList<>();
        synchronized (mLock) {
            for (PinnedSliceState state : mPinnedSlicesByUri.values()) {
                if (Objects.equals(pkg, state.getPkg())) {
                    ret.add(state.getUri());
                    Uri uri = state.getUri();
                    int userId = ContentProvider.getUserIdFromUri(uri, callingUser);
                    if (userId == callingUser) {
                        ret.add(ContentProvider.getUriWithoutUserId(uri));
                    }
                }
            }
        }