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

Commit f0ed7769 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Add missing synchronization"

parents 4e74f744 b24c62c9
Loading
Loading
Loading
Loading
+148 −138
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ public class PreferencesHelper implements RankingConfig {
    }

    // pkg|uid => PackagePreferences
    private final ArrayMap<String, PackagePreferences> mPackagePreferencess = new ArrayMap<>();
    private final ArrayMap<String, PackagePreferences> mPackagePreferences = new ArrayMap<>();
    // pkg => PackagePreferences
    private final ArrayMap<String, PackagePreferences> mRestoredWithoutUids = new ArrayMap<>();

@@ -142,7 +142,9 @@ public class PreferencesHelper implements RankingConfig {
        if (type != XmlPullParser.START_TAG) return;
        String tag = parser.getName();
        if (!TAG_RANKING.equals(tag)) return;
        synchronized (mPackagePreferences) {
            // Clobber groups and channels with the xml, but don't delete other data that wasn't present

            // at the time of serialization.
            mRestoredWithoutUids.clear();
            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
@@ -168,7 +170,8 @@ public class PreferencesHelper implements RankingConfig {
                            PackagePreferences r = getOrCreatePackagePreferences(name, uid,
                                    XmlUtils.readIntAttribute(
                                            parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE),
                                XmlUtils.readIntAttribute(parser, ATT_PRIORITY, DEFAULT_PRIORITY),
                                    XmlUtils.readIntAttribute(parser, ATT_PRIORITY,
                                            DEFAULT_PRIORITY),
                                    XmlUtils.readIntAttribute(
                                            parser, ATT_VISIBILITY, DEFAULT_VISIBILITY),
                                    XmlUtils.readBooleanAttribute(
@@ -196,7 +199,8 @@ public class PreferencesHelper implements RankingConfig {
                                // Channel groups
                                if (TAG_GROUP.equals(tagName)) {
                                    String id = parser.getAttributeValue(null, ATT_ID);
                                CharSequence groupName = parser.getAttributeValue(null, ATT_NAME);
                                    CharSequence groupName = parser.getAttributeValue(null,
                                            ATT_NAME);
                                    if (!TextUtils.isEmpty(id)) {
                                        NotificationChannelGroup group
                                                = new NotificationChannelGroup(id, groupName);
@@ -230,11 +234,14 @@ public class PreferencesHelper implements RankingConfig {
                                    boolean delegateEnabled = XmlUtils.readBooleanAttribute(
                                            parser, ATT_ENABLED, Delegate.DEFAULT_ENABLED);
                                    boolean userAllowed = XmlUtils.readBooleanAttribute(
                                        parser, ATT_USER_ALLOWED, Delegate.DEFAULT_USER_ALLOWED);
                                            parser, ATT_USER_ALLOWED,
                                            Delegate.DEFAULT_USER_ALLOWED);
                                    Delegate d = null;
                                if (delegateId != UNKNOWN_UID && !TextUtils.isEmpty(delegateName)) {
                                    if (delegateId != UNKNOWN_UID && !TextUtils.isEmpty(
                                            delegateName)) {
                                        d = new Delegate(
                                            delegateName, delegateId, delegateEnabled, userAllowed);
                                                delegateName, delegateId, delegateEnabled,
                                                userAllowed);
                                    }
                                    r.delegate = d;
                                }
@@ -250,13 +257,14 @@ public class PreferencesHelper implements RankingConfig {
                    }
                }
            }
        }
        throw new IllegalStateException("Failed to reach END_DOCUMENT");
    }

    private PackagePreferences getPackagePreferences(String pkg, int uid) {
        final String key = packagePreferencesKey(pkg, uid);
        synchronized (mPackagePreferencess) {
            return mPackagePreferencess.get(key);
        synchronized (mPackagePreferences) {
            return mPackagePreferences.get(key);
        }
    }

@@ -268,10 +276,10 @@ public class PreferencesHelper implements RankingConfig {
    private PackagePreferences getOrCreatePackagePreferences(String pkg, int uid, int importance,
            int priority, int visibility, boolean showBadge) {
        final String key = packagePreferencesKey(pkg, uid);
        synchronized (mPackagePreferencess) {
        synchronized (mPackagePreferences) {
            PackagePreferences
                    r = (uid == UNKNOWN_UID) ? mRestoredWithoutUids.get(pkg)
                    : mPackagePreferencess.get(key);
                    : mPackagePreferences.get(key);
            if (r == null) {
                r = new PackagePreferences();
                r.pkg = pkg;
@@ -290,7 +298,7 @@ public class PreferencesHelper implements RankingConfig {
                if (r.uid == UNKNOWN_UID) {
                    mRestoredWithoutUids.put(pkg, r);
                } else {
                    mPackagePreferencess.put(key, r);
                    mPackagePreferences.put(key, r);
                }
            }
            return r;
@@ -364,10 +372,10 @@ public class PreferencesHelper implements RankingConfig {
        out.startTag(null, TAG_RANKING);
        out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION));

        synchronized (mPackagePreferencess) {
            final int N = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            final int N = mPackagePreferences.size();
            for (int i = 0; i < N; i++) {
                final PackagePreferences r = mPackagePreferencess.valueAt(i);
                final PackagePreferences r = mPackagePreferences.valueAt(i);
                //TODO: http://b/22388012
                if (forBackup && UserHandle.getUserId(r.uid) != UserHandle.USER_SYSTEM) {
                    continue;
@@ -882,10 +890,10 @@ public class PreferencesHelper implements RankingConfig {

    public int getBlockedAppCount(int userId) {
        int count = 0;
        synchronized (mPackagePreferencess) {
            final int N = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            final int N = mPackagePreferences.size();
            for (int i = 0; i < N; i++) {
                final PackagePreferences r = mPackagePreferencess.valueAt(i);
                final PackagePreferences r = mPackagePreferences.valueAt(i);
                if (userId == UserHandle.getUserId(r.uid)
                        && r.importance == IMPORTANCE_NONE) {
                    count++;
@@ -896,11 +904,11 @@ public class PreferencesHelper implements RankingConfig {
    }

    public void updateChannelsBypassingDnd() {
        synchronized (mPackagePreferencess) {
            final int numPackagePreferencess = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            final int numPackagePreferencess = mPackagePreferences.size();
            for (int PackagePreferencesIndex = 0; PackagePreferencesIndex < numPackagePreferencess;
                    PackagePreferencesIndex++) {
                final PackagePreferences r = mPackagePreferencess.valueAt(PackagePreferencesIndex);
                final PackagePreferences r = mPackagePreferences.valueAt(PackagePreferencesIndex);
                final int numChannels = r.channels.size();

                for (int channelIndex = 0; channelIndex < numChannels; channelIndex++) {
@@ -1064,8 +1072,8 @@ public class PreferencesHelper implements RankingConfig {
        pw.println("per-package config:");

        pw.println("PackagePreferencess:");
        synchronized (mPackagePreferencess) {
            dumpPackagePreferencess(pw, prefix, filter, mPackagePreferencess);
        synchronized (mPackagePreferences) {
            dumpPackagePreferencess(pw, prefix, filter, mPackagePreferences);
        }
        pw.println("Restored without uid:");
        dumpPackagePreferencess(pw, prefix, filter, mRestoredWithoutUids);
@@ -1073,9 +1081,9 @@ public class PreferencesHelper implements RankingConfig {

    public void dump(ProtoOutputStream proto,
            @NonNull NotificationManagerService.DumpFilter filter) {
        synchronized (mPackagePreferencess) {
        synchronized (mPackagePreferences) {
            dumpPackagePreferencess(proto, RankingHelperProto.RECORDS, filter,
                    mPackagePreferencess);
                    mPackagePreferences);
        }
        dumpPackagePreferencess(proto, RankingHelperProto.RECORDS_RESTORED_WITHOUT_UID, filter,
                mRestoredWithoutUids);
@@ -1160,10 +1168,10 @@ public class PreferencesHelper implements RankingConfig {
        } catch (JSONException e) {
            // pass
        }
        synchronized (mPackagePreferencess) {
            final int N = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            final int N = mPackagePreferences.size();
            for (int i = 0; i < N; i++) {
                final PackagePreferences r = mPackagePreferencess.valueAt(i);
                final PackagePreferences r = mPackagePreferences.valueAt(i);
                if (filter == null || filter.matches(r.pkg)) {
                    JSONObject PackagePreferences = new JSONObject();
                    try {
@@ -1240,11 +1248,11 @@ public class PreferencesHelper implements RankingConfig {
    }

    public Map<Integer, String> getPackageBans() {
        synchronized (mPackagePreferencess) {
            final int N = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            final int N = mPackagePreferences.size();
            ArrayMap<Integer, String> packageBans = new ArrayMap<>(N);
            for (int i = 0; i < N; i++) {
                final PackagePreferences r = mPackagePreferencess.valueAt(i);
                final PackagePreferences r = mPackagePreferences.valueAt(i);
                if (r.importance == IMPORTANCE_NONE) {
                    packageBans.put(r.uid, r.pkg);
                }
@@ -1284,9 +1292,9 @@ public class PreferencesHelper implements RankingConfig {

    private Map<String, Integer> getPackageChannels() {
        ArrayMap<String, Integer> packageChannels = new ArrayMap<>();
        synchronized (mPackagePreferencess) {
            for (int i = 0; i < mPackagePreferencess.size(); i++) {
                final PackagePreferences r = mPackagePreferencess.valueAt(i);
        synchronized (mPackagePreferences) {
            for (int i = 0; i < mPackagePreferences.size(); i++) {
                final PackagePreferences r = mPackagePreferences.valueAt(i);
                int channelCount = 0;
                for (int j = 0; j < r.channels.size(); j++) {
                    if (!r.channels.valueAt(j).isDeleted()) {
@@ -1300,22 +1308,22 @@ public class PreferencesHelper implements RankingConfig {
    }

    public void onUserRemoved(int userId) {
        synchronized (mPackagePreferencess) {
            int N = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            int N = mPackagePreferences.size();
            for (int i = N - 1; i >= 0; i--) {
                PackagePreferences PackagePreferences = mPackagePreferencess.valueAt(i);
                PackagePreferences PackagePreferences = mPackagePreferences.valueAt(i);
                if (UserHandle.getUserId(PackagePreferences.uid) == userId) {
                    mPackagePreferencess.removeAt(i);
                    mPackagePreferences.removeAt(i);
                }
            }
        }
    }

    protected void onLocaleChanged(Context context, int userId) {
        synchronized (mPackagePreferencess) {
            int N = mPackagePreferencess.size();
        synchronized (mPackagePreferences) {
            int N = mPackagePreferences.size();
            for (int i = 0; i < N; i++) {
                PackagePreferences PackagePreferences = mPackagePreferencess.valueAt(i);
                PackagePreferences PackagePreferences = mPackagePreferences.valueAt(i);
                if (UserHandle.getUserId(PackagePreferences.uid) == userId) {
                    if (PackagePreferences.channels.containsKey(
                            NotificationChannel.DEFAULT_CHANNEL_ID)) {
@@ -1341,8 +1349,8 @@ public class PreferencesHelper implements RankingConfig {
            for (int i = 0; i < size; i++) {
                final String pkg = pkgList[i];
                final int uid = uidList[i];
                synchronized (mPackagePreferencess) {
                    mPackagePreferencess.remove(packagePreferencesKey(pkg, uid));
                synchronized (mPackagePreferences) {
                    mPackagePreferences.remove(packagePreferencesKey(pkg, uid));
                }
                mRestoredWithoutUids.remove(pkg);
                updated = true;
@@ -1355,8 +1363,8 @@ public class PreferencesHelper implements RankingConfig {
                    try {
                        r.uid = mPm.getPackageUidAsUser(r.pkg, changeUserId);
                        mRestoredWithoutUids.remove(pkg);
                        synchronized (mPackagePreferencess) {
                            mPackagePreferencess.put(packagePreferencesKey(r.pkg, r.uid), r);
                        synchronized (mPackagePreferences) {
                            mPackagePreferences.put(packagePreferencesKey(r.pkg, r.uid), r);
                        }
                        updated = true;
                    } catch (PackageManager.NameNotFoundException e) {
@@ -1365,12 +1373,14 @@ public class PreferencesHelper implements RankingConfig {
                }
                // Package upgrade
                try {
                    synchronized (mPackagePreferences) {
                        PackagePreferences fullPackagePreferences = getPackagePreferences(pkg,
                                mPm.getPackageUidAsUser(pkg, changeUserId));
                        if (fullPackagePreferences != null) {
                            createDefaultChannelIfNeeded(fullPackagePreferences);
                            deleteDefaultChannelIfNeeded(fullPackagePreferences);
                        }
                    }
                } catch (PackageManager.NameNotFoundException e) {
                }
            }