auto import from //depot/cupcake/@135843
This commit is contained in:
188
src/com/android/settings/wifi/WifiEnabler.java
Normal file
188
src/com/android/settings/wifi/WifiEnabler.java
Normal file
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.wifi;
|
||||
|
||||
import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;
|
||||
import static android.net.wifi.WifiManager.WIFI_STATE_DISABLING;
|
||||
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
|
||||
import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING;
|
||||
import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.preference.Preference;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Config;
|
||||
import android.util.Log;
|
||||
|
||||
public class WifiEnabler implements Preference.OnPreferenceChangeListener {
|
||||
|
||||
private static final boolean LOCAL_LOGD = Config.LOGD || WifiLayer.LOGV;
|
||||
private static final String TAG = "SettingsWifiEnabler";
|
||||
|
||||
private final Context mContext;
|
||||
private final WifiManager mWifiManager;
|
||||
private final CheckBoxPreference mWifiCheckBoxPref;
|
||||
private final CharSequence mOriginalSummary;
|
||||
|
||||
private final IntentFilter mWifiStateFilter;
|
||||
private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
|
||||
handleWifiStateChanged(
|
||||
intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WIFI_STATE_UNKNOWN),
|
||||
intent.getIntExtra(WifiManager.EXTRA_PREVIOUS_WIFI_STATE,
|
||||
WIFI_STATE_UNKNOWN));
|
||||
} else if (intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
|
||||
handleNetworkStateChanged(
|
||||
(NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public WifiEnabler(Context context, WifiManager wifiManager,
|
||||
CheckBoxPreference wifiCheckBoxPreference) {
|
||||
mContext = context;
|
||||
mWifiCheckBoxPref = wifiCheckBoxPreference;
|
||||
mWifiManager = wifiManager;
|
||||
|
||||
mOriginalSummary = wifiCheckBoxPreference.getSummary();
|
||||
wifiCheckBoxPreference.setPersistent(false);
|
||||
|
||||
mWifiStateFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
||||
mWifiStateFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
|
||||
}
|
||||
|
||||
public void resume() {
|
||||
int state = mWifiManager.getWifiState();
|
||||
// This is the widget enabled state, not the preference toggled state
|
||||
mWifiCheckBoxPref.setEnabled(state == WIFI_STATE_ENABLED || state == WIFI_STATE_DISABLED
|
||||
|| state == WIFI_STATE_UNKNOWN);
|
||||
|
||||
mContext.registerReceiver(mWifiStateReceiver, mWifiStateFilter);
|
||||
mWifiCheckBoxPref.setOnPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
mContext.unregisterReceiver(mWifiStateReceiver);
|
||||
mWifiCheckBoxPref.setOnPreferenceChangeListener(null);
|
||||
}
|
||||
|
||||
public boolean onPreferenceChange(Preference preference, Object value) {
|
||||
// Turn on/off Wi-Fi
|
||||
setWifiEnabled((Boolean) value);
|
||||
|
||||
// Don't update UI to opposite state until we're sure
|
||||
return false;
|
||||
}
|
||||
|
||||
private void setWifiEnabled(final boolean enable) {
|
||||
// Disable button
|
||||
mWifiCheckBoxPref.setEnabled(false);
|
||||
|
||||
if (!mWifiManager.setWifiEnabled(enable)) {
|
||||
mWifiCheckBoxPref.setSummary(enable ? R.string.error_starting : R.string.error_stopping);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleWifiStateChanged(int wifiState, int previousWifiState) {
|
||||
|
||||
if (LOCAL_LOGD) {
|
||||
Log.d(TAG, "Received wifi state changed from "
|
||||
+ getHumanReadableWifiState(previousWifiState) + " to "
|
||||
+ getHumanReadableWifiState(wifiState));
|
||||
}
|
||||
|
||||
if (wifiState == WIFI_STATE_DISABLED || wifiState == WIFI_STATE_ENABLED) {
|
||||
mWifiCheckBoxPref.setChecked(wifiState == WIFI_STATE_ENABLED);
|
||||
mWifiCheckBoxPref
|
||||
.setSummary(wifiState == WIFI_STATE_DISABLED ? mOriginalSummary : null);
|
||||
|
||||
mWifiCheckBoxPref.setEnabled(isEnabledByDependency());
|
||||
|
||||
} else if (wifiState == WIFI_STATE_DISABLING || wifiState == WIFI_STATE_ENABLING) {
|
||||
mWifiCheckBoxPref.setSummary(wifiState == WIFI_STATE_ENABLING ? R.string.wifi_starting
|
||||
: R.string.wifi_stopping);
|
||||
|
||||
} else if (wifiState == WIFI_STATE_UNKNOWN) {
|
||||
int message = R.string.wifi_error;
|
||||
if (previousWifiState == WIFI_STATE_ENABLING) message = R.string.error_starting;
|
||||
else if (previousWifiState == WIFI_STATE_DISABLING) message = R.string.error_stopping;
|
||||
|
||||
mWifiCheckBoxPref.setChecked(false);
|
||||
mWifiCheckBoxPref.setSummary(message);
|
||||
mWifiCheckBoxPref.setEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleNetworkStateChanged(NetworkInfo networkInfo) {
|
||||
|
||||
if (LOCAL_LOGD) {
|
||||
Log.d(TAG, "Received network state changed to " + networkInfo);
|
||||
}
|
||||
|
||||
if (mWifiManager.isWifiEnabled()) {
|
||||
String summary = WifiStatus.getStatus(mContext,
|
||||
mWifiManager.getConnectionInfo().getSSID(), networkInfo.getDetailedState());
|
||||
mWifiCheckBoxPref.setSummary(summary);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isEnabledByDependency() {
|
||||
Preference dep = getDependencyPreference();
|
||||
if (dep == null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return !dep.shouldDisableDependents();
|
||||
}
|
||||
|
||||
private Preference getDependencyPreference() {
|
||||
String depKey = mWifiCheckBoxPref.getDependency();
|
||||
if (TextUtils.isEmpty(depKey)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return mWifiCheckBoxPref.getPreferenceManager().findPreference(depKey);
|
||||
}
|
||||
|
||||
private static String getHumanReadableWifiState(int wifiState) {
|
||||
switch (wifiState) {
|
||||
case WIFI_STATE_DISABLED:
|
||||
return "Disabled";
|
||||
case WIFI_STATE_DISABLING:
|
||||
return "Disabling";
|
||||
case WIFI_STATE_ENABLED:
|
||||
return "Enabled";
|
||||
case WIFI_STATE_ENABLING:
|
||||
return "Enabling";
|
||||
case WIFI_STATE_UNKNOWN:
|
||||
return "Unknown";
|
||||
default:
|
||||
return "Some other state!";
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user