| /* |
| * 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; |
| } |
| |
| } |