summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaiyiz <kaiyiz@codeaurora.org>2014-04-15 18:34:26 +0800
committerBrint E. Kriebel <bekit@cyngn.com>2014-08-25 20:04:04 +0000
commita4b3205cf7ad63e6beef1f0222c34d65f26b3b7a (patch)
treee1ae1be12530a1654a166de7bc476b354bd4a8af
parent187d05e04928ba0f8fe05434adcd958449f3e68e (diff)
downloadandroid_packages_apps_DeskClock-a4b3205cf7ad63e6beef1f0222c34d65f26b3b7a.tar.gz
android_packages_apps_DeskClock-a4b3205cf7ad63e6beef1f0222c34d65f26b3b7a.tar.bz2
android_packages_apps_DeskClock-a4b3205cf7ad63e6beef1f0222c34d65f26b3b7a.zip
DeskClock: Request user to confirm power-on device on power-off alarm event
Show a dialog to request user confirmation to power on the phone when power-off alarm pops up and user dismisses it. On user confirmation power-on the phone.Otherwise,keep the phone switched off. CRs-fixed: 637275 Change-Id: I20250fa3a86bc51cfaa3bd8b26906755f2726556
-rw-r--r--res/values/config.xml1
-rw-r--r--src/com/android/deskclock/AlarmInitReceiver.java9
-rw-r--r--src/com/android/deskclock/alarms/AlarmStateManager.java36
3 files changed, 46 insertions, 0 deletions
diff --git a/res/values/config.xml b/res/values/config.xml
index 677063472..59abd8e23 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -29,4 +29,5 @@
<item type="integer" name="world_clocks_per_row">2</item>
<!-- Total clocks per row is 2 + world_clocks_per_row. -->
<item type="integer" name="clocks_per_row">4</item>
+ <bool name="config_poweron_alert">false</bool>
</resources>
diff --git a/src/com/android/deskclock/AlarmInitReceiver.java b/src/com/android/deskclock/AlarmInitReceiver.java
index 421c474e3..eea494555 100644
--- a/src/com/android/deskclock/AlarmInitReceiver.java
+++ b/src/com/android/deskclock/AlarmInitReceiver.java
@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.PowerManager.WakeLock;
+import android.os.SystemProperties;
import android.preference.PreferenceManager;
import com.android.deskclock.alarms.AlarmStateManager;
@@ -34,6 +35,7 @@ public class AlarmInitReceiver extends BroadcastReceiver {
// A flag that indicates that switching the volume button default was done
private static final String PREF_VOLUME_DEF_DONE = "vol_def_done";
+ private static final String PROP_BOOT_MODE = "ro.alarm_boot";
/**
* Sets alarm on ACTION_BOOT_COMPLETED. Resets alarm on
@@ -67,6 +69,13 @@ public class AlarmInitReceiver extends BroadcastReceiver {
Log.v("AlarmInitReceiver - resetting volume button default");
switchVolumeButtonDefault(prefs);
}
+ boolean poweronAlert = context.getResources()
+ .getBoolean(R.bool.config_poweron_alert);
+ if (poweronAlert) {
+ if(SystemProperties.getBoolean(PROP_BOOT_MODE, false)) {
+ AlarmStateManager.setRtcPowerUp(context, true);
+ }
+ }
}
// Update all the alarm instances on time change event
diff --git a/src/com/android/deskclock/alarms/AlarmStateManager.java b/src/com/android/deskclock/alarms/AlarmStateManager.java
index 02d286d37..d9e4fb1f1 100644
--- a/src/com/android/deskclock/alarms/AlarmStateManager.java
+++ b/src/com/android/deskclock/alarms/AlarmStateManager.java
@@ -19,6 +19,7 @@ import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -117,6 +118,13 @@ public final class AlarmStateManager extends BroadcastReceiver {
// Buffer time in seconds to fire alarm instead of marking it missed.
public static final int ALARM_FIRE_BUFFER = 15;
+ private static boolean sRtcPowerUp = false;
+ private static final String ACTION_POWER_ON_ALERT =
+ "org.codeaurora.poweronalert.action.POWER_ON_ALERT";
+ private static final String ALARM_POWER_OFF_ACTION =
+ "org.codeaurora.poweronalert.action.ALARM_POWER_OFF";
+ private static final String FIRST_ALARM_FLAG = "first_alarm";
+
public static int getGlobalIntentId(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
return prefs.getInt(ALARM_GLOBAL_ID_EXTRA, -1);
@@ -508,6 +516,13 @@ public final class AlarmStateManager extends BroadcastReceiver {
// Instance is not valid anymore, so find next alarm that will fire and notify system
updateNextAlarm(context);
+ if (isPowerOffAlarm(context)) {
+ try {
+ context.startActivity(new Intent(ACTION_POWER_ON_ALERT));
+ } catch (ActivityNotFoundException ex) {
+ // do nothing, the powerOnAlert app couldn't be found.
+ }
+ }
}
/**
@@ -694,6 +709,9 @@ public final class AlarmStateManager extends BroadcastReceiver {
break;
case AlarmInstance.MISSED_STATE:
setMissedState(context, instance);
+ if (isPowerOffAlarm(context)) {
+ context.sendBroadcast(new Intent(ALARM_POWER_OFF_ACTION));
+ }
break;
case AlarmInstance.DISMISSED_STATE:
setDismissState(context, instance);
@@ -825,4 +843,22 @@ public final class AlarmStateManager extends BroadcastReceiver {
setOneminutelate(context, instance);
}
}
+
+ public static void setRtcPowerUp(Context context, boolean isRtcPowerUp) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ prefs.edit().putBoolean(FIRST_ALARM_FLAG, isRtcPowerUp).commit();
+ }
+
+ /**
+ * @return true if the alarm is a power off alarm
+ */
+ public static boolean isPowerOffAlarm(Context context) {
+ boolean isPoAlarm = false;
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ if (prefs.getBoolean(FIRST_ALARM_FLAG, false)) {
+ isPoAlarm = true;
+ setRtcPowerUp(context,false);
+ }
+ return isPoAlarm;
+ }
}