From af13b9f27532cb4616c725a0b26580fe12d46743 Mon Sep 17 00:00:00 2001 From: Chiachang Wang Date: Wed, 29 May 2019 14:24:21 +0800 Subject: [PATCH] Replace limited connectivity notification after detecting it No internet notification may be prompted before partial connectivity being detected. Partial connectivity status will be set into NAI and prompted in the Setting. Behavior is not aligned between Setting and notification. Thus, update notification again if partial connectivity is detected. Also, sliently show the updated notification if no internet notification has already been shown to user to prevent alerting user in short time. Bug: 130683832 Test: Verified with simulated partial connectivity Test: atest FrameworksNetTests Change-Id: Ie16a8ce6e0fa437048e8c1eea240314ca30e9520 --- .../connectivity/NetworkNotificationManager.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java index 0910dac273..f6735d9834 100644 --- a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java +++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java @@ -237,9 +237,15 @@ public class NetworkNotificationManager { + getTransportName(transportType)); return; } - - final String channelId = highPriority ? SystemNotificationChannels.NETWORK_ALERTS : - SystemNotificationChannels.NETWORK_STATUS; + // When replacing an existing notification for a given network, don't alert, just silently + // update the existing notification. Note that setOnlyAlertOnce() will only work for the + // same id, and the id used here is the NotificationType which is different in every type of + // notification. This is required because the notification metrics only track the ID but not + // the tag. + final boolean hasPreviousNotification = previousNotifyType != null; + final String channelId = (highPriority && !hasPreviousNotification) + ? SystemNotificationChannels.NETWORK_ALERTS + : SystemNotificationChannels.NETWORK_STATUS; Notification.Builder builder = new Notification.Builder(mContext, channelId) .setWhen(System.currentTimeMillis()) .setShowWhen(notifyType == NotificationType.NETWORK_SWITCH)