• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 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 package com.android.settings.bluetooth;
17 
18 import android.bluetooth.BluetoothProfile;
19 import android.bluetooth.BluetoothDevice;
20 import android.content.Context;
21 import android.media.AudioManager;
22 
23 import com.android.settings.connecteddevice.DevicePreferenceCallback;
24 import com.android.settings.dashboard.DashboardFragment;
25 import com.android.settings.testutils.SettingsRobolectricTestRunner;
26 
27 import com.android.settings.testutils.shadow.ShadowAudioManager;
28 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
29 import com.android.settingslib.bluetooth.HeadsetProfile;
30 import com.android.settingslib.bluetooth.LocalBluetoothManager;
31 import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
32 import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
33 
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.junit.runner.RunWith;
37 import org.mockito.Mock;
38 import org.mockito.MockitoAnnotations;
39 import org.robolectric.RuntimeEnvironment;
40 import org.robolectric.annotation.Config;
41 
42 import java.util.ArrayList;
43 import java.util.Collection;
44 
45 import static org.mockito.Matchers.any;
46 import static org.mockito.Mockito.doNothing;
47 import static org.mockito.Mockito.doReturn;
48 import static org.mockito.Mockito.spy;
49 import static org.mockito.Mockito.verify;
50 import static org.mockito.Mockito.when;
51 
52 @RunWith(SettingsRobolectricTestRunner.class)
53 @Config(shadows = {ShadowAudioManager.class})
54 public class AvailableMediaBluetoothDeviceUpdaterTest {
55     @Mock
56     private DashboardFragment mDashboardFragment;
57     @Mock
58     private DevicePreferenceCallback mDevicePreferenceCallback;
59     @Mock
60     private CachedBluetoothDevice mCachedBluetoothDevice;
61     @Mock
62     private BluetoothDevice mBluetoothDevice;
63     @Mock
64     private LocalBluetoothManager mLocalManager;
65     @Mock
66     private LocalBluetoothProfileManager mLocalBluetoothProfileManager;
67     @Mock
68     private HeadsetProfile mHeadsetProfile;
69     @Mock
70     private CachedBluetoothDeviceManager mCachedDeviceManager;
71 
72     private Context mContext;
73     private AvailableMediaBluetoothDeviceUpdater mBluetoothDeviceUpdater;
74     private Collection<CachedBluetoothDevice> cachedDevices;
75     private ShadowAudioManager mShadowAudioManager;
76     private BluetoothDevicePreference mPreference;
77 
78     @Before
setUp()79     public void setUp() {
80         MockitoAnnotations.initMocks(this);
81 
82         mShadowAudioManager = ShadowAudioManager.getShadow();
83         mContext = RuntimeEnvironment.application;
84         doReturn(mContext).when(mDashboardFragment).getContext();
85         cachedDevices =
86                 new ArrayList<CachedBluetoothDevice>(new ArrayList<CachedBluetoothDevice>());
87 
88         when(mCachedBluetoothDevice.getDevice()).thenReturn(mBluetoothDevice);
89         when(mLocalManager.getProfileManager()).thenReturn(mLocalBluetoothProfileManager);
90         when(mLocalBluetoothProfileManager.getHeadsetProfile()).thenReturn(mHeadsetProfile);
91         when(mLocalManager.getCachedDeviceManager()).thenReturn(mCachedDeviceManager);
92         when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(cachedDevices);
93 
94         mBluetoothDeviceUpdater = spy(new AvailableMediaBluetoothDeviceUpdater(mDashboardFragment,
95                 mDevicePreferenceCallback, mLocalManager));
96         mBluetoothDeviceUpdater.setPrefContext(mContext);
97         mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false);
98         doNothing().when(mBluetoothDeviceUpdater).addPreference(any());
99         doNothing().when(mBluetoothDeviceUpdater).removePreference(any());
100     }
101 
102     @Test
onAudioModeChanged_hfpDeviceConnected_inCall_addPreference()103     public void onAudioModeChanged_hfpDeviceConnected_inCall_addPreference() {
104         mShadowAudioManager.setMode(AudioManager.MODE_IN_CALL);
105         when(mBluetoothDeviceUpdater.
106                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
107         when(mCachedBluetoothDevice.isHfpDevice()).thenReturn(true);
108         cachedDevices.add(mCachedBluetoothDevice);
109 
110         mBluetoothDeviceUpdater.onAudioModeChanged();
111 
112         verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
113     }
114 
115     @Test
onAudioModeChanged_hfpDeviceConnected_notInCall_removePreference()116     public void onAudioModeChanged_hfpDeviceConnected_notInCall_removePreference() {
117         mShadowAudioManager.setMode(AudioManager.MODE_NORMAL);
118         when(mBluetoothDeviceUpdater.
119                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
120         when(mCachedBluetoothDevice.isHfpDevice()).thenReturn(true);
121         cachedDevices.add(mCachedBluetoothDevice);
122 
123         mBluetoothDeviceUpdater.onAudioModeChanged();
124 
125         verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
126     }
127 
128     @Test
onAudioModeChanged_a2dpDeviceConnected_inCall_removePreference()129     public void onAudioModeChanged_a2dpDeviceConnected_inCall_removePreference() {
130         mShadowAudioManager.setMode(AudioManager.MODE_IN_CALL);
131         when(mBluetoothDeviceUpdater.
132                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
133         when(mCachedBluetoothDevice.isA2dpDevice()).thenReturn(true);
134         cachedDevices.add(mCachedBluetoothDevice);
135 
136         mBluetoothDeviceUpdater.onAudioModeChanged();
137 
138         verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
139     }
140 
141     @Test
onAudioModeChanged_a2dpDeviceConnected_notInCall_addPreference()142     public void onAudioModeChanged_a2dpDeviceConnected_notInCall_addPreference() {
143         mShadowAudioManager.setMode(AudioManager.MODE_NORMAL);
144         when(mBluetoothDeviceUpdater.
145                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
146         when(mCachedBluetoothDevice.isA2dpDevice()).thenReturn(true);
147         cachedDevices.add(mCachedBluetoothDevice);
148 
149         mBluetoothDeviceUpdater.onAudioModeChanged();
150 
151         verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
152     }
153 
154     @Test
onProfileConnectionStateChanged_a2dpDeviceConnected_notInCall_addPreference()155     public void onProfileConnectionStateChanged_a2dpDeviceConnected_notInCall_addPreference() {
156         mShadowAudioManager.setMode(AudioManager.MODE_NORMAL);
157         when(mBluetoothDeviceUpdater.
158                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
159         when(mCachedBluetoothDevice.isA2dpDevice()).thenReturn(true);
160 
161         mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
162                 BluetoothProfile.STATE_CONNECTED, BluetoothProfile.A2DP);
163 
164         verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
165     }
166 
167     @Test
onProfileConnectionStateChanged_a2dpDeviceConnected_inCall_removePreference()168     public void onProfileConnectionStateChanged_a2dpDeviceConnected_inCall_removePreference() {
169         mShadowAudioManager.setMode(AudioManager.MODE_IN_CALL);
170         when(mBluetoothDeviceUpdater.
171                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
172         when(mCachedBluetoothDevice.isA2dpDevice()).thenReturn(true);
173 
174         mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
175                 BluetoothProfile.STATE_CONNECTED, BluetoothProfile.A2DP);
176 
177         verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
178     }
179 
180     @Test
onProfileConnectionStateChanged_hfpDeviceConnected_notInCall_removePreference()181     public void onProfileConnectionStateChanged_hfpDeviceConnected_notInCall_removePreference() {
182         mShadowAudioManager.setMode(AudioManager.MODE_NORMAL);
183         when(mBluetoothDeviceUpdater.
184                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
185         when(mCachedBluetoothDevice.isHfpDevice()).thenReturn(true);
186 
187         mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
188                 BluetoothProfile.STATE_CONNECTED, BluetoothProfile.A2DP);
189 
190         verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
191     }
192 
193     @Test
onProfileConnectionStateChanged_hfpDeviceConnected_inCall_addPreference()194     public void onProfileConnectionStateChanged_hfpDeviceConnected_inCall_addPreference() {
195         mShadowAudioManager.setMode(AudioManager.MODE_IN_CALL);
196         when(mBluetoothDeviceUpdater.
197                 isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
198         when(mCachedBluetoothDevice.isHfpDevice()).thenReturn(true);
199 
200         mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
201                 BluetoothProfile.STATE_CONNECTED, BluetoothProfile.A2DP);
202 
203         verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
204     }
205 
206     @Test
onProfileConnectionStateChanged_deviceDisconnected_removePreference()207     public void onProfileConnectionStateChanged_deviceDisconnected_removePreference() {
208         mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
209                 BluetoothProfile.STATE_DISCONNECTED, BluetoothProfile.A2DP);
210 
211         verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
212     }
213 
214     @Test
onClick_Preference_setActive()215     public void onClick_Preference_setActive() {
216         mBluetoothDeviceUpdater.onPreferenceClick(mPreference);
217 
218         verify(mCachedBluetoothDevice).setActive();
219     }
220 }
221 
222