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

Commit c0754137 authored by Matías Hernández's avatar Matías Hernández Committed by Android (Google) Code Review
Browse files

Merge "Use ParceledListSlice for ZenModeConfig and AutomaticZenRules" into main

parents 3023df58 3965123f
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -17,3 +17,5 @@
package android.app;

parcelable AutomaticZenRule;

parcelable AutomaticZenRule.AzrWithId;
 No newline at end of file
+43 −6
Original line number Diff line number Diff line
@@ -228,7 +228,7 @@ public final class AutomaticZenRule implements Parcelable {
    public AutomaticZenRule(Parcel source) {
        enabled = source.readInt() == ENABLED;
        if (source.readInt() == ENABLED) {
            name = getTrimmedString(source.readString());
            name = getTrimmedString(source.readString8());
        }
        interruptionFilter = source.readInt();
        conditionId = getTrimmedUri(source.readParcelable(null, android.net.Uri.class));
@@ -238,11 +238,11 @@ public final class AutomaticZenRule implements Parcelable {
                source.readParcelable(null, android.content.ComponentName.class));
        creationTime = source.readLong();
        mZenPolicy = source.readParcelable(null, ZenPolicy.class);
        mPkg = source.readString();
        mPkg = source.readString8();
        mDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class);
        mAllowManualInvocation = source.readBoolean();
        mIconResId = source.readInt();
        mTriggerDescription = getTrimmedString(source.readString(), MAX_DESC_LENGTH);
        mTriggerDescription = getTrimmedString(source.readString8(), MAX_DESC_LENGTH);
        mType = source.readInt();
    }

@@ -514,7 +514,7 @@ public final class AutomaticZenRule implements Parcelable {
        dest.writeInt(enabled ? ENABLED : DISABLED);
        if (name != null) {
            dest.writeInt(1);
            dest.writeString(name);
            dest.writeString8(name);
        } else {
            dest.writeInt(0);
        }
@@ -524,11 +524,11 @@ public final class AutomaticZenRule implements Parcelable {
        dest.writeParcelable(configurationActivity, 0);
        dest.writeLong(creationTime);
        dest.writeParcelable(mZenPolicy, 0);
        dest.writeString(mPkg);
        dest.writeString8(mPkg);
        dest.writeParcelable(mDeviceEffects, 0);
        dest.writeBoolean(mAllowManualInvocation);
        dest.writeInt(mIconResId);
        dest.writeString(mTriggerDescription);
        dest.writeString8(mTriggerDescription);
        dest.writeInt(mType);
    }

@@ -843,4 +843,41 @@ public final class AutomaticZenRule implements Parcelable {
            return rule;
        }
    }

    /** @hide */
    public static final class AzrWithId implements Parcelable {
        public final String mId;
        public final AutomaticZenRule mRule;

        public AzrWithId(String id, AutomaticZenRule rule) {
            mId = id;
            mRule = rule;
        }

        public static final Creator<AzrWithId> CREATOR = new Creator<>() {
            @Override
            public AzrWithId createFromParcel(Parcel in) {
                return new AzrWithId(
                        in.readString8(),
                        in.readParcelable(AutomaticZenRule.class.getClassLoader(),
                                AutomaticZenRule.class));
            }

            @Override
            public AzrWithId[] newArray(int size) {
                return new AzrWithId[size];
            }
        };

        @Override
        public void writeToParcel(@NonNull Parcel dest, int flags) {
            dest.writeString8(mId);
            dest.writeParcelable(mRule, flags);
        }

        @Override
        public int describeContents() {
            return 0;
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -224,7 +224,7 @@ interface INotificationManager
    void setNotificationPolicyAccessGrantedForUser(String pkg, int userId, boolean granted);
    ZenPolicy getDefaultZenPolicy();
    AutomaticZenRule getAutomaticZenRule(String id);
    Map<String, AutomaticZenRule> getAutomaticZenRules();
    ParceledListSlice getAutomaticZenRules();
    String addAutomaticZenRule(in AutomaticZenRule automaticZenRule, String pkg, boolean fromUser);
    boolean updateAutomaticZenRule(String id, in AutomaticZenRule automaticZenRule, boolean fromUser);
    boolean removeAutomaticZenRule(String id, boolean fromUser);
+9 −1
Original line number Diff line number Diff line
@@ -1747,7 +1747,15 @@ public class NotificationManager {
    public Map<String, AutomaticZenRule> getAutomaticZenRules() {
        INotificationManager service = service();
        try {
            return service.getAutomaticZenRules();
            Map<String, AutomaticZenRule> result = new HashMap<>();
            ParceledListSlice<AutomaticZenRule.AzrWithId> parceledRules =
                    service.getAutomaticZenRules();
            if (parceledRules != null) {
                for (AutomaticZenRule.AzrWithId rule : parceledRules.getList()) {
                    result.put(rule.mId, rule.mRule);
                }
            }
            return result;
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+33 −24
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Build;
@@ -460,14 +461,21 @@ public class ZenModeConfig implements Parcelable {
    }

    private static void readRulesFromParcel(ArrayMap<String, ZenRule> ruleMap, Parcel source) {
        final int len = source.readInt();
        int len = source.readInt();
        if (len > 0) {
            final String[] ids = new String[len];
            final ZenRule[] rules = new ZenRule[len];
            source.readStringArray(ids);
            source.readTypedArray(rules, ZenRule.CREATOR);
            source.readString8Array(ids);
            ParceledListSlice<?> parceledRules = source.readParcelable(
                    ZenRule.class.getClassLoader(), ParceledListSlice.class);
            List<?> rules = parceledRules != null ? parceledRules.getList() : new ArrayList<>();
            if (rules.size() != len) {
                Slog.wtf(TAG, String.format(
                        "Unexpected parceled rules count (%s != %s), throwing them out",
                        rules.size(), len));
                len = 0;
            }
            for (int i = 0; i < len; i++) {
                ruleMap.put(ids[i], rules[i]);
                ruleMap.put(ids[i], (ZenRule) rules.get(i));
            }
        }
    }
@@ -485,8 +493,8 @@ public class ZenModeConfig implements Parcelable {
        }
        dest.writeInt(user);
        dest.writeParcelable(manualRule, 0);
        writeRulesToParcel(automaticRules, dest);
        writeRulesToParcel(deletedRules, dest);
        writeRulesToParcel(automaticRules, dest, flags);
        writeRulesToParcel(deletedRules, dest, flags);
        if (!Flags.modesUi()) {
            dest.writeInt(allowAlarms ? 1 : 0);
            dest.writeInt(allowMedia ? 1 : 0);
@@ -501,18 +509,19 @@ public class ZenModeConfig implements Parcelable {
        }
    }

    private static void writeRulesToParcel(ArrayMap<String, ZenRule> ruleMap, Parcel dest) {
    private static void writeRulesToParcel(ArrayMap<String, ZenRule> ruleMap, Parcel dest,
            int flags) {
        if (!ruleMap.isEmpty()) {
            final int len = ruleMap.size();
            final String[] ids = new String[len];
            final ZenRule[] rules = new ZenRule[len];
            final ArrayList<ZenRule> rules = new ArrayList<>();
            for (int i = 0; i < len; i++) {
                ids[i] = ruleMap.keyAt(i);
                rules[i] = ruleMap.valueAt(i);
                rules.add(ruleMap.valueAt(i));
            }
            dest.writeInt(len);
            dest.writeStringArray(ids);
            dest.writeTypedArray(rules, 0);
            dest.writeString8Array(ids);
            dest.writeParcelable(new ParceledListSlice<>(rules), flags);
        } else {
            dest.writeInt(0);
        }
@@ -2636,7 +2645,7 @@ public class ZenModeConfig implements Parcelable {
            enabled = source.readInt() == 1;
            snoozing = source.readInt() == 1;
            if (source.readInt() == 1) {
                name = source.readString();
                name = source.readString8();
            }
            zenMode = source.readInt();
            conditionId = source.readParcelable(null, android.net.Uri.class);
@@ -2644,18 +2653,18 @@ public class ZenModeConfig implements Parcelable {
            component = source.readParcelable(null, android.content.ComponentName.class);
            configurationActivity = source.readParcelable(null, android.content.ComponentName.class);
            if (source.readInt() == 1) {
                id = source.readString();
                id = source.readString8();
            }
            creationTime = source.readLong();
            if (source.readInt() == 1) {
                enabler = source.readString();
                enabler = source.readString8();
            }
            zenPolicy = source.readParcelable(null, android.service.notification.ZenPolicy.class);
            zenDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class);
            pkg = source.readString();
            pkg = source.readString8();
            allowManualInvocation = source.readBoolean();
            iconResName = source.readString();
            triggerDescription = source.readString();
            iconResName = source.readString8();
            triggerDescription = source.readString8();
            type = source.readInt();
            userModifiedFields = source.readInt();
            zenPolicyUserModifiedFields = source.readInt();
@@ -2703,7 +2712,7 @@ public class ZenModeConfig implements Parcelable {
            dest.writeInt(snoozing ? 1 : 0);
            if (name != null) {
                dest.writeInt(1);
                dest.writeString(name);
                dest.writeString8(name);
            } else {
                dest.writeInt(0);
            }
@@ -2714,23 +2723,23 @@ public class ZenModeConfig implements Parcelable {
            dest.writeParcelable(configurationActivity, 0);
            if (id != null) {
                dest.writeInt(1);
                dest.writeString(id);
                dest.writeString8(id);
            } else {
                dest.writeInt(0);
            }
            dest.writeLong(creationTime);
            if (enabler != null) {
                dest.writeInt(1);
                dest.writeString(enabler);
                dest.writeString8(enabler);
            } else {
                dest.writeInt(0);
            }
            dest.writeParcelable(zenPolicy, 0);
            dest.writeParcelable(zenDeviceEffects, 0);
            dest.writeString(pkg);
            dest.writeString8(pkg);
            dest.writeBoolean(allowManualInvocation);
            dest.writeString(iconResName);
            dest.writeString(triggerDescription);
            dest.writeString8(iconResName);
            dest.writeString8(triggerDescription);
            dest.writeInt(type);
            dest.writeInt(userModifiedFields);
            dest.writeInt(zenPolicyUserModifiedFields);
Loading