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

Commit 74f56e62 authored by Tim Murray's avatar Tim Murray Committed by Android (Google) Code Review
Browse files

Merge changes I0f625b36,Idae7d16d

* changes:
  ActivityManagerService: remove synchronization for get/setDeviceOwner
  AppWidgetServiceImpl: add mWidgetPackages lock
parents 0c613c20 ac5d57ef
Loading
Loading
Loading
Loading
+26 −19
Original line number Diff line number Diff line
@@ -222,6 +222,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku

    private final SparseIntArray mLoadedUserIds = new SparseIntArray();

    private final Object mWidgetPackagesLock = new Object();
    private final SparseArray<ArraySet<String>> mWidgetPackages = new SparseArray<>();

    private BackupRestoreController mBackupRestoreController;
@@ -2941,11 +2942,13 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
        if (widget.provider == null) return;

        int userId = widget.provider.getUserId();
        synchronized (mWidgetPackagesLock) {
            ArraySet<String> packages = mWidgetPackages.get(userId);
            if (packages == null) {
                mWidgetPackages.put(userId, packages = new ArraySet<String>());
            }
            packages.add(widget.provider.info.provider.getPackageName());
        }

        // If we are adding a widget it might be for a provider that
        // is currently masked, if so mask the widget.
@@ -2972,6 +2975,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku

        final int userId = widget.provider.getUserId();
        final String packageName = widget.provider.info.provider.getPackageName();
        synchronized (mWidgetPackagesLock) {
            ArraySet<String> packages = mWidgetPackages.get(userId);
            if (packages == null) {
                return;
@@ -2989,6 +2993,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
            }
            packages.remove(packageName);
        }
    }

    /**
     * Clears all widgets and associated cache of packages with bound widgets.
@@ -3000,15 +3005,17 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
    }

    private void onWidgetsClearedLocked() {
        synchronized (mWidgetPackagesLock) {
            mWidgetPackages.clear();
        }
    }

    @Override
    public boolean isBoundWidgetPackage(String packageName, int userId) {
        if (Binder.getCallingUid() != Process.SYSTEM_UID) {
            throw new SecurityException("Only the system process can call this");
        }
        synchronized (mLock) {
        synchronized (mWidgetPackagesLock) {
            final ArraySet<String> packages = mWidgetPackages.get(userId);
            if (packages != null) {
                return packages.contains(packageName);
+4 −7
Original line number Diff line number Diff line
@@ -16723,16 +16723,13 @@ public class ActivityManagerService extends IActivityManager.Stub
        @Override
        public void setDeviceOwnerUid(int uid) {
            synchronized (ActivityManagerService.this) {
            mDeviceOwnerUid = uid;
        }
        }
        @Override
        public boolean isDeviceOwner(int uid) {
            synchronized (ActivityManagerService.this) {
                return uid >= 0 && mDeviceOwnerUid == uid;
            }
            int cachedUid = mDeviceOwnerUid;
            return uid >= 0 && cachedUid == uid;
        }