1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 194c0c2bea9e813cff0622968a9281e0c715af8349Joe Onoratoimport android.content.Intent; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 22a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayorimport android.preference.ListPreference; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 24a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayorimport android.preference.Preference.OnPreferenceChangeListener; 252c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunneimport android.preference.PreferenceScreen; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 282c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunnepublic class ApplicationSettings extends SettingsPreferenceFragment { 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 304c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato private static final String KEY_TOGGLE_ADVANCED_SETTINGS = "toggle_advanced_settings"; 31a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final String KEY_APP_INSTALL_LOCATION = "app_install_location"; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 33a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor // App installation location. Default is ask the user. 34a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final int APP_INSTALL_AUTO = 0; 35a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final int APP_INSTALL_DEVICE = 1; 36a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final int APP_INSTALL_SDCARD = 2; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 38a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final String APP_INSTALL_DEVICE_ID = "device"; 39a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final String APP_INSTALL_SDCARD_ID = "sdcard"; 40a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private static final String APP_INSTALL_AUTO_ID = "auto"; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 424c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato private CheckBoxPreference mToggleAdvancedSettings; 43a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private ListPreference mInstallLocation; 44a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 46d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle icicle) { 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.application_settings); 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 514c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato mToggleAdvancedSettings = (CheckBoxPreference)findPreference( 524c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato KEY_TOGGLE_ADVANCED_SETTINGS); 534c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato mToggleAdvancedSettings.setChecked(isAdvancedSettingsEnabled()); 54aa0e48f93993a3bc450bd4633843eaabff8eee74Joe Onorato getPreferenceScreen().removePreference(mToggleAdvancedSettings); 554c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato 564c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato // not ready for prime time yet 574c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato if (false) { 584c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato getPreferenceScreen().removePreference(mInstallLocation); 594c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato } 604c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato 61a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor mInstallLocation = (ListPreference) findPreference(KEY_APP_INSTALL_LOCATION); 62a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor // Is app default install location set? 635246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey boolean userSetInstLocation = (Settings.Global.getInt(getContentResolver(), 645246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.SET_INSTALL_LOCATION, 0) != 0); 65a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor if (!userSetInstLocation) { 66a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor getPreferenceScreen().removePreference(mInstallLocation); 67a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else { 68a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor mInstallLocation.setValue(getAppInstallLocation()); 69a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor mInstallLocation.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 70a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor public boolean onPreferenceChange(Preference preference, Object newValue) { 71a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor String value = (String) newValue; 72a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor handleUpdateAppInstallLocation(value); 73a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor return false; 74a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } 75a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor }); 76a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 79a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor protected void handleUpdateAppInstallLocation(final String value) { 80a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor if(APP_INSTALL_DEVICE_ID.equals(value)) { 815246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.putInt(getContentResolver(), 825246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_DEVICE); 83a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else if (APP_INSTALL_SDCARD_ID.equals(value)) { 845246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.putInt(getContentResolver(), 855246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_SDCARD); 86a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else if (APP_INSTALL_AUTO_ID.equals(value)) { 875246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.putInt(getContentResolver(), 885246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); 89a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else { 90a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor // Should not happen, default to prompt... 915246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.putInt(getContentResolver(), 925246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); 93a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } 94a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor mInstallLocation.setValue(value); 95a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } 96a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 992c88a877f88b142fa8fd36c1773ab484b5fd7338Gilles Debunne if (preference == mToggleAdvancedSettings) { 1004c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato boolean value = mToggleAdvancedSettings.isChecked(); 1014c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato setAdvancedSettingsEnabled(value); 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 103a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1074c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato private boolean isAdvancedSettingsEnabled() { 1084c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato return Settings.System.getInt(getContentResolver(), 1094c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato Settings.System.ADVANCED_SETTINGS, 1104c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato Settings.System.ADVANCED_SETTINGS_DEFAULT) > 0; 1114c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato } 1124c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato 1134c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato private void setAdvancedSettingsEnabled(boolean enabled) { 1144c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato int value = enabled ? 1 : 0; 1154c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato // Change the system setting 1164c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato Settings.Secure.putInt(getContentResolver(), Settings.System.ADVANCED_SETTINGS, value); 1174c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato // TODO: the settings thing should broadcast this for thread safety purposes. 1184c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato Intent intent = new Intent(Intent.ACTION_ADVANCED_SETTINGS_CHANGED); 1194c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato intent.putExtra("state", value); 1204c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato getActivity().sendBroadcast(intent); 1214c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato } 1224c0c2bea9e813cff0622968a9281e0c715af8349Joe Onorato 123a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor private String getAppInstallLocation() { 1245246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey int selectedLocation = Settings.Global.getInt(getContentResolver(), 1255246e7f76d5fe62f7ffd99e889d90116b37b7f35Jeff Sharkey Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); 126a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor if (selectedLocation == APP_INSTALL_DEVICE) { 127a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor return APP_INSTALL_DEVICE_ID; 128a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else if (selectedLocation == APP_INSTALL_SDCARD) { 129a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor return APP_INSTALL_SDCARD_ID; 130a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else if (selectedLocation == APP_INSTALL_AUTO) { 131a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor return APP_INSTALL_AUTO_ID; 132a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } else { 133a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor // Default value, should not happen. 134a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor return APP_INSTALL_AUTO_ID; 135a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } 136a110a718bac811c014b80c123a447e45ab1b1dd9Oscar Montemayor } 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 138