1 /*
2  * Copyright (C) 2020 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.systemui.qs.tiles;
18 
19 import static android.hardware.SensorPrivacyManager.Sensors.MICROPHONE;
20 import static android.os.UserManager.DISALLOW_MICROPHONE_TOGGLE;
21 
22 import static com.android.systemui.DejankUtils.whitelistIpcs;
23 
24 import android.hardware.SensorPrivacyManager.Sensors.Sensor;
25 import android.os.Handler;
26 import android.os.Looper;
27 import android.provider.DeviceConfig;
28 
29 import androidx.annotation.DrawableRes;
30 import androidx.annotation.NonNull;
31 
32 import com.android.internal.logging.MetricsLogger;
33 import com.android.systemui.R;
34 import com.android.systemui.dagger.qualifiers.Background;
35 import com.android.systemui.dagger.qualifiers.Main;
36 import com.android.systemui.plugins.ActivityStarter;
37 import com.android.systemui.plugins.FalsingManager;
38 import com.android.systemui.plugins.statusbar.StatusBarStateController;
39 import com.android.systemui.qs.QSHost;
40 import com.android.systemui.qs.QsEventLogger;
41 import com.android.systemui.qs.logging.QSLogger;
42 import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController;
43 import com.android.systemui.statusbar.policy.KeyguardStateController;
44 
45 import javax.inject.Inject;
46 
47 public class MicrophoneToggleTile extends SensorPrivacyToggleTile {
48 
49     public static final String TILE_SPEC = "mictoggle";
50 
51     @Inject
MicrophoneToggleTile( QSHost host, QsEventLogger uiEventLogger, @Background Looper backgroundLooper, @Main Handler mainHandler, MetricsLogger metricsLogger, FalsingManager falsingManager, StatusBarStateController statusBarStateController, ActivityStarter activityStarter, QSLogger qsLogger, IndividualSensorPrivacyController sensorPrivacyController, KeyguardStateController keyguardStateController)52     protected MicrophoneToggleTile(
53             QSHost host,
54             QsEventLogger uiEventLogger,
55             @Background Looper backgroundLooper,
56             @Main Handler mainHandler,
57             MetricsLogger metricsLogger,
58             FalsingManager falsingManager,
59             StatusBarStateController statusBarStateController,
60             ActivityStarter activityStarter,
61             QSLogger qsLogger,
62             IndividualSensorPrivacyController sensorPrivacyController,
63             KeyguardStateController keyguardStateController) {
64         super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
65                 statusBarStateController, activityStarter, qsLogger, sensorPrivacyController,
66                 keyguardStateController);
67     }
68 
69     @Override
isAvailable()70     public boolean isAvailable() {
71         return mSensorPrivacyController.supportsSensorToggle(MICROPHONE)
72                 && whitelistIpcs(() -> DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
73                 "mic_toggle_enabled",
74                 true));
75     }
76 
77     @Override
getIconRes(boolean isBlocked)78     public @DrawableRes int getIconRes(boolean isBlocked) {
79         if (isBlocked) {
80             return R.drawable.qs_mic_access_off;
81         } else {
82             return R.drawable.qs_mic_access_on;
83         }
84     }
85 
86     @Override
getTileLabel()87     public @NonNull CharSequence getTileLabel() {
88         return mContext.getString(R.string.quick_settings_mic_label);
89     }
90 
91     @Override
getSensorId()92     public @Sensor int getSensorId() {
93         return MICROPHONE;
94     }
95 
96     @Override
getRestriction()97     public String getRestriction() {
98         return DISALLOW_MICROPHONE_TOGGLE;
99     }
100 }
101