1327b809ad11a5094248652014227470c4be329e6Jerry Zhang/* 2327b809ad11a5094248652014227470c4be329e6Jerry Zhang * Copyright (C) 2018 The Android Open Source Project 3327b809ad11a5094248652014227470c4be329e6Jerry Zhang * 4327b809ad11a5094248652014227470c4be329e6Jerry Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 5327b809ad11a5094248652014227470c4be329e6Jerry Zhang * you may not use this file except in compliance with the License. 6327b809ad11a5094248652014227470c4be329e6Jerry Zhang * You may obtain a copy of the License at 7327b809ad11a5094248652014227470c4be329e6Jerry Zhang * 8327b809ad11a5094248652014227470c4be329e6Jerry Zhang * http://www.apache.org/licenses/LICENSE-2.0 9327b809ad11a5094248652014227470c4be329e6Jerry Zhang * 10327b809ad11a5094248652014227470c4be329e6Jerry Zhang * Unless required by applicable law or agreed to in writing, software 11327b809ad11a5094248652014227470c4be329e6Jerry Zhang * distributed under the License is distributed on an "AS IS" BASIS, 12327b809ad11a5094248652014227470c4be329e6Jerry Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13327b809ad11a5094248652014227470c4be329e6Jerry Zhang * See the License for the specific language governing permissions and 14327b809ad11a5094248652014227470c4be329e6Jerry Zhang * limitations under the License. 15327b809ad11a5094248652014227470c4be329e6Jerry Zhang */ 16327b809ad11a5094248652014227470c4be329e6Jerry Zhangpackage com.android.server.usb; 17327b809ad11a5094248652014227470c4be329e6Jerry Zhang 18327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport static org.junit.Assert.assertEquals; 19327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport static org.junit.Assert.assertFalse; 20327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport static org.junit.Assert.assertNotEquals; 21327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport static org.junit.Assert.assertTrue; 22327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport static org.mockito.Mockito.verify; 23327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport static org.mockito.Mockito.when; 24327b809ad11a5094248652014227470c4be329e6Jerry Zhang 250d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhangimport android.app.ActivityManager; 26327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.content.ContentResolver; 27327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.content.Context; 28327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.content.Intent; 29327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.content.SharedPreferences; 30327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.hardware.usb.UsbManager; 31327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.os.Handler; 32327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.os.Looper; 330d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhangimport android.os.Message; 34327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.os.UserHandle; 35327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.provider.Settings; 36327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.support.test.InstrumentationRegistry; 37327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.support.test.filters.SmallTest; 38327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport android.support.test.runner.AndroidJUnit4; 39327b809ad11a5094248652014227470c4be329e6Jerry Zhang 40327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport com.android.server.FgThread; 41327b809ad11a5094248652014227470c4be329e6Jerry Zhang 42327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport org.junit.Before; 43327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport org.junit.Test; 44327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport org.junit.runner.RunWith; 45327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport org.mockito.Mock; 46327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport org.mockito.MockitoAnnotations; 47327b809ad11a5094248652014227470c4be329e6Jerry Zhang 48327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport java.util.HashMap; 49327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport java.util.Locale; 50327b809ad11a5094248652014227470c4be329e6Jerry Zhangimport java.util.Map; 51327b809ad11a5094248652014227470c4be329e6Jerry Zhang 52327b809ad11a5094248652014227470c4be329e6Jerry Zhang/** 53327b809ad11a5094248652014227470c4be329e6Jerry Zhang * Tests for UsbHandler state changes. 54327b809ad11a5094248652014227470c4be329e6Jerry Zhang */ 55327b809ad11a5094248652014227470c4be329e6Jerry Zhang@RunWith(AndroidJUnit4.class) 56327b809ad11a5094248652014227470c4be329e6Jerry Zhangpublic class UsbHandlerTest { 57327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final String TAG = UsbHandlerTest.class.getSimpleName(); 58327b809ad11a5094248652014227470c4be329e6Jerry Zhang 59327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Mock 60327b809ad11a5094248652014227470c4be329e6Jerry Zhang private UsbDeviceManager mUsbDeviceManager; 61327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Mock 62327b809ad11a5094248652014227470c4be329e6Jerry Zhang private UsbDebuggingManager mUsbDebuggingManager; 63327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Mock 64327b809ad11a5094248652014227470c4be329e6Jerry Zhang private UsbAlsaManager mUsbAlsaManager; 65327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Mock 66327b809ad11a5094248652014227470c4be329e6Jerry Zhang private UsbSettingsManager mUsbSettingsManager; 67327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Mock 68327b809ad11a5094248652014227470c4be329e6Jerry Zhang private SharedPreferences mSharedPreferences; 69327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Mock 70327b809ad11a5094248652014227470c4be329e6Jerry Zhang private SharedPreferences.Editor mEditor; 71327b809ad11a5094248652014227470c4be329e6Jerry Zhang 72327b809ad11a5094248652014227470c4be329e6Jerry Zhang private MockUsbHandler mUsbHandler; 73327b809ad11a5094248652014227470c4be329e6Jerry Zhang 74327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_UPDATE_STATE = 0; 75327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_ENABLE_ADB = 1; 76327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_SET_CURRENT_FUNCTIONS = 2; 77327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_SYSTEM_READY = 3; 78327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_BOOT_COMPLETED = 4; 79327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_USER_SWITCHED = 5; 80327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_UPDATE_USER_RESTRICTIONS = 6; 81327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_SET_SCREEN_UNLOCKED_FUNCTIONS = 12; 82327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static final int MSG_UPDATE_SCREEN_LOCK = 13; 83327b809ad11a5094248652014227470c4be329e6Jerry Zhang 84327b809ad11a5094248652014227470c4be329e6Jerry Zhang private Map<String, String> mMockProperties; 85327b809ad11a5094248652014227470c4be329e6Jerry Zhang private Map<String, Integer> mMockGlobalSettings; 86327b809ad11a5094248652014227470c4be329e6Jerry Zhang 87327b809ad11a5094248652014227470c4be329e6Jerry Zhang private class MockUsbHandler extends UsbDeviceManager.UsbHandler { 88327b809ad11a5094248652014227470c4be329e6Jerry Zhang boolean mIsUsbTransferAllowed; 89327b809ad11a5094248652014227470c4be329e6Jerry Zhang Intent mBroadcastedIntent; 90327b809ad11a5094248652014227470c4be329e6Jerry Zhang 91327b809ad11a5094248652014227470c4be329e6Jerry Zhang MockUsbHandler(Looper looper, Context context, UsbDeviceManager deviceManager, 92327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbDebuggingManager debuggingManager, UsbAlsaManager alsaManager, 93327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbSettingsManager settingsManager) { 94327b809ad11a5094248652014227470c4be329e6Jerry Zhang super(looper, context, deviceManager, debuggingManager, alsaManager, settingsManager); 95327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUseUsbNotification = false; 96327b809ad11a5094248652014227470c4be329e6Jerry Zhang mIsUsbTransferAllowed = true; 97327b809ad11a5094248652014227470c4be329e6Jerry Zhang mCurrentUsbFunctionsReceived = true; 98327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 99327b809ad11a5094248652014227470c4be329e6Jerry Zhang 100327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 101327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected void setEnabledFunctions(long functions, boolean force) { 102327b809ad11a5094248652014227470c4be329e6Jerry Zhang mCurrentFunctions = functions; 103327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 104327b809ad11a5094248652014227470c4be329e6Jerry Zhang 105327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 106327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected void setSystemProperty(String property, String value) { 107327b809ad11a5094248652014227470c4be329e6Jerry Zhang mMockProperties.put(property, value); 108327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 109327b809ad11a5094248652014227470c4be329e6Jerry Zhang 110327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 111327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected void putGlobalSettings(ContentResolver resolver, String setting, int val) { 112327b809ad11a5094248652014227470c4be329e6Jerry Zhang mMockGlobalSettings.put(setting, val); 113327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 114327b809ad11a5094248652014227470c4be329e6Jerry Zhang 115327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 116327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected String getSystemProperty(String property, String def) { 117327b809ad11a5094248652014227470c4be329e6Jerry Zhang if (mMockProperties.containsKey(property)) { 118327b809ad11a5094248652014227470c4be329e6Jerry Zhang return mMockProperties.get(property); 119327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 120327b809ad11a5094248652014227470c4be329e6Jerry Zhang return def; 121327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 122327b809ad11a5094248652014227470c4be329e6Jerry Zhang 123327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 124327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected boolean isUsbTransferAllowed() { 125327b809ad11a5094248652014227470c4be329e6Jerry Zhang return mIsUsbTransferAllowed; 126327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 127327b809ad11a5094248652014227470c4be329e6Jerry Zhang 128327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 129327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected SharedPreferences getPinnedSharedPrefs(Context context) { 130327b809ad11a5094248652014227470c4be329e6Jerry Zhang return mSharedPreferences; 131327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 132327b809ad11a5094248652014227470c4be329e6Jerry Zhang 133327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Override 134327b809ad11a5094248652014227470c4be329e6Jerry Zhang protected void sendStickyBroadcast(Intent intent) { 135327b809ad11a5094248652014227470c4be329e6Jerry Zhang mBroadcastedIntent = intent; 136327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 137327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 138327b809ad11a5094248652014227470c4be329e6Jerry Zhang 139327b809ad11a5094248652014227470c4be329e6Jerry Zhang @Before 140327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void before() { 141327b809ad11a5094248652014227470c4be329e6Jerry Zhang MockitoAnnotations.initMocks(this); 142327b809ad11a5094248652014227470c4be329e6Jerry Zhang mMockProperties = new HashMap<>(); 143327b809ad11a5094248652014227470c4be329e6Jerry Zhang mMockGlobalSettings = new HashMap<>(); 144327b809ad11a5094248652014227470c4be329e6Jerry Zhang when(mSharedPreferences.edit()).thenReturn(mEditor); 145327b809ad11a5094248652014227470c4be329e6Jerry Zhang 146327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(), 147327b809ad11a5094248652014227470c4be329e6Jerry Zhang InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager, 148327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbAlsaManager, mUsbSettingsManager); 149327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 150327b809ad11a5094248652014227470c4be329e6Jerry Zhang 151327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 1520d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 153327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void setFunctionsMtp() { 154327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 155327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MTP)); 156327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 157327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 158327b809ad11a5094248652014227470c4be329e6Jerry Zhang 159327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 1600d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 161327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void setFunctionsPtp() { 162327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 163327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_PTP)); 164327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_PTP, 0); 165327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 166327b809ad11a5094248652014227470c4be329e6Jerry Zhang 167327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 1680d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 169327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void setFunctionsMidi() { 170327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 171327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MIDI)); 172327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MIDI, 0); 173327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 174327b809ad11a5094248652014227470c4be329e6Jerry Zhang 175327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 1760d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 177327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void setFunctionsRndis() { 178327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 179327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_RNDIS)); 180327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_RNDIS, 0); 181327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 182327b809ad11a5094248652014227470c4be329e6Jerry Zhang 183327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 1840d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 185327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void enableAdb() { 186327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 1870d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang Message msg = mUsbHandler.obtainMessage(MSG_ENABLE_ADB); 1880d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang msg.arg1 = 1; 1890d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang mUsbHandler.handleMessage(msg); 190327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 191327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mMockProperties.get(UsbDeviceManager.UsbHandler 192327b809ad11a5094248652014227470c4be329e6Jerry Zhang .USB_PERSISTENT_CONFIG_PROPERTY), UsbManager.USB_FUNCTION_ADB); 193327b809ad11a5094248652014227470c4be329e6Jerry Zhang verify(mUsbDebuggingManager).setAdbEnabled(true); 1940d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang assertTrue(mUsbHandler.mAdbEnabled); 195327b809ad11a5094248652014227470c4be329e6Jerry Zhang 196327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_STATE, 1, 1)); 197327b809ad11a5094248652014227470c4be329e6Jerry Zhang 198327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mBroadcastedIntent.getBooleanExtra(UsbManager.USB_CONNECTED, false)); 199327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mBroadcastedIntent 200327b809ad11a5094248652014227470c4be329e6Jerry Zhang .getBooleanExtra(UsbManager.USB_CONFIGURED, false)); 201327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mBroadcastedIntent 202327b809ad11a5094248652014227470c4be329e6Jerry Zhang .getBooleanExtra(UsbManager.USB_FUNCTION_ADB, false)); 203327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 204327b809ad11a5094248652014227470c4be329e6Jerry Zhang 205327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2060d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 207327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void disableAdb() { 208327b809ad11a5094248652014227470c4be329e6Jerry Zhang mMockProperties.put(UsbDeviceManager.UsbHandler.USB_PERSISTENT_CONFIG_PROPERTY, 209327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.USB_FUNCTION_ADB); 210327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(), 211327b809ad11a5094248652014227470c4be329e6Jerry Zhang InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager, 212327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbAlsaManager, mUsbSettingsManager); 213327b809ad11a5094248652014227470c4be329e6Jerry Zhang 214327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 215327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_ENABLE_ADB, 0)); 216327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 217327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertFalse(mUsbHandler.mAdbEnabled); 218327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mMockProperties.get(UsbDeviceManager.UsbHandler 219327b809ad11a5094248652014227470c4be329e6Jerry Zhang .USB_PERSISTENT_CONFIG_PROPERTY), ""); 220327b809ad11a5094248652014227470c4be329e6Jerry Zhang verify(mUsbDebuggingManager).setAdbEnabled(false); 221327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 222327b809ad11a5094248652014227470c4be329e6Jerry Zhang 223327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2240d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 225327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void bootCompletedCharging() { 226327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 227327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 228327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 229327b809ad11a5094248652014227470c4be329e6Jerry Zhang 230327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2310d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 232327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void bootCompletedAdbEnabled() { 233327b809ad11a5094248652014227470c4be329e6Jerry Zhang mMockProperties.put(UsbDeviceManager.UsbHandler.USB_PERSISTENT_CONFIG_PROPERTY, "adb"); 234327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(), 235327b809ad11a5094248652014227470c4be329e6Jerry Zhang InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager, 236327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbAlsaManager, mUsbSettingsManager); 237327b809ad11a5094248652014227470c4be329e6Jerry Zhang 238327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 239327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 240327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mMockGlobalSettings.get(Settings.Global.ADB_ENABLED).intValue(), 1); 241327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mAdbEnabled); 242327b809ad11a5094248652014227470c4be329e6Jerry Zhang verify(mUsbDebuggingManager).setAdbEnabled(true); 243327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 244327b809ad11a5094248652014227470c4be329e6Jerry Zhang 245327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2460d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 247327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void userSwitchedDisablesMtp() { 248327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 249327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MTP)); 250327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 251327b809ad11a5094248652014227470c4be329e6Jerry Zhang 2520d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang Message msg = mUsbHandler.obtainMessage(MSG_USER_SWITCHED); 2530d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang msg.arg1 = ActivityManager.getCurrentUser() + 1; 2540d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang mUsbHandler.handleMessage(msg); 255327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 256327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 257327b809ad11a5094248652014227470c4be329e6Jerry Zhang 258327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2590d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 260327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void changedRestrictionsDisablesMtp() { 261327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 262327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MTP)); 263327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 264327b809ad11a5094248652014227470c4be329e6Jerry Zhang 265327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.mIsUsbTransferAllowed = false; 266327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_USER_RESTRICTIONS)); 267327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 268327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 269327b809ad11a5094248652014227470c4be329e6Jerry Zhang 270327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2710d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 272327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void disconnectResetsCharging() { 273327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 274327b809ad11a5094248652014227470c4be329e6Jerry Zhang 275327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 276327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MTP)); 277327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 278327b809ad11a5094248652014227470c4be329e6Jerry Zhang 279327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_STATE, 0, 0)); 280327b809ad11a5094248652014227470c4be329e6Jerry Zhang 281327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertEquals(mUsbHandler.getEnabledFunctions(), UsbManager.FUNCTION_NONE); 282327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 283327b809ad11a5094248652014227470c4be329e6Jerry Zhang 284327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 2850d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 286327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void configuredSendsBroadcast() { 287327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 288327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_CURRENT_FUNCTIONS, 289327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MTP)); 290327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 291327b809ad11a5094248652014227470c4be329e6Jerry Zhang 292327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_STATE, 1, 1)); 293327b809ad11a5094248652014227470c4be329e6Jerry Zhang 294327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 295327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mBroadcastedIntent.getBooleanExtra(UsbManager.USB_CONNECTED, false)); 296327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mBroadcastedIntent 297327b809ad11a5094248652014227470c4be329e6Jerry Zhang .getBooleanExtra(UsbManager.USB_CONFIGURED, false)); 298327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertTrue(mUsbHandler.mBroadcastedIntent 299327b809ad11a5094248652014227470c4be329e6Jerry Zhang .getBooleanExtra(UsbManager.USB_FUNCTION_MTP, false)); 300327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 301327b809ad11a5094248652014227470c4be329e6Jerry Zhang 302327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 3030d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 304327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void setScreenUnlockedFunctions() { 305327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 306327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_SCREEN_LOCK, 0)); 307327b809ad11a5094248652014227470c4be329e6Jerry Zhang 308327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_SET_SCREEN_UNLOCKED_FUNCTIONS, 309327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.FUNCTION_MTP)); 310327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getScreenUnlockedFunctions() & UsbManager.FUNCTION_MTP, 0); 311327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 312327b809ad11a5094248652014227470c4be329e6Jerry Zhang verify(mEditor).putString(String.format(Locale.ENGLISH, 313327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbDeviceManager.UNLOCKED_CONFIG_PREF, mUsbHandler.mCurrentUser), 314327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbManager.USB_FUNCTION_MTP); 315327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 316327b809ad11a5094248652014227470c4be329e6Jerry Zhang 317327b809ad11a5094248652014227470c4be329e6Jerry Zhang @SmallTest 3180d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang @Test 319327b809ad11a5094248652014227470c4be329e6Jerry Zhang public void unlockScreen() { 320327b809ad11a5094248652014227470c4be329e6Jerry Zhang when(mSharedPreferences.getString(String.format(Locale.ENGLISH, 321327b809ad11a5094248652014227470c4be329e6Jerry Zhang UsbDeviceManager.UNLOCKED_CONFIG_PREF, mUsbHandler.mCurrentUser), "")) 322327b809ad11a5094248652014227470c4be329e6Jerry Zhang .thenReturn(UsbManager.USB_FUNCTION_MTP); 3230d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang mUsbHandler = new MockUsbHandler(FgThread.get().getLooper(), 3240d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang InstrumentationRegistry.getContext(), mUsbDeviceManager, mUsbDebuggingManager, 3250d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang mUsbAlsaManager, mUsbSettingsManager); 326327b809ad11a5094248652014227470c4be329e6Jerry Zhang sendBootCompleteMessages(mUsbHandler); 3270d3aa08a2f0cb82adb936e26d4de2b14408a1dd9Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_SCREEN_LOCK, 1)); 328327b809ad11a5094248652014227470c4be329e6Jerry Zhang mUsbHandler.handleMessage(mUsbHandler.obtainMessage(MSG_UPDATE_SCREEN_LOCK, 0)); 329327b809ad11a5094248652014227470c4be329e6Jerry Zhang 330327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getScreenUnlockedFunctions() & UsbManager.FUNCTION_MTP, 0); 331327b809ad11a5094248652014227470c4be329e6Jerry Zhang assertNotEquals(mUsbHandler.getEnabledFunctions() & UsbManager.FUNCTION_MTP, 0); 332327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 333327b809ad11a5094248652014227470c4be329e6Jerry Zhang 334327b809ad11a5094248652014227470c4be329e6Jerry Zhang private static void sendBootCompleteMessages(Handler handler) { 335327b809ad11a5094248652014227470c4be329e6Jerry Zhang handler.handleMessage(handler.obtainMessage(MSG_BOOT_COMPLETED)); 336327b809ad11a5094248652014227470c4be329e6Jerry Zhang handler.handleMessage(handler.obtainMessage(MSG_SYSTEM_READY)); 337327b809ad11a5094248652014227470c4be329e6Jerry Zhang } 338327b809ad11a5094248652014227470c4be329e6Jerry Zhang}