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

Commit 05072614 authored by Mao Jinlong's avatar Mao Jinlong Committed by Michael Bestas
Browse files

DeskClock : update alarm if it is handled in min framework

Update the alarm instance status when the power off alarm is handled
in min framework mode.

CRs-Fixed: 2113033
Change-Id: I5f10d80fa17c6d89fca990a5d3ccc90a41fa3d5f
parent 7dd815f8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@
                <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
                <action android:name="android.intent.action.TIME_SET" />
                <action android:name="android.intent.action.TIMEZONE_CHANGED" />
                <action android:name="org.codeaurora.poweroffalarm.action.UPDATE_ALARM" />
            </intent-filter>
        </receiver>

+51 −0
Original line number Diff line number Diff line
@@ -18,16 +18,32 @@ package com.android.deskclock;

import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager.WakeLock;

import com.android.deskclock.alarms.AlarmStateManager;
import com.android.deskclock.alarms.AlarmNotifications;
import com.android.deskclock.controller.Controller;
import com.android.deskclock.data.DataModel;
import com.android.deskclock.provider.AlarmInstance;

import java.util.Calendar;
import java.util.List;

public class AlarmInitReceiver extends BroadcastReceiver {

    private static final String ACTION_UPDATE_ALARM_STATUS =
            "org.codeaurora.poweroffalarm.action.UPDATE_ALARM";

    private static final int SNOOZE_STATUS = 2;
    private static final int DISMISS_STATUS = 3;

    private static final String STATUS = "status";
    private static final String TIME = "time";
    private static final String SNOOZE_TIME = "snooze_time";

    /**
     * When running on N devices, we're interested in the boot completed event that is sent while
     * the user is still locked, so that we can schedule alarms.
@@ -85,6 +101,41 @@ public class AlarmInitReceiver extends BroadcastReceiver {
            Controller.getController().updateShortcuts();
        }

        // Update alarm status once receive the status update broadcast
        if (ACTION_UPDATE_ALARM_STATUS.equals(action)) {
            long alarmTime = intent.getLongExtra(TIME, 0L);
            int alarmStatus = intent.getIntExtra(STATUS, 0);

            if (alarmTime != 0) {
                ContentResolver cr = context.getContentResolver();
                List<AlarmInstance> alarmInstances = AlarmInstance.getInstances(cr, null);
                AlarmInstance alarmInstance = null;
                for (AlarmInstance instance : alarmInstances) {
                    if (instance.getAlarmTime().getTimeInMillis() == alarmTime) {
                        alarmInstance = instance;
                        break;
                    }
                }

                if (alarmInstance != null) {
                    // Update alarm status if the alarm instance is not null
                    if (alarmStatus == DISMISS_STATUS) {
                        AlarmStateManager.setDismissState(context, alarmInstance);
                    } else if (alarmStatus == SNOOZE_STATUS) {
                        long snoozeTime = intent.getLongExtra(SNOOZE_TIME, 0L);
                        if (snoozeTime > System.currentTimeMillis()) {
                            AlarmNotifications.clearNotification(context, alarmInstance);
                            Calendar c = Calendar.getInstance();
                            c.setTimeInMillis(snoozeTime);
                            alarmInstance.setAlarmTime(c);
                            alarmInstance.mAlarmState = AlarmInstance.SNOOZE_STATE;
                            AlarmInstance.updateInstance(cr, alarmInstance);
                        }
                    }
                }
            }
        }

        AsyncHandler.post(new Runnable() {
            @Override
            public void run() {
+2 −2
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.Objects;

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

    /**
@@ -448,7 +448,7 @@ final class AlarmNotifications {
        service.startForeground(ALARM_FIRING_NOTIFICATION_ID, notification.build());
    }

    static synchronized void clearNotification(Context context, AlarmInstance instance) {
    public static synchronized void clearNotification(Context context, AlarmInstance instance) {
        LogUtils.v("Clearing notifications for alarm instance: " + instance.mId);
        NotificationManagerCompat nm = NotificationManagerCompat.from(context);
        final int id = instance.hashCode();