1*635a8641SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors. All rights reserved. 2*635a8641SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*635a8641SAndroid Build Coastguard Worker# found in the LICENSE file. 4*635a8641SAndroid Build Coastguard Worker 5*635a8641SAndroid Build Coastguard Workerimport logging 6*635a8641SAndroid Build Coastguard Worker 7*635a8641SAndroid Build Coastguard Workerfrom pylib import content_settings 8*635a8641SAndroid Build Coastguard Worker 9*635a8641SAndroid Build Coastguard Worker_LOCK_SCREEN_SETTINGS_PATH = '/data/system/locksettings.db' 10*635a8641SAndroid Build Coastguard Worker_ALTERNATE_LOCK_SCREEN_SETTINGS_PATH = ( 11*635a8641SAndroid Build Coastguard Worker '/data/data/com.android.providers.settings/databases/settings.db') 12*635a8641SAndroid Build Coastguard WorkerPASSWORD_QUALITY_UNSPECIFIED = '0' 13*635a8641SAndroid Build Coastguard Worker_COMPATIBLE_BUILD_TYPES = ['userdebug', 'eng'] 14*635a8641SAndroid Build Coastguard Worker 15*635a8641SAndroid Build Coastguard Worker 16*635a8641SAndroid Build Coastguard Workerdef ConfigureContentSettings(device, desired_settings): 17*635a8641SAndroid Build Coastguard Worker """Configures device content setings from a list. 18*635a8641SAndroid Build Coastguard Worker 19*635a8641SAndroid Build Coastguard Worker Many settings are documented at: 20*635a8641SAndroid Build Coastguard Worker http://developer.android.com/reference/android/provider/Settings.Global.html 21*635a8641SAndroid Build Coastguard Worker http://developer.android.com/reference/android/provider/Settings.Secure.html 22*635a8641SAndroid Build Coastguard Worker http://developer.android.com/reference/android/provider/Settings.System.html 23*635a8641SAndroid Build Coastguard Worker 24*635a8641SAndroid Build Coastguard Worker Many others are undocumented. 25*635a8641SAndroid Build Coastguard Worker 26*635a8641SAndroid Build Coastguard Worker Args: 27*635a8641SAndroid Build Coastguard Worker device: A DeviceUtils instance for the device to configure. 28*635a8641SAndroid Build Coastguard Worker desired_settings: A list of (table, [(key: value), ...]) for all 29*635a8641SAndroid Build Coastguard Worker settings to configure. 30*635a8641SAndroid Build Coastguard Worker """ 31*635a8641SAndroid Build Coastguard Worker for table, key_value in desired_settings: 32*635a8641SAndroid Build Coastguard Worker settings = content_settings.ContentSettings(table, device) 33*635a8641SAndroid Build Coastguard Worker for key, value in key_value: 34*635a8641SAndroid Build Coastguard Worker settings[key] = value 35*635a8641SAndroid Build Coastguard Worker logging.info('\n%s %s', table, (80 - len(table)) * '-') 36*635a8641SAndroid Build Coastguard Worker for key, value in sorted(settings.items()): 37*635a8641SAndroid Build Coastguard Worker logging.info('\t%s: %s', key, value) 38*635a8641SAndroid Build Coastguard Worker 39*635a8641SAndroid Build Coastguard Worker 40*635a8641SAndroid Build Coastguard Workerdef SetLockScreenSettings(device): 41*635a8641SAndroid Build Coastguard Worker """Sets lock screen settings on the device. 42*635a8641SAndroid Build Coastguard Worker 43*635a8641SAndroid Build Coastguard Worker On certain device/Android configurations we need to disable the lock screen in 44*635a8641SAndroid Build Coastguard Worker a different database. Additionally, the password type must be set to 45*635a8641SAndroid Build Coastguard Worker DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED. 46*635a8641SAndroid Build Coastguard Worker Lock screen settings are stored in sqlite on the device in: 47*635a8641SAndroid Build Coastguard Worker /data/system/locksettings.db 48*635a8641SAndroid Build Coastguard Worker 49*635a8641SAndroid Build Coastguard Worker IMPORTANT: The first column is used as a primary key so that all rows with the 50*635a8641SAndroid Build Coastguard Worker same value for that column are removed from the table prior to inserting the 51*635a8641SAndroid Build Coastguard Worker new values. 52*635a8641SAndroid Build Coastguard Worker 53*635a8641SAndroid Build Coastguard Worker Args: 54*635a8641SAndroid Build Coastguard Worker device: A DeviceUtils instance for the device to configure. 55*635a8641SAndroid Build Coastguard Worker 56*635a8641SAndroid Build Coastguard Worker Raises: 57*635a8641SAndroid Build Coastguard Worker Exception if the setting was not properly set. 58*635a8641SAndroid Build Coastguard Worker """ 59*635a8641SAndroid Build Coastguard Worker if device.build_type not in _COMPATIBLE_BUILD_TYPES: 60*635a8641SAndroid Build Coastguard Worker logging.warning('Unable to disable lockscreen on %s builds.', 61*635a8641SAndroid Build Coastguard Worker device.build_type) 62*635a8641SAndroid Build Coastguard Worker return 63*635a8641SAndroid Build Coastguard Worker 64*635a8641SAndroid Build Coastguard Worker def get_lock_settings(table): 65*635a8641SAndroid Build Coastguard Worker return [(table, 'lockscreen.disabled', '1'), 66*635a8641SAndroid Build Coastguard Worker (table, 'lockscreen.password_type', PASSWORD_QUALITY_UNSPECIFIED), 67*635a8641SAndroid Build Coastguard Worker (table, 'lockscreen.password_type_alternate', 68*635a8641SAndroid Build Coastguard Worker PASSWORD_QUALITY_UNSPECIFIED)] 69*635a8641SAndroid Build Coastguard Worker 70*635a8641SAndroid Build Coastguard Worker if device.FileExists(_LOCK_SCREEN_SETTINGS_PATH): 71*635a8641SAndroid Build Coastguard Worker db = _LOCK_SCREEN_SETTINGS_PATH 72*635a8641SAndroid Build Coastguard Worker locksettings = get_lock_settings('locksettings') 73*635a8641SAndroid Build Coastguard Worker columns = ['name', 'user', 'value'] 74*635a8641SAndroid Build Coastguard Worker generate_values = lambda k, v: [k, '0', v] 75*635a8641SAndroid Build Coastguard Worker elif device.FileExists(_ALTERNATE_LOCK_SCREEN_SETTINGS_PATH): 76*635a8641SAndroid Build Coastguard Worker db = _ALTERNATE_LOCK_SCREEN_SETTINGS_PATH 77*635a8641SAndroid Build Coastguard Worker locksettings = get_lock_settings('secure') + get_lock_settings('system') 78*635a8641SAndroid Build Coastguard Worker columns = ['name', 'value'] 79*635a8641SAndroid Build Coastguard Worker generate_values = lambda k, v: [k, v] 80*635a8641SAndroid Build Coastguard Worker else: 81*635a8641SAndroid Build Coastguard Worker logging.warning('Unable to find database file to set lock screen settings.') 82*635a8641SAndroid Build Coastguard Worker return 83*635a8641SAndroid Build Coastguard Worker 84*635a8641SAndroid Build Coastguard Worker for table, key, value in locksettings: 85*635a8641SAndroid Build Coastguard Worker # Set the lockscreen setting for default user '0' 86*635a8641SAndroid Build Coastguard Worker values = generate_values(key, value) 87*635a8641SAndroid Build Coastguard Worker 88*635a8641SAndroid Build Coastguard Worker cmd = """begin transaction; 89*635a8641SAndroid Build Coastguard Workerdelete from '%(table)s' where %(primary_key)s='%(primary_value)s'; 90*635a8641SAndroid Build Coastguard Workerinsert into '%(table)s' (%(columns)s) values (%(values)s); 91*635a8641SAndroid Build Coastguard Workercommit transaction;""" % { 92*635a8641SAndroid Build Coastguard Worker 'table': table, 93*635a8641SAndroid Build Coastguard Worker 'primary_key': columns[0], 94*635a8641SAndroid Build Coastguard Worker 'primary_value': values[0], 95*635a8641SAndroid Build Coastguard Worker 'columns': ', '.join(columns), 96*635a8641SAndroid Build Coastguard Worker 'values': ', '.join(["'%s'" % value for value in values]) 97*635a8641SAndroid Build Coastguard Worker } 98*635a8641SAndroid Build Coastguard Worker output_msg = device.RunShellCommand('sqlite3 %s "%s"' % (db, cmd), 99*635a8641SAndroid Build Coastguard Worker as_root=True) 100*635a8641SAndroid Build Coastguard Worker if output_msg: 101*635a8641SAndroid Build Coastguard Worker logging.info(' '.join(output_msg)) 102*635a8641SAndroid Build Coastguard Worker 103*635a8641SAndroid Build Coastguard Worker 104*635a8641SAndroid Build Coastguard WorkerENABLE_LOCATION_SETTINGS = [ 105*635a8641SAndroid Build Coastguard Worker # Note that setting these in this order is required in order for all of 106*635a8641SAndroid Build Coastguard Worker # them to take and stick through a reboot. 107*635a8641SAndroid Build Coastguard Worker ('com.google.settings/partner', [ 108*635a8641SAndroid Build Coastguard Worker ('use_location_for_services', 1), 109*635a8641SAndroid Build Coastguard Worker ]), 110*635a8641SAndroid Build Coastguard Worker ('settings/secure', [ 111*635a8641SAndroid Build Coastguard Worker # Ensure Geolocation is enabled and allowed for tests. 112*635a8641SAndroid Build Coastguard Worker ('location_providers_allowed', 'gps,network'), 113*635a8641SAndroid Build Coastguard Worker ]), 114*635a8641SAndroid Build Coastguard Worker ('com.google.settings/partner', [ 115*635a8641SAndroid Build Coastguard Worker ('network_location_opt_in', 1), 116*635a8641SAndroid Build Coastguard Worker ]) 117*635a8641SAndroid Build Coastguard Worker] 118*635a8641SAndroid Build Coastguard Worker 119*635a8641SAndroid Build Coastguard WorkerDISABLE_LOCATION_SETTINGS = [ 120*635a8641SAndroid Build Coastguard Worker ('com.google.settings/partner', [ 121*635a8641SAndroid Build Coastguard Worker ('use_location_for_services', 0), 122*635a8641SAndroid Build Coastguard Worker ]), 123*635a8641SAndroid Build Coastguard Worker ('settings/secure', [ 124*635a8641SAndroid Build Coastguard Worker # Ensure Geolocation is disabled. 125*635a8641SAndroid Build Coastguard Worker ('location_providers_allowed', ''), 126*635a8641SAndroid Build Coastguard Worker ]), 127*635a8641SAndroid Build Coastguard Worker] 128*635a8641SAndroid Build Coastguard Worker 129*635a8641SAndroid Build Coastguard WorkerENABLE_MOCK_LOCATION_SETTINGS = [ 130*635a8641SAndroid Build Coastguard Worker ('settings/secure', [ 131*635a8641SAndroid Build Coastguard Worker ('mock_location', 1), 132*635a8641SAndroid Build Coastguard Worker ]), 133*635a8641SAndroid Build Coastguard Worker] 134*635a8641SAndroid Build Coastguard Worker 135*635a8641SAndroid Build Coastguard WorkerDISABLE_MOCK_LOCATION_SETTINGS = [ 136*635a8641SAndroid Build Coastguard Worker ('settings/secure', [ 137*635a8641SAndroid Build Coastguard Worker ('mock_location', 0), 138*635a8641SAndroid Build Coastguard Worker ]), 139*635a8641SAndroid Build Coastguard Worker] 140*635a8641SAndroid Build Coastguard Worker 141*635a8641SAndroid Build Coastguard WorkerDETERMINISTIC_DEVICE_SETTINGS = [ 142*635a8641SAndroid Build Coastguard Worker ('settings/global', [ 143*635a8641SAndroid Build Coastguard Worker ('assisted_gps_enabled', 0), 144*635a8641SAndroid Build Coastguard Worker 145*635a8641SAndroid Build Coastguard Worker # Disable "auto time" and "auto time zone" to avoid network-provided time 146*635a8641SAndroid Build Coastguard Worker # to overwrite the device's datetime and timezone synchronized from host 147*635a8641SAndroid Build Coastguard Worker # when running tests later. See b/6569849. 148*635a8641SAndroid Build Coastguard Worker ('auto_time', 0), 149*635a8641SAndroid Build Coastguard Worker ('auto_time_zone', 0), 150*635a8641SAndroid Build Coastguard Worker 151*635a8641SAndroid Build Coastguard Worker ('development_settings_enabled', 1), 152*635a8641SAndroid Build Coastguard Worker 153*635a8641SAndroid Build Coastguard Worker # Flag for allowing ActivityManagerService to send ACTION_APP_ERROR intents 154*635a8641SAndroid Build Coastguard Worker # on application crashes and ANRs. If this is disabled, the crash/ANR dialog 155*635a8641SAndroid Build Coastguard Worker # will never display the "Report" button. 156*635a8641SAndroid Build Coastguard Worker # Type: int ( 0 = disallow, 1 = allow ) 157*635a8641SAndroid Build Coastguard Worker ('send_action_app_error', 0), 158*635a8641SAndroid Build Coastguard Worker 159*635a8641SAndroid Build Coastguard Worker ('stay_on_while_plugged_in', 3), 160*635a8641SAndroid Build Coastguard Worker 161*635a8641SAndroid Build Coastguard Worker ('verifier_verify_adb_installs', 0), 162*635a8641SAndroid Build Coastguard Worker ]), 163*635a8641SAndroid Build Coastguard Worker ('settings/secure', [ 164*635a8641SAndroid Build Coastguard Worker ('allowed_geolocation_origins', 165*635a8641SAndroid Build Coastguard Worker 'http://www.google.co.uk http://www.google.com'), 166*635a8641SAndroid Build Coastguard Worker 167*635a8641SAndroid Build Coastguard Worker # Ensure that we never get random dialogs like "Unfortunately the process 168*635a8641SAndroid Build Coastguard Worker # android.process.acore has stopped", which steal the focus, and make our 169*635a8641SAndroid Build Coastguard Worker # automation fail (because the dialog steals the focus then mistakenly 170*635a8641SAndroid Build Coastguard Worker # receives the injected user input events). 171*635a8641SAndroid Build Coastguard Worker ('anr_show_background', 0), 172*635a8641SAndroid Build Coastguard Worker 173*635a8641SAndroid Build Coastguard Worker ('lockscreen.disabled', 1), 174*635a8641SAndroid Build Coastguard Worker 175*635a8641SAndroid Build Coastguard Worker ('screensaver_enabled', 0), 176*635a8641SAndroid Build Coastguard Worker 177*635a8641SAndroid Build Coastguard Worker ('skip_first_use_hints', 1), 178*635a8641SAndroid Build Coastguard Worker ]), 179*635a8641SAndroid Build Coastguard Worker ('settings/system', [ 180*635a8641SAndroid Build Coastguard Worker # Don't want devices to accidentally rotate the screen as that could 181*635a8641SAndroid Build Coastguard Worker # affect performance measurements. 182*635a8641SAndroid Build Coastguard Worker ('accelerometer_rotation', 0), 183*635a8641SAndroid Build Coastguard Worker 184*635a8641SAndroid Build Coastguard Worker ('lockscreen.disabled', 1), 185*635a8641SAndroid Build Coastguard Worker 186*635a8641SAndroid Build Coastguard Worker # Turn down brightness and disable auto-adjust so that devices run cooler. 187*635a8641SAndroid Build Coastguard Worker ('screen_brightness', 5), 188*635a8641SAndroid Build Coastguard Worker ('screen_brightness_mode', 0), 189*635a8641SAndroid Build Coastguard Worker 190*635a8641SAndroid Build Coastguard Worker ('user_rotation', 0), 191*635a8641SAndroid Build Coastguard Worker ]), 192*635a8641SAndroid Build Coastguard Worker] 193*635a8641SAndroid Build Coastguard Worker 194*635a8641SAndroid Build Coastguard WorkerNETWORK_DISABLED_SETTINGS = [ 195*635a8641SAndroid Build Coastguard Worker ('settings/global', [ 196*635a8641SAndroid Build Coastguard Worker ('airplane_mode_on', 1), 197*635a8641SAndroid Build Coastguard Worker ('wifi_on', 0), 198*635a8641SAndroid Build Coastguard Worker ]), 199*635a8641SAndroid Build Coastguard Worker] 200