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.zen;
18 
19 import static com.android.settings.widget.EntityHeaderController.PREF_KEY_APP_HEADER;
20 
21 import android.app.AutomaticZenRule;
22 import android.content.Context;
23 import android.content.pm.ApplicationInfo;
24 import android.content.pm.PackageManager;
25 import android.graphics.drawable.Drawable;
26 import android.service.notification.ZenModeConfig;
27 import android.util.Slog;
28 
29 import androidx.preference.Preference;
30 import androidx.preference.PreferenceFragmentCompat;
31 
32 import com.android.settings.R;
33 import com.android.settings.core.PreferenceControllerMixin;
34 import com.android.settings.widget.EntityHeaderController;
35 import com.android.settingslib.core.lifecycle.Lifecycle;
36 import com.android.settingslib.widget.LayoutPreference;
37 
38 public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModePreferenceController
39         implements PreferenceControllerMixin {
40 
41     private final String KEY = PREF_KEY_APP_HEADER;
42     private final PreferenceFragmentCompat mFragment;
43     private AutomaticZenRule mRule;
44     private String mId;
45     private EntityHeaderController mController;
46 
ZenAutomaticRuleHeaderPreferenceController(Context context, PreferenceFragmentCompat fragment, Lifecycle lifecycle)47     public ZenAutomaticRuleHeaderPreferenceController(Context context,
48             PreferenceFragmentCompat fragment, Lifecycle lifecycle) {
49         super(context, PREF_KEY_APP_HEADER, lifecycle);
50         mFragment = fragment;
51     }
52 
53     @Override
getPreferenceKey()54     public String getPreferenceKey() {
55         return KEY;
56     }
57 
58     @Override
isAvailable()59     public boolean isAvailable() {
60         return mRule != null;
61     }
62 
63     @Override
updateState(Preference preference)64     public void updateState(Preference preference) {
65         if (mRule == null || mFragment == null) {
66             return;
67         }
68 
69         if (mController == null) {
70             final LayoutPreference pref = (LayoutPreference) preference;
71             mController = EntityHeaderController.newInstance(mFragment.getActivity(), mFragment,
72                     pref.findViewById(R.id.entity_header));
73         }
74 
75         mController.setIcon(getIcon())
76                 .setLabel(mRule.getName())
77                 .done(mFragment.getActivity(), false /* rebindActions */);
78     }
79 
getIcon()80     private Drawable getIcon() {
81         try {
82             PackageManager packageManager =  mContext.getPackageManager();
83             ApplicationInfo info = packageManager.getApplicationInfo(
84                     mRule.getOwner().getPackageName(), 0);
85             if (info.isSystemApp()) {
86                 if (ZenModeConfig.isValidScheduleConditionId(mRule.getConditionId())) {
87                     return mContext.getDrawable(R.drawable.ic_timelapse);
88                 } else if (ZenModeConfig.isValidEventConditionId(mRule.getConditionId())) {
89                     return mContext.getDrawable(R.drawable.ic_event);
90                 }
91             }
92             return info.loadIcon(packageManager);
93         } catch (PackageManager.NameNotFoundException e) {
94            Slog.w(TAG, "Unable to load icon - PackageManager.NameNotFoundException");
95         }
96 
97         return null;
98     }
99 
onResume(AutomaticZenRule rule, String id)100     protected void onResume(AutomaticZenRule rule, String id) {
101         mRule = rule;
102         mId = id;
103     }
104 }
105