Loading core/java/android/app/AlarmManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,12 @@ public class AlarmManager { */ public static final String POWER_OFF_ALARM_INSTANCE_FILE = "/persist/alarm/powerOffAlarmInstance"; /** * @hide */ public static final String POWER_OFF_ALARM_TIMEZONE_FILE = "/persist/alarm/timezone"; /** * @hide */ Loading core/res/res/values/arrays.xml +2 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,8 @@ <item>com.android.providers.media</item> <item>com.android.inputdevices</item> <item>com.android.providers.settings</item> <item>com.android.externalstorage</item> <item>com.android.providers.downloads.ui</item> </string-array> </resources> services/core/java/com/android/server/AlarmManagerService.java +25 −11 Original line number Diff line number Diff line Loading @@ -933,14 +933,31 @@ class AlarmManagerService extends SystemService { long mTotalDelayTime = 0; long mMaxDelayTime = 0; boolean mIsEncryptStatus = false; boolean mIsPowerOffAlarmSet = false; @Override public void onStart() { mNativeData = init(); mNextWakeup = mNextRtcWakeup = mNextNonWakeup = 0; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_NOT_SET); // We have to set current TimeZone info to kernel // because kernel doesn't keep this after reboot String cryptState = SystemProperties.get("vold.decrypt"); if (ENCRYPTING_STATE.equals(cryptState) || ENCRYPTED_STATE.equals(cryptState)) { mIsEncryptStatus = true; } if (mIsEncryptStatus) { String tz = AlarmManager .readPowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_TIMEZONE_FILE); setTimeZoneImpl(tz); } else { setTimeZoneImpl(SystemProperties.get(TIMEZONE_PROPERTY)); } PowerManager pm = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*alarm*"); Loading Loading @@ -1026,7 +1043,7 @@ class AlarmManagerService extends SystemService { TimeZone.setDefault(null); if (timeZoneWasChanged) { if (timeZoneWasChanged && !mIsEncryptStatus) { Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); intent.putExtra("time-zone", zone.getID()); Loading Loading @@ -1902,12 +1919,6 @@ class AlarmManagerService extends SystemService { setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start); } boolean isEncryptStatus = false; String cryptState = SystemProperties.get("vold.decrypt"); if (ENCRYPTING_STATE.equals(cryptState) || ENCRYPTED_STATE.equals(cryptState)) { isEncryptStatus = true; } // Set RTC_POWEROFF type alarm to kernel if (firstRtcWakeup != null && mNextRtcWakeup != firstRtcWakeup.start) { mNextRtcWakeup = firstRtcWakeup.start; Loading @@ -1917,19 +1928,22 @@ class AlarmManagerService extends SystemService { // (power off alarm) String packageName = alarm.packageName; if (DESKCLOCK_PACKAGE_NAME.equals(packageName)) { mIsPowerOffAlarmSet = true; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_SET); if (!isEncryptStatus) { if (!mIsEncryptStatus) { AlarmManager.writePowerOffAlarmFile( AlarmManager.POWER_OFF_ALARM_INSTANCE_FILE, "" + alarm.when); } } else { } else if (mIsPowerOffAlarmSet){ mIsPowerOffAlarmSet = false; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_NOT_SET); } setLocked(RTC_POWEROFF_WAKEUP, alarm.when); } } else if (firstRtcWakeup == null){ } else if (firstRtcWakeup == null && mIsPowerOffAlarmSet){ mIsPowerOffAlarmSet = false; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_NOT_SET); } Loading services/core/java/com/android/server/am/ActivityManagerService.java +0 −15 Original line number Diff line number Diff line Loading @@ -3981,15 +3981,6 @@ public final class ActivityManagerService extends ActivityManagerNative return intent; } /** * If system is power off alarm boot mode, we need to start alarm UI. */ void sendAlarmBroadcast() { Intent intent = new Intent(ACTION_POWER_OFF_ALARM); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT); } boolean startHomeActivityLocked(int userId, String reason) { if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL && mTopAction == null) { Loading Loading @@ -13308,12 +13299,6 @@ public final class ActivityManagerService extends ActivityManagerNative } startHomeActivityLocked(currentUserId, "systemReady"); // start the power off alarm by boot mode boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); if (isAlarmBoot) { sendAlarmBroadcast(); } try { if (AppGlobals.getPackageManager().hasSystemUidErrors()) { Slog.e(TAG, "UIDs on the system are inconsistent, you need to wipe your" services/core/java/com/android/server/power/ShutdownThread.java +2 −0 Original line number Diff line number Diff line Loading @@ -524,6 +524,8 @@ public final class ShutdownThread extends Thread { AlarmManager.POWER_OFF_ALARM_HANDLED); } AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_TIMEZONE_FILE, SystemProperties.get("persist.sys.timezone")); rebootOrShutdown(mContext, mReboot, mReason); } Loading Loading
core/java/android/app/AlarmManager.java +6 −0 Original line number Diff line number Diff line Loading @@ -137,6 +137,12 @@ public class AlarmManager { */ public static final String POWER_OFF_ALARM_INSTANCE_FILE = "/persist/alarm/powerOffAlarmInstance"; /** * @hide */ public static final String POWER_OFF_ALARM_TIMEZONE_FILE = "/persist/alarm/timezone"; /** * @hide */ Loading
core/res/res/values/arrays.xml +2 −0 Original line number Diff line number Diff line Loading @@ -250,6 +250,8 @@ <item>com.android.providers.media</item> <item>com.android.inputdevices</item> <item>com.android.providers.settings</item> <item>com.android.externalstorage</item> <item>com.android.providers.downloads.ui</item> </string-array> </resources>
services/core/java/com/android/server/AlarmManagerService.java +25 −11 Original line number Diff line number Diff line Loading @@ -933,14 +933,31 @@ class AlarmManagerService extends SystemService { long mTotalDelayTime = 0; long mMaxDelayTime = 0; boolean mIsEncryptStatus = false; boolean mIsPowerOffAlarmSet = false; @Override public void onStart() { mNativeData = init(); mNextWakeup = mNextRtcWakeup = mNextNonWakeup = 0; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_NOT_SET); // We have to set current TimeZone info to kernel // because kernel doesn't keep this after reboot String cryptState = SystemProperties.get("vold.decrypt"); if (ENCRYPTING_STATE.equals(cryptState) || ENCRYPTED_STATE.equals(cryptState)) { mIsEncryptStatus = true; } if (mIsEncryptStatus) { String tz = AlarmManager .readPowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_TIMEZONE_FILE); setTimeZoneImpl(tz); } else { setTimeZoneImpl(SystemProperties.get(TIMEZONE_PROPERTY)); } PowerManager pm = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*alarm*"); Loading Loading @@ -1026,7 +1043,7 @@ class AlarmManagerService extends SystemService { TimeZone.setDefault(null); if (timeZoneWasChanged) { if (timeZoneWasChanged && !mIsEncryptStatus) { Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); intent.putExtra("time-zone", zone.getID()); Loading Loading @@ -1902,12 +1919,6 @@ class AlarmManagerService extends SystemService { setLocked(ELAPSED_REALTIME_WAKEUP, firstWakeup.start); } boolean isEncryptStatus = false; String cryptState = SystemProperties.get("vold.decrypt"); if (ENCRYPTING_STATE.equals(cryptState) || ENCRYPTED_STATE.equals(cryptState)) { isEncryptStatus = true; } // Set RTC_POWEROFF type alarm to kernel if (firstRtcWakeup != null && mNextRtcWakeup != firstRtcWakeup.start) { mNextRtcWakeup = firstRtcWakeup.start; Loading @@ -1917,19 +1928,22 @@ class AlarmManagerService extends SystemService { // (power off alarm) String packageName = alarm.packageName; if (DESKCLOCK_PACKAGE_NAME.equals(packageName)) { mIsPowerOffAlarmSet = true; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_SET); if (!isEncryptStatus) { if (!mIsEncryptStatus) { AlarmManager.writePowerOffAlarmFile( AlarmManager.POWER_OFF_ALARM_INSTANCE_FILE, "" + alarm.when); } } else { } else if (mIsPowerOffAlarmSet){ mIsPowerOffAlarmSet = false; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_NOT_SET); } setLocked(RTC_POWEROFF_WAKEUP, alarm.when); } } else if (firstRtcWakeup == null){ } else if (firstRtcWakeup == null && mIsPowerOffAlarmSet){ mIsPowerOffAlarmSet = false; AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_SET_FILE, AlarmManager.POWER_OFF_ALARM_NOT_SET); } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +0 −15 Original line number Diff line number Diff line Loading @@ -3981,15 +3981,6 @@ public final class ActivityManagerService extends ActivityManagerNative return intent; } /** * If system is power off alarm boot mode, we need to start alarm UI. */ void sendAlarmBroadcast() { Intent intent = new Intent(ACTION_POWER_OFF_ALARM); intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND); mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT); } boolean startHomeActivityLocked(int userId, String reason) { if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL && mTopAction == null) { Loading Loading @@ -13308,12 +13299,6 @@ public final class ActivityManagerService extends ActivityManagerNative } startHomeActivityLocked(currentUserId, "systemReady"); // start the power off alarm by boot mode boolean isAlarmBoot = SystemProperties.getBoolean("ro.alarm_boot", false); if (isAlarmBoot) { sendAlarmBroadcast(); } try { if (AppGlobals.getPackageManager().hasSystemUidErrors()) { Slog.e(TAG, "UIDs on the system are inconsistent, you need to wipe your"
services/core/java/com/android/server/power/ShutdownThread.java +2 −0 Original line number Diff line number Diff line Loading @@ -524,6 +524,8 @@ public final class ShutdownThread extends Thread { AlarmManager.POWER_OFF_ALARM_HANDLED); } AlarmManager.writePowerOffAlarmFile(AlarmManager.POWER_OFF_ALARM_TIMEZONE_FILE, SystemProperties.get("persist.sys.timezone")); rebootOrShutdown(mContext, mReboot, mReason); } Loading