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

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

Merge "Improve isolation of DND providers"

parents 148cd8c0 8f056001
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -151,12 +151,12 @@ public final class Condition implements Parcelable {
    @Override
    public String toString() {
        return new StringBuilder(Condition.class.getSimpleName()).append('[')
            .append("id=").append(id)
                .append("state=").append(stateToString(state))
                .append(",id=").append(id)
                .append(",summary=").append(summary)
                .append(",line1=").append(line1)
                .append(",line2=").append(line2)
                .append(",icon=").append(icon)
            .append(",state=").append(stateToString(state))
                .append(",flags=").append(flags)
                .append(']').toString();
    }
+29 −11
Original line number Diff line number Diff line
@@ -240,11 +240,29 @@ public class ZenModeConfig implements Parcelable {
                .append(",allowMessagesFrom=").append(sourceToString(allowMessagesFrom))
                .append(",suppressedVisualEffects=").append(suppressedVisualEffects)
                .append(",areChannelsBypassingDnd=").append(areChannelsBypassingDnd)
                .append(",automaticRules=").append(automaticRules)
                .append(",manualRule=").append(manualRule)
                .append(",\nautomaticRules=").append(rulesToString())
                .append(",\nmanualRule=").append(manualRule)
                .append(']').toString();
    }

    private String rulesToString() {
        if (automaticRules.isEmpty()) {
            return "{}";
        }

        StringBuilder buffer = new StringBuilder(automaticRules.size() * 28);
        buffer.append('{');
        for (int i = 0; i < automaticRules.size(); i++) {
            if (i > 0) {
                buffer.append(",\n");
            }
            Object value = automaticRules.valueAt(i);
            buffer.append(value);
        }
        buffer.append('}');
        return buffer.toString();
    }

    private Diff diff(ZenModeConfig to) {
        final Diff d = new Diff();
        if (to == null) {
@@ -1027,10 +1045,10 @@ public class ZenModeConfig implements Parcelable {

    public static ScheduleInfo tryParseScheduleConditionId(Uri conditionId) {
        final boolean isSchedule =  conditionId != null
                && conditionId.getScheme().equals(Condition.SCHEME)
                && conditionId.getAuthority().equals(ZenModeConfig.SYSTEM_AUTHORITY)
                && Condition.SCHEME.equals(conditionId.getScheme())
                && ZenModeConfig.SYSTEM_AUTHORITY.equals(conditionId.getAuthority())
                && conditionId.getPathSegments().size() == 1
                && conditionId.getPathSegments().get(0).equals(ZenModeConfig.SCHEDULE_PATH);
                && ZenModeConfig.SCHEDULE_PATH.equals(conditionId.getPathSegments().get(0));
        if (!isSchedule) return null;
        final int[] start = tryParseHourAndMinute(conditionId.getQueryParameter("start"));
        final int[] end = tryParseHourAndMinute(conditionId.getQueryParameter("end"));
@@ -1128,10 +1146,10 @@ public class ZenModeConfig implements Parcelable {

    public static EventInfo tryParseEventConditionId(Uri conditionId) {
        final boolean isEvent = conditionId != null
                && conditionId.getScheme().equals(Condition.SCHEME)
                && conditionId.getAuthority().equals(ZenModeConfig.SYSTEM_AUTHORITY)
                && Condition.SCHEME.equals(conditionId.getScheme())
                && ZenModeConfig.SYSTEM_AUTHORITY.equals(conditionId.getAuthority())
                && conditionId.getPathSegments().size() == 1
                && conditionId.getPathSegments().get(0).equals(EVENT_PATH);
                && EVENT_PATH.equals(conditionId.getPathSegments().get(0));
        if (!isEvent) return null;
        final EventInfo rt = new EventInfo();
        rt.userId = tryParseInt(conditionId.getQueryParameter("userId"), UserHandle.USER_NULL);
@@ -1340,14 +1358,14 @@ public class ZenModeConfig implements Parcelable {
        @Override
        public String toString() {
            return new StringBuilder(ZenRule.class.getSimpleName()).append('[')
                    .append("enabled=").append(enabled)
                    .append("id=").append(id)
                    .append(",enabled=").append(String.valueOf(enabled).toUpperCase())
                    .append(",snoozing=").append(snoozing)
                    .append(",name=").append(name)
                    .append(",zenMode=").append(Global.zenModeToString(zenMode))
                    .append(",conditionId=").append(conditionId)
                    .append(",condition=").append(condition)
                    .append(",component=").append(component)
                    .append(",id=").append(id)
                    .append(",creationTime=").append(creationTime)
                    .append(",enabler=").append(enabler)
                    .append(']').toString();
@@ -1479,7 +1497,7 @@ public class ZenModeConfig implements Parcelable {
            final int N = lines.size();
            for (int i = 0; i < N; i++) {
                if (i > 0) {
                    sb.append(',');
                    sb.append(",\n");
                }
                sb.append(lines.get(i));
            }
+1 −0
Original line number Diff line number Diff line
@@ -150,6 +150,7 @@ public class ConditionProviders extends ManagedServices {
        try {
            provider.onConnected();
        } catch (RemoteException e) {
            Slog.e(TAG, "can't connect to service " + info, e);
            // we tried
        }
        if (mCallback != null) {
+2 −1
Original line number Diff line number Diff line
@@ -36,7 +36,8 @@ import java.util.List;

public class ZenLog {
    private static final String TAG = "ZenLog";
    private static final boolean DEBUG = Build.IS_DEBUGGABLE;
    // the ZenLog is *very* verbose, so be careful about setting this to true
    private static final boolean DEBUG = false;

    private static final int SIZE = Build.IS_DEBUGGABLE ? 100 : 20;

+14 −7
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ public class ZenModeConditions implements ConditionProviders.Callback {
        pw.print(prefix); pw.print("mSubscriptions="); pw.println(mSubscriptions);
    }

    public void evaluateConfig(ZenModeConfig config, boolean processSubscriptions) {
    public void evaluateConfig(ZenModeConfig config, ComponentName trigger,
            boolean processSubscriptions) {
        if (config == null) return;
        if (config.manualRule != null && config.manualRule.condition != null
                && !config.manualRule.isTrueOrUnknown()) {
@@ -67,9 +68,9 @@ public class ZenModeConditions implements ConditionProviders.Callback {
            config.manualRule = null;
        }
        final ArraySet<Uri> current = new ArraySet<>();
        evaluateRule(config.manualRule, current, processSubscriptions);
        evaluateRule(config.manualRule, current, null, processSubscriptions);
        for (ZenRule automaticRule : config.automaticRules.values()) {
            evaluateRule(automaticRule, current, processSubscriptions);
            evaluateRule(automaticRule, current, trigger, processSubscriptions);
            updateSnoozing(automaticRule);
        }

@@ -102,7 +103,7 @@ public class ZenModeConditions implements ConditionProviders.Callback {
    @Override
    public void onServiceAdded(ComponentName component) {
        if (DEBUG) Log.d(TAG, "onServiceAdded " + component);
        mHelper.setConfig(mHelper.getConfig(), "zmc.onServiceAdded");
        mHelper.setConfig(mHelper.getConfig(), component, "zmc.onServiceAdded");
    }

    @Override
@@ -110,17 +111,22 @@ public class ZenModeConditions implements ConditionProviders.Callback {
        if (DEBUG) Log.d(TAG, "onConditionChanged " + id + " " + condition);
        ZenModeConfig config = mHelper.getConfig();
        if (config == null) return;
        ComponentName trigger = null;
        boolean updated = updateCondition(id, condition, config.manualRule);
        for (ZenRule automaticRule : config.automaticRules.values()) {
            updated |= updateCondition(id, condition, automaticRule);
            updated |= updateSnoozing(automaticRule);
            if (updated) {
                trigger = automaticRule.component;
            }
        }
        if (updated) {
            mHelper.setConfig(config, "conditionChanged");
            mHelper.setConfig(config, trigger, "conditionChanged");
        }
    }

    private void evaluateRule(ZenRule rule, ArraySet<Uri> current, boolean processSubscriptions) {
    private void evaluateRule(ZenRule rule, ArraySet<Uri> current, ComponentName trigger,
            boolean processSubscriptions) {
        if (rule == null || rule.conditionId == null) return;
        final Uri id = rule.conditionId;
        boolean isSystemCondition = false;
@@ -146,7 +152,8 @@ public class ZenModeConditions implements ConditionProviders.Callback {
        if (current != null) {
            current.add(id);
        }
        if (processSubscriptions) {
        if (processSubscriptions && trigger != null && trigger.equals(rule.component)) {
            if (DEBUG) Log.d(TAG, "Subscribing to " + rule.component);
            if (mConditionProviders.subscribeIfNecessary(rule.component, rule.conditionId)) {
                synchronized (mSubscriptions) {
                    mSubscriptions.put(rule.conditionId, rule.component);
Loading