diff options
-rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 33 | ||||
-rw-r--r-- | services/core/java/com/android/server/connectivity/NetworkMonitor.java | 12 |
2 files changed, 29 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 6554ed3..86f8777 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -3199,13 +3199,17 @@ public class ConnectivityService extends IConnectivityManager.Stub { break; } case NetworkMonitor.EVENT_PROVISIONING_NOTIFICATION: { - NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo); - if (nai == null) { - loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor"); - break; + if (msg.arg1 == 0) { + setProvNotificationVisibleIntent(false, msg.arg2, 0, null, null); + } else { + NetworkAgentInfo nai = mNetworkForNetId.get(msg.arg2); + if (nai == null) { + loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor"); + break; + } + setProvNotificationVisibleIntent(true, msg.arg2, nai.networkInfo.getType(), + nai.networkInfo.getExtraInfo(), (PendingIntent)msg.obj); } - setProvNotificationVisibleIntent(msg.arg1 != 0, nai.networkInfo.getType(), - nai.networkInfo.getExtraInfo(), (PendingIntent)msg.obj); break; } case NetworkStateTracker.EVENT_STATE_CHANGED: { @@ -4958,10 +4962,19 @@ public class ConnectivityService extends IConnectivityManager.Stub { break; } } - setProvNotificationVisibleIntent(visible, networkType, extraInfo, pendingIntent); + // Concatenate the range of types onto the range of NetIDs. + int id = MAX_NET_ID + 1 + (networkType - ConnectivityManager.TYPE_NONE); + setProvNotificationVisibleIntent(visible, id, networkType, extraInfo, pendingIntent); } - private void setProvNotificationVisibleIntent(boolean visible, int networkType, + /** + * Show or hide network provisioning notificaitons. + * + * @param id an identifier that uniquely identifies this notification. This must match + * between show and hide calls. We use the NetID value but for legacy callers + * we concatenate the range of types with the range of NetIDs. + */ + private void setProvNotificationVisibleIntent(boolean visible, int id, int networkType, String extraInfo, PendingIntent intent) { if (DBG) { log("setProvNotificationVisibleIntent: E visible=" + visible + " networkType=" + @@ -5008,14 +5021,14 @@ public class ConnectivityService extends IConnectivityManager.Stub { notification.contentIntent = intent; try { - notificationManager.notify(NOTIFICATION_ID, networkType, notification); + notificationManager.notify(NOTIFICATION_ID, id, notification); } catch (NullPointerException npe) { loge("setNotificaitionVisible: visible notificationManager npe=" + npe); npe.printStackTrace(); } } else { try { - notificationManager.cancel(NOTIFICATION_ID, networkType); + notificationManager.cancel(NOTIFICATION_ID, id); } catch (NullPointerException npe) { loge("setNotificaitionVisible: cancel notificationManager npe=" + npe); npe.printStackTrace(); diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java index 8289f5a..545723a 100644 --- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java +++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java @@ -148,8 +148,8 @@ public class NetworkMonitor extends StateMachine { /** * Request ConnectivityService display provisioning notification. * arg1 = Whether to make the notification visible. - * obj = Intent to be launched when notification selected by user. - * replyTo = NetworkAgentInfo.messenger so ConnectivityService can identify sender. + * arg2 = NetID. + * obj = Intent to be launched when notification selected by user, null if !arg1. */ public static final int EVENT_PROVISIONING_NOTIFICATION = BASE + 12; @@ -447,9 +447,9 @@ public class NetworkMonitor extends StateMachine { // Initiate notification to sign-in. Intent intent = new Intent(ACTION_SIGN_IN_REQUESTED); intent.putExtra(Intent.EXTRA_TEXT, String.valueOf(mNetworkAgentInfo.network.netId)); - Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 1, 0, + Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 1, + mNetworkAgentInfo.network.netId, PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); - message.replyTo = mNetworkAgentInfo.messenger; mConnectivityServiceHandler.sendMessage(message); } @@ -470,8 +470,8 @@ public class NetworkMonitor extends StateMachine { @Override public void exit() { - Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 0, 0, null); - message.replyTo = mNetworkAgentInfo.messenger; + Message message = obtainMessage(EVENT_PROVISIONING_NOTIFICATION, 0, + mNetworkAgentInfo.network.netId, null); mConnectivityServiceHandler.sendMessage(message); mContext.unregisterReceiver(mUserRespondedBroadcastReceiver); mUserRespondedBroadcastReceiver = null; |