2 * Copyright (C) 2017 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.settings.notification;
19 import static com.android.settings.widget.EntityHeaderController.PREF_KEY_APP_HEADER;
21 import android.app.AutomaticZenRule;
22 import android.app.Fragment;
23 import android.content.Context;
24 import android.content.pm.ApplicationInfo;
25 import android.content.pm.PackageManager;
26 import android.graphics.drawable.Drawable;
27 import android.support.v14.preference.PreferenceFragment;
28 import android.support.v7.preference.Preference;
29 import android.util.Slog;
30 import android.view.View;
32 import com.android.internal.logging.nano.MetricsProto;
33 import com.android.settings.R;
34 import com.android.settings.applications.LayoutPreference;
35 import com.android.settings.core.PreferenceControllerMixin;
36 import com.android.settings.widget.EntityHeaderController;
37 import com.android.settingslib.core.lifecycle.Lifecycle;
39 public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModePreferenceController
40 implements PreferenceControllerMixin {
42 private final String KEY = PREF_KEY_APP_HEADER;
43 private final PreferenceFragment mFragment;
44 private AutomaticZenRule mRule;
46 private EntityHeaderController mController;
48 public ZenAutomaticRuleHeaderPreferenceController(Context context, PreferenceFragment fragment,
49 Lifecycle lifecycle) {
50 super(context, PREF_KEY_APP_HEADER, lifecycle);
55 public String getPreferenceKey() {
60 public boolean isAvailable() {
64 public void updateState(Preference preference) {
69 if (mFragment != null) {
70 LayoutPreference pref = (LayoutPreference) preference;
72 if (mController == null) {
73 mController = EntityHeaderController
74 .newInstance(mFragment.getActivity(), mFragment,
75 pref.findViewById(R.id.entity_header));
77 mController.setEditZenRuleNameListener(new View.OnClickListener() {
79 public void onClick(View v) {
80 ZenRuleNameDialog.show(mFragment, mRule.getName(), null,
81 new RuleNameChangeListener());
86 pref = mController.setIcon(getIcon())
87 .setLabel(mRule.getName())
88 .setPackageName(mRule.getOwner().getPackageName())
89 .setUid(mContext.getUserId())
90 .setHasAppInfoLink(false)
91 .setButtonActions(EntityHeaderController.ActionType.ACTION_DND_RULE_PREFERENCE,
92 EntityHeaderController.ActionType.ACTION_NONE)
93 .done(mFragment.getActivity(), mContext);
95 pref.findViewById(R.id.entity_header).setVisibility(View.VISIBLE);
99 private Drawable getIcon() {
101 PackageManager packageManager = mContext.getPackageManager();
102 ApplicationInfo info = packageManager.getApplicationInfo(
103 mRule.getOwner().getPackageName(), 0);
104 return info.loadIcon(packageManager);
105 } catch (PackageManager.NameNotFoundException e) {
106 Slog.w(TAG, "Unable to load icon - PackageManager.NameNotFoundException");
112 protected void onResume(AutomaticZenRule rule, String id) {
117 public class RuleNameChangeListener implements ZenRuleNameDialog.PositiveClickListener {
118 public RuleNameChangeListener() {}
121 public void onOk(String ruleName, Fragment parent) {
122 mMetricsFeatureProvider.action(mContext,
123 MetricsProto.MetricsEvent.ACTION_ZEN_MODE_RULE_NAME_CHANGE_OK);
124 mRule.setName(ruleName);
125 mBackend.setZenRule(mId, mRule);