diff --git a/src/com/android/settings/deviceinfo/UsbBackend.java b/src/com/android/settings/deviceinfo/UsbBackend.java index 20116389b6c..eb4edd822c0 100644 --- a/src/com/android/settings/deviceinfo/UsbBackend.java +++ b/src/com/android/settings/deviceinfo/UsbBackend.java @@ -46,7 +46,7 @@ public class UsbBackend { 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 @@ public class UsbBackend { @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 class UsbBackend { } 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 @@ public class UsbBackend { 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 99c37ef6cfa..8529c5dbd38 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 com.android.settings.TestConfig; 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 @@ public class UsbBackendTest { 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() { + @Override + public boolean matches(Object i) { + final IntentFilter intentFilter = (IntentFilter) i; + return intentFilter != null && + UsbManager.ACTION_USB_STATE.equals(intentFilter.getAction(0)); + } + })); + } }