Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21711681 authored by Doris Ling's avatar Doris Ling
Browse files

Fix problem with usb mode summary not updated correctly.

In UsbBackend, do not cache the usb state, but re-read it everytime when
we try to get the usb data mode.

Change-Id: I6f2863a59ee8df2c50901a630e3e145714c7dc46
Fix: 34234065
Test: make RunSettingsRoboTests
parent ad36812e
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -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:
+22 −0
Original line number Diff line number Diff line
@@ -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<IntentFilter>() {
                @Override
                public boolean matches(Object i) {
                    final IntentFilter intentFilter = (IntentFilter) i;
                    return intentFilter != null &&
                        UsbManager.ACTION_USB_STATE.equals(intentFilter.getAction(0));
                }
            }));
    }
}