WirelessSettings.java revision 0cb3743e93aef81e7669f1e6c81184559e0f8154
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2007 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
190cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.bluetooth.BluetoothAdapter;
2071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport android.content.Intent;
21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiManager;
22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
230cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.os.IBinder;
240cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.os.ServiceManager;
2571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport android.os.SystemProperties;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference;
2783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.preference.Preference;
2883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.preference.PreferenceActivity;
290cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport android.preference.PreferenceScreen;
3083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.provider.Settings;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
3271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport com.android.internal.telephony.TelephonyIntents;
3371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhangimport com.android.internal.telephony.TelephonyProperties;
340cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport com.android.settings.bluetooth.BluetoothEnabler;
350cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chanimport com.android.settings.wifi.WifiEnabler;
3671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang
37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class WirelessSettings extends PreferenceActivity {
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane";
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth";
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEY_TOGGLE_WIFI = "toggle_wifi";
4283bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood    private static final String KEY_WIFI_SETTINGS = "wifi_settings";
430cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan    private static final String KEY_BT_SETTINGS = "bt_settings";
4483bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood    private static final String KEY_VPN_SETTINGS = "vpn_settings";
4571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    public static final String EXIT_ECM_RESULT = "exit_ecm_result";
4671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    public static final int REQUEST_CODE_EXIT_ECM = 1;
47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private WifiEnabler mWifiEnabler;
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private AirplaneModeEnabler mAirplaneModeEnabler;
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private BluetoothEnabler mBtEnabler;
5171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    private CheckBoxPreference mAirplaneModePreference;
5271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang
5371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    /**
5471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     * Invoked on each preference click in this hierarchy, overrides
5571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     * PreferenceActivity's implementation.  Used to make sure we track the
5671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     * preference click events.
5771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang     */
5871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    @Override
5971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
6071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        if ( (preference == mAirplaneModePreference) &&
6171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                (Boolean.parseBoolean(
6271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                    SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) ) {
6371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            // In ECM mode launch ECM app dialog
6471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            startActivityForResult(
6571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                new Intent(TelephonyIntents.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null),
6671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                REQUEST_CODE_EXIT_ECM);
6771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang
6871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            return true;
6971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        }
7071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        else {
7171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            // Let the intents be launched by the Preference manager
7271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            return false;
7371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        }
7471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    }
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onCreate(Bundle savedInstanceState) {
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(savedInstanceState);
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.wireless_settings);
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        initToggles();
8371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onResume() {
88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mWifiEnabler.resume();
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mBtEnabler.resume();
92d3da3379a480ce16cac735d88855b6e3d76597d3Michael Chan        mAirplaneModeEnabler.resume();
93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onPause() {
97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mWifiEnabler.pause();
100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mAirplaneModeEnabler.pause();
101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mBtEnabler.pause();
102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void initToggles() {
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
10683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        Preference airplanePreference = findPreference(KEY_TOGGLE_AIRPLANE);
10783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        Preference wifiPreference = findPreference(KEY_TOGGLE_WIFI);
10883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        Preference btPreference = findPreference(KEY_TOGGLE_BLUETOOTH);
10983bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        Preference wifiSettings = findPreference(KEY_WIFI_SETTINGS);
11083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        Preference vpnSettings = findPreference(KEY_VPN_SETTINGS);
11183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood
1120cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan        IBinder b = ServiceManager.getService(BluetoothAdapter.BLUETOOTH_SERVICE);
1130cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan        if (b == null) {
1140cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan            // Disable BT Settings if BT service is not available.
1150cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan            Preference btSettings = findPreference(KEY_BT_SETTINGS);
1160cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan            btSettings.setEnabled(false);
1170cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan        }
1180cb3743e93aef81e7669f1e6c81184559e0f8154Michael Chan
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mWifiEnabler = new WifiEnabler(
12083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood                this, (WifiManager) getSystemService(WIFI_SERVICE),
12183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood                (CheckBoxPreference) wifiPreference);
122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mAirplaneModeEnabler = new AirplaneModeEnabler(
12383bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood                this, (CheckBoxPreference) airplanePreference);
12483bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        mBtEnabler = new BluetoothEnabler(this, (CheckBoxPreference) btPreference);
12583bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood
12683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        // manually set up dependencies for Wifi if its radio is not toggleable in airplane mode
12783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        String toggleableRadios = Settings.System.getString(getContentResolver(),
12883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood                Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
12983bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        if (toggleableRadios == null || !toggleableRadios.contains(Settings.System.RADIO_WIFI)) {
13083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood            wifiPreference.setDependency(airplanePreference.getKey());
13183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood            wifiSettings.setDependency(airplanePreference.getKey());
13283bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood            vpnSettings.setDependency(airplanePreference.getKey());
13383bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood        }
134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
13583bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood
13671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    @Override
13771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
13871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        switch(requestCode) {
13971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        case REQUEST_CODE_EXIT_ECM:
14071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            Boolean isChoiceYes =
14171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                data.getBooleanExtra(EXIT_ECM_RESULT, false);
14271cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            // Set Airplane mode based on the return value and checkbox state
14371cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            mAirplaneModeEnabler.setAirplaneModeInECM(isChoiceYes,
14471cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang                    mAirplaneModePreference.isChecked());
14571cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            break;
14671cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang
14771cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        default:
14871cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang            break;
14971cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang        }
15071cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang    }
15171cc49e480e7dfd5d0986d7600d0c73aecdbdf93Chouting Zhang
152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
153