RetailDemoModeServiceTest.java revision 192bb0bc54f6bb418f5778fe26eb2e68514290fb
1d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka/* 2d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * Copyright (C) 2016 The Android Open Source Project 3d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * 4d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * Licensed under the Apache License, Version 2.0 (the "License"); 5d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * you may not use this file except in compliance with the License. 6d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * You may obtain a copy of the License at 7d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * 8d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * http://www.apache.org/licenses/LICENSE-2.0 9d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * 10d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * Unless required by applicable law or agreed to in writing, software 11d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * distributed under the License is distributed on an "AS IS" BASIS, 12d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * See the License for the specific language governing permissions and 14d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka * limitations under the License. 15d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka */ 16d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 17d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankapackage com.android.server.retaildemo; 18d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 19d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static com.android.server.retaildemo.RetailDemoModeService.SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED; 20d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 21d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.junit.Assert.assertEquals; 22d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.junit.Assert.assertTrue; 23d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Matchers.any; 24d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Matchers.anyInt; 25d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Matchers.anyString; 26d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Matchers.argThat; 27d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Matchers.eq; 28d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Mockito.verify; 29d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport static org.mockito.Mockito.when; 30d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 31d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.Manifest; 32d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.app.ActivityManagerInternal; 33d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.app.Notification; 34d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.app.NotificationManager; 35d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.app.RetailDemoModeServiceInternal; 36d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.BroadcastReceiver; 37d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.ContentResolver; 38d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.Context; 39d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.Intent; 40d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.IntentFilter; 41d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.pm.ActivityInfo; 42d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.pm.IPackageManager; 43d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.pm.PackageManager; 44d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.pm.ResolveInfo; 45d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.pm.UserInfo; 46d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.content.res.Configuration; 47d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.media.AudioManager; 48d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.net.Uri; 49cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shuklaimport android.net.wifi.WifiManager; 50d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.os.FileUtils; 51d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.os.Handler; 52d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.os.Looper; 53d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.os.UserHandle; 54d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.os.UserManager; 55d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.provider.CallLog; 56d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.provider.MediaStore; 57d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.provider.Settings; 58d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.support.test.InstrumentationRegistry; 59d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.support.test.filters.SmallTest; 60d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.test.mock.MockContentProvider; 61d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.test.mock.MockContentResolver; 62d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport android.util.ArrayMap; 63d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 647df1a82802cdf842d07a86a80383c7d5ea7ae53aLorenzo Colittiimport com.android.internal.util.test.FakeSettingsProvider; 65d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport com.android.internal.widget.LockPatternUtils; 66d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport com.android.server.SystemService; 67d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport com.android.server.retaildemo.RetailDemoModeService.Injector; 68d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 69d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.junit.After; 70d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.junit.Before; 71d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.junit.Test; 72d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.junit.runner.RunWith; 73d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.junit.runners.JUnit4; 74d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.mockito.ArgumentCaptor; 75d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.mockito.Mock; 76d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport org.mockito.MockitoAnnotations; 77192bb0bc54f6bb418f5778fe26eb2e68514290fbPaul Duffinimport org.mockito.compat.ArgumentMatcher; 78d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 79d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport java.io.File; 80d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport java.util.concurrent.CountDownLatch; 81d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankaimport java.util.concurrent.TimeUnit; 82d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 83d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka@RunWith(JUnit4.class) 84d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka@SmallTest 85d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shankapublic class RetailDemoModeServiceTest { 86d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private static final int TEST_DEMO_USER = 111; 87d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private static final long SETUP_COMPLETE_TIMEOUT_MS = 2000; // 2 sec 88d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private static final String TEST_CAMERA_PKG = "test.cameraapp"; 89d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private static final String TEST_PRELOADS_DIR_NAME = "test_preloads"; 90d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 91d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock Context mContext; 92d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock UserManager mUm; 93d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock PackageManager mPm; 94d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock IPackageManager mIpm; 95d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock NotificationManager mNm; 96d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock ActivityManagerInternal mAmi; 97d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock AudioManager mAudioManager; 98cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla private @Mock WifiManager mWifiManager; 99d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private @Mock LockPatternUtils mLockPatternUtils; 100233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka private MockPreloadAppsInstaller mPreloadAppsInstaller; 101d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private MockContentResolver mContentResolver; 102d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private MockContactsProvider mContactsProvider; 103d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private Configuration mConfiguration; 104d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private File mTestPreloadsDir; 105d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private CountDownLatch mLatch; 106d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 107d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private RetailDemoModeService mService; 108d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private TestInjector mInjector; 109d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 110d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Before 111d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka public void setUp() throws Exception { 112d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka MockitoAnnotations.initMocks(this); 113d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mContentResolver = new MockContentResolver(mContext); 114d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); 115d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mContactsProvider = new MockContactsProvider(mContext); 116d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mContentResolver.addProvider(CallLog.AUTHORITY, mContactsProvider); 117d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka when(mContext.getContentResolver()).thenReturn(mContentResolver); 118233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka mPreloadAppsInstaller = new MockPreloadAppsInstaller(mContext); 119d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mConfiguration = new Configuration(); 120d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mTestPreloadsDir = new File(InstrumentationRegistry.getContext().getFilesDir(), 121d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka TEST_PRELOADS_DIR_NAME); 122d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 123d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.putString(mContentResolver, 124d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.RETAIL_DEMO_MODE_CONSTANTS, ""); 125d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.putInt(mContentResolver, 126d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.DEVICE_PROVISIONED, 1); 127d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.putInt(mContentResolver, 128d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.DEVICE_DEMO_MODE, 1); 129d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Initialize RetailDemoModeService 130d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mInjector = new TestInjector(); 131d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService = new RetailDemoModeService(mInjector); 132d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.onStart(); 133d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 134d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 135d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @After 136d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka public void tearDown() { 137d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka FileUtils.deleteContentsAndDir(mTestPreloadsDir); 138d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 139d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 140d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Test 141d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka public void testDemoUserSetup() throws Exception { 142d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.onBootPhase(SystemService.PHASE_THIRD_PARTY_APPS_CAN_START); 143d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 144d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mLatch = new CountDownLatch(1); 14528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka final UserInfo userInfo = new UserInfo(); 14628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka userInfo.id = TEST_DEMO_USER; 14728537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka when(mUm.createUser(anyString(), anyInt())).thenReturn(userInfo); 148d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 149501247bab13b558b29c1fde65dc9d2ed3e4653acSudheer Shanka setCameraPackage(TEST_CAMERA_PKG); 150d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED); 151d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertEquals(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED + " property not set", 152d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka "1", mInjector.systemPropertiesGet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED)); 153d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 15428537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka final ArgumentCaptor<IntentFilter> intentFilter = 15528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka ArgumentCaptor.forClass(IntentFilter.class); 15628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka verify(mContext).registerReceiver(any(BroadcastReceiver.class), intentFilter.capture()); 15728537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka assertTrue("Not registered for " + Intent.ACTION_SCREEN_OFF, 15828537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka intentFilter.getValue().hasAction(Intent.ACTION_SCREEN_OFF)); 15928537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka 160d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Wait for the setup to complete. 161d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mLatch.await(SETUP_COMPLETE_TIMEOUT_MS, TimeUnit.MILLISECONDS); 162d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka ArgumentCaptor<Integer> flags = ArgumentCaptor.forClass(Integer.class); 163d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).createUser(anyString(), flags.capture()); 164d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertTrue("FLAG_DEMO not set during user creation", 165d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka (flags.getValue() & UserInfo.FLAG_DEMO) != 0); 166d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertTrue("FLAG_EPHEMERAL not set during user creation", 167d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka (flags.getValue() & UserInfo.FLAG_EPHEMERAL) != 0); 168d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Verify if necessary restrictions are being set. 169d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final UserHandle user = UserHandle.of(TEST_DEMO_USER); 170d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_CONFIG_WIFI, true, user); 171d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, true, user); 172d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, true, user); 173d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_USB_FILE_TRANSFER, true, user); 174d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS, true, user); 175d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_CONFIG_BLUETOOTH, true, user); 176d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS, false, user); 177d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_SAFE_BOOT, true, UserHandle.SYSTEM); 178d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Verify if necessary settings are updated. 179d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertEquals("SKIP_FIRST_USE_HINTS setting is not set for demo user", 180d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Secure.getIntForUser(mContentResolver, 181d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Secure.SKIP_FIRST_USE_HINTS, TEST_DEMO_USER), 182d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 1); 183d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertEquals("PACKAGE_VERIFIER_ENABLE settings should be set to 0 for demo user", 184d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.getInt(mContentResolver, 185d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.PACKAGE_VERIFIER_ENABLE), 186d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 0); 187d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Verify if camera is granted location permission. 188d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mPm).grantRuntimePermission(TEST_CAMERA_PKG, 189d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Manifest.permission.ACCESS_FINE_LOCATION, user); 190d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Verify call logs are cleared. 191d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertTrue("Call logs should be deleted", mContactsProvider.isCallLogDeleted()); 192d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 193d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 194d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Test 19528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka public void testSettingsObserver_disableDemoMode() throws Exception { 196d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final RetailDemoModeService.SettingsObserver observer = 197d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.new SettingsObserver(new Handler(Looper.getMainLooper())); 198d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final Uri deviceDemoModeUri = Settings.Global.getUriFor(Settings.Global.DEVICE_DEMO_MODE); 19928537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka when(mUm.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT, UserHandle.SYSTEM)) 20028537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka .thenReturn(false); 20128537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka Settings.Global.putInt(mContentResolver, Settings.Global.PACKAGE_VERIFIER_ENABLE, 1); 202d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // Settings.Global.DEVICE_DEMO_MODE has been set to 1 initially. 203d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka observer.onChange(false, deviceDemoModeUri); 20428537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka final ArgumentCaptor<BroadcastReceiver> receiver = 20528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka ArgumentCaptor.forClass(BroadcastReceiver.class); 20628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka verify(mContext).registerReceiver(receiver.capture(), any(IntentFilter.class)); 207d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 20828537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka Settings.Global.putInt(mContentResolver, Settings.Global.PACKAGE_VERIFIER_ENABLE, 0); 209d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka new File(mTestPreloadsDir, "dir1").mkdirs(); 210d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka new File(mTestPreloadsDir, "file1").createNewFile(); 211d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Settings.Global.putInt(mContentResolver, Settings.Global.DEVICE_DEMO_MODE, 0); 212d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka observer.onChange(false, deviceDemoModeUri); 21328537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka verify(mContext).unregisterReceiver(receiver.getValue()); 21428537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka verify(mUm).setUserRestriction(UserManager.DISALLOW_SAFE_BOOT, false, UserHandle.SYSTEM); 21528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka assertEquals("Package verifier enable value has not been reset", 1, 21628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka Settings.Global.getInt(mContentResolver, Settings.Global.PACKAGE_VERIFIER_ENABLE)); 217d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Thread.sleep(20); // Wait for the deletion to complete. 218d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // verify that the preloaded directory is emptied. 219d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka assertEquals("Preloads directory is not emptied", 220d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 0, mTestPreloadsDir.list().length); 221d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 222d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 223d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Test 22428537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka public void testSettingsObserver_enableDemoMode() throws Exception { 22528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka final RetailDemoModeService.SettingsObserver observer = 22628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka mService.new SettingsObserver(new Handler(Looper.getMainLooper())); 22728537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka final Uri deviceDemoModeUri = Settings.Global.getUriFor(Settings.Global.DEVICE_DEMO_MODE); 22828537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka // Settings.Global.DEVICE_DEMO_MODE has been set to 1 initially. 22928537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka observer.onChange(false, deviceDemoModeUri); 23028537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka assertEquals(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED + " property not set", 23128537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka "1", mInjector.systemPropertiesGet(SYSTEM_PROPERTY_RETAIL_DEMO_ENABLED)); 23228537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka 23328537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka final ArgumentCaptor<IntentFilter> intentFilter = 23428537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka ArgumentCaptor.forClass(IntentFilter.class); 23528537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka verify(mContext).registerReceiver(any(BroadcastReceiver.class), intentFilter.capture()); 23628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka assertTrue("Not registered for " + Intent.ACTION_SCREEN_OFF, 23728537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka intentFilter.getValue().hasAction(Intent.ACTION_SCREEN_OFF)); 23828537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka } 23928537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka 24028537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka @Test 241d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka public void testSwitchToDemoUser() { 242d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka // To make the RetailDemoModeService update it's internal state. 243d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.onBootPhase(SystemService.PHASE_THIRD_PARTY_APPS_CAN_START); 244d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final RetailDemoModeService.SettingsObserver observer = 245d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.new SettingsObserver(new Handler(Looper.getMainLooper())); 246d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka observer.onChange(false, Settings.Global.getUriFor(Settings.Global.DEVICE_DEMO_MODE)); 247d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 248d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final UserInfo userInfo = new UserInfo(TEST_DEMO_USER, "demo_user", 249d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka UserInfo.FLAG_DEMO | UserInfo.FLAG_EPHEMERAL); 250d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka when(mUm.getUserInfo(TEST_DEMO_USER)).thenReturn(userInfo); 251cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla when(mWifiManager.isWifiEnabled()).thenReturn(false); 252d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final int minVolume = -111; 253d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka for (int stream : RetailDemoModeService.VOLUME_STREAMS_TO_MUTE) { 254d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka when(mAudioManager.getStreamMinVolume(stream)).thenReturn(minVolume); 255d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 256d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 257d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mService.onSwitchUser(TEST_DEMO_USER); 258d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mAmi).updatePersistentConfigurationForUser(mConfiguration, TEST_DEMO_USER); 259d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka for (int stream : RetailDemoModeService.VOLUME_STREAMS_TO_MUTE) { 260d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mAudioManager).setStreamVolume(stream, minVolume, 0); 261d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 262d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka verify(mLockPatternUtils).setLockScreenDisabled(true, TEST_DEMO_USER); 263cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla verify(mWifiManager).setWifiEnabled(true); 264d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 265d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 266d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private void setCameraPackage(String pkgName) { 267d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final ResolveInfo ri = new ResolveInfo(); 268d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka final ActivityInfo ai = new ActivityInfo(); 269d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka ai.packageName = pkgName; 270d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka ri.activityInfo = ai; 271d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka when(mPm.resolveActivityAsUser( 272d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka argThat(new IntentMatcher(MediaStore.ACTION_IMAGE_CAPTURE)), 273d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka anyInt(), 274d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka eq(TEST_DEMO_USER))).thenReturn(ri); 275d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 276d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 277d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private class IntentMatcher extends ArgumentMatcher<Intent> { 278d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private final Intent mIntent; 279d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 280d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka IntentMatcher(String action) { 281d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mIntent = new Intent(action); 282d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 283d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 284d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 285192bb0bc54f6bb418f5778fe26eb2e68514290fbPaul Duffin public boolean matchesObject(Object argument) { 286d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka if (argument instanceof Intent) { 287d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return ((Intent) argument).filterEquals(mIntent); 288d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 289d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return false; 290d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 291d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 292d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 293192bb0bc54f6bb418f5778fe26eb2e68514290fbPaul Duffin public String toString() { 294192bb0bc54f6bb418f5778fe26eb2e68514290fbPaul Duffin return "Expected: " + mIntent; 295d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 296d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 297d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 298d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private class MockContactsProvider extends MockContentProvider { 299d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private boolean mCallLogDeleted; 300d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 301d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka MockContactsProvider(Context context) { 302d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka super(context); 303d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 304d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 305d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 306d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka public int delete(Uri uri, String selection, String[] selectionArgs) { 307d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka if (CallLog.Calls.CONTENT_URI.equals(uri)) { 308d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mCallLogDeleted = true; 309d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 310d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return 0; 311d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 312d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 313d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka public boolean isCallLogDeleted() { 314d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mCallLogDeleted; 315d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 316d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 317d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 318233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka private class MockPreloadAppsInstaller extends PreloadAppsInstaller { 319233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka MockPreloadAppsInstaller(Context context) { 320233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka super(context); 321233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka } 322233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka 323233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka @Override 324233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka public void installApps(int userId) { 325233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka } 326233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka } 327233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka 328d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private class TestInjector extends Injector { 329d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka private ArrayMap<String, String> mSystemProperties = new ArrayMap<>(); 330d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 331d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka TestInjector() { 332d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka super(mContext); 333d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 334d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 335d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 336d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Context getContext() { 337d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mContext; 338d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 339d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 340d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 341d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka UserManager getUserManager() { 342d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mUm; 343d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 344d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 345d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 346cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla WifiManager getWifiManager() { 347cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla return mWifiManager; 348cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla } 349cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla 350cd47cec57d082aab910fd7a2094cd01baa4c65f3Suprabh Shukla @Override 351d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void switchUser(int userId) { 352d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka if (mLatch != null) { 353d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mLatch.countDown(); 354d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 355d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 356d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 357d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 358d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka AudioManager getAudioManager() { 359d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mAudioManager; 360d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 361d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 362d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 363d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka NotificationManager getNotificationManager() { 364d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mNm; 365d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 366d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 367d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 368d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka ActivityManagerInternal getActivityManagerInternal() { 369d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mAmi; 370d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 371d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 372d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 373d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka PackageManager getPackageManager() { 374d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mPm; 375d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 376d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 377d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 378d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka IPackageManager getIPackageManager() { 379d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mIpm; 380d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 381d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 382d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 383d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka ContentResolver getContentResolver() { 384d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mContentResolver; 385d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 386d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 387d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 388d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka PreloadAppsInstaller getPreloadAppsInstaller() { 389d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mPreloadAppsInstaller; 390d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 391d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 392d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 393d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void systemPropertiesSet(String key, String value) { 394d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka mSystemProperties.put(key, value); 395d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 396d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 397d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 398d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void turnOffAllFlashLights(String[] cameraIdsWithFlash) { 399d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 400d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 401d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 402d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void initializeWakeLock() { 403d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 404d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 405d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 40628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka void destroyWakeLock() { 40728537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka } 40828537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka 40928537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka @Override 410d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka boolean isWakeLockHeld() { 411d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return false; 412d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 413d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 414d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 415d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void acquireWakeLock() { 416d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 417d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 418d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 419d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void releaseWakeLock() { 420d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 421d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 422d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 423d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void logSessionDuration(int duration) { 424d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 425d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 426d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 427d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka void logSessionCount(int count) { 428d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 429d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 430d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 431d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Configuration getSystemUsersConfiguration() { 432d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mConfiguration; 433d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 434d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 435d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 436d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka LockPatternUtils getLockPatternUtils() { 437d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mLockPatternUtils; 438d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 439d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 440d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 441d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka Notification createResetNotification() { 442d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return null; 443d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 444d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 445d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka @Override 446d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka File getDataPreloadsDirectory() { 447d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka return mTestPreloadsDir; 448d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 449d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 45028537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka @Override 4516e68706f67c84a714bc9d765cf3f30d1e43ae9ceFyodor Kupolov File getDataPreloadsFileCacheDirectory() { 4526e68706f67c84a714bc9d765cf3f30d1e43ae9ceFyodor Kupolov return new File(mTestPreloadsDir, "file_cache"); 4536e68706f67c84a714bc9d765cf3f30d1e43ae9ceFyodor Kupolov } 4546e68706f67c84a714bc9d765cf3f30d1e43ae9ceFyodor Kupolov 4556e68706f67c84a714bc9d765cf3f30d1e43ae9ceFyodor Kupolov @Override 45628537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka void publishLocalService(RetailDemoModeService service, 45728537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka RetailDemoModeServiceInternal localService) { 458d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 459d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka 46028537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka String systemPropertiesGet(String key) { 46128537b6ae92a3211b5993ac00482ef905a911244Sudheer Shanka return mSystemProperties.get(key); 462d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 463d9fcb69b81e49cc106d6c53884fdc3aee4822e81Sudheer Shanka } 464233cc3ef10d025276ffa280e8d4b58969860ac24Sudheer Shanka} 465