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));
+                }
+            }));
+    }
 }