package com.android.settings.bluetooth; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.provider.Settings; import android.util.Log; import android.preference.Preference; import android.preference.CheckBoxPreference; import android.preference.PreferenceScreen; import android.preference.PreferenceActivity; import android.provider.Settings.System; import com.android.settings.R; public class BluetoothAdvancedSettings extends PreferenceActivity { public static final String TAG = "BluetoothAdvancedSettings"; public static final String PREF_KEY_FTP = "bt_ftp_svc"; public static final String PREF_KEY_PBAP = "bt_pbap_svc"; public static final String PREF_KEY_OPP = "bt_opp_svc"; public static final String PREF_KEY_BIP = "bt_bip_svc"; public static final String PREF_KEY_HID = "bt_hid_svc"; public static final String PREF_KEY_PAN = "bt_pan_svc"; public static final String SYSTEM_SETTINGS_FTP_STATE = "bluetooth_ftp_state"; public static final String SYSTEM_SETTINGS_PBAP_STATE = "bluetooth_pbap_state"; public static final String SYSTEM_SETTINGS_OPP_STATE = "bluetooth_opp_state"; public static final String SYSTEM_SETTINGS_BIP_STATE = "bluetooth_bip_state"; public static final String SYSTEM_SETTINGS_HID_STATE = "bluetooth_hid_state"; public static final String SYSTEM_SETTINGS_PAN_STATE = "bluetooth_pan_state"; private static final String FTP_ACTION_ENABLED_CHANGED = "android.bluetooth.ftp.action.ENABLED_CHANGED"; private static final String PBAP_ACTION_ENABLED_CHANGED = "android.bluetooth.pbap.action.ENABLED_CHANGED"; private static final String OPP_ACTION_ENABLED_CHANGED = "android.bluetooth.opp.action.ENABLED_CHANGED"; private static final String BIP_ACTION_ENABLED_CHANGED = "android.bluetooth.bip.action.ENABLED_CHANGED"; private static final String HID_ACTION_ENABLED_CHANGED = "android.bluetooth.hid.action.ENABLED_CHANGED"; private static final String PAN_ACTION_ENABLED_CHANGED = "android.bluetooth.pan.action.ENABLED_CHANGED"; private static final String EXTRA_STATE = "android.bluetooth.service.extra.STATE"; private static final int STATE_DISABLED = 0; private static final int STATE_ENABLED = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.bluetooth_advanced_settings); ((CheckBoxPreference)findPreference(PREF_KEY_FTP)) .setChecked(getSetting(SYSTEM_SETTINGS_FTP_STATE)); ((CheckBoxPreference)findPreference(PREF_KEY_PBAP)) .setChecked(getSetting(SYSTEM_SETTINGS_PBAP_STATE)); ((CheckBoxPreference)findPreference(PREF_KEY_OPP)) .setChecked(getSetting(SYSTEM_SETTINGS_OPP_STATE)); ((CheckBoxPreference)findPreference(PREF_KEY_BIP)) .setChecked(getSetting(SYSTEM_SETTINGS_BIP_STATE)); ((CheckBoxPreference)findPreference(PREF_KEY_HID)) .setChecked(getSetting(SYSTEM_SETTINGS_HID_STATE)); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); } @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { String key = preference.getKey(); boolean isEnabled = ((CheckBoxPreference)preference).isChecked(); if (PREF_KEY_FTP.equals(key)) { Log.v(TAG,"FTP Server Toggled to " + isEnabled); setSetting(SYSTEM_SETTINGS_FTP_STATE, isEnabled); broadcastServiceToggled(FTP_ACTION_ENABLED_CHANGED,isEnabled); return true; } else if (PREF_KEY_PBAP.equals(key)) { Log.v(TAG,"PBAP Server Toggled to " + ((CheckBoxPreference)preference).isChecked()); setSetting(SYSTEM_SETTINGS_PBAP_STATE,isEnabled); broadcastServiceToggled(PBAP_ACTION_ENABLED_CHANGED,isEnabled); return true; } else if (PREF_KEY_OPP.equals(key)) { Log.v(TAG,"OPP Server Toggled to " + ((CheckBoxPreference)preference).isChecked()); setSetting(SYSTEM_SETTINGS_OPP_STATE,isEnabled); broadcastServiceToggled(OPP_ACTION_ENABLED_CHANGED,isEnabled); return true; } else if (PREF_KEY_BIP.equals(key)) { Log.v(TAG,"BIP Server Toggled to " + ((CheckBoxPreference)preference).isChecked()); setSetting(SYSTEM_SETTINGS_BIP_STATE,isEnabled); broadcastServiceToggled(BIP_ACTION_ENABLED_CHANGED,isEnabled); return true; } else if (PREF_KEY_HID.equals(key)) { Log.v(TAG,"HID Server Toggled to " + ((CheckBoxPreference)preference).isChecked()); setSetting(SYSTEM_SETTINGS_HID_STATE,isEnabled); broadcastServiceToggled(HID_ACTION_ENABLED_CHANGED,isEnabled); return true; } return super.onPreferenceTreeClick(preferenceScreen, preference); } private void broadcastServiceToggled(String action, boolean isEnabled) { int state = isEnabled ? STATE_ENABLED : STATE_DISABLED; Intent intent = new Intent(action); intent.putExtra(EXTRA_STATE, state); sendBroadcast(intent); } // the default setting is enabled for all services private boolean getSetting(String systemSettingsKey) { return getSetting(systemSettingsKey, STATE_ENABLED); } private boolean getSetting(String systemSettingsKey, int defaultValue) { return Settings.System.getInt(getContentResolver(), systemSettingsKey, defaultValue) == STATE_ENABLED; } private void setSetting(String systemSettingsKey, boolean isEnabled) { int state = isEnabled ? STATE_ENABLED : STATE_DISABLED; if (!Settings.System.putInt(getContentResolver(), systemSettingsKey, state)) Log.w(TAG,"could not set setting " + systemSettingsKey + " to " + state); } }