Loading src/com/android/settings/notification/ZenModeAutomationSettings.java +10 −5 Original line number Diff line number Diff line Loading @@ -61,11 +61,11 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.zen_mode_automation_settings); mPm = mContext.getPackageManager(); mServiceListing = new ServiceListing(mContext, CONFIG); mServiceListing.addCallback(mServiceListingCallback); mServiceListing.reload(); mServiceListing.setListening(true); mPm = mContext.getPackageManager(); } @Override Loading Loading @@ -223,7 +223,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { @Override public void onServicesReloaded(List<ServiceInfo> services) { for (ServiceInfo service : services) { final ZenRuleInfo ri = getRuleInfo(service); final ZenRuleInfo ri = getRuleInfo(mPm, service); if (ri != null && ri.serviceComponent != null && Objects.equals(ri.settingsAction, Settings.ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS)) { Loading @@ -236,7 +236,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { } }; public static ZenRuleInfo getRuleInfo(ServiceInfo si) { public static ZenRuleInfo getRuleInfo(PackageManager pm, ServiceInfo si) { if (si == null || si.metaData == null) return null; final String ruleType = si.metaData.getString(ConditionProviderService.META_DATA_RULE_TYPE); final ComponentName configurationActivity = getSettingsActivity(si); Loading @@ -246,6 +246,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { ri.title = ruleType; ri.packageName = si.packageName; ri.configurationActivity = getSettingsActivity(si); ri.packageLabel = si.applicationInfo.loadLabel(pm); return ri; } Loading @@ -262,13 +263,17 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { return null; } // TODO: Sort by creation date, once that data is available. private static final Comparator<AutomaticZenRule> RULE_COMPARATOR = new Comparator<AutomaticZenRule>() { @Override public int compare(AutomaticZenRule lhs, AutomaticZenRule rhs) { int byDate = Long.compare(lhs.getCreationTime(), rhs.getCreationTime()); if (byDate != 0) { return byDate; } else { return key(lhs).compareTo(key(rhs)); } } private String key(AutomaticZenRule rule) { final int type = ZenModeConfig.isValidScheduleConditionId(rule.getConditionId()) ? 1 Loading src/com/android/settings/notification/ZenRuleInfo.java +1 −0 Original line number Diff line number Diff line Loading @@ -11,4 +11,5 @@ public class ZenRuleInfo { public Uri defaultConditionId; public ComponentName serviceComponent; public boolean isSystem; public CharSequence packageLabel; } src/com/android/settings/notification/ZenRuleSelectionDialog.java +28 −9 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.notification; import android.app.AlertDialog; import android.app.AutomaticZenRule; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; Loading @@ -36,7 +37,10 @@ import android.widget.TextView; import com.android.settings.R; import java.lang.ref.WeakReference; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; public abstract class ZenRuleSelectionDialog { Loading @@ -48,7 +52,6 @@ public abstract class ZenRuleSelectionDialog { private final AlertDialog mDialog; private final LinearLayout mRuleContainer; private final ServiceListing mServiceListing; private final List<ZenRuleInfo> mExternalRuleTypes = new ArrayList<ZenRuleInfo>(); public ZenRuleSelectionDialog(Context context, ServiceListing serviceListing) { mContext = context; Loading @@ -59,9 +62,8 @@ public abstract class ZenRuleSelectionDialog { mRuleContainer = (LinearLayout) v.findViewById(R.id.rule_container); if (mServiceListing != null) { bindType(defaultNewSchedule()); bindType(defaultNewEvent()); bindExternalRules(); bindType(defaultNewSchedule()); mServiceListing.addCallback(mServiceListingCallback); mServiceListing.reload(); } Loading Loading @@ -147,8 +149,9 @@ public abstract class ZenRuleSelectionDialog { return rt; } private void bindExternalRules() { for (ZenRuleInfo ri : mExternalRuleTypes) { private void bindExternalRules(ZenRuleInfo[] externalRuleTypes) { Arrays.sort(externalRuleTypes, RULE_TYPE_COMPARATOR); for (ZenRuleInfo ri : externalRuleTypes) { bindType(ri); } } Loading @@ -157,13 +160,29 @@ public abstract class ZenRuleSelectionDialog { @Override public void onServicesReloaded(List<ServiceInfo> services) { if (DEBUG) Log.d(TAG, "Services reloaded: count=" + services.size()); for (ServiceInfo si : services) { final ZenRuleInfo ri = ZenModeAutomationSettings.getRuleInfo(si); ZenRuleInfo[] externalRuleTypes = new ZenRuleInfo[services.size()]; for (int i = 0; i < services.size(); i++) { final ZenRuleInfo ri = ZenModeAutomationSettings.getRuleInfo(mPm, services.get(i)); if (ri != null && ri.configurationActivity != null) { mExternalRuleTypes.add(ri); externalRuleTypes[i] = ri; } } bindExternalRules(externalRuleTypes); } }; private static final Comparator<ZenRuleInfo> RULE_TYPE_COMPARATOR = new Comparator<ZenRuleInfo>() { private final Collator mCollator = Collator.getInstance(); @Override public int compare(ZenRuleInfo lhs, ZenRuleInfo rhs) { int byAppName = mCollator.compare(lhs.packageLabel, rhs.packageLabel); if (byAppName != 0) { return byAppName; } else { return mCollator.compare(lhs.title, rhs.title); } bindExternalRules(); } }; Loading Loading
src/com/android/settings/notification/ZenModeAutomationSettings.java +10 −5 Original line number Diff line number Diff line Loading @@ -61,11 +61,11 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { public void onCreate(Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.zen_mode_automation_settings); mPm = mContext.getPackageManager(); mServiceListing = new ServiceListing(mContext, CONFIG); mServiceListing.addCallback(mServiceListingCallback); mServiceListing.reload(); mServiceListing.setListening(true); mPm = mContext.getPackageManager(); } @Override Loading Loading @@ -223,7 +223,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { @Override public void onServicesReloaded(List<ServiceInfo> services) { for (ServiceInfo service : services) { final ZenRuleInfo ri = getRuleInfo(service); final ZenRuleInfo ri = getRuleInfo(mPm, service); if (ri != null && ri.serviceComponent != null && Objects.equals(ri.settingsAction, Settings.ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS)) { Loading @@ -236,7 +236,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { } }; public static ZenRuleInfo getRuleInfo(ServiceInfo si) { public static ZenRuleInfo getRuleInfo(PackageManager pm, ServiceInfo si) { if (si == null || si.metaData == null) return null; final String ruleType = si.metaData.getString(ConditionProviderService.META_DATA_RULE_TYPE); final ComponentName configurationActivity = getSettingsActivity(si); Loading @@ -246,6 +246,7 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { ri.title = ruleType; ri.packageName = si.packageName; ri.configurationActivity = getSettingsActivity(si); ri.packageLabel = si.applicationInfo.loadLabel(pm); return ri; } Loading @@ -262,13 +263,17 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase { return null; } // TODO: Sort by creation date, once that data is available. private static final Comparator<AutomaticZenRule> RULE_COMPARATOR = new Comparator<AutomaticZenRule>() { @Override public int compare(AutomaticZenRule lhs, AutomaticZenRule rhs) { int byDate = Long.compare(lhs.getCreationTime(), rhs.getCreationTime()); if (byDate != 0) { return byDate; } else { return key(lhs).compareTo(key(rhs)); } } private String key(AutomaticZenRule rule) { final int type = ZenModeConfig.isValidScheduleConditionId(rule.getConditionId()) ? 1 Loading
src/com/android/settings/notification/ZenRuleInfo.java +1 −0 Original line number Diff line number Diff line Loading @@ -11,4 +11,5 @@ public class ZenRuleInfo { public Uri defaultConditionId; public ComponentName serviceComponent; public boolean isSystem; public CharSequence packageLabel; }
src/com/android/settings/notification/ZenRuleSelectionDialog.java +28 −9 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.notification; import android.app.AlertDialog; import android.app.AutomaticZenRule; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnDismissListener; Loading @@ -36,7 +37,10 @@ import android.widget.TextView; import com.android.settings.R; import java.lang.ref.WeakReference; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; public abstract class ZenRuleSelectionDialog { Loading @@ -48,7 +52,6 @@ public abstract class ZenRuleSelectionDialog { private final AlertDialog mDialog; private final LinearLayout mRuleContainer; private final ServiceListing mServiceListing; private final List<ZenRuleInfo> mExternalRuleTypes = new ArrayList<ZenRuleInfo>(); public ZenRuleSelectionDialog(Context context, ServiceListing serviceListing) { mContext = context; Loading @@ -59,9 +62,8 @@ public abstract class ZenRuleSelectionDialog { mRuleContainer = (LinearLayout) v.findViewById(R.id.rule_container); if (mServiceListing != null) { bindType(defaultNewSchedule()); bindType(defaultNewEvent()); bindExternalRules(); bindType(defaultNewSchedule()); mServiceListing.addCallback(mServiceListingCallback); mServiceListing.reload(); } Loading Loading @@ -147,8 +149,9 @@ public abstract class ZenRuleSelectionDialog { return rt; } private void bindExternalRules() { for (ZenRuleInfo ri : mExternalRuleTypes) { private void bindExternalRules(ZenRuleInfo[] externalRuleTypes) { Arrays.sort(externalRuleTypes, RULE_TYPE_COMPARATOR); for (ZenRuleInfo ri : externalRuleTypes) { bindType(ri); } } Loading @@ -157,13 +160,29 @@ public abstract class ZenRuleSelectionDialog { @Override public void onServicesReloaded(List<ServiceInfo> services) { if (DEBUG) Log.d(TAG, "Services reloaded: count=" + services.size()); for (ServiceInfo si : services) { final ZenRuleInfo ri = ZenModeAutomationSettings.getRuleInfo(si); ZenRuleInfo[] externalRuleTypes = new ZenRuleInfo[services.size()]; for (int i = 0; i < services.size(); i++) { final ZenRuleInfo ri = ZenModeAutomationSettings.getRuleInfo(mPm, services.get(i)); if (ri != null && ri.configurationActivity != null) { mExternalRuleTypes.add(ri); externalRuleTypes[i] = ri; } } bindExternalRules(externalRuleTypes); } }; private static final Comparator<ZenRuleInfo> RULE_TYPE_COMPARATOR = new Comparator<ZenRuleInfo>() { private final Collator mCollator = Collator.getInstance(); @Override public int compare(ZenRuleInfo lhs, ZenRuleInfo rhs) { int byAppName = mCollator.compare(lhs.packageLabel, rhs.packageLabel); if (byAppName != 0) { return byAppName; } else { return mCollator.compare(lhs.title, rhs.title); } bindExternalRules(); } }; Loading