Merge "Fix problem with usb mode summary not updated correctly."
diff --git a/src/com/android/settings/deviceinfo/UsbBackend.java b/src/com/android/settings/deviceinfo/UsbBackend.java
index 2011638..eb4edd8 100644
--- a/src/com/android/settings/deviceinfo/UsbBackend.java
+++ b/src/com/android/settings/deviceinfo/UsbBackend.java
@@ -46,7 +46,7 @@
private UsbPort mPort;
private UsbPortStatus mPortStatus;
- private boolean mIsUnlocked;
+ private Context mContext;
public UsbBackend(Context context) {
this(context, new UserRestrictionUtil(context));
@@ -54,11 +54,7 @@
@VisibleForTesting
UsbBackend(Context context, UserRestrictionUtil userRestrictionUtil) {
- Intent intent = context.registerReceiver(null,
- new IntentFilter(UsbManager.ACTION_USB_STATE));
- mIsUnlocked = intent == null ?
- false : intent.getBooleanExtra(UsbManager.USB_DATA_UNLOCKED, false);
-
+ mContext = context;
mUsbManager = context.getSystemService(UsbManager.class);
mRestricted = userRestrictionUtil.isUsbFileTransferRestricted();
@@ -92,7 +88,7 @@
}
public int getUsbDataMode() {
- if (!mIsUnlocked) {
+ if (!isUsbDataUnlocked()) {
return MODE_DATA_NONE;
} else if (mUsbManager.isFunctionEnabled(UsbManager.USB_FUNCTION_MTP)) {
return MODE_DATA_MTP;
@@ -104,6 +100,13 @@
return MODE_DATA_NONE; // ...
}
+ private boolean isUsbDataUnlocked() {
+ Intent intent = mContext.registerReceiver(null,
+ new IntentFilter(UsbManager.ACTION_USB_STATE));
+ return intent == null ?
+ false : intent.getBooleanExtra(UsbManager.USB_DATA_UNLOCKED, false);
+ }
+
private void setUsbFunction(int mode) {
switch (mode) {
case MODE_DATA_MTP:
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/UsbBackendTest.java b/tests/robotests/src/com/android/settings/deviceinfo/UsbBackendTest.java
index 99c37ef..8529c5d 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/UsbBackendTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/UsbBackendTest.java
@@ -17,6 +17,7 @@
package com.android.settings.deviceinfo;
import android.content.Context;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
@@ -26,11 +27,15 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@@ -57,4 +62,21 @@
UsbBackend usbBackend = new UsbBackend(mContext, mUserRestrictionUtil);
// Should not crash
}
+
+ @Test
+ public void getCurrentMode_shouldRegisterReceiverToGetUsbState() {
+ UsbBackend usbBackend = new UsbBackend(mContext, mUserRestrictionUtil);
+
+ usbBackend.getCurrentMode();
+
+ verify(mContext).registerReceiver(eq(null),
+ argThat(new ArgumentMatcher<IntentFilter>() {
+ @Override
+ public boolean matches(Object i) {
+ final IntentFilter intentFilter = (IntentFilter) i;
+ return intentFilter != null &&
+ UsbManager.ACTION_USB_STATE.equals(intentFilter.getAction(0));
+ }
+ }));
+ }
}