Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4b6d23d7 authored by Daniel Sandler's avatar Daniel Sandler Committed by Android (Google) Code Review
Browse files

Merge "Further reduce memory usage of notification archive." into jb-mr2-dev

parents f094d221 5e62e3aa
Loading
Loading
Loading
Loading
+28 −1
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import android.media.IAudioService;
import android.media.IRingtonePlayer;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -266,18 +267,32 @@ public class NotificationManagerService extends INotificationManager.Stub
    }

    private static class Archive {
        static final int BUFFER_SIZE = 1000;
        static final int BUFFER_SIZE = 250;
        ArrayDeque<StatusBarNotification> mBuffer = new ArrayDeque<StatusBarNotification>(BUFFER_SIZE);

        public Archive() {
        }

        public String toString() {
            final StringBuilder sb = new StringBuilder();
            final int N = mBuffer.size();
            sb.append("Archive (");
            sb.append(N);
            sb.append(" notification");
            sb.append((N==1)?")":"s)");
            return sb.toString();
        }

        public void record(StatusBarNotification nr) {
            // Nuke heavy parts of notification before storing in archive
            nr.notification.tickerView = null;
            nr.notification.contentView = null;
            nr.notification.bigContentView = null;
            nr.notification.largeIcon = null;
            final Bundle extras = nr.notification.extras;
            extras.remove(Notification.EXTRA_LARGE_ICON);
            extras.remove(Notification.EXTRA_LARGE_ICON_BIG);
            extras.remove(Notification.EXTRA_PICTURE);

            if (mBuffer.size() == BUFFER_SIZE) {
                mBuffer.removeFirst();
@@ -285,6 +300,7 @@ public class NotificationManagerService extends INotificationManager.Stub
            mBuffer.addLast(nr);
        }


        public void clear() {
            mBuffer.clear();
        }
@@ -2131,6 +2147,17 @@ public class NotificationManagerService extends INotificationManager.Stub
            pw.println("  mVibrateNotification=" + mVibrateNotification);
            pw.println("  mDisabledNotifications=0x" + Integer.toHexString(mDisabledNotifications));
            pw.println("  mSystemReady=" + mSystemReady);
            pw.println("  mArchive=" + mArchive.toString());
            Iterator<StatusBarNotification> iter = mArchive.descendingIterator();
            int i=0;
            while (iter.hasNext()) {
                pw.println("    " + iter.next());
                if (++i >= 5) {
                    if (iter.hasNext()) pw.println("    ...");
                    break;
                }
            }

        }
    }
}