Merge "Localization of zen mode default rules." into oc-mr1-dev am: 15ea142044

am: 516be39336

Change-Id: I26fd676a9cb96d0de3f9be715a4fb4591ef031c8
This commit is contained in:
Beverly
2017-08-10 17:00:46 +00:00
committed by android-build-merger
3 changed files with 103 additions and 23 deletions

View File

@@ -794,6 +794,15 @@ public class NotificationManagerService extends SystemService {
updateLightsLocked();
}
protected final BroadcastReceiver mLocaleChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_LOCALE_CHANGED.equals(intent.getAction())) {
mZenModeHelper.updateDefaultZenRules();
}
}
};
private final BroadcastReceiver mRestoreReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -1055,7 +1064,7 @@ public class NotificationManagerService extends SystemService {
}
private SettingsObserver mSettingsObserver;
private ZenModeHelper mZenModeHelper;
protected ZenModeHelper mZenModeHelper;
static long[] getLongArray(Resources r, int resid, int maxlen, long[] def) {
int[] ar = r.getIntArray(resid);
@@ -1363,6 +1372,9 @@ public class NotificationManagerService extends SystemService {
IntentFilter settingsRestoredFilter = new IntentFilter(Intent.ACTION_SETTING_RESTORED);
getContext().registerReceiver(mRestoreReceiver, settingsRestoredFilter);
IntentFilter localeChangedFilter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
getContext().registerReceiver(mLocaleChangeReceiver, localeChangedFilter);
publishBinderService(Context.NOTIFICATION_SERVICE, mService);
publishLocalService(NotificationManagerInternal.class, mInternalService);
}

View File

@@ -16,11 +16,6 @@
package com.android.server.notification;
import static android.media.AudioAttributes.USAGE_NOTIFICATION;
import static android.media.AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
import static android.media.AudioAttributes.USAGE_UNKNOWN;
import static android.media.AudioAttributes.USAGE_VIRTUAL_SOURCE;
import android.app.AppOpsManager;
import android.app.AutomaticZenRule;
import android.app.NotificationManager;
@@ -52,7 +47,6 @@ import android.os.UserHandle;
import android.provider.Settings.Global;
import android.service.notification.Condition;
import android.service.notification.ConditionProviderService;
import android.service.notification.NotificationServiceDumpProto;
import android.service.notification.ZenModeConfig;
import android.service.notification.ZenModeConfig.EventInfo;
import android.service.notification.ZenModeConfig.ScheduleInfo;
@@ -60,6 +54,7 @@ import android.service.notification.ZenModeConfig.ZenRule;
import android.service.notification.ZenModeProto;
import android.util.AndroidRuntimeException;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
@@ -93,7 +88,7 @@ public class ZenModeHelper {
private final H mHandler;
private final SettingsObserver mSettingsObserver;
private final AppOpsManager mAppOps;
private final ZenModeConfig mDefaultConfig;
protected ZenModeConfig mDefaultConfig;
private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>();
private final ZenModeFiltering mFiltering;
private final RingerModeDelegate mRingerModeDelegate = new RingerModeDelegate();
@@ -102,11 +97,16 @@ public class ZenModeHelper {
private final Metrics mMetrics = new Metrics();
private final ConditionProviders.Config mServiceConfig;
protected final ArrayList<String> mDefaultRuleIds = new ArrayList<>();
private final String EVENTS_DEFAULT_RULE = "EVENTS_DEFAULT_RULE";
private final String SCHEDULED_DEFAULT_RULE_1 = "SCHEDULED_DEFAULT_RULE_1";
private final String SCHEDULED_DEFAULT_RULE_2 = "SCHEDULED_DEFAULT_RULE_2";
private int mZenMode;
private int mUser = UserHandle.USER_SYSTEM;
private ZenModeConfig mConfig;
protected ZenModeConfig mConfig;
private AudioManagerInternal mAudioManager;
private PackageManager mPm;
protected PackageManager mPm;
private long mSuppressedEffects;
public static final long SUPPRESSED_EFFECT_NOTIFICATIONS = 1;
@@ -114,21 +114,33 @@ public class ZenModeHelper {
public static final long SUPPRESSED_EFFECT_ALL = SUPPRESSED_EFFECT_CALLS
| SUPPRESSED_EFFECT_NOTIFICATIONS;
protected String mDefaultRuleWeeknightsName;
protected String mDefaultRuleEventsName;
protected String mDefaultRuleWeekendsName;
public ZenModeHelper(Context context, Looper looper, ConditionProviders conditionProviders) {
mContext = context;
mHandler = new H(looper);
addCallback(mMetrics);
mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
mDefaultConfig = readDefaultConfig(context.getResources());
appendDefaultScheduleRules(mDefaultConfig);
appendDefaultEventRules(mDefaultConfig);
mDefaultConfig = new ZenModeConfig();
mDefaultRuleWeeknightsName = mContext.getResources()
.getString(R.string.zen_mode_default_weeknights_name);
mDefaultRuleWeekendsName = mContext.getResources()
.getString(R.string.zen_mode_default_weekends_name);
mDefaultRuleEventsName = mContext.getResources()
.getString(R.string.zen_mode_default_events_name);
setDefaultZenRules(mContext);
mConfig = mDefaultConfig;
mConfigs.put(UserHandle.USER_SYSTEM, mConfig);
mSettingsObserver = new SettingsObserver(mHandler);
mSettingsObserver.observe();
mFiltering = new ZenModeFiltering(mContext);
mConditions = new ZenModeConditions(this, conditionProviders);
mServiceConfig = conditionProviders.getConfig();
}
public Looper getLooper() {
@@ -412,6 +424,54 @@ public class ZenModeHelper {
}
}
public void setDefaultZenRules(Context context) {
mDefaultConfig = readDefaultConfig(context.getResources());
mDefaultRuleIds.add(EVENTS_DEFAULT_RULE);
mDefaultRuleIds.add(SCHEDULED_DEFAULT_RULE_1);
mDefaultRuleIds.add(SCHEDULED_DEFAULT_RULE_2);
appendDefaultRules(mDefaultConfig);
}
private void appendDefaultRules (ZenModeConfig config) {
appendDefaultScheduleRules(config);
appendDefaultEventRules(config);
}
// Checks zen rule properties are the same (doesn't check creation time, name nor enabled)
// used to check if default rules were customized or not
private boolean ruleValuesEqual(AutomaticZenRule rule, ZenRule defaultRule) {
if (rule == null || defaultRule == null) {
return false;
}
return rule.getInterruptionFilter() ==
NotificationManager.zenModeToInterruptionFilter(defaultRule.zenMode)
&& rule.getConditionId().equals(defaultRule.conditionId)
&& rule.getOwner().equals(defaultRule.component);
}
protected void updateDefaultZenRules() {
ZenModeConfig configDefaultRules = new ZenModeConfig();
appendDefaultRules(configDefaultRules); // "new" localized default rules
for (String ruleId : mDefaultRuleIds) {
AutomaticZenRule currRule = getAutomaticZenRule(ruleId);
ZenRule defaultRule = configDefaultRules.automaticRules.get(ruleId);
// if default rule wasn't customized, use localized name instead of previous
if (ruleValuesEqual(currRule, defaultRule) &&
!defaultRule.name.equals(currRule.getName())) {
if (canManageAutomaticZenRule(defaultRule)) {
if (DEBUG) Slog.d(TAG, "Locale change - updating default zen rule name "
+ "from " + currRule.getName() + " to " + defaultRule.name);
// update default rule (if locale changed, name of rule will change)
AutomaticZenRule defaultAutoRule = createAutomaticZenRule(defaultRule);
updateAutomaticZenRule(ruleId, defaultAutoRule,
"locale changed");
}
}
}
}
private boolean isSystemRule(AutomaticZenRule rule) {
return ZenModeConfig.SYSTEM_AUTHORITY.equals(rule.getOwner().getPackageName());
}
@@ -453,7 +513,7 @@ public class ZenModeHelper {
automaticZenRule.getInterruptionFilter(), Global.ZEN_MODE_OFF);
}
private AutomaticZenRule createAutomaticZenRule(ZenRule rule) {
protected AutomaticZenRule createAutomaticZenRule(ZenRule rule) {
return new AutomaticZenRule(rule.name, rule.component, rule.conditionId,
NotificationManager.zenModeToInterruptionFilter(rule.zenMode), rule.enabled,
rule.creationTime);
@@ -853,12 +913,11 @@ public class ZenModeHelper {
weeknights.endHour = 7;
final ZenRule rule1 = new ZenRule();
rule1.enabled = false;
rule1.name = mContext.getResources()
.getString(R.string.zen_mode_default_weeknights_name);
rule1.name = mDefaultRuleWeeknightsName;
rule1.conditionId = ZenModeConfig.toScheduleConditionId(weeknights);
rule1.zenMode = Global.ZEN_MODE_ALARMS;
rule1.component = ScheduleConditionProvider.COMPONENT;
rule1.id = ZenModeConfig.newRuleId();
rule1.id = SCHEDULED_DEFAULT_RULE_1;
rule1.creationTime = System.currentTimeMillis();
config.automaticRules.put(rule1.id, rule1);
@@ -869,12 +928,11 @@ public class ZenModeHelper {
weekends.endHour = 10;
final ZenRule rule2 = new ZenRule();
rule2.enabled = false;
rule2.name = mContext.getResources()
.getString(R.string.zen_mode_default_weekends_name);
rule2.name = mDefaultRuleWeekendsName;
rule2.conditionId = ZenModeConfig.toScheduleConditionId(weekends);
rule2.zenMode = Global.ZEN_MODE_ALARMS;
rule2.component = ScheduleConditionProvider.COMPONENT;
rule2.id = ZenModeConfig.newRuleId();
rule2.id = SCHEDULED_DEFAULT_RULE_2;
rule2.creationTime = System.currentTimeMillis();
config.automaticRules.put(rule2.id, rule2);
}
@@ -887,11 +945,11 @@ public class ZenModeHelper {
events.reply = EventInfo.REPLY_YES_OR_MAYBE;
final ZenRule rule = new ZenRule();
rule.enabled = false;
rule.name = mContext.getResources().getString(R.string.zen_mode_default_events_name);
rule.name = mDefaultRuleEventsName;
rule.conditionId = ZenModeConfig.toEventConditionId(events);
rule.zenMode = Global.ZEN_MODE_ALARMS;
rule.component = EventConditionProvider.COMPONENT;
rule.id = ZenModeConfig.newRuleId();
rule.id = EVENTS_DEFAULT_RULE;
rule.creationTime = System.currentTimeMillis();
config.automaticRules.put(rule.id, rule);
}

View File

@@ -48,6 +48,7 @@ import android.app.NotificationManager;
import android.companion.ICompanionDeviceManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
@@ -60,7 +61,6 @@ import android.os.UserHandle;
import android.provider.Settings.Secure;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.service.notification.ZenModeConfig;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -1550,4 +1550,14 @@ public class NotificationManagerServiceTest extends NotificationTestCase {
verify(mAssistants, times(2)).migrateToXml();
}
@Test
public void testLocaleChangedCallsUpdateDefaultZenModeRules() throws Exception {
ZenModeHelper mZenModeHelper = mock(ZenModeHelper.class);
mNotificationManagerService.mZenModeHelper = mZenModeHelper;
mNotificationManagerService.mLocaleChangeReceiver.onReceive(mContext,
new Intent(Intent.ACTION_LOCALE_CHANGED));
verify(mZenModeHelper, times(1)).updateDefaultZenRules();
}
}