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

Commit 7b177801 authored by jeffreyhuang's avatar jeffreyhuang
Browse files

Prevent monkey from changing usb settings

 - Prevent monkey from revoking usb debugging authorizations
 - Prevent monkey from changing usb configurations

Bug: 68707778
Test: make RunSettingsRoboTests -j40
Change-Id: Idce99d60f0fbce5a9d93aceb0c2a07d27482de10
parent d7233945
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.util.Log;

import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;

@@ -75,6 +76,10 @@ public class ClearAdbKeysPreferenceController extends

    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (Utils.isMonkeyRunning()) {
            return false;
        }

        if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
            ClearAdbKeysWarningDialog.show(mFragment);
            return true;
+5 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -89,6 +90,10 @@ public class SelectUsbConfigPreferenceController extends

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        if (Utils.isMonkeyRunning()) {
            return false;
        }

        writeUsbConfigurationOption(newValue.toString());
        updateUsbConfigurationValues();
        return true;
@@ -138,5 +143,4 @@ public class SelectUsbConfigPreferenceController extends
            setCurrentFunction(newValue, true);
        }
    }

}
+17 −1
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.support.v7.preference.PreferenceScreen;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
import com.android.settings.testutils.shadow.ShadowUtils;

import org.junit.After;
import org.junit.Before;
@@ -54,7 +55,7 @@ import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH,
        sdk = TestConfig.SDK_VERSION,
        shadows = {SettingsShadowSystemProperties.class})
        shadows = {SettingsShadowSystemProperties.class, ShadowUtils.class})
public class ClearAdbKeysPreferenceControllerTest {

    @Mock
@@ -83,6 +84,7 @@ public class ClearAdbKeysPreferenceControllerTest {
    public void tearDown() {
        ShadowClearAdbKeysWarningDialog.resetDialog();
        SettingsShadowSystemProperties.clear();
        ShadowUtils.reset();
    }

    @Test
@@ -136,6 +138,20 @@ public class ClearAdbKeysPreferenceControllerTest {
        assertThat(isHandled).isFalse();
    }

    @Test
    public void handlePreferenceTreeClick_monkeyUser_shouldReturnFalse() {
        SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
        doReturn(true).when(mController).isAdminUser();
        ShadowUtils.setIsUserAMonkey(true);
        mController.displayPreference(mScreen);
        final String preferenceKey = mController.getPreferenceKey();
        when(mPreference.getKey()).thenReturn(preferenceKey);

        final boolean isHandled = mController.handlePreferenceTreeClick(mPreference);

        assertThat(isHandled).isFalse();
    }

    @Test
    public void onDeveloperOptionsSwitchEnabled_isAdminUser_shouldEnablePreference() {
        SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+25 −1
Original line number Diff line number Diff line
@@ -16,11 +16,14 @@

package com.android.settings.development;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -33,8 +36,10 @@ import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -44,7 +49,9 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@Config(manifest = TestConfig.MANIFEST_PATH,
        sdk = TestConfig.SDK_VERSION,
        shadows = {ShadowUtils.class})
public class SelectUsbConfigPreferenceControllerTest {

    @Mock
@@ -85,6 +92,11 @@ public class SelectUsbConfigPreferenceControllerTest {

    }

    @After
    public void teardown() {
        ShadowUtils.reset();
    }

    @Test
    public void onPreferenceChange_setCharging_shouldEnableCharging() {
        when(mUsbManager.isFunctionEnabled(mValues[0])).thenReturn(true);
@@ -103,6 +115,18 @@ public class SelectUsbConfigPreferenceControllerTest {
        verify(mController).setCurrentFunction(mValues[1], true /* usb data unlock */);
    }

    @Test
    public void onPreferenceChange_monkeyUser_shouldReturnFalse() {
        when(mUsbManager.isFunctionEnabled(mValues[1])).thenReturn(true);
        ShadowUtils.setIsUserAMonkey(true);
        doNothing().when(mController).setCurrentFunction(anyString(), anyBoolean());

        final boolean isHandled = mController.onPreferenceChange(mPreference, mValues[1]);

        assertThat(isHandled).isFalse();
        verify(mController, never()).setCurrentFunction(any(), anyBoolean());
    }

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