Fix automatic Wi-fi toggle

It is happening because there previous view doesn't disconnect
itself from setting change; and then two views alternatively
enable/disable wifi.

Bug: 17157005

Change-Id: I42916a7bbd735960a26efbae670c9b927ec8574d
This commit is contained in:
Vinit Deshpande
2014-09-15 20:18:35 -07:00
parent 13fbd848d4
commit e2c1d504fc

View File

@@ -40,6 +40,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
public class WifiEnabler implements SwitchBar.OnSwitchChangeListener { public class WifiEnabler implements SwitchBar.OnSwitchChangeListener {
private Context mContext; private Context mContext;
private SwitchBar mSwitchBar; private SwitchBar mSwitchBar;
private boolean mListeningToOnSwitchChange = false;
private AtomicBoolean mConnected = new AtomicBoolean(false); private AtomicBoolean mConnected = new AtomicBoolean(false);
private final WifiManager mWifiManager; private final WifiManager mWifiManager;
@@ -99,23 +100,41 @@ public class WifiEnabler implements SwitchBar.OnSwitchChangeListener {
public void setupSwitchBar() { public void setupSwitchBar() {
final int state = mWifiManager.getWifiState(); final int state = mWifiManager.getWifiState();
handleWifiStateChanged(state); handleWifiStateChanged(state);
mSwitchBar.addOnSwitchChangeListener(this); if (!mListeningToOnSwitchChange) {
mSwitchBar.addOnSwitchChangeListener(this);
mListeningToOnSwitchChange = true;
}
mSwitchBar.show(); mSwitchBar.show();
mContext.registerReceiver(mReceiver, mIntentFilter);
} }
public void teardownSwitchBar() { public void teardownSwitchBar() {
mSwitchBar.removeOnSwitchChangeListener(this); if (mListeningToOnSwitchChange) {
mSwitchBar.removeOnSwitchChangeListener(this);
mListeningToOnSwitchChange = false;
}
mSwitchBar.hide(); mSwitchBar.hide();
mContext.unregisterReceiver(mReceiver);
} }
public void resume(Context context) { public void resume(Context context) {
mContext = context; mContext = context;
// Wi-Fi state is sticky, so just let the receiver update UI // Wi-Fi state is sticky, so just let the receiver update UI
mContext.registerReceiver(mReceiver, mIntentFilter); mContext.registerReceiver(mReceiver, mIntentFilter);
if (!mListeningToOnSwitchChange) {
mSwitchBar.addOnSwitchChangeListener(this);
mListeningToOnSwitchChange = true;
}
} }
public void pause() { public void pause() {
mContext.unregisterReceiver(mReceiver); mContext.unregisterReceiver(mReceiver);
if (mListeningToOnSwitchChange) {
mSwitchBar.removeOnSwitchChangeListener(this);
mListeningToOnSwitchChange = false;
}
} }
private void handleWifiStateChanged(int state) { private void handleWifiStateChanged(int state) {