diff options
author | Hung-ying Tyan <tyanh@google.com> | 2011-01-04 19:14:01 +0800 |
---|---|---|
committer | Hung-ying Tyan <tyanh@google.com> | 2011-01-19 14:36:22 +0800 |
commit | f14491f6969ea7fd41fbd291008d7352982a9dad (patch) | |
tree | 156f8b8293d2f3e5a5d2e8d32cc560fccbbd1196 /packages | |
parent | 40f2cacbc9ab00d34c2a4f49519921bbf6b5293a (diff) | |
download | frameworks_base-f14491f6969ea7fd41fbd291008d7352982a9dad.zip frameworks_base-f14491f6969ea7fd41fbd291008d7352982a9dad.tar.gz frameworks_base-f14491f6969ea7fd41fbd291008d7352982a9dad.tar.bz2 |
Cherry-pick "Fix VPN notification helper" from master.
DO NOT MERGE
+ Show the ticker text only on the first time.
+ Keep static variables to avoid GC during connection.
Bug: 3292710
Change-Id: I8e97c792814404de0e36a2f9cc0022f41f723367
Diffstat (limited to 'packages')
-rw-r--r-- | packages/VpnServices/src/com/android/server/vpn/VpnService.java | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/packages/VpnServices/src/com/android/server/vpn/VpnService.java b/packages/VpnServices/src/com/android/server/vpn/VpnService.java index 63b87b1..a618423 100644 --- a/packages/VpnServices/src/com/android/server/vpn/VpnService.java +++ b/packages/VpnServices/src/com/android/server/vpn/VpnService.java @@ -328,6 +328,7 @@ abstract class VpnService<E extends VpnProfile> implements Serializable { public void run() { Log.i(TAG, "VPN connectivity monitor running"); try { + mNotification.update(mStartTime); // to pop up notification for (int i = 10; ; i--) { long now = System.currentTimeMillis(); @@ -417,13 +418,27 @@ abstract class VpnService<E extends VpnProfile> implements Serializable { // Helper class for showing, updating notification. private class NotificationHelper { + private NotificationManager mNotificationManager = (NotificationManager) + mContext.getSystemService(Context.NOTIFICATION_SERVICE); + private Notification mNotification = + new Notification(R.drawable.vpn_connected, null, 0L); + private PendingIntent mPendingIntent = PendingIntent.getActivity( + mContext, 0, + new VpnManager(mContext).createSettingsActivityIntent(), 0); + private String mConnectedTitle; + void update(long now) { - String title = getNotificationTitle(true); - Notification n = new Notification(R.drawable.vpn_connected, title, - mStartTime); - n.setLatestEventInfo(mContext, title, + Notification n = mNotification; + if (now == mStartTime) { + // to pop up the notification for the first time + n.when = mStartTime; + n.tickerText = mConnectedTitle = getNotificationTitle(true); + } else { + n.tickerText = null; + } + n.setLatestEventInfo(mContext, mConnectedTitle, getConnectedNotificationMessage(now), - prepareNotificationIntent()); + mPendingIntent); n.flags |= Notification.FLAG_NO_CLEAR; n.flags |= Notification.FLAG_ONGOING_EVENT; enableNotification(n); @@ -435,25 +450,18 @@ abstract class VpnService<E extends VpnProfile> implements Serializable { title, System.currentTimeMillis()); n.setLatestEventInfo(mContext, title, getDisconnectedNotificationMessage(), - prepareNotificationIntent()); + mPendingIntent); n.flags |= Notification.FLAG_AUTO_CANCEL; disableNotification(); enableNotification(n); } void disableNotification() { - ((NotificationManager) mContext.getSystemService( - Context.NOTIFICATION_SERVICE)).cancel(NOTIFICATION_ID); + mNotificationManager.cancel(NOTIFICATION_ID); } private void enableNotification(Notification n) { - ((NotificationManager) mContext.getSystemService( - Context.NOTIFICATION_SERVICE)).notify(NOTIFICATION_ID, n); - } - - private PendingIntent prepareNotificationIntent() { - return PendingIntent.getActivity(mContext, 0, - new VpnManager(mContext).createSettingsActivityIntent(), 0); + mNotificationManager.notify(NOTIFICATION_ID, n); } private String getNotificationTitle(boolean connected) { |