Loading src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java +30 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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) { Loading src/com/android/settings/notification/ZenModeAutomationSettings.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading src/com/android/settings/notification/ZenRuleInfo.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -38,4 +40,5 @@ public class ZenRuleInfo { public boolean isSystem; public CharSequence packageLabel; public int ruleInstanceLimit = -1; public String id; } src/com/android/settings/notification/ZenRulePreference.java +5 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading src/com/android/settings/notification/ZenRuleSelectionDialog.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading
src/com/android/settings/notification/AbstractZenModeAutomaticRulePreferenceController.java +30 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } Loading @@ -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) { Loading
src/com/android/settings/notification/ZenModeAutomationSettings.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); Loading
src/com/android/settings/notification/ZenRuleInfo.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -38,4 +40,5 @@ public class ZenRuleInfo { public boolean isSystem; public CharSequence packageLabel; public int ruleInstanceLimit = -1; public String id; }
src/com/android/settings/notification/ZenRulePreference.java +5 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); Loading
src/com/android/settings/notification/ZenRuleSelectionDialog.java +7 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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