blob: 9135755863a1e4a0359be40f845d6924e17fa66f [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package io.flutter.plugins.androidalarmmanager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.util.Log;
/**
* Reschedules background work after the Android device reboots.
*
* <p>When an Android device reboots, all previously scheduled {@link AlarmManager} timers are
* cleared.
*
* <p>Timer callbacks registered with the android_alarm_manager plugin can be designated
* "persistent" and therefore, upon device reboot, should be rescheduled for execution. To
* accomplish this rescheduling, {@code RebootBroadcastReceiver} is scheduled by {@link
* AlarmService} to run on {@code BOOT_COMPLETED} and do the rescheduling.
*/
public class RebootBroadcastReceiver extends BroadcastReceiver {
/**
* Invoked by the OS whenever a broadcast is received by this app.
*
* <p>If the broadcast's action is {@code BOOT_COMPLETED} then this {@code
* RebootBroadcastReceiver} reschedules all persistent timer callbacks. That rescheduling work is
* handled by {@link AlarmService#reschedulePersistentAlarms(Context)}.
*/
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Log.i("AlarmService", "Rescheduling after boot!");
AlarmService.reschedulePersistentAlarms(context);
}
}
/**
* Schedules this {@code RebootBroadcastReceiver} to be run whenever the Android device reboots.
*/
public static void enableRescheduleOnReboot(Context context) {
scheduleOnReboot(context, PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
}
/**
* Unschedules this {@code RebootBroadcastReceiver} to be run whenever the Android device reboots.
* This {@code RebootBroadcastReceiver} will no longer be run upon reboot.
*/
public static void disableRescheduleOnReboot(Context context) {
scheduleOnReboot(context, PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
}
private static void scheduleOnReboot(Context context, int state) {
ComponentName receiver = new ComponentName(context, RebootBroadcastReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver, state, PackageManager.DONT_KILL_APP);
}
}