blob: 09d8ecc102d114705afbbc8e0dfee4cf3afa1ea5 [file] [log] [blame]
Doris Ling1b3ec042016-11-30 17:33:50 -08001/*
2 * Copyright (C) 2016 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
19import android.app.NotificationManager;
20import android.content.BroadcastReceiver;
Doris Ling1b3ec042016-11-30 17:33:50 -080021import android.content.Context;
22import android.content.Intent;
23import android.content.IntentFilter;
Doris Ling1b3ec042016-11-30 17:33:50 -080024import android.media.AudioManager;
25import android.os.Handler;
26import android.os.Looper;
27import android.os.Message;
Behnam Heydarshahi3ac6aaf2022-09-06 22:12:37 +000028import android.service.notification.NotificationListenerService;
Doris Ling1b3ec042016-11-30 17:33:50 -080029
Fan Zhang23f8d592018-08-28 15:11:40 -070030import androidx.lifecycle.OnLifecycleEvent;
31
Fan Zhang8878a952018-03-26 17:37:47 -070032import com.android.settings.R;
Julia Reynolds0ddba4c2018-04-17 09:11:43 -040033import com.android.settingslib.core.lifecycle.Lifecycle;
Doris Ling1b3ec042016-11-30 17:33:50 -080034
Behnam Heydarshahi3ac6aaf2022-09-06 22:12:37 +000035/**
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000036 * This slider represents both ring and notification
Behnam Heydarshahi3ac6aaf2022-09-06 22:12:37 +000037 */
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000038public class RingVolumePreferenceController extends
39 RingerModeAffectedVolumePreferenceController {
Doris Ling1b3ec042016-11-30 17:33:50 -080040
Doris Ling1b3ec042016-11-30 17:33:50 -080041 private static final String KEY_RING_VOLUME = "ring_volume";
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000042 private static final String TAG = "RingVolumePreferenceController";
Doris Ling1b3ec042016-11-30 17:33:50 -080043
Doris Ling1b3ec042016-11-30 17:33:50 -080044 private final RingReceiver mReceiver = new RingReceiver();
45 private final H mHandler = new H();
Doris Ling1b3ec042016-11-30 17:33:50 -080046
Julia Reynolds56063792018-04-03 13:48:55 -040047 public RingVolumePreferenceController(Context context) {
48 this(context, KEY_RING_VOLUME);
Doris Ling1b3ec042016-11-30 17:33:50 -080049 }
50
Julia Reynolds56063792018-04-03 13:48:55 -040051 public RingVolumePreferenceController(Context context, String key) {
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000052 super(context, key, TAG);
Doris Ling1b3ec042016-11-30 17:33:50 -080053
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000054 mNormalIconId = R.drawable.ic_notifications;
Behnam Heydarshahi2ac6fc52022-10-12 15:08:22 +000055 mVibrateIconId = R.drawable.ic_volume_ringer_vibrate;
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000056 mSilentIconId = R.drawable.ic_notifications_off_24dp;
57
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000058 updateRingerMode();
Behnam Heydarshahi2ac6fc52022-10-12 15:08:22 +000059 }
60
Julia Reynolds0ddba4c2018-04-17 09:11:43 -040061 @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
Doris Ling1b3ec042016-11-30 17:33:50 -080062 @Override
63 public void onResume() {
64 super.onResume();
65 mReceiver.register(true);
66 updateEffectsSuppressor();
Behnam Heydarshahi2ac6fc52022-10-12 15:08:22 +000067 selectPreferenceIconState();
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000068
69 if (mPreference != null) {
70 mPreference.setVisible(getAvailabilityStatus() == AVAILABLE);
71 }
Doris Ling1b3ec042016-11-30 17:33:50 -080072 }
73
Julia Reynolds0ddba4c2018-04-17 09:11:43 -040074 @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
Doris Ling1b3ec042016-11-30 17:33:50 -080075 @Override
76 public void onPause() {
77 super.onPause();
78 mReceiver.register(false);
79 }
80
81 @Override
82 public String getPreferenceKey() {
83 return KEY_RING_VOLUME;
84 }
85
86 @Override
Julia Reynolds56063792018-04-03 13:48:55 -040087 public int getAvailabilityStatus() {
Behnam Heydarshahif07e0232023-05-15 15:15:33 +000088 return UNSUPPORTED_ON_DEVICE;
Doris Ling1b3ec042016-11-30 17:33:50 -080089 }
90
91 @Override
92 public int getAudioStream() {
93 return AudioManager.STREAM_RING;
94 }
95
96 @Override
Behnam Heydarshahi4f87dd42022-12-15 21:51:13 +000097 protected boolean hintsMatch(int hints) {
Behnam Heydarshahi3ac6aaf2022-09-06 22:12:37 +000098 return (hints & NotificationListenerService.HINT_HOST_DISABLE_CALL_EFFECTS) != 0
Behnam Heydarshahif07e0232023-05-15 15:15:33 +000099 || (hints & NotificationListenerService.HINT_HOST_DISABLE_EFFECTS) != 0;
Behnam Heydarshahi3ac6aaf2022-09-06 22:12:37 +0000100 }
101
Doris Ling1b3ec042016-11-30 17:33:50 -0800102 private final class H extends Handler {
103 private static final int UPDATE_EFFECTS_SUPPRESSOR = 1;
104 private static final int UPDATE_RINGER_MODE = 2;
105
106 private H() {
107 super(Looper.getMainLooper());
108 }
109
110 @Override
111 public void handleMessage(Message msg) {
112 switch (msg.what) {
113 case UPDATE_EFFECTS_SUPPRESSOR:
114 updateEffectsSuppressor();
115 break;
116 case UPDATE_RINGER_MODE:
117 updateRingerMode();
118 break;
119 }
120 }
121 }
122
123 private class RingReceiver extends BroadcastReceiver {
124 private boolean mRegistered;
125
126 public void register(boolean register) {
127 if (mRegistered == register) return;
128 if (register) {
129 final IntentFilter filter = new IntentFilter();
130 filter.addAction(NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED);
131 filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION);
132 mContext.registerReceiver(this, filter);
133 } else {
134 mContext.unregisterReceiver(this);
135 }
136 mRegistered = register;
137 }
138
139 @Override
140 public void onReceive(Context context, Intent intent) {
141 final String action = intent.getAction();
142 if (NotificationManager.ACTION_EFFECTS_SUPPRESSOR_CHANGED.equals(action)) {
143 mHandler.sendEmptyMessage(H.UPDATE_EFFECTS_SUPPRESSOR);
144 } else if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) {
145 mHandler.sendEmptyMessage(H.UPDATE_RINGER_MODE);
146 }
147 }
148 }
149
150}