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

Commit 87160757 authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Basic handling of Notifications with fullScreenIntent.

If a Notification has a non-null fullScreenIntent AND the
topmost Activity is not immersive, that PendingIntent will
fire (presumably causing a nice dialog or full-screen
activity to appear).

Immersive mode handling for FLAG_HIGH_PRIORITY Notifications
is still unimplemented (although the fullScreenIntent will
be suppressed in immersive mode).

Note that currently your fullScreenIntent notification will
also get posted to the status bar, so you're responsible for
clearing it out (e.g. in onPause in your alert intent). See
forthcoming changes to StatusBarTest for an example.

Change-Id: Ie750d1b7bcc788bd29ee1d8626f971dd47fd2817
parent 7dacda11
Loading
Loading
Loading
Loading
+39 −2
Original line number Diff line number Diff line
@@ -312,8 +312,45 @@ public class PhoneStatusBarService extends StatusBarService {
    public void addNotification(IBinder key, StatusBarNotification notification) {
        addNotificationViews(key, notification);

        boolean immersive = false;
        try {
            immersive = ActivityManagerNative.getDefault().isTopActivityImmersive();
            Slog.d(TAG, "Top activity is " + (immersive?"immersive":"not immersive"));
        } catch (RemoteException ex) {
        }
        if (immersive) {
            if ((notification.notification.flags & Notification.FLAG_HIGH_PRIORITY) != 0) {
                Slog.d(TAG, "Presenting high-priority notification in immersive activity");
                // @@@ special new transient ticker mode
                /*
                // 1. Populate mAlertBarView

                ImageView alertIcon = (ImageView) mAlertBarView.findViewById(R.id.alertIcon);
                TextView alertText = (TextView) mAlertBarView.findViewById(R.id.alertText);
                alertIcon.setImageDrawable(StatusBarIconView.getIcon(
                    alertIcon.getContext(), 
                    iconView.getStatusBarIcon()));
                alertText.setText(notification.notification.tickerText);

                // 2. Animate mAlertBarView in
                mAlertBarView.setVisibility(View.VISIBLE);

                // 3. Set alarm to age the notification off (TODO)
                */
            }
        } else if (notification.notification.fullScreenIntent != null) {
            // not immersive & a full-screen alert should be shown
            Slog.d(TAG, "Notification has fullScreenIntent and activity is not immersive; sending fullScreenIntent");
            try {
                notification.notification.fullScreenIntent.send();
            } catch (PendingIntent.CanceledException e) {
            }
        } else {
            // usual case: status bar visible & not immersive

            // show the ticker
            tick(notification);
        }

        // Recalculate the position of the sliding windows and the titles.
        setAreThereNotifications();