Use heads-up notifications when selecting networks with no Internet

Currently, when connecting to a network that has a captive portal
or has no Internet access, we display a regular notification.
Because this notification is easy to miss, switch to using a
heads-up notification if the user just manually selected the
network. If the system connects automatically, continue to use a
regular notification.

Bug: 20081183
Change-Id: I7a988b2bddfe898a0d2607ad85a04b227d678469
This commit is contained in:
Lorenzo Colitti
2015-06-24 17:13:08 +09:00
parent 92bb3df50b
commit 350bee0406

View File

@@ -2006,15 +2006,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
NascentState.NOT_JUST_VALIDATED); NascentState.NOT_JUST_VALIDATED);
} }
if (!visible) { if (!visible) {
setProvNotificationVisibleIntent(false, netId, null, 0, null, null); setProvNotificationVisibleIntent(false, netId, null, 0, null, null, false);
} else { } else {
if (nai == null) { if (nai == null) {
loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor"); loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor");
break; break;
} }
setProvNotificationVisibleIntent(true, netId, NotificationType.SIGN_IN, setProvNotificationVisibleIntent(true, netId, NotificationType.SIGN_IN,
nai.networkInfo.getType(),nai.networkInfo.getExtraInfo(), nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(),
(PendingIntent)msg.obj); (PendingIntent)msg.obj, nai.networkMisc.explicitlySelected);
} }
break; break;
} }
@@ -2447,7 +2447,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
PendingIntent pendingIntent = PendingIntent.getActivityAsUser( PendingIntent pendingIntent = PendingIntent.getActivityAsUser(
mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT); mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT);
setProvNotificationVisibleIntent(true, nai.network.netId, NotificationType.NO_INTERNET, setProvNotificationVisibleIntent(true, nai.network.netId, NotificationType.NO_INTERNET,
nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(), pendingIntent); nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(), pendingIntent, true);
} }
private class InternalHandler extends Handler { private class InternalHandler extends Handler {
@@ -3240,7 +3240,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
// Concatenate the range of types onto the range of NetIDs. // Concatenate the range of types onto the range of NetIDs.
int id = MAX_NET_ID + 1 + (networkType - ConnectivityManager.TYPE_NONE); int id = MAX_NET_ID + 1 + (networkType - ConnectivityManager.TYPE_NONE);
setProvNotificationVisibleIntent(visible, id, NotificationType.SIGN_IN, setProvNotificationVisibleIntent(visible, id, NotificationType.SIGN_IN,
networkType, null, pendingIntent); networkType, null, pendingIntent, false);
} }
/** /**
@@ -3259,11 +3259,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
* we concatenate the range of types with the range of NetIDs. * we concatenate the range of types with the range of NetIDs.
*/ */
private void setProvNotificationVisibleIntent(boolean visible, int id, private void setProvNotificationVisibleIntent(boolean visible, int id,
NotificationType notifyType, int networkType, String extraInfo, PendingIntent intent) { NotificationType notifyType, int networkType, String extraInfo, PendingIntent intent,
boolean highPriority) {
if (DBG) { if (DBG) {
log("setProvNotificationVisibleIntent " + notifyType + " visible=" + visible log("setProvNotificationVisibleIntent " + notifyType + " visible=" + visible
+ " networkType=" + getNetworkTypeName(networkType) + " networkType=" + getNetworkTypeName(networkType)
+ " extraInfo=" + extraInfo); + " extraInfo=" + extraInfo + " highPriority=" + highPriority);
} }
Resources r = Resources.getSystem(); Resources r = Resources.getSystem();
@@ -3318,6 +3319,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
.setContentTitle(title) .setContentTitle(title)
.setContentText(details) .setContentText(details)
.setContentIntent(intent) .setContentIntent(intent)
.setLocalOnly(true)
.setPriority(highPriority ?
Notification.PRIORITY_HIGH :
Notification.PRIORITY_DEFAULT)
.setDefaults(Notification.DEFAULT_ALL)
.setOnlyAlertOnce(true)
.build(); .build();
try { try {