summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorJo De Boeck <deboeck.jo@gmail.com>2013-07-04 21:52:16 +0200
committerJo De Boeck <deboeck.jo@gmail.com>2013-07-04 21:52:16 +0200
commitc254a293ff0de412df6dbee979e1c2c6d4c14219 (patch)
treeb649f260e0e04d034f7129ef62a01c04a6272f7a /services
parentcca622eedca3a40b80695b0e6cf570d41394e69d (diff)
downloadframeworks_base-c254a293ff0de412df6dbee979e1c2c6d4c14219.zip
frameworks_base-c254a293ff0de412df6dbee979e1c2c6d4c14219.tar.gz
frameworks_base-c254a293ff0de412df6dbee979e1c2c6d4c14219.tar.bz2
Profile: Filter on NETWORK_STATE_CHANGED instead of SUPPLICANT_STATE_CHANGED
For more reliable network change detection use NETWORK_STATE_CHANGED instead of SUPPLICANT_STATE_CHANGED Only set profile when profile actually changed. Use getWifiSsid instead of getSSID so we dont have to strip double quotes ourselves, add null pointer exception check because function can now be called when WiFi is off. Change-Id: I2b4ea65fdb484edb39a14725c648d9ab0d5d36fb
Diffstat (limited to 'services')
-rw-r--r--services/java/com/android/server/ProfileManagerService.java39
1 files changed, 22 insertions, 17 deletions
diff --git a/services/java/com/android/server/ProfileManagerService.java b/services/java/com/android/server/ProfileManagerService.java
index a1533c0..3c3bfb3 100644
--- a/services/java/com/android/server/ProfileManagerService.java
+++ b/services/java/com/android/server/ProfileManagerService.java
@@ -25,15 +25,15 @@ import android.app.IProfileManager;
import android.app.NotificationGroup;
import android.app.Profile;
import android.app.ProfileGroup;
-import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.XmlResourceParser;
-import android.net.wifi.SupplicantState;
import android.net.wifi.WifiManager;
+import android.net.wifi.WifiSsid;
+import android.net.wifi.WifiInfo;
import android.os.RemoteException;
import android.os.UserHandle;
import android.text.TextUtils;
@@ -103,19 +103,14 @@ public class ProfileManagerService extends IProfileManager.Stub {
} else if (action.equals(Intent.ACTION_SHUTDOWN)) {
persistIfDirty();
- } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
- SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE);
+ } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
+ String activeSSID = getActiveSSID();
int triggerState;
- switch (state) {
- case COMPLETED:
- triggerState = Profile.TriggerState.ON_CONNECT;
- mLastConnectedSSID = getActiveSSID();
- break;
- case DISCONNECTED:
- triggerState = Profile.TriggerState.ON_DISCONNECT;
- break;
- default:
- return;
+ if (activeSSID != null) {
+ triggerState = Profile.TriggerState.ON_CONNECT;
+ mLastConnectedSSID = activeSSID;
+ } else {
+ triggerState = Profile.TriggerState.ON_DISCONNECT;
}
checkTriggers(Profile.TriggerType.WIFI, mLastConnectedSSID, triggerState);
} else if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)
@@ -135,7 +130,9 @@ public class ProfileManagerService extends IProfileManager.Stub {
}
try {
- setActiveProfile(p, true);
+ if (!mActiveProfile.getUuid().equals(p.getUuid())) {
+ setActiveProfile(p, true);
+ }
} catch (RemoteException e) {
Log.e(TAG, "Could not update profile on trigger", e);
}
@@ -158,7 +155,7 @@ public class ProfileManagerService extends IProfileManager.Stub {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_LOCALE_CHANGED);
filter.addAction(Intent.ACTION_SHUTDOWN);
- filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
+ filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
mContext.registerReceiver(mIntentReceiver, filter);
@@ -198,7 +195,15 @@ public class ProfileManagerService extends IProfileManager.Stub {
}
private String getActiveSSID() {
- return mWifiManager.getConnectionInfo().getSSID().replace("\"", "");
+ WifiInfo wifiinfo = mWifiManager.getConnectionInfo();
+ if (wifiinfo == null) {
+ return null;
+ }
+ WifiSsid ssid = wifiinfo.getWifiSsid();
+ if (ssid == null) {
+ return null;
+ }
+ return ssid.toString();
}
@Override