OSDN Git Service

Zen automatic rule page ui changes
[android-x86/packages-apps-Settings.git] / src / com / android / settings / notification / ZenAutomaticRuleHeaderPreferenceController.java
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package com.android.settings.notification;
18
19 import static com.android.settings.widget.EntityHeaderController.PREF_KEY_APP_HEADER;
20
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;
31
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;
38
39 public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModePreferenceController
40         implements PreferenceControllerMixin {
41
42     private final String KEY = PREF_KEY_APP_HEADER;
43     private final PreferenceFragment mFragment;
44     private AutomaticZenRule mRule;
45     private String mId;
46     private EntityHeaderController mController;
47
48     public ZenAutomaticRuleHeaderPreferenceController(Context context, PreferenceFragment fragment,
49             Lifecycle lifecycle) {
50         super(context, PREF_KEY_APP_HEADER, lifecycle);
51         mFragment = fragment;
52     }
53
54     @Override
55     public String getPreferenceKey() {
56         return KEY;
57     }
58
59     @Override
60     public boolean isAvailable() {
61         return mRule != null;
62     }
63
64     public void updateState(Preference preference) {
65         if (mRule == null) {
66             return;
67         }
68
69         if (mFragment != null) {
70             LayoutPreference pref = (LayoutPreference) preference;
71
72             if (mController == null) {
73                 mController = EntityHeaderController
74                         .newInstance(mFragment.getActivity(), mFragment,
75                                 pref.findViewById(R.id.entity_header));
76
77                 mController.setEditZenRuleNameListener(new View.OnClickListener() {
78                     @Override
79                     public void onClick(View v) {
80                         ZenRuleNameDialog.show(mFragment, mRule.getName(), null,
81                                 new RuleNameChangeListener());
82                     }
83                 });
84             }
85
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);
94
95             pref.findViewById(R.id.entity_header).setVisibility(View.VISIBLE);
96         }
97     }
98
99     private Drawable getIcon() {
100         try {
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");
107         }
108
109         return null;
110     }
111
112     protected void onResume(AutomaticZenRule rule, String id) {
113         mRule = rule;
114         mId = id;
115     }
116
117     public class RuleNameChangeListener implements ZenRuleNameDialog.PositiveClickListener {
118         public RuleNameChangeListener() {}
119
120         @Override
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);
126         }
127     }
128 }