WifiEnabler.java revision 83bcc98af19597a213a8d174e8f1b47453d513ce
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.wifi; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport static android.net.wifi.WifiManager.WIFI_STATE_DISABLED; 20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport static android.net.wifi.WifiManager.WIFI_STATE_DISABLING; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport static android.net.wifi.WifiManager.WIFI_STATE_ENABLED; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport static android.net.wifi.WifiManager.WIFI_STATE_ENABLING; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.settings.R; 2683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport com.android.settings.AirplaneModeEnabler; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.NetworkInfo; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.net.wifi.WifiManager; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 3683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwoodimport android.provider.Settings; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Config; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class WifiEnabler implements Preference.OnPreferenceChangeListener { 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final boolean LOCAL_LOGD = Config.LOGD || WifiLayer.LOGV; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String TAG = "SettingsWifiEnabler"; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final Context mContext; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final WifiManager mWifiManager; 48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final CheckBoxPreference mWifiCheckBoxPref; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final CharSequence mOriginalSummary; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final IntentFilter mWifiStateFilter; 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() { 53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project handleWifiStateChanged( 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WIFI_STATE_UNKNOWN), 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project intent.getIntExtra(WifiManager.EXTRA_PREVIOUS_WIFI_STATE, 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project WIFI_STATE_UNKNOWN)); 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) { 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project handleNetworkStateChanged( 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO)); 64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public WifiEnabler(Context context, WifiManager wifiManager, 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project CheckBoxPreference wifiCheckBoxPreference) { 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mContext = context; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref = wifiCheckBoxPreference; 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiManager = wifiManager; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mOriginalSummary = wifiCheckBoxPreference.getSummary(); 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project wifiCheckBoxPreference.setPersistent(false); 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiStateFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiStateFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void resume() { 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int state = mWifiManager.getWifiState(); 83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // This is the widget enabled state, not the preference toggled state 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setEnabled(state == WIFI_STATE_ENABLED || state == WIFI_STATE_DISABLED 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project || state == WIFI_STATE_UNKNOWN); 86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mContext.registerReceiver(mWifiStateReceiver, mWifiStateFilter); 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setOnPreferenceChangeListener(this); 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void pause() { 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mContext.unregisterReceiver(mWifiStateReceiver); 93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setOnPreferenceChangeListener(null); 94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceChange(Preference preference, Object value) { 97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Turn on/off Wi-Fi 98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project setWifiEnabled((Boolean) value); 99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Don't update UI to opposite state until we're sure 101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return false; 102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setWifiEnabled(final boolean enable) { 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Disable button 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setEnabled(false); 107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (!mWifiManager.setWifiEnabled(enable)) { 109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setSummary(enable ? R.string.error_starting : R.string.error_stopping); 110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void handleWifiStateChanged(int wifiState, int previousWifiState) { 114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (LOCAL_LOGD) { 116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Log.d(TAG, "Received wifi state changed from " 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project + getHumanReadableWifiState(previousWifiState) + " to " 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project + getHumanReadableWifiState(wifiState)); 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (wifiState == WIFI_STATE_DISABLED || wifiState == WIFI_STATE_ENABLED) { 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setChecked(wifiState == WIFI_STATE_ENABLED); 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref 124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project .setSummary(wifiState == WIFI_STATE_DISABLED ? mOriginalSummary : null); 125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 12683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood mWifiCheckBoxPref.setEnabled(isWifiAllowed(mContext)); 127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (wifiState == WIFI_STATE_DISABLING || wifiState == WIFI_STATE_ENABLING) { 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setSummary(wifiState == WIFI_STATE_ENABLING ? R.string.wifi_starting 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project : R.string.wifi_stopping); 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (wifiState == WIFI_STATE_UNKNOWN) { 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int message = R.string.wifi_error; 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (previousWifiState == WIFI_STATE_ENABLING) message = R.string.error_starting; 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project else if (previousWifiState == WIFI_STATE_DISABLING) message = R.string.error_stopping; 136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setChecked(false); 138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setSummary(message); 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setEnabled(true); 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void handleNetworkStateChanged(NetworkInfo networkInfo) { 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (LOCAL_LOGD) { 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Log.d(TAG, "Received network state changed to " + networkInfo); 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (mWifiManager.isWifiEnabled()) { 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String summary = WifiStatus.getStatus(mContext, 151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiManager.getConnectionInfo().getSSID(), networkInfo.getDetailedState()); 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mWifiCheckBoxPref.setSummary(summary); 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 15683bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood private static boolean isWifiAllowed(Context context) { 15783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood // allowed if we are not in airplane mode 15883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood if (!AirplaneModeEnabler.isAirplaneModeOn(context)) { 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return true; 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 16183bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood // allowed if wifi is not in AIRPLANE_MODE_RADIOS 16283bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood String radios = Settings.System.getString(context.getContentResolver(), 16383bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Settings.System.AIRPLANE_MODE_RADIOS); 16483bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood if (radios == null || !radios.contains(Settings.System.RADIO_WIFI)) { 16583bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood return true; 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 16783bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood // allowed if wifi is in AIRPLANE_MODE_TOGGLEABLE_RADIOS 16883bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood radios = Settings.System.getString(context.getContentResolver(), 16983bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS); 17083bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood return (radios != null && radios.contains(Settings.System.RADIO_WIFI)); 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 17283bcc98af19597a213a8d174e8f1b47453d513ceMike Lockwood 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static String getHumanReadableWifiState(int wifiState) { 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (wifiState) { 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case WIFI_STATE_DISABLED: 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "Disabled"; 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case WIFI_STATE_DISABLING: 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "Disabling"; 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case WIFI_STATE_ENABLED: 180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "Enabled"; 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case WIFI_STATE_ENABLING: 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "Enabling"; 183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case WIFI_STATE_UNKNOWN: 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "Unknown"; 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return "Some other state!"; 187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 190