Skip to content
This repository was archived by the owner on Aug 25, 2024. It is now read-only.

Commit 1594904

Browse files
mikeNGthewisenerd
authored andcommitted
DeskClock: Replace proprietary PowerOnAlert functionality
* We don't ship PowerOnAlert app thus power off alarm handling is broken * Try to mimic what the qcom app does. Since there is no way to continue boot properly after power off alarm, device will: - Power off when alarm is snoozed or missed - Reboot when alarm is dismissed Change-Id: Ic075a961f718c8a5486f2beeff0872f7738b459e
1 parent c4ef2ed commit 1594904

File tree

3 files changed

+29
-15
lines changed

3 files changed

+29
-15
lines changed

Android.mk

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ LOCAL_MODULE_TAGS := optional
2121
LOCAL_PACKAGE_NAME := DeskClock
2222
LOCAL_OVERRIDES_PACKAGES := AlarmClock
2323

24+
LOCAL_CERTIFICATE := platform
25+
2426
LOCAL_SRC_FILES := $(call all-java-files-under, src gen)
2527

2628
LOCAL_STATIC_JAVA_LIBRARIES := android-opt-datetimepicker

AndroidManifest.xml

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
<uses-permission android:name="android.permission.WAKE_LOCK"/>
2929
<uses-permission android:name="android.permission.VIBRATE"/>
3030
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
31+
<uses-permission android:name="android.permission.SHUTDOWN" />
32+
<uses-permission android:name="android.permission.REBOOT" />
3133
<!-- WRITE_SETTINGS is required to record the upcoming alarm prior to L -->
3234
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
3335
<!-- READ_PHONE_STATE is required to determine when a phone call exists prior to M -->
@@ -41,7 +43,6 @@
4143
<uses-permission android:name="android.permission.INTERNET" />
4244
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
4345
<uses-permission android:name="com.android.deskclock.worldclock.permissions.WRITE_DATABASE" />
44-
<uses-permission android:name="org.codeaurora.permission.POWER_ON_ALERT" />
4546
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
4647
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
4748
<uses-permission android:name="cyanogenmod.permission.MODIFY_PROFILES" />

src/com/android/deskclock/alarms/AlarmStateManager.java

+25-14
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import android.os.Handler;
2929
import android.os.PowerManager;
3030
import android.os.SystemProperties;
31-
3231
import android.preference.PreferenceManager;
3332
import android.provider.Settings;
3433
import android.support.v4.app.NotificationManagerCompat;
@@ -150,11 +149,6 @@ public final class AlarmStateManager extends BroadcastReceiver {
150149
private static StateChangeScheduler sStateChangeScheduler =
151150
new AlarmManagerStateChangeScheduler();
152151

153-
private static final String ACTION_POWER_ON_ALERT =
154-
"org.codeaurora.poweronalert.action.POWER_ON_ALERT";
155-
private static final String ACTION_POWER_OFF =
156-
"org.codeaurora.poweronalert.action.ALARM_POWER_OFF";
157-
158152
private static Calendar getCurrentTime() {
159153
return sCurrentTimeFactory == null ?
160154
Calendar.getInstance() : sCurrentTimeFactory.getCurrentTime();
@@ -547,7 +541,7 @@ public void run() {
547541
updateNextAlarm(context);
548542

549543
if (isAlarmBoot()) {
550-
context.sendBroadcast(new Intent(ACTION_POWER_OFF));
544+
powerOff(context);
551545
}
552546
}
553547

@@ -630,8 +624,7 @@ public static void setDismissState(Context context, AlarmInstance instance) {
630624
AlarmInstance.updateInstance(contentResolver, instance);
631625

632626
if (isAlarmBoot()) {
633-
context.startActivity(new Intent(ACTION_POWER_ON_ALERT)
634-
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
627+
reboot(context);
635628
}
636629
}
637630

@@ -901,7 +894,7 @@ private static void setAlarmState(Context context, AlarmInstance instance, int s
901894
case AlarmInstance.MISSED_STATE:
902895
setMissedState(context, instance);
903896
if (isAlarmBoot()) {
904-
context.sendBroadcast(new Intent(ACTION_POWER_OFF));
897+
powerOff(context);
905898
}
906899
break;
907900
case AlarmInstance.PREDISMISSED_STATE:
@@ -1141,10 +1134,28 @@ public static void setChangeAlarmState(Context context, AlarmInstance instance,
11411134
}
11421135
}
11431136

1144-
/*
1145-
* Check if it is alarm boot
1137+
/**
1138+
* Check if the device booted because of an alarm
1139+
*/
1140+
public static boolean isAlarmBoot() {
1141+
return SystemProperties.getBoolean("ro.alarm_boot", false);
1142+
}
1143+
1144+
/**
1145+
* Power off immediately
1146+
*/
1147+
private static void powerOff(Context context) {
1148+
Intent requestShutdown = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
1149+
requestShutdown.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
1150+
requestShutdown.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
1151+
context.startActivity(requestShutdown);
1152+
}
1153+
1154+
/**
1155+
* Reboot immediately
11461156
*/
1147-
public static boolean isAlarmBoot () {
1148-
return SystemProperties.getBoolean("ro.alarm_boot", false);
1157+
private static void reboot(Context context) {
1158+
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
1159+
pm.reboot(null);
11491160
}
11501161
}

0 commit comments

Comments
 (0)