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