blob: a46f1646113389802333388c760d79b2f766ca03 [file] [log] [blame]
Fabian Kozynski01b2a632019-02-20 12:55:10 -05001/*
2 * Copyright (C) 2019 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
17package com.android.settings.notification;
18
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050019import android.content.ComponentName;
Fabian Kozynski01b2a632019-02-20 12:55:10 -050020import android.content.Context;
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050021import android.os.UserHandle;
Chloris Kuod37f0fa2021-04-16 15:20:30 -070022import android.os.UserManager;
Chloris Kuo2c955bb2021-03-19 07:00:45 -070023import android.provider.Settings;
Fabian Kozynski01b2a632019-02-20 12:55:10 -050024
Chloris Kuo2c955bb2021-03-19 07:00:45 -070025import androidx.fragment.app.Fragment;
26
27import com.android.settings.core.TogglePreferenceController;
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050028
29import com.google.common.annotations.VisibleForTesting;
Fabian Kozynski01b2a632019-02-20 12:55:10 -050030
Chloris Kuo2c955bb2021-03-19 07:00:45 -070031public class NotificationAssistantPreferenceController extends TogglePreferenceController {
32 private static final String TAG = "NASPreferenceController";
33 private static final int AVAILABLE = 1;
Chloris Kuod37f0fa2021-04-16 15:20:30 -070034 private final UserManager mUserManager;
Chloris Kuo2c955bb2021-03-19 07:00:45 -070035 private Fragment mFragment;
36 private int mUserId = UserHandle.myUserId();
Fabian Kozynski01b2a632019-02-20 12:55:10 -050037
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050038 @VisibleForTesting
39 protected NotificationBackend mNotificationBackend;
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050040
Chloris Kuo2c955bb2021-03-19 07:00:45 -070041 public NotificationAssistantPreferenceController(Context context, NotificationBackend backend,
42 Fragment fragment, String preferenceKey) {
Fabian Kozynski01b2a632019-02-20 12:55:10 -050043 super(context, preferenceKey);
Chloris Kuo2c955bb2021-03-19 07:00:45 -070044 mNotificationBackend = backend;
45 mFragment = fragment;
Chloris Kuod37f0fa2021-04-16 15:20:30 -070046 mUserManager = UserManager.get(context);
Fabian Kozynski01b2a632019-02-20 12:55:10 -050047 }
48
49 @Override
50 public int getAvailabilityStatus() {
Chloris Kuo2c955bb2021-03-19 07:00:45 -070051 return AVAILABLE;
Fabian Kozynski01b2a632019-02-20 12:55:10 -050052 }
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050053
54 @Override
Chloris Kuo2c955bb2021-03-19 07:00:45 -070055 public boolean isChecked() {
56 ComponentName acn = mNotificationBackend.getAllowedNotificationAssistant();
57 ComponentName dcn = mNotificationBackend.getDefaultNotificationAssistant();
58 return (acn != null && acn.equals(dcn));
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050059 }
60
Chloris Kuo2c955bb2021-03-19 07:00:45 -070061 @Override
62 public boolean setChecked(boolean isChecked) {
63 ComponentName cn = isChecked
64 ? mNotificationBackend.getDefaultNotificationAssistant() : null;
65 if (isChecked) {
66 if (mFragment == null) {
67 throw new IllegalStateException("No fragment to start activity");
68 }
69 showDialog(cn);
70 return false;
71 } else {
72 setNotificationAssistantGranted(null);
73 return true;
74 }
Fabian Kozynskid565d7a2019-02-25 15:52:40 -050075 }
Chloris Kuo2c955bb2021-03-19 07:00:45 -070076
77 protected void setNotificationAssistantGranted(ComponentName cn) {
78 if (Settings.Secure.getIntForUser(mContext.getContentResolver(),
79 Settings.Secure.NAS_SETTINGS_UPDATED, 0, mUserId) == 0) {
Chloris Kuof06f2892021-04-20 19:03:56 -070080 mNotificationBackend.setNASMigrationDoneAndResetDefault(mUserId, cn != null);
Chloris Kuo2c955bb2021-03-19 07:00:45 -070081 }
82 mNotificationBackend.setNotificationAssistantGranted(cn);
83 }
84
85 protected void showDialog(ComponentName cn) {
86 NotificationAssistantDialogFragment dialogFragment =
87 NotificationAssistantDialogFragment.newInstance(mFragment, cn);
88 dialogFragment.show(mFragment.getFragmentManager(), TAG);
89 }
90}