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

Commit 27a8be4b authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Support for tapping on an immersive-mode priority notification.

When the user taps on an intruder alert (the priority
notification in immersive mode), the .contentIntent in the
Notification object will be sent, just as we handle tapping
on a normal Notification in the windowshade.

Change-Id: Ib6991837b0b2122fe138cddacf347fdbc426b99d
parent 059f009d
Loading
Loading
Loading
Loading
+25 −19
Original line number Diff line number Diff line
@@ -273,12 +273,6 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
        mIntruderAlertView = View.inflate(context, R.layout.intruder_alert, null);
        mIntruderAlertView.setVisibility(View.GONE);
        mIntruderAlertView.setClickable(true);
        mIntruderAlertView.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Slog.d(TAG, "Intruder Alert clicked!");
                mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER);
            }
        });

        StatusBarView sb = (StatusBarView)View.inflate(context, R.layout.status_bar, null);
        sb.mService = this;
@@ -423,13 +417,16 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
                    iconView.getStatusBarIcon()));
                alertText.setText(notification.notification.tickerText);

                mIntruderAlertView.setOnClickListener(
                    new Launcher(notification.notification.contentIntent,
                        notification.pkg, notification.tag, notification.id));

                // 2. Animate mIntruderAlertView in
                mHandler.removeMessages(MSG_HIDE_INTRUDER);
                mHandler.sendEmptyMessage(MSG_SHOW_INTRUDER);
                mHandler.sendEmptyMessageDelayed(MSG_HIDE_INTRUDER, INTRUDER_ALERT_DECAY_MS);

                // 3. Set alarm to age the notification off (TODO)

                mHandler.removeMessages(MSG_HIDE_INTRUDER);
                mHandler.sendEmptyMessageDelayed(MSG_HIDE_INTRUDER, INTRUDER_ALERT_DECAY_MS);
            }
        } else if (notification.notification.fullScreenIntent != null) {
            // not immersive & a full-screen alert should be shown
@@ -1085,6 +1082,8 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
                ActivityManagerNative.getDefault().resumeAppSwitches();
            } catch (RemoteException e) {
            }

            if (mIntent != null) {
                int[] pos = new int[2];
                v.getLocationOnScreen(pos);
                Intent overlay = new Intent();
@@ -1096,12 +1095,19 @@ public class StatusBarService extends Service implements CommandQueue.Callbacks
                    // the stack trace isn't very helpful here.  Just log the exception message.
                    Slog.w(TAG, "Sending contentIntent failed: " + e);
                }
            }

            try {
                mBarService.onNotificationClick(mPkg, mTag, mId);
            } catch (RemoteException ex) {
                // system process is dead if we're here.
            }

            // close the shade if it was open
            animateCollapse();

            // If this click was on the intruder alert, hide that instead
            mHandler.sendEmptyMessage(MSG_HIDE_INTRUDER);
        }
    }

+2 −0
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ public class StatusBarTest extends TestActivity
                    0,
                    fullScreenIntent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
                // if you tap on it you should get the original alert box
                not.contentIntent = not.fullScreenIntent;
                mNotificationManager.notify(id, not);
            }
        },