From cc5251e7d69daea11d9486aec34e672bfb70c636 Mon Sep 17 00:00:00 2001 From: Keun young Park Date: Fri, 17 May 2019 16:08:29 -0700 Subject: [PATCH] Remove special handling of wakeup alarm for car - Android does not guarantee wakeup from wake up alarm in special power state like deep sleep, deep doze and etc. - Car devices will still not support wakeup while car is in deep sleep but that enforcement is done in kernel level, not AlarmManagerService. - This effectively reverts commit c32088c1579a85fd5de455d5dde388e7f712b80a but is keeping generic test added with that CL. Bug: 123430582 Test: Run the unit test. Change-Id: If951e10b1c1a0fcafaa1c44990f9c7117ba8973d --- .../android/server/AlarmManagerService.java | 25 ------------------- .../server/AlarmManagerServiceTest.java | 21 ---------------- 2 files changed, 46 deletions(-) diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index cb61259ec53dc..dfbb55a02ec7a 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -1698,8 +1698,6 @@ class AlarmManagerService extends SystemService { return; } - type = fixTypeIfAuto(type); - // Sanity check the window length. This will catch people mistakenly // trying to pass an end-of-window timestamp rather than a duration. if (windowLength > AlarmManager.INTERVAL_HALF_DAY) { @@ -1814,21 +1812,6 @@ class AlarmManagerService extends SystemService { return mConstants.APP_STANDBY_QUOTAS[index]; } - /** - * In case of cars, we need to avoid scheduling wakeup alarms, since we don't want the system - * to wake up from suspend arbitrarily to perform app work. - */ - private int fixTypeIfAuto(int type) { - if (mInjector.isAutomotive()) { - if (type == AlarmManager.ELAPSED_REALTIME_WAKEUP) { - type = AlarmManager.ELAPSED_REALTIME; - } else if (type == AlarmManager.RTC_WAKEUP) { - type = AlarmManager.RTC; - } - } - return type; - } - /** * Return the minimum time that should elapse before an app in the specified bucket * can receive alarms again @@ -2232,7 +2215,6 @@ class AlarmManagerService extends SystemService { pw.print(" mLastTickSet="); pw.println(sdf.format(new Date(mLastTickSet))); pw.print(" mLastTickAdded="); pw.println(sdf.format(new Date(mLastTickAdded))); pw.print(" mLastTickRemoved="); pw.println(sdf.format(new Date(mLastTickRemoved))); - pw.print(" mIsAutomotive="); pw.println(mInjector.isAutomotive()); if (RECORD_ALARMS_IN_HISTORY) { pw.println(); @@ -3899,12 +3881,9 @@ class AlarmManagerService extends SystemService { static class Injector { private long mNativeData; private Context mContext; - private final boolean mIsAutomotive; Injector(Context context) { mContext = context; - mIsAutomotive = context.getPackageManager().hasSystemFeature( - PackageManager.FEATURE_AUTOMOTIVE); } void init() { @@ -3993,10 +3972,6 @@ class AlarmManagerService extends SystemService { ClockReceiver getClockReceiver(AlarmManagerService service) { return service.new ClockReceiver(); } - - boolean isAutomotive() { - return mIsAutomotive; - } } private class AlarmThread extends Thread diff --git a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java index 77e2517d77525..cdcdf9195ad59 100644 --- a/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/AlarmManagerServiceTest.java @@ -68,7 +68,6 @@ import android.app.usage.UsageStatsManagerInternal; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -122,8 +121,6 @@ public class AlarmManagerServiceTest { private AlarmManagerService.ClockReceiver mClockReceiver; @Mock private PowerManager.WakeLock mWakeLock; - @Mock - private PackageManager mMockPackageManager; private MockitoSession mMockingSession; private Injector mInjector; @@ -241,11 +238,6 @@ public class AlarmManagerServiceTest { PowerManager.WakeLock getAlarmWakeLock() { return mWakeLock; } - - @Override - boolean isAutomotive() { - return mIsAutomotiveOverride; - } } @Before @@ -272,7 +264,6 @@ public class AlarmManagerServiceTest { when(mMockContext.getContentResolver()).thenReturn(mMockResolver); doReturn("min_futurity=0,min_interval=0").when(() -> Settings.Global.getString(mMockResolver, Settings.Global.ALARM_MANAGER_CONSTANTS)); - when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager); mInjector = new Injector(mMockContext); mService = new AlarmManagerService(mMockContext, mInjector); @@ -1024,18 +1015,6 @@ public class AlarmManagerServiceTest { assertAlarmTypeConversion(typesToSet, typesExpected); } - /** - * Confirm that wakeup alarms are never set for automotive. - */ - @Test - public void alarmTypesForAuto() throws Exception { - mInjector.mIsAutomotiveOverride = true; - final int[] typesToSet = {ELAPSED_REALTIME_WAKEUP, ELAPSED_REALTIME, RTC_WAKEUP, RTC}; - final int[] typesExpected = {ELAPSED_REALTIME, ELAPSED_REALTIME, ELAPSED_REALTIME, - ELAPSED_REALTIME}; - assertAlarmTypeConversion(typesToSet, typesExpected); - } - private void assertAlarmTypeConversion(int[] typesToSet, int[] typesExpected) throws Exception { for (int i = 0; i < typesToSet.length; i++) { setTestAlarm(typesToSet[i], 1234, getNewMockPendingIntent());