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

Commit 3f5d58b9 authored by Ben Lin's avatar Ben Lin
Browse files

Do not add SelectUsbConfigPreferenceController if USB is disabled.

Bug: 69479572
Test: Local cherry-picked to master-arc-dev, and deployed cheets_x86 to
a ChromeOS device. Developer Options show up.
Updated SelectUsbConfigPreferenceControllerTest.

Change-Id: I8c6a4501849e67c92f50b8a3781260e9dbcdaf20
parent 222f4447
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
@@ -104,6 +105,14 @@ public class SelectUsbConfigPreferenceController extends
        mContext.unregisterReceiver(mUsbReceiver);
    }

    @Override
    public boolean isAvailable() {
        final PackageManager packageManager = mContext.getPackageManager();

        return packageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
                || packageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
    }

    @Override
    protected void onDeveloperOptionsSwitchEnabled() {
        mPreference.setEnabled(true);
+32 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@ package com.android.settings.development;
import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
@@ -29,6 +32,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.PreferenceScreen;
@@ -42,6 +46,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -56,6 +61,8 @@ public class SelectUsbConfigPreferenceControllerTest {
    private PreferenceScreen mScreen;
    @Mock
    private UsbManager mUsbManager;
    @Mock
    private PackageManager mPackageManager;

    private Context mContext;
    private Lifecycle mLifecycle;
@@ -80,6 +87,7 @@ public class SelectUsbConfigPreferenceControllerTest {
        mLifecycle = new Lifecycle(() -> mLifecycle);
        mContext = spy(RuntimeEnvironment.application);
        doReturn(mUsbManager).when(mContext).getSystemService(Context.USB_SERVICE);
        doReturn(mPackageManager).when(mContext).getPackageManager();
        mValues = mContext.getResources().getStringArray(R.array.usb_configuration_values);
        mSummaries = mContext.getResources().getStringArray(R.array.usb_configuration_titles);
        mController = spy(new SelectUsbConfigPreferenceController(mContext, mLifecycle));
@@ -97,6 +105,30 @@ public class SelectUsbConfigPreferenceControllerTest {
        verify(mController).setCurrentFunction(mValues[0], false /* usb data unlock */);
    }

    @Test
    public void onUsbAccessoryAndHostDisabled_shouldNotBeAvailable() {
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(false);
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn(
                false);
        assertFalse(mController.isAvailable());
    }

    @Test
    public void onUsbHostEnabled_shouldBeAvailable() {
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(true);
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn(
                false);
        assertTrue(mController.isAvailable());
    }

    @Test
    public void onUsbAccessoryEnabled_shouldBeAvailable() {
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(false);
        when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn(
                true);
        assertTrue(mController.isAvailable());
    }

    @Test
    public void onPreferenceChange_setMtp_shouldEnableMtp() {
        when(mUsbManager.isFunctionEnabled(mValues[1])).thenReturn(true);