Loading services/core/java/com/android/server/slice/SlicePermissionManager.java +18 −4 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.util.Log; import android.util.Slog; import android.util.Slog; import android.util.Xml.Encoding; import android.util.Xml.Encoding; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.XmlUtils; import com.android.internal.util.XmlUtils; import com.android.server.slice.SliceProviderPermissions.SliceAuthority; import com.android.server.slice.SliceProviderPermissions.SliceAuthority; Loading Loading @@ -76,8 +77,11 @@ public class SlicePermissionManager implements DirtyTracker { private final File mSliceDir; private final File mSliceDir; private final Context mContext; private final Context mContext; private final Handler mHandler; private final Handler mHandler; @GuardedBy("itself") private final ArrayMap<PkgUser, SliceProviderPermissions> mCachedProviders = new ArrayMap<>(); private final ArrayMap<PkgUser, SliceProviderPermissions> mCachedProviders = new ArrayMap<>(); @GuardedBy("itself") private final ArrayMap<PkgUser, SliceClientPermissions> mCachedClients = new ArrayMap<>(); private final ArrayMap<PkgUser, SliceClientPermissions> mCachedClients = new ArrayMap<>(); @GuardedBy("this") private final ArraySet<Persistable> mDirty = new ArraySet<>(); private final ArraySet<Persistable> mDirty = new ArraySet<>(); @VisibleForTesting @VisibleForTesting Loading Loading @@ -354,15 +358,23 @@ public class SlicePermissionManager implements DirtyTracker { // use addPersistableDirty(); this is just for tests // use addPersistableDirty(); this is just for tests @VisibleForTesting @VisibleForTesting void addDirtyImmediate(Persistable obj) { void addDirtyImmediate(Persistable obj) { synchronized (this) { mDirty.add(obj); mDirty.add(obj); } } } private void handleRemove(PkgUser pkgUser) { private void handleRemove(PkgUser pkgUser) { getFile(SliceClientPermissions.getFileName(pkgUser)).delete(); getFile(SliceClientPermissions.getFileName(pkgUser)).delete(); getFile(SliceProviderPermissions.getFileName(pkgUser)).delete(); getFile(SliceProviderPermissions.getFileName(pkgUser)).delete(); synchronized (this) { synchronized (mCachedClients) { mDirty.remove(mCachedClients.remove(pkgUser)); mDirty.remove(mCachedClients.remove(pkgUser)); } synchronized (mCachedProviders) { mDirty.remove(mCachedProviders.remove(pkgUser)); mDirty.remove(mCachedProviders.remove(pkgUser)); } } } } private final class H extends Handler { private final class H extends Handler { private static final int MSG_ADD_DIRTY = 1; private static final int MSG_ADD_DIRTY = 1; Loading @@ -379,7 +391,9 @@ public class SlicePermissionManager implements DirtyTracker { public void handleMessage(Message msg) { public void handleMessage(Message msg) { switch (msg.what) { switch (msg.what) { case MSG_ADD_DIRTY: case MSG_ADD_DIRTY: synchronized (SlicePermissionManager.this) { mDirty.add((Persistable) msg.obj); mDirty.add((Persistable) msg.obj); } break; break; case MSG_PERSIST: case MSG_PERSIST: handlePersist(); handlePersist(); Loading Loading
services/core/java/com/android/server/slice/SlicePermissionManager.java +18 −4 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.util.Log; import android.util.Slog; import android.util.Slog; import android.util.Xml.Encoding; import android.util.Xml.Encoding; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.XmlUtils; import com.android.internal.util.XmlUtils; import com.android.server.slice.SliceProviderPermissions.SliceAuthority; import com.android.server.slice.SliceProviderPermissions.SliceAuthority; Loading Loading @@ -76,8 +77,11 @@ public class SlicePermissionManager implements DirtyTracker { private final File mSliceDir; private final File mSliceDir; private final Context mContext; private final Context mContext; private final Handler mHandler; private final Handler mHandler; @GuardedBy("itself") private final ArrayMap<PkgUser, SliceProviderPermissions> mCachedProviders = new ArrayMap<>(); private final ArrayMap<PkgUser, SliceProviderPermissions> mCachedProviders = new ArrayMap<>(); @GuardedBy("itself") private final ArrayMap<PkgUser, SliceClientPermissions> mCachedClients = new ArrayMap<>(); private final ArrayMap<PkgUser, SliceClientPermissions> mCachedClients = new ArrayMap<>(); @GuardedBy("this") private final ArraySet<Persistable> mDirty = new ArraySet<>(); private final ArraySet<Persistable> mDirty = new ArraySet<>(); @VisibleForTesting @VisibleForTesting Loading Loading @@ -354,15 +358,23 @@ public class SlicePermissionManager implements DirtyTracker { // use addPersistableDirty(); this is just for tests // use addPersistableDirty(); this is just for tests @VisibleForTesting @VisibleForTesting void addDirtyImmediate(Persistable obj) { void addDirtyImmediate(Persistable obj) { synchronized (this) { mDirty.add(obj); mDirty.add(obj); } } } private void handleRemove(PkgUser pkgUser) { private void handleRemove(PkgUser pkgUser) { getFile(SliceClientPermissions.getFileName(pkgUser)).delete(); getFile(SliceClientPermissions.getFileName(pkgUser)).delete(); getFile(SliceProviderPermissions.getFileName(pkgUser)).delete(); getFile(SliceProviderPermissions.getFileName(pkgUser)).delete(); synchronized (this) { synchronized (mCachedClients) { mDirty.remove(mCachedClients.remove(pkgUser)); mDirty.remove(mCachedClients.remove(pkgUser)); } synchronized (mCachedProviders) { mDirty.remove(mCachedProviders.remove(pkgUser)); mDirty.remove(mCachedProviders.remove(pkgUser)); } } } } private final class H extends Handler { private final class H extends Handler { private static final int MSG_ADD_DIRTY = 1; private static final int MSG_ADD_DIRTY = 1; Loading @@ -379,7 +391,9 @@ public class SlicePermissionManager implements DirtyTracker { public void handleMessage(Message msg) { public void handleMessage(Message msg) { switch (msg.what) { switch (msg.what) { case MSG_ADD_DIRTY: case MSG_ADD_DIRTY: synchronized (SlicePermissionManager.this) { mDirty.add((Persistable) msg.obj); mDirty.add((Persistable) msg.obj); } break; break; case MSG_PERSIST: case MSG_PERSIST: handlePersist(); handlePersist(); Loading