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

Commit fd8f7c84 authored by Annie Chin's avatar Annie Chin
Browse files

Add null check in AlarmStateManager for handleIntent SHOW_AND_DISMISS.

Bug: 21756258

Also dismiss the notification for the now-invalid AlarmInstance using
a passed-in notification id.

Change-Id: I7a46d1b5893589cf13012757ddf3388c9e57a815
parent 12e8c045
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import com.android.deskclock.provider.Alarm;
import com.android.deskclock.provider.AlarmInstance;

public final class AlarmNotifications {
    public static final String EXTRA_NOTIFICATION_ID = "extra_notification_id";

    public static void showLowPriorityNotification(Context context, AlarmInstance instance) {
        LogUtils.v("Displaying low priority notification for alarm instance: " + instance.mId);
        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
@@ -152,21 +154,24 @@ public final class AlarmNotifications {
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setLocalOnly(true);

        final int hashCode = instance.hashCode();

        // Setup dismiss intent
        Intent dismissIntent = AlarmStateManager.createStateChangeIntent(context,
                AlarmStateManager.ALARM_DISMISS_TAG, instance, AlarmInstance.DISMISSED_STATE);
        notification.setDeleteIntent(PendingIntent.getBroadcast(context, instance.hashCode(),
        notification.setDeleteIntent(PendingIntent.getBroadcast(context, hashCode,
                dismissIntent, PendingIntent.FLAG_UPDATE_CURRENT));

        // Setup content intent
        Intent showAndDismiss = AlarmInstance.createIntent(context, AlarmStateManager.class,
                instance.mId);
        showAndDismiss.putExtra(EXTRA_NOTIFICATION_ID, hashCode);
        showAndDismiss.setAction(AlarmStateManager.SHOW_AND_DISMISS_ALARM_ACTION);
        notification.setContentIntent(PendingIntent.getBroadcast(context, instance.hashCode(),
        notification.setContentIntent(PendingIntent.getBroadcast(context, hashCode,
                showAndDismiss, PendingIntent.FLAG_UPDATE_CURRENT));

        nm.cancel(instance.hashCode());
        nm.notify(instance.hashCode(), notification.build());
        nm.cancel(hashCode);
        nm.notify(hashCode, notification.build());
    }

    public static void showAlarmNotification(Context context, AlarmInstance instance) {
+10 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.os.Build;
import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.v4.app.NotificationManagerCompat;
import android.widget.Toast;

import com.android.deskclock.AlarmAlertWakeLock;
@@ -863,6 +864,15 @@ public final class AlarmStateManager extends BroadcastReceiver {
            AlarmInstance instance = AlarmInstance.getInstance(context.getContentResolver(),
                    AlarmInstance.getId(uri));

            if (instance == null) {
                LogUtils.e("Null alarminstance for SHOW_AND_DISMISS");
                // dismiss the notification
                final int id = intent.getIntExtra(AlarmNotifications.EXTRA_NOTIFICATION_ID, -1);
                if (id != -1) {
                    NotificationManagerCompat.from(context).cancel(id);
                }
            }

            long alarmId = instance.mAlarmId == null ? Alarm.INVALID_ID : instance.mAlarmId;
            Intent viewAlarmIntent = Alarm.createIntent(context, DeskClock.class, alarmId);
            viewAlarmIntent.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX);