Fix VPN notification helper.

+ Show the ticker text only on the first time.
+ Keep static variables to avoid GC during connection.

Bug: 3292710
Change-Id: I8ddc9e0abb22da484ec577c0ee018b88299fe26f
This commit is contained in:
Hung-ying Tyan
2011-01-04 19:14:01 +08:00
parent 370f01bd42
commit 5eacf071bf

View File

@@ -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) {