14a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock/*
24a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * Copyright (C) 2014 The Android Open Source Project
34a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock *
44a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * Licensed under the Apache License, Version 2.0 (the "License");
54a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * you may not use this file except in compliance with the License.
64a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * You may obtain a copy of the License at
74a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock *
84a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock *      http://www.apache.org/licenses/LICENSE-2.0
94a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock *
104a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * Unless required by applicable law or agreed to in writing, software
114a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * distributed under the License is distributed on an "AS IS" BASIS,
124a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * See the License for the specific language governing permissions and
144a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock * limitations under the License.
154a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock */
164a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
174a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockpackage com.android.settings.notification;
184a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
194a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.content.Context;
204a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.content.Intent;
214a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.content.pm.PackageInfo;
224a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.content.pm.PackageManager;
234a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.content.pm.PackageManager.NameNotFoundException;
244a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.os.Bundle;
25802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport android.preference.Preference;
26802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport android.preference.Preference.OnPreferenceChangeListener;
27802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport android.preference.SwitchPreference;
28b8ec34346495245043933ac0f1b78781ae5054dbJohn Spurlockimport android.provider.Settings;
29802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport android.text.TextUtils;
304a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.util.ArrayMap;
314a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.util.Log;
324a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.view.View;
334a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.view.View.OnClickListener;
344a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.view.ViewGroup;
354a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.widget.ImageView;
364a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport android.widget.TextView;
37802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport android.widget.Toast;
384a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
39f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wrenimport com.android.internal.widget.LockPatternUtils;
404a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlockimport com.android.settings.R;
41802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport com.android.settings.SettingsPreferenceFragment;
42d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandlerimport com.android.settings.Utils;
43802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport com.android.settings.notification.NotificationAppList.AppRow;
44802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockimport com.android.settings.notification.NotificationAppList.Backend;
454a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
46802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock/** These settings are per app, so should not be returned in global search results. */
47802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlockpublic class AppNotificationSettings extends SettingsPreferenceFragment {
484a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock    private static final String TAG = "AppNotificationSettings";
49b8ec34346495245043933ac0f1b78781ae5054dbJohn Spurlock    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
5090f8035ea58cd3beace27c3549dcdb3f3d6b8c19Dan Sandler
51802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private static final String KEY_BLOCK = "block";
52802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private static final String KEY_PRIORITY = "priority";
53802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private static final String KEY_SENSITIVE = "sensitive";
544a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
55802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    static final String EXTRA_HAS_SETTINGS_INTENT = "has_settings_intent";
56802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    static final String EXTRA_SETTINGS_INTENT = "settings_intent";
574a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
58802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private final Backend mBackend = new Backend();
594a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
60802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private Context mContext;
61802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private SwitchPreference mBlock;
62802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private SwitchPreference mPriority;
63802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private SwitchPreference mSensitive;
64802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private AppRow mAppRow;
65802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private boolean mCreated;
66a6145a656af1241fd771038715cf839a8fce76e1Alexandra Gherghina
67a6145a656af1241fd771038715cf839a8fce76e1Alexandra Gherghina    @Override
684a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock    public void onActivityCreated(Bundle savedInstanceState) {
694a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock        super.onActivityCreated(savedInstanceState);
70802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (DEBUG) Log.d(TAG, "onActivityCreated mCreated=" + mCreated);
71802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (mCreated) {
72802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            Log.w(TAG, "onActivityCreated: ignoring duplicate call");
73802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            return;
74802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        }
75802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mCreated = true;
76802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (mAppRow == null) return;
77802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final View content = getActivity().findViewById(R.id.main_content);
78802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final ViewGroup contentParent = (ViewGroup) content.getParent();
79802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final View bar = getActivity().getLayoutInflater().inflate(R.layout.app_notification_header,
80802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                contentParent, false);
81802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
82802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon);
83802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        appIcon.setImageDrawable(mAppRow.icon);
84802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
85802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final TextView appName = (TextView) bar.findViewById(R.id.app_name);
86802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        appName.setText(mAppRow.label);
87802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
88802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final View appSettings = bar.findViewById(R.id.app_settings);
89802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (mAppRow.settingsIntent == null) {
90802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            appSettings.setVisibility(View.GONE);
91802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        } else {
92802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            appSettings.setClickable(true);
93802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            appSettings.setOnClickListener(new OnClickListener() {
944a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock                @Override
954a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock                public void onClick(View v) {
96802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                    mContext.startActivity(mAppRow.settingsIntent);
974a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock                }
984a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock            });
994a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock        }
100802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        contentParent.addView(bar, 0);
101802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    }
1024a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
103802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    @Override
104802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    public void onCreate(Bundle savedInstanceState) {
105802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        super.onCreate(savedInstanceState);
106802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mContext = getActivity();
107802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        Intent intent = getActivity().getIntent();
108802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (DEBUG) Log.d(TAG, "onCreate getIntent()=" + intent);
109802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (intent == null) {
110802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            Log.w(TAG, "No intent");
111802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            toastAndFinish();
112802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            return;
113802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        }
114802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
115802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final int uid = intent.getIntExtra(Settings.EXTRA_APP_UID, -1);
116802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final String pkg = intent.getStringExtra(Settings.EXTRA_APP_PACKAGE);
117802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (uid == -1 || TextUtils.isEmpty(pkg)) {
118802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            Log.w(TAG, "Missing extras: " + Settings.EXTRA_APP_PACKAGE + " was " + pkg + ", "
119802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                    + Settings.EXTRA_APP_UID + " was " + uid);
120802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            toastAndFinish();
121802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            return;
122802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        }
123802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
124802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (DEBUG) Log.d(TAG, "Load details for pkg=" + pkg + " uid=" + uid);
125802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final PackageManager pm = getPackageManager();
126802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final PackageInfo info = findPackageInfo(pm, pkg, uid);
127802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (info == null) {
128802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            Log.w(TAG, "Failed to find package info: " + Settings.EXTRA_APP_PACKAGE + " was " + pkg
129802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                    + ", " + Settings.EXTRA_APP_UID + " was " + uid);
130802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            toastAndFinish();
131802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            return;
132802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        }
133802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
134802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        addPreferencesFromResource(R.xml.app_notification_settings);
135802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mBlock = (SwitchPreference) findPreference(KEY_BLOCK);
136802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mPriority = (SwitchPreference) findPreference(KEY_PRIORITY);
137802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mSensitive = (SwitchPreference) findPreference(KEY_SENSITIVE);
138802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
139f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren        final boolean secure = new LockPatternUtils(getActivity()).isSecure();
1403d903185c792623a1e122f047adc0725db7ea01eChris Wren        final boolean enabled = getLockscreenNotificationsEnabled();
1413d903185c792623a1e122f047adc0725db7ea01eChris Wren        final boolean allowPrivate = getLockscreenAllowPrivateNotifications();
1423d903185c792623a1e122f047adc0725db7ea01eChris Wren        if (!secure || !enabled || !allowPrivate) {
143f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren            getPreferenceScreen().removePreference(mSensitive);
144f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren        }
145f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren
1463d4b542d75fd0d04752c827ac96ca746ef9da1c1Dan Sandler        mAppRow = NotificationAppList.loadAppRow(pm, info.applicationInfo, mBackend);
147802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (intent.hasExtra(EXTRA_HAS_SETTINGS_INTENT)) {
148802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            // use settings intent from extra
149802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            if (intent.getBooleanExtra(EXTRA_HAS_SETTINGS_INTENT, false)) {
150802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                mAppRow.settingsIntent = intent.getParcelableExtra(EXTRA_SETTINGS_INTENT);
15181bef1d74568d623b9db3c5409740dc21c0bbc08John Spurlock            }
152802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        } else {
153802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            // load settings intent
154802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            ArrayMap<String, AppRow> rows = new ArrayMap<String, AppRow>();
155802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            rows.put(mAppRow.pkg, mAppRow);
156802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            NotificationAppList.collectConfigActivities(getPackageManager(), rows);
157802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        }
158802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
159802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mBlock.setChecked(mAppRow.banned);
160802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mPriority.setChecked(mAppRow.priority);
161f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren        if (mSensitive != null) {
162f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren            mSensitive.setChecked(mAppRow.sensitive);
163f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren        }
164802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock
165802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mBlock.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
166802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            @Override
167802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            public boolean onPreferenceChange(Preference preference, Object newValue) {
168802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                final boolean block = (Boolean) newValue;
169802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                return mBackend.setNotificationsBanned(pkg, uid, block);
1704a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock            }
171802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        });
1724a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
173802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        mPriority.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
174802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            @Override
175802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            public boolean onPreferenceChange(Preference preference, Object newValue) {
176802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                final boolean priority = (Boolean) newValue;
177802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                return mBackend.setHighPriority(pkg, uid, priority);
178802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            }
179802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        });
1804a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
181f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren        if (mSensitive != null) {
182f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren            mSensitive.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
183f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren                @Override
184f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren                public boolean onPreferenceChange(Preference preference, Object newValue) {
185f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren                    final boolean sensitive = (Boolean) newValue;
186f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren                    return mBackend.setSensitive(pkg, uid, sensitive);
187f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren                }
188f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren            });
189f48249a3b8bd5f26a80208570bbecb7b564c269fChris Wren        }
190d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler
191d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler        // Users cannot block notifications from system/signature packages
192d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler        if (Utils.isSystemPackage(pm, info)) {
193d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler            getPreferenceScreen().removePreference(mBlock);
194d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler            mPriority.setDependency(null); // don't have it depend on a preference that's gone
195d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler        }
1964a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock    }
1974a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock
1983d903185c792623a1e122f047adc0725db7ea01eChris Wren    private boolean getLockscreenNotificationsEnabled() {
1993d903185c792623a1e122f047adc0725db7ea01eChris Wren        return Settings.Secure.getInt(getContentResolver(),
2003d903185c792623a1e122f047adc0725db7ea01eChris Wren                Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 0) != 0;
2013d903185c792623a1e122f047adc0725db7ea01eChris Wren    }
2023d903185c792623a1e122f047adc0725db7ea01eChris Wren
2033d903185c792623a1e122f047adc0725db7ea01eChris Wren    private boolean getLockscreenAllowPrivateNotifications() {
2043d903185c792623a1e122f047adc0725db7ea01eChris Wren        return Settings.Secure.getInt(getContentResolver(),
2053d903185c792623a1e122f047adc0725db7ea01eChris Wren                Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0) != 0;
2063d903185c792623a1e122f047adc0725db7ea01eChris Wren    }
2073d903185c792623a1e122f047adc0725db7ea01eChris Wren
208802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private void toastAndFinish() {
209802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        Toast.makeText(mContext, R.string.app_not_found_dlg_text, Toast.LENGTH_SHORT).show();
210802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        getActivity().finish();
211b8ec34346495245043933ac0f1b78781ae5054dbJohn Spurlock    }
212b8ec34346495245043933ac0f1b78781ae5054dbJohn Spurlock
213802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock    private static PackageInfo findPackageInfo(PackageManager pm, String pkg, int uid) {
214802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        final String[] packages = pm.getPackagesForUid(uid);
215802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        if (packages != null && pkg != null) {
216802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock            final int N = packages.length;
2174a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock            for (int i = 0; i < N; i++) {
218802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                final String p = packages[i];
219802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                if (pkg.equals(p)) {
220802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                    try {
221d283f0fbd5e20265646eabba9a72be8c14151c2dDan Sandler                        return pm.getPackageInfo(pkg, PackageManager.GET_SIGNATURES);
222802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                    } catch (NameNotFoundException e) {
223802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                        Log.w(TAG, "Failed to load package " + pkg, e);
224802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock                    }
2254a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock                }
2264a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock            }
2274a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock        }
228802ddf99f57e316d0fd87c2cfeed5dc3a0cfa8feJohn Spurlock        return null;
2294a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock    }
2304a35051565b0ce6d29313c3e4ffe19e1dde78db0John Spurlock}
231