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

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

Merge "Link to the appropriate config activity for dnd rules"

parents 91a6c612 ec84a936
Loading
Loading
Loading
Loading
+30 −14
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.provider.Settings;
@@ -82,33 +84,47 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends
        return intent;
    }

    public static ZenRuleInfo getRuleInfo(PackageManager pm, ServiceInfo si) {
        if (si == null || si.metaData == null) {
    public static ZenRuleInfo getRuleInfo(PackageManager pm, ComponentInfo ci) {
        if (ci == null || ci.metaData == null) {
            return null;
        }
        final String ruleType = si.metaData.getString(ConditionProviderService.META_DATA_RULE_TYPE);
        final ComponentName configurationActivity = getSettingsActivity(si);
        final String ruleType = (ci instanceof ServiceInfo)
                ? ci.metaData.getString(ConditionProviderService.META_DATA_RULE_TYPE)
                : ci.metaData.getString(NotificationManager.META_DATA_AUTOMATIC_RULE_TYPE);

        final ComponentName configurationActivity = getSettingsActivity(null, ci);
        if (ruleType != null && !ruleType.trim().isEmpty() && configurationActivity != null) {
            final ZenRuleInfo ri = new ZenRuleInfo();
            ri.serviceComponent = new ComponentName(si.packageName, si.name);
            ri.serviceComponent =
                    (ci instanceof ServiceInfo) ? new ComponentName(ci.packageName, ci.name) : null;
            ri.settingsAction = Settings.ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS;
            ri.title = ruleType;
            ri.packageName = si.packageName;
            ri.configurationActivity = getSettingsActivity(si);
            ri.packageLabel = si.applicationInfo.loadLabel(pm);
            ri.ruleInstanceLimit =
                    si.metaData.getInt(ConditionProviderService.META_DATA_RULE_INSTANCE_LIMIT, -1);
            ri.packageName = ci.packageName;
            ri.configurationActivity = configurationActivity;
            ri.packageLabel = ci.applicationInfo.loadLabel(pm);
            ri.ruleInstanceLimit = (ci instanceof ServiceInfo)
                    ? ci.metaData.getInt(ConditionProviderService.META_DATA_RULE_INSTANCE_LIMIT, -1)
                    : ci.metaData.getInt(NotificationManager.META_DATA_RULE_INSTANCE_LIMIT, -1);
            return ri;
        }
        return null;
    }

    protected static ComponentName getSettingsActivity(ServiceInfo si) {
        if (si == null || si.metaData == null) {
    protected static ComponentName getSettingsActivity(AutomaticZenRule rule, ComponentInfo ci) {
        // prefer config activity on the rule itself; fallback to manifest definition
        if (rule != null && rule.getConfigurationActivity() != null) {
            return rule.getConfigurationActivity();
        }
        if (ci == null) {
            return null;
        }
        // new activity backed rule
        if (ci instanceof ActivityInfo) {
            return new ComponentName(ci.packageName, ci.name);
        }
        // old service backed rule
        final String configurationActivity =
                si.metaData.getString(ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY);
                ci.metaData.getString(ConditionProviderService.META_DATA_CONFIGURATION_ACTIVITY);
        if (configurationActivity != null) {
            return ComponentName.unflattenFromString(configurationActivity);
        }
@@ -127,7 +143,7 @@ abstract public class AbstractZenModeAutomaticRulePreferenceController extends
            mMetricsFeatureProvider.action(mContext,
                    MetricsProto.MetricsEvent.ACTION_ZEN_MODE_RULE_NAME_CHANGE_OK);
            AutomaticZenRule rule = new AutomaticZenRule(ruleName, mRuleInfo.serviceComponent,
                    mRuleInfo.defaultConditionId,
                    mRuleInfo.configurationActivity, mRuleInfo.defaultConditionId, null,
                    NotificationManager.INTERRUPTION_FILTER_PRIORITY, true);
            String savedRuleId = mBackend.addZenRule(rule);
            if (savedRuleId != null) {
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.notification;

import android.app.AlertDialog;
import android.app.AutomaticZenRule;
import android.app.NotificationManager;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
@@ -92,6 +93,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase {
        return new ManagedServiceSettings.Config.Builder()
                .setTag(TAG)
                .setIntentAction(ConditionProviderService.SERVICE_INTERFACE)
                .setConfigurationIntentAction(NotificationManager.ACTION_AUTOMATIC_ZEN_RULE)
                .setPermission(android.Manifest.permission.BIND_CONDITION_PROVIDER_SERVICE)
                .setNoun("condition provider")
                .build();
+3 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ public class ZenRuleInfo {
                that.defaultConditionId) : that.defaultConditionId != null) return false;
        if (serviceComponent != null ? !serviceComponent.equals(
                that.serviceComponent) : that.serviceComponent != null) return false;
        if (id != null ? !id.equals(that.id) : that.id != null)
            return false;
        return packageLabel != null ? packageLabel.equals(
                that.packageLabel) : that.packageLabel == null;

@@ -38,4 +40,5 @@ public class ZenRuleInfo {
    public boolean isSystem;
    public CharSequence packageLabel;
    public int ruleInstanceLimit = -1;
    public String id;
}
+5 −14
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.service.notification.ZenModeConfig;
@@ -45,7 +46,6 @@ public class ZenRulePreference extends TwoTargetPreference {
    private static final ManagedServiceSettings.Config CONFIG =
            ZenModeAutomationSettings.getConditionProviderConfig();
    final String mId;
    boolean appExists;
    final Fragment mParent;
    final Preference mPref;
    final Context mContext;
@@ -56,7 +56,6 @@ public class ZenRulePreference extends TwoTargetPreference {
    final AutomaticZenRule mRule;
    CharSequence mName;

    private boolean mIsSystemRule;
    private Intent mIntent;
    private boolean mChecked;
    private CheckBox mCheckBox;
@@ -163,25 +162,17 @@ public class ZenRulePreference extends TwoTargetPreference {
        final boolean isSchedule = ZenModeConfig.isValidScheduleConditionId(
                rule.getConditionId(), true);
        final boolean isEvent = ZenModeConfig.isValidEventConditionId(rule.getConditionId());
        mIsSystemRule = isSchedule || isEvent;

        try {
            ApplicationInfo info = mPm.getApplicationInfo(rule.getOwner().getPackageName(), 0);
        setSummary(computeRuleSummary(rule));
        } catch (PackageManager.NameNotFoundException e) {
            appExists = false;
            return;
        }

        appExists = true;
        setTitle(mName);
        setPersistent(false);

        final String action = isSchedule ? ZenModeScheduleRuleSettings.ACTION
                : isEvent ? ZenModeEventRuleSettings.ACTION : "";
        ServiceInfo si = mServiceListing.findService(rule.getOwner());
        ComponentInfo si = mServiceListing.findService(rule.getOwner());
        ComponentName settingsActivity = AbstractZenModeAutomaticRulePreferenceController.
                getSettingsActivity(si);
                getSettingsActivity(rule, si);
        mIntent = AbstractZenModeAutomaticRulePreferenceController.getRuleIntent(action,
                settingsActivity, mId);
        setKey(mId);
+7 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.app.NotificationManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.graphics.drawable.Drawable;
@@ -192,16 +193,17 @@ public class ZenRuleSelectionDialog extends InstrumentedDialogFragment {
    private final ZenServiceListing.Callback mServiceListingCallback = new
            ZenServiceListing.Callback() {
        @Override
        public void onServicesReloaded(Set<ServiceInfo> services) {
            if (DEBUG) Log.d(TAG, "Services reloaded: count=" + services.size());
        public void onComponentsReloaded(Set<ComponentInfo> componentInfos) {
            if (DEBUG) Log.d(TAG, "Reloaded: count=" + componentInfos.size());

            Set<ZenRuleInfo> externalRuleTypes = new TreeSet<>(RULE_TYPE_COMPARATOR);
            for (ServiceInfo serviceInfo : services) {
            for (ComponentInfo ci : componentInfos) {
                final ZenRuleInfo ri = AbstractZenModeAutomaticRulePreferenceController.
                        getRuleInfo(mPm, serviceInfo);
                        getRuleInfo(mPm, ci);
                if (ri != null && ri.configurationActivity != null
                        && mNm.isNotificationPolicyAccessGrantedForPackage(ri.packageName)
                        && (ri.ruleInstanceLimit <= 0 || ri.ruleInstanceLimit
                        >= (mNm.getRuleInstanceCount(serviceInfo.getComponentName()) + 1))) {
                        >= (mNm.getRuleInstanceCount(ci.getComponentName()) + 1))) {
                    externalRuleTypes.add(ri);
                }
            }
Loading