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.car.audio;
18 
19 import static com.google.common.truth.Truth.assertWithMessage;
20 
21 import static org.mockito.ArgumentMatchers.any;
22 import static org.mockito.ArgumentMatchers.anyInt;
23 import static org.mockito.Mockito.when;
24 
25 import android.car.media.CarAudioManager;
26 import android.car.settings.CarSettings;
27 import android.car.test.mocks.AbstractExtendedMockitoTestCase;
28 import android.car.test.mocks.MockSettings;
29 import android.content.ContentResolver;
30 import android.content.Context;
31 
32 import androidx.test.ext.junit.runners.AndroidJUnit4;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.mockito.Mock;
38 
39 @RunWith(AndroidJUnit4.class)
40 public class CarAudioSettingsUnitTest extends AbstractExtendedMockitoTestCase {
41 
42     private static final int TEST_USER_ID_1 = 11;
43     private static final int TEST_ZONE_ID = CarAudioManager.PRIMARY_AUDIO_ZONE;
44     private static final int TEST_CONFIG_ID = 1;
45     private static final int TEST_GROUP_ID = 0;
46     private static final int TEST_GAIN_INDEX = 10;
47     private static final String TEST_GAIN_INDEX_KEY = "android.car.VOLUME_GROUP/" + TEST_ZONE_ID
48             + "/" + TEST_CONFIG_ID + "/" + TEST_GROUP_ID;
49     private static final String TEST_MUTE_KEY = "android.car.VOLUME_GROUP_MUTE/" + TEST_ZONE_ID
50             + "/" + TEST_CONFIG_ID + "/" + TEST_GROUP_ID;
51 
52     @Mock
53     private Context mMockContext;
54 
55     @Mock
56     private ContentResolver mMockContentResolver;
57 
58     private CarAudioSettings mCarAudioSettings;
59 
60     private MockSettings mMockSettings;
61 
CarAudioSettingsUnitTest()62     public CarAudioSettingsUnitTest() {
63         super(NO_LOG_TAGS);
64     }
65 
66     @Override
onSessionBuilder(CustomMockitoSessionBuilder session)67     protected void onSessionBuilder(CustomMockitoSessionBuilder session) {
68         mMockSettings = new MockSettings(session);
69     }
70 
71     @Before
setUp()72     public void setUp() {
73         when(mMockContext.getContentResolver()).thenReturn(mMockContentResolver);
74         when(mMockContext.createContextAsUser(any(), anyInt())).thenReturn(mMockContext);
75         mCarAudioSettings = new CarAudioSettings(mMockContext);
76     }
77 
78     @Test
isRejectNavigationOnCallEnabledInSettings_whenSetToNotToReject_returnsFalse()79     public void isRejectNavigationOnCallEnabledInSettings_whenSetToNotToReject_returnsFalse() {
80         setRejectNavigationOnCallSettingsValues(0);
81 
82         assertWithMessage("Reject Navigation On Call Setting for userId %s",
83                 TEST_USER_ID_1).that(mCarAudioSettings
84                 .isRejectNavigationOnCallEnabledInSettings(TEST_USER_ID_1)).isFalse();
85     }
86 
87     @Test
isRejectNavigationOnCallEnabledInSettings_whenSetToToReject_returnsTrue()88     public void isRejectNavigationOnCallEnabledInSettings_whenSetToToReject_returnsTrue() {
89         setRejectNavigationOnCallSettingsValues(1);
90 
91         assertWithMessage("Reject Navigation On Call Setting for userId %s",
92                 TEST_USER_ID_1).that(mCarAudioSettings
93                 .isRejectNavigationOnCallEnabledInSettings(TEST_USER_ID_1)).isTrue();
94     }
95 
96     @Test
getStoredVolumeGainIndexForUser_returnsSavedValue()97     public void getStoredVolumeGainIndexForUser_returnsSavedValue() {
98         setStoredVolumeGainIndexForUser(TEST_GAIN_INDEX);
99 
100         assertWithMessage("Volume Group Gain for userId %s, zoneId %s, and groupId %s",
101                 TEST_USER_ID_1, TEST_ZONE_ID, TEST_USER_ID_1).that(mCarAudioSettings
102                 .getStoredVolumeGainIndexForUser(TEST_USER_ID_1, TEST_ZONE_ID, TEST_CONFIG_ID,
103                         TEST_GROUP_ID)).isEqualTo(TEST_GAIN_INDEX);
104     }
105 
106     @Test
storedVolumeGainIndexForUser_savesValue()107     public void storedVolumeGainIndexForUser_savesValue() {
108         mCarAudioSettings.storeVolumeGainIndexForUser(TEST_USER_ID_1, TEST_ZONE_ID, TEST_CONFIG_ID,
109                 TEST_GROUP_ID, TEST_GAIN_INDEX);
110 
111         assertWithMessage("Volume Gain Setting Stored for userId %s, zoneId %s, and groupId %s",
112                 TEST_USER_ID_1, TEST_ZONE_ID, TEST_USER_ID_1)
113                 .that(mMockSettings.getInt(TEST_GAIN_INDEX_KEY)).isEqualTo(TEST_GAIN_INDEX);
114     }
115 
116     @Test
storeVolumeGroupMuteForUser_withUnMutedState_savesValue()117     public void storeVolumeGroupMuteForUser_withUnMutedState_savesValue() {
118         mCarAudioSettings.storeVolumeGroupMuteForUser(TEST_USER_ID_1, TEST_ZONE_ID, TEST_CONFIG_ID,
119                 TEST_GROUP_ID, /* isMuted= */ false);
120 
121         assertWithMessage("Volume Group Setting Stored for userId %s, zoneId %s, and groupId %s",
122                 TEST_USER_ID_1, TEST_ZONE_ID, TEST_USER_ID_1)
123                 .that(mMockSettings.getInt(TEST_MUTE_KEY)).isEqualTo(0);
124     }
125 
126     @Test
storeVolumeGroupMuteForUser_withMutedState_savesValue()127     public void storeVolumeGroupMuteForUser_withMutedState_savesValue() {
128         mCarAudioSettings.storeVolumeGroupMuteForUser(TEST_USER_ID_1, TEST_ZONE_ID, TEST_CONFIG_ID,
129                 TEST_GROUP_ID, /* isMuted= */ true);
130 
131         assertWithMessage("Volume Group Setting Stored for userId %s, zoneId %s, and groupId %s",
132                 TEST_USER_ID_1, TEST_ZONE_ID, TEST_USER_ID_1)
133                 .that(mMockSettings.getInt(TEST_MUTE_KEY)).isEqualTo(1);
134     }
135 
136     @Test
getVolumeGroupMuteForUser_withUnMutedState_returnsFalse()137     public void getVolumeGroupMuteForUser_withUnMutedState_returnsFalse() {
138         setStoredVolumeMuteForUser(0);
139 
140         boolean muteState = mCarAudioSettings.getVolumeGroupMuteForUser(TEST_USER_ID_1,
141                 TEST_ZONE_ID, TEST_CONFIG_ID, TEST_GROUP_ID);
142 
143         assertWithMessage("Mute State for userId %s, zoneId %s, and groupId %s",
144                 TEST_USER_ID_1, TEST_ZONE_ID, TEST_USER_ID_1)
145                 .that(muteState).isEqualTo(false);
146     }
147 
148     @Test
getVolumeGroupMuteForUser_withMutedState_returnsTrue()149     public void getVolumeGroupMuteForUser_withMutedState_returnsTrue() {
150         setStoredVolumeMuteForUser(1);
151 
152         boolean muteState = mCarAudioSettings.getVolumeGroupMuteForUser(TEST_USER_ID_1,
153                 TEST_ZONE_ID, TEST_CONFIG_ID, TEST_GROUP_ID);
154 
155         assertWithMessage("Mute State for userId %s, zoneId %s, and groupId %s",
156                 TEST_USER_ID_1, TEST_ZONE_ID, TEST_USER_ID_1)
157                 .that(muteState).isEqualTo(true);
158     }
159 
160     @Test
isPersistVolumeGroupMuteEnabled_whenSetToNotToDisabled_returnsFalse()161     public void isPersistVolumeGroupMuteEnabled_whenSetToNotToDisabled_returnsFalse() {
162         setPersistVolumeGroupMuteSettingsValues(0);
163 
164         assertWithMessage("Persist volume group mute for userId %s",
165                 TEST_USER_ID_1).that(mCarAudioSettings
166                 .isPersistVolumeGroupMuteEnabled(TEST_USER_ID_1)).isFalse();
167     }
168 
169     @Test
isPersistVolumeGroupMuteEnabled_whenSetToToEnabled_returnsTrue()170     public void isPersistVolumeGroupMuteEnabled_whenSetToToEnabled_returnsTrue() {
171         setPersistVolumeGroupMuteSettingsValues(1);
172 
173         assertWithMessage("Persist volume group mute for userId %s",
174                 TEST_USER_ID_1).that(mCarAudioSettings
175                 .isPersistVolumeGroupMuteEnabled(TEST_USER_ID_1)).isTrue();
176     }
177 
setStoredVolumeGainIndexForUser(int gainIndexForUser)178     private void setStoredVolumeGainIndexForUser(int gainIndexForUser) {
179         mMockSettings.putInt(TEST_GAIN_INDEX_KEY, gainIndexForUser);
180     }
181 
setStoredVolumeMuteForUser(int volumeSetting)182     private void setStoredVolumeMuteForUser(int volumeSetting) {
183         mMockSettings.putInt(TEST_MUTE_KEY, volumeSetting);
184     }
185 
setRejectNavigationOnCallSettingsValues(int settingsValue)186     private void setRejectNavigationOnCallSettingsValues(int settingsValue) {
187         mMockSettings.putInt(CarSettings.Secure.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL,
188                 settingsValue);
189     }
190 
setPersistVolumeGroupMuteSettingsValues(int persistMuteSetting)191     private void setPersistVolumeGroupMuteSettingsValues(int persistMuteSetting) {
192         mMockSettings.putInt(CarSettings.Secure.KEY_AUDIO_PERSIST_VOLUME_GROUP_MUTE_STATES,
193                 persistMuteSetting);
194     }
195 }
196