- Remove FAB for adding rules, move to last preference. - Add first-class event condition type and config sub-page. - Always show radio buttons when adding rules. - Add new data model for event rules. - Add stub condition provider for event rules (always false for now). - Add rule-type icons to rule preference rows. Bug: 20064962 Change-Id: Id5acde371eb2e7d22b1f195459897614db5ba80a
139 lines
5.2 KiB
Java
139 lines
5.2 KiB
Java
/*
|
|
* Copyright (C) 2015 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.settings.notification;
|
|
|
|
import android.app.Activity;
|
|
import android.content.ComponentName;
|
|
import android.content.Intent;
|
|
import android.content.pm.ServiceInfo;
|
|
import android.net.Uri;
|
|
import android.preference.Preference;
|
|
import android.preference.Preference.OnPreferenceClickListener;
|
|
import android.preference.PreferenceScreen;
|
|
import android.provider.Settings;
|
|
import android.service.notification.ZenModeConfig.ZenRule;
|
|
import android.util.Log;
|
|
|
|
import com.android.internal.logging.MetricsLogger;
|
|
import com.android.settings.R;
|
|
import com.android.settings.notification.ZenRuleNameDialog.RuleInfo;
|
|
|
|
public class ZenModeExternalRuleSettings extends ZenModeRuleSettingsBase {
|
|
private static final String KEY_TYPE = "type";
|
|
private static final String KEY_CONFIGURE = "configure";
|
|
|
|
public static final String ACTION = Settings.ACTION_ZEN_MODE_EXTERNAL_RULE_SETTINGS;
|
|
private static final int REQUEST_CODE_CONFIGURE = 1;
|
|
|
|
private static final String MD_RULE_TYPE = "automatic.ruleType";
|
|
private static final String MD_DEFAULT_CONDITION_ID = "automatic.defaultConditionId";
|
|
private static final String MD_CONFIGURATION_ACTIVITY = "automatic.configurationActivity";
|
|
private static final String EXTRA_CONDITION_ID = "automatic.conditionId";
|
|
|
|
private Preference mType;
|
|
private Preference mConfigure;
|
|
|
|
@Override
|
|
protected boolean setRule(ZenRule rule) {
|
|
return rule != null;
|
|
}
|
|
|
|
@Override
|
|
protected String getZenModeDependency() {
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected int getEnabledToastText() {
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
protected void onCreateInternal() {
|
|
addPreferencesFromResource(R.xml.zen_mode_external_rule_settings);
|
|
final PreferenceScreen root = getPreferenceScreen();
|
|
final ServiceInfo si = ServiceListing.findService(mContext,
|
|
ZenModeAutomationSettings.CONFIG, mRule.component);
|
|
if (DEBUG) Log.d(TAG, "ServiceInfo: " + si);
|
|
final RuleInfo ri = getRuleInfo(si);
|
|
if (DEBUG) Log.d(TAG, "RuleInfo: " + ri);
|
|
mType = root.findPreference(KEY_TYPE);
|
|
if (ri == null) {
|
|
mType.setSummary(R.string.zen_mode_rule_type_unknown);
|
|
} else {
|
|
mType.setSummary(ri.caption);
|
|
}
|
|
|
|
mConfigure = root.findPreference(KEY_CONFIGURE);
|
|
if (ri == null || ri.configurationActivity == null) {
|
|
mConfigure.setEnabled(false);
|
|
} else {
|
|
mConfigure.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
|
@Override
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
startActivityForResult(new Intent().setComponent(ri.configurationActivity),
|
|
REQUEST_CODE_CONFIGURE);
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
if (requestCode == REQUEST_CODE_CONFIGURE) {
|
|
if (resultCode == Activity.RESULT_OK && data != null) {
|
|
final Uri conditionId = data.getParcelableExtra(EXTRA_CONDITION_ID);
|
|
if (conditionId != null && !conditionId.equals(mRule.conditionId)) {
|
|
updateRule(conditionId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static RuleInfo getRuleInfo(ServiceInfo si) {
|
|
if (si == null || si.metaData == null) return null;
|
|
final String ruleType = si.metaData.getString(MD_RULE_TYPE);
|
|
final String defaultConditionId = si.metaData.getString(MD_DEFAULT_CONDITION_ID);
|
|
final String configurationActivity = si.metaData.getString(MD_CONFIGURATION_ACTIVITY);
|
|
if (ruleType != null && !ruleType.trim().isEmpty() && defaultConditionId != null) {
|
|
final RuleInfo ri = new RuleInfo();
|
|
ri.serviceComponent = new ComponentName(si.packageName, si.name);
|
|
ri.settingsAction = ZenModeExternalRuleSettings.ACTION;
|
|
ri.caption = ruleType;
|
|
ri.defaultConditionId = Uri.parse(defaultConditionId);
|
|
if (configurationActivity != null) {
|
|
ri.configurationActivity = ComponentName.unflattenFromString(configurationActivity);
|
|
}
|
|
return ri;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
protected void updateControlsInternal() {
|
|
// everything done up front
|
|
}
|
|
|
|
@Override
|
|
protected int getMetricsCategory() {
|
|
return MetricsLogger.NOTIFICATION_ZEN_MODE_EXTERNAL_RULE;
|
|
}
|
|
|
|
}
|