1 /* 2 * Copyright (C) 2017 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.settingslib; 17 18 import static com.android.settingslib.Utils.STORAGE_MANAGER_ENABLED_PROPERTY; 19 20 import static com.google.common.truth.Truth.assertThat; 21 22 import static org.mockito.ArgumentMatchers.eq; 23 import static org.mockito.Mockito.mock; 24 import static org.mockito.Mockito.spy; 25 import static org.mockito.Mockito.when; 26 27 import android.app.ActivityManager; 28 import android.content.Context; 29 import android.content.Intent; 30 import android.content.res.Resources; 31 import android.hardware.usb.UsbManager; 32 import android.hardware.usb.UsbPort; 33 import android.hardware.usb.UsbPortStatus; 34 import android.hardware.usb.flags.Flags; 35 import android.location.LocationManager; 36 import android.media.AudioManager; 37 import android.os.BatteryManager; 38 import android.os.SystemProperties; 39 import android.os.UserHandle; 40 import android.platform.test.flag.junit.SetFlagsRule; 41 import android.provider.Settings; 42 import android.telephony.AccessNetworkConstants; 43 import android.telephony.NetworkRegistrationInfo; 44 import android.telephony.ServiceState; 45 import android.text.TextUtils; 46 47 import org.junit.After; 48 import org.junit.Before; 49 import org.junit.Rule; 50 import org.junit.Test; 51 import org.junit.runner.RunWith; 52 import org.mockito.ArgumentMatcher; 53 import org.mockito.Mock; 54 import org.mockito.MockitoAnnotations; 55 import org.robolectric.RobolectricTestRunner; 56 import org.robolectric.RuntimeEnvironment; 57 import org.robolectric.annotation.Config; 58 import org.robolectric.annotation.Implementation; 59 import org.robolectric.annotation.Implements; 60 import org.robolectric.shadows.ShadowSettings; 61 62 import java.util.ArrayList; 63 import java.util.List; 64 65 @RunWith(RobolectricTestRunner.class) 66 @Config(shadows = {UtilsTest.ShadowLocationManager.class}) 67 public class UtilsTest { 68 private static final double[] TEST_PERCENTAGES = {0, 0.4, 0.5, 0.6, 49, 49.3, 49.8, 50, 100}; 69 private static final String TAG = "UtilsTest"; 70 private static final String PERCENTAGE_0 = "0%"; 71 private static final String PERCENTAGE_1 = "1%"; 72 private static final String PERCENTAGE_49 = "49%"; 73 private static final String PERCENTAGE_50 = "50%"; 74 private static final String PERCENTAGE_100 = "100%"; 75 76 private AudioManager mAudioManager; 77 private Context mContext; 78 @Mock private LocationManager mLocationManager; 79 @Mock private ServiceState mServiceState; 80 @Mock private NetworkRegistrationInfo mNetworkRegistrationInfo; 81 @Mock private UsbPort mUsbPort; 82 @Mock private UsbManager mUsbManager; 83 @Mock private UsbPortStatus mUsbPortStatus; 84 85 @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); 86 87 @Before setUp()88 public void setUp() { 89 MockitoAnnotations.initMocks(this); 90 mContext = spy(RuntimeEnvironment.application); 91 when(mContext.getSystemService(Context.LOCATION_SERVICE)).thenReturn(mLocationManager); 92 when(mContext.getSystemService(UsbManager.class)).thenReturn(mUsbManager); 93 ShadowSettings.ShadowSecure.reset(); 94 mAudioManager = mContext.getSystemService(AudioManager.class); 95 } 96 97 @After reset()98 public void reset() { 99 Settings.Secure.putInt( 100 mContext.getContentResolver(), Utils.INCOMPATIBLE_CHARGER_WARNING_DISABLED, 0); 101 } 102 103 @Test testUpdateLocationEnabled()104 public void testUpdateLocationEnabled() { 105 int currentUserId = ActivityManager.getCurrentUser(); 106 Utils.updateLocationEnabled( 107 mContext, true, currentUserId, Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS); 108 109 assertThat( 110 Settings.Secure.getInt( 111 mContext.getContentResolver(), 112 Settings.Secure.LOCATION_CHANGER, 113 Settings.Secure.LOCATION_CHANGER_UNKNOWN)) 114 .isEqualTo(Settings.Secure.LOCATION_CHANGER_QUICK_SETTINGS); 115 } 116 117 @Test testFormatPercentage_RoundTrue_RoundUpIfPossible()118 public void testFormatPercentage_RoundTrue_RoundUpIfPossible() { 119 final String[] expectedPercentages = { 120 PERCENTAGE_0, 121 PERCENTAGE_0, 122 PERCENTAGE_1, 123 PERCENTAGE_1, 124 PERCENTAGE_49, 125 PERCENTAGE_49, 126 PERCENTAGE_50, 127 PERCENTAGE_50, 128 PERCENTAGE_100 129 }; 130 131 for (int i = 0, size = TEST_PERCENTAGES.length; i < size; i++) { 132 final String percentage = Utils.formatPercentage(TEST_PERCENTAGES[i], true); 133 assertThat(percentage).isEqualTo(expectedPercentages[i]); 134 } 135 } 136 137 @Test testFormatPercentage_RoundFalse_NoRound()138 public void testFormatPercentage_RoundFalse_NoRound() { 139 final String[] expectedPercentages = { 140 PERCENTAGE_0, 141 PERCENTAGE_0, 142 PERCENTAGE_0, 143 PERCENTAGE_0, 144 PERCENTAGE_49, 145 PERCENTAGE_49, 146 PERCENTAGE_49, 147 PERCENTAGE_50, 148 PERCENTAGE_100 149 }; 150 151 for (int i = 0, size = TEST_PERCENTAGES.length; i < size; i++) { 152 final String percentage = Utils.formatPercentage(TEST_PERCENTAGES[i], false); 153 assertThat(percentage).isEqualTo(expectedPercentages[i]); 154 } 155 } 156 157 @Test testGetDefaultStorageManagerDaysToRetain_storageManagerDaysToRetainUsesResources()158 public void testGetDefaultStorageManagerDaysToRetain_storageManagerDaysToRetainUsesResources() { 159 Resources resources = mock(Resources.class); 160 when(resources.getInteger( 161 eq( 162 com.android.internal.R.integer 163 .config_storageManagerDaystoRetainDefault))) 164 .thenReturn(60); 165 assertThat(Utils.getDefaultStorageManagerDaysToRetain(resources)).isEqualTo(60); 166 } 167 168 @Test testIsStorageManagerEnabled_UsesSystemProperties()169 public void testIsStorageManagerEnabled_UsesSystemProperties() { 170 SystemProperties.set(STORAGE_MANAGER_ENABLED_PROPERTY, "true"); 171 assertThat(Utils.isStorageManagerEnabled(mContext)).isTrue(); 172 } 173 actionMatches(String expected)174 private static ArgumentMatcher<Intent> actionMatches(String expected) { 175 return intent -> TextUtils.equals(expected, intent.getAction()); 176 } 177 178 @Implements(value = LocationManager.class) 179 public static class ShadowLocationManager { 180 181 @Implementation setLocationEnabledForUser(boolean enabled, UserHandle userHandle)182 public void setLocationEnabledForUser(boolean enabled, UserHandle userHandle) { 183 // Do nothing 184 } 185 } 186 187 @Test isAudioModeOngoingCall_modeInCommunication_returnTrue()188 public void isAudioModeOngoingCall_modeInCommunication_returnTrue() { 189 mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); 190 191 assertThat(Utils.isAudioModeOngoingCall(mContext)).isTrue(); 192 } 193 194 @Test isAudioModeOngoingCall_modeInCall_returnTrue()195 public void isAudioModeOngoingCall_modeInCall_returnTrue() { 196 mAudioManager.setMode(AudioManager.MODE_IN_CALL); 197 198 assertThat(Utils.isAudioModeOngoingCall(mContext)).isTrue(); 199 } 200 201 @Test isAudioModeOngoingCall_modeRingtone_returnTrue()202 public void isAudioModeOngoingCall_modeRingtone_returnTrue() { 203 mAudioManager.setMode(AudioManager.MODE_RINGTONE); 204 205 assertThat(Utils.isAudioModeOngoingCall(mContext)).isTrue(); 206 } 207 208 @Test isAudioModeOngoingCall_modeNormal_returnFalse()209 public void isAudioModeOngoingCall_modeNormal_returnFalse() { 210 mAudioManager.setMode(AudioManager.MODE_NORMAL); 211 212 assertThat(Utils.isAudioModeOngoingCall(mContext)).isFalse(); 213 } 214 215 @Test isInService_servicestateNull_returnFalse()216 public void isInService_servicestateNull_returnFalse() { 217 assertThat(Utils.isInService(null)).isFalse(); 218 } 219 220 @Test isInService_voiceInService_returnTrue()221 public void isInService_voiceInService_returnTrue() { 222 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_IN_SERVICE); 223 224 assertThat(Utils.isInService(mServiceState)).isTrue(); 225 } 226 227 @Test isInService_voiceOutOfServiceDataInService_returnTrue()228 public void isInService_voiceOutOfServiceDataInService_returnTrue() { 229 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 230 when(mServiceState.getDataRegistrationState()).thenReturn(ServiceState.STATE_IN_SERVICE); 231 when(mServiceState.getNetworkRegistrationInfo( 232 NetworkRegistrationInfo.DOMAIN_PS, 233 AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) 234 .thenReturn(mNetworkRegistrationInfo); 235 when(mNetworkRegistrationInfo.isInService()).thenReturn(true); 236 237 assertThat(Utils.isInService(mServiceState)).isTrue(); 238 } 239 240 @Test isInService_voiceOutOfServiceDataInServiceOnIwLan_returnFalse()241 public void isInService_voiceOutOfServiceDataInServiceOnIwLan_returnFalse() { 242 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 243 when(mServiceState.getNetworkRegistrationInfo( 244 NetworkRegistrationInfo.DOMAIN_PS, 245 AccessNetworkConstants.TRANSPORT_TYPE_WLAN)) 246 .thenReturn(mNetworkRegistrationInfo); 247 when(mServiceState.getDataRegistrationState()).thenReturn(ServiceState.STATE_IN_SERVICE); 248 when(mNetworkRegistrationInfo.isInService()).thenReturn(true); 249 250 assertThat(Utils.isInService(mServiceState)).isFalse(); 251 } 252 253 @Test isInService_voiceOutOfServiceDataNull_returnFalse()254 public void isInService_voiceOutOfServiceDataNull_returnFalse() { 255 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 256 when(mServiceState.getNetworkRegistrationInfo( 257 NetworkRegistrationInfo.DOMAIN_PS, 258 AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) 259 .thenReturn(null); 260 261 assertThat(Utils.isInService(mServiceState)).isFalse(); 262 } 263 264 @Test isInService_voiceOutOfServiceDataOutOfService_returnFalse()265 public void isInService_voiceOutOfServiceDataOutOfService_returnFalse() { 266 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 267 when(mServiceState.getNetworkRegistrationInfo( 268 NetworkRegistrationInfo.DOMAIN_PS, 269 AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) 270 .thenReturn(mNetworkRegistrationInfo); 271 when(mNetworkRegistrationInfo.isInService()).thenReturn(false); 272 273 assertThat(Utils.isInService(mServiceState)).isFalse(); 274 } 275 276 @Test isInService_ServiceStatePowerOff_returnFalse()277 public void isInService_ServiceStatePowerOff_returnFalse() { 278 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_POWER_OFF); 279 280 assertThat(Utils.isInService(mServiceState)).isFalse(); 281 } 282 283 @Test getCombinedServiceState_servicestateNull_returnOutOfService()284 public void getCombinedServiceState_servicestateNull_returnOutOfService() { 285 assertThat(Utils.getCombinedServiceState(null)) 286 .isEqualTo(ServiceState.STATE_OUT_OF_SERVICE); 287 } 288 289 @Test getCombinedServiceState_ServiceStatePowerOff_returnPowerOff()290 public void getCombinedServiceState_ServiceStatePowerOff_returnPowerOff() { 291 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_POWER_OFF); 292 293 assertThat(Utils.getCombinedServiceState(mServiceState)) 294 .isEqualTo(ServiceState.STATE_POWER_OFF); 295 } 296 297 @Test getCombinedServiceState_voiceInService_returnInService()298 public void getCombinedServiceState_voiceInService_returnInService() { 299 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_IN_SERVICE); 300 301 assertThat(Utils.getCombinedServiceState(mServiceState)) 302 .isEqualTo(ServiceState.STATE_IN_SERVICE); 303 } 304 305 @Test getCombinedServiceState_voiceOutOfServiceDataInService_returnInService()306 public void getCombinedServiceState_voiceOutOfServiceDataInService_returnInService() { 307 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 308 when(mServiceState.getNetworkRegistrationInfo( 309 NetworkRegistrationInfo.DOMAIN_PS, 310 AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) 311 .thenReturn(mNetworkRegistrationInfo); 312 when(mNetworkRegistrationInfo.isInService()).thenReturn(true); 313 314 assertThat(Utils.getCombinedServiceState(mServiceState)) 315 .isEqualTo(ServiceState.STATE_IN_SERVICE); 316 } 317 318 @Test getCombinedServiceState_voiceOutOfServiceDataInServiceOnIwLan_returnOutOfService()319 public void getCombinedServiceState_voiceOutOfServiceDataInServiceOnIwLan_returnOutOfService() { 320 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 321 when(mServiceState.getNetworkRegistrationInfo( 322 NetworkRegistrationInfo.DOMAIN_PS, 323 AccessNetworkConstants.TRANSPORT_TYPE_WLAN)) 324 .thenReturn(mNetworkRegistrationInfo); 325 when(mNetworkRegistrationInfo.isInService()).thenReturn(true); 326 327 assertThat(Utils.getCombinedServiceState(mServiceState)) 328 .isEqualTo(ServiceState.STATE_OUT_OF_SERVICE); 329 } 330 331 @Test getCombinedServiceState_voiceOutOfServiceDataOutOfService_returnOutOfService()332 public void getCombinedServiceState_voiceOutOfServiceDataOutOfService_returnOutOfService() { 333 when(mServiceState.getVoiceRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 334 when(mServiceState.getDataRegistrationState()) 335 .thenReturn(ServiceState.STATE_OUT_OF_SERVICE); 336 337 assertThat(Utils.getCombinedServiceState(mServiceState)) 338 .isEqualTo(ServiceState.STATE_OUT_OF_SERVICE); 339 } 340 341 @Test getBatteryStatus_statusIsFull_returnFullString()342 public void getBatteryStatus_statusIsFull_returnFullString() { 343 final Intent intent = 344 new Intent() 345 .putExtra(BatteryManager.EXTRA_LEVEL, 100) 346 .putExtra(BatteryManager.EXTRA_SCALE, 100); 347 final Resources resources = mContext.getResources(); 348 349 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false)) 350 .isEqualTo(resources.getString(R.string.battery_info_status_full)); 351 } 352 353 @Test getBatteryStatus_statusIsFullAndUseCompactStatus_returnFullyChargedString()354 public void getBatteryStatus_statusIsFullAndUseCompactStatus_returnFullyChargedString() { 355 final Intent intent = 356 new Intent() 357 .putExtra(BatteryManager.EXTRA_LEVEL, 100) 358 .putExtra(BatteryManager.EXTRA_SCALE, 100); 359 final Resources resources = mContext.getResources(); 360 361 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ true)) 362 .isEqualTo(resources.getString(R.string.battery_info_status_full_charged)); 363 } 364 365 @Test getBatteryStatus_batteryLevelIs100_returnFullString()366 public void getBatteryStatus_batteryLevelIs100_returnFullString() { 367 final Intent intent = 368 new Intent() 369 .putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL); 370 final Resources resources = mContext.getResources(); 371 372 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false)) 373 .isEqualTo(resources.getString(R.string.battery_info_status_full)); 374 } 375 376 @Test getBatteryStatus_batteryLevelIs100AndUseCompactStatus_returnFullyString()377 public void getBatteryStatus_batteryLevelIs100AndUseCompactStatus_returnFullyString() { 378 final Intent intent = 379 new Intent() 380 .putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL); 381 final Resources resources = mContext.getResources(); 382 383 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ true)) 384 .isEqualTo(resources.getString(R.string.battery_info_status_full_charged)); 385 } 386 387 @Test getBatteryStatus_batteryLevel99_returnChargingString()388 public void getBatteryStatus_batteryLevel99_returnChargingString() { 389 final Intent intent = new Intent(); 390 intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); 391 intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB); 392 final Resources resources = mContext.getResources(); 393 394 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false)) 395 .isEqualTo(resources.getString(R.string.battery_info_status_charging)); 396 } 397 398 @Test getBatteryStatus_chargingDock_returnDockChargingString()399 public void getBatteryStatus_chargingDock_returnDockChargingString() { 400 final Intent intent = new Intent(); 401 intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); 402 intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_DOCK); 403 final Resources resources = mContext.getResources(); 404 405 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false)) 406 .isEqualTo(resources.getString(R.string.battery_info_status_charging_dock)); 407 } 408 409 @Test getBatteryStatus_chargingWireless_returnWirelessChargingString()410 public void getBatteryStatus_chargingWireless_returnWirelessChargingString() { 411 final Intent intent = new Intent(); 412 intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); 413 intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_WIRELESS); 414 final Resources resources = mContext.getResources(); 415 416 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ false)) 417 .isEqualTo(resources.getString(R.string.battery_info_status_charging_wireless)); 418 } 419 420 @Test getBatteryStatus_chargingAndUseCompactStatus_returnCompactString()421 public void getBatteryStatus_chargingAndUseCompactStatus_returnCompactString() { 422 final Intent intent = new Intent(); 423 intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); 424 intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_USB); 425 final Resources resources = mContext.getResources(); 426 427 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ true)) 428 .isEqualTo(resources.getString(R.string.battery_info_status_charging)); 429 } 430 431 @Test getBatteryStatus_chargingWirelessAndUseCompactStatus_returnCompactString()432 public void getBatteryStatus_chargingWirelessAndUseCompactStatus_returnCompactString() { 433 final Intent intent = new Intent(); 434 intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); 435 intent.putExtra(BatteryManager.EXTRA_PLUGGED, BatteryManager.BATTERY_PLUGGED_WIRELESS); 436 final Resources resources = mContext.getResources(); 437 438 assertThat(Utils.getBatteryStatus(mContext, intent, /* compactStatus= */ true)) 439 .isEqualTo(resources.getString(R.string.battery_info_status_charging)); 440 } 441 442 @Test containsIncompatibleChargers_nullPorts_returnFalse()443 public void containsIncompatibleChargers_nullPorts_returnFalse() { 444 when(mUsbManager.getPorts()).thenReturn(null); 445 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 446 } 447 448 @Test containsIncompatibleChargers_emptyPorts_returnFalse()449 public void containsIncompatibleChargers_emptyPorts_returnFalse() { 450 when(mUsbManager.getPorts()).thenReturn(new ArrayList<>()); 451 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 452 } 453 454 @Test containsIncompatibleChargers_nullPortStatus_returnFalse()455 public void containsIncompatibleChargers_nullPortStatus_returnFalse() { 456 final List<UsbPort> usbPorts = new ArrayList<>(); 457 usbPorts.add(mUsbPort); 458 when(mUsbManager.getPorts()).thenReturn(usbPorts); 459 when(mUsbPort.getStatus()).thenReturn(null); 460 461 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 462 } 463 464 @Test containsIncompatibleChargers_complianeWarningOther_returnTrue_flagDisabled()465 public void containsIncompatibleChargers_complianeWarningOther_returnTrue_flagDisabled() { 466 mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING); 467 mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING); 468 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_OTHER); 469 470 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isTrue(); 471 } 472 473 @Test containsIncompatibleChargers_complianeWarningPower_returnFalse_flagDisabled()474 public void containsIncompatibleChargers_complianeWarningPower_returnFalse_flagDisabled() { 475 mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING); 476 mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING); 477 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_INPUT_POWER_LIMITED); 478 479 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 480 } 481 482 @Test containsIncompatibleChargers_complianeWarningOther_returnFalse_flagEnabled()483 public void containsIncompatibleChargers_complianeWarningOther_returnFalse_flagEnabled() { 484 mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING); 485 mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING); 486 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_OTHER); 487 488 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 489 } 490 491 @Test containsIncompatibleChargers_complianeWarningPower_returnTrue_flagEnabled()492 public void containsIncompatibleChargers_complianeWarningPower_returnTrue_flagEnabled() { 493 mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_USB_DATA_COMPLIANCE_WARNING); 494 mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_INPUT_POWER_LIMITED_WARNING); 495 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_INPUT_POWER_LIMITED); 496 497 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isTrue(); 498 } 499 500 @Test containsIncompatibleChargers_complianeWarningDebug_returnTrue()501 public void containsIncompatibleChargers_complianeWarningDebug_returnTrue() { 502 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY); 503 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isTrue(); 504 } 505 506 @Test containsIncompatibleChargers_unexpectedWarningType_returnFalse()507 public void containsIncompatibleChargers_unexpectedWarningType_returnFalse() { 508 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_BC_1_2); 509 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 510 } 511 512 @Test containsIncompatibleChargers_emptyComplianceWarnings_returnFalse()513 public void containsIncompatibleChargers_emptyComplianceWarnings_returnFalse() { 514 setupIncompatibleCharging(); 515 when(mUsbPortStatus.getComplianceWarnings()).thenReturn(new int[1]); 516 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 517 } 518 519 @Test containsIncompatibleChargers_notSupportComplianceWarnings_returnFalse()520 public void containsIncompatibleChargers_notSupportComplianceWarnings_returnFalse() { 521 setupIncompatibleCharging(); 522 when(mUsbPort.supportsComplianceWarnings()).thenReturn(false); 523 524 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 525 } 526 527 @Test containsIncompatibleChargers_usbNotConnected_returnFalse()528 public void containsIncompatibleChargers_usbNotConnected_returnFalse() { 529 setupIncompatibleCharging(); 530 when(mUsbPortStatus.isConnected()).thenReturn(false); 531 532 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 533 } 534 535 @Test containsIncompatibleChargers_disableWarning_returnFalse()536 public void containsIncompatibleChargers_disableWarning_returnFalse() { 537 setupIncompatibleCharging(); 538 Settings.Secure.putInt( 539 mContext.getContentResolver(), Utils.INCOMPATIBLE_CHARGER_WARNING_DISABLED, 1); 540 541 assertThat(Utils.containsIncompatibleChargers(mContext, TAG)).isFalse(); 542 } 543 setupIncompatibleCharging()544 private void setupIncompatibleCharging() { 545 setupIncompatibleCharging(UsbPortStatus.COMPLIANCE_WARNING_DEBUG_ACCESSORY); 546 } 547 setupIncompatibleCharging(int complianceWarningType)548 private void setupIncompatibleCharging(int complianceWarningType) { 549 final List<UsbPort> usbPorts = new ArrayList<>(); 550 usbPorts.add(mUsbPort); 551 when(mUsbManager.getPorts()).thenReturn(usbPorts); 552 when(mUsbPort.getStatus()).thenReturn(mUsbPortStatus); 553 when(mUsbPort.supportsComplianceWarnings()).thenReturn(true); 554 when(mUsbPortStatus.isConnected()).thenReturn(true); 555 when(mUsbPortStatus.getComplianceWarnings()).thenReturn(new int[] {complianceWarningType}); 556 } 557 } 558