From 98b41398e7acd4244191672d6f18b645bacb2823 Mon Sep 17 00:00:00 2001 From: Suprabh Shukla Date: Tue, 30 Mar 2021 22:45:17 -0700 Subject: [PATCH] Adding a shell command to AlarmManager Adding a command to get the config version number which is incremented everytime onPropertiesChanged is called. This is useful in waiting till a change has been propagated to the service before proceeding with tests. Test: adb shell dumpsys alarm adb shell cmd alarm get-config-version Bug: 182835530 Change-Id: I171578255d4b69e75f535fd44ab0f5f462ea8d0b --- .../java/android/app/IAlarmManager.aidl | 1 + .../server/alarm/AlarmManagerService.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl b/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl index 2f21ce395df53..a10cbbee19d1e 100644 --- a/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl +++ b/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl @@ -42,4 +42,5 @@ interface IAlarmManager { AlarmManager.AlarmClockInfo getNextAlarmClock(int userId); long currentNetworkTimeMillis(); boolean canScheduleExactAlarms(); + int getConfigVersion(); } diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index 901daa73afb35..08e1a952603c0 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -538,6 +538,7 @@ public class AlarmManagerService extends SystemService { public long PRIORITY_ALARM_DELAY = DEFAULT_PRIORITY_ALARM_DELAY; private long mLastAllowWhileIdleWhitelistDuration = -1; + private int mVersion = 0; Constants() { updateAllowWhileIdleWhitelistDurationLocked(); @@ -546,6 +547,12 @@ public class AlarmManagerService extends SystemService { } } + public int getVersion() { + synchronized (mLock) { + return mVersion; + } + } + public void start() { mInjector.registerDeviceConfigListener(this); onPropertiesChanged(DeviceConfig.getProperties(DeviceConfig.NAMESPACE_ALARM_MANAGER)); @@ -568,6 +575,7 @@ public class AlarmManagerService extends SystemService { public void onPropertiesChanged(@NonNull DeviceConfig.Properties properties) { boolean standbyQuotaUpdated = false; synchronized (mLock) { + mVersion++; for (String name : properties.getKeyset()) { if (name == null) { continue; @@ -749,6 +757,9 @@ public class AlarmManagerService extends SystemService { pw.increaseIndent(); + pw.print("version", mVersion); + pw.println(); + pw.print(KEY_MIN_FUTURITY); pw.print("="); TimeUtils.formatDuration(MIN_FUTURITY, pw); @@ -2218,6 +2229,13 @@ public class AlarmManagerService extends SystemService { } } + @Override + public int getConfigVersion() { + getContext().enforceCallingOrSelfPermission(Manifest.permission.DUMP, + "getConfigVersion"); + return mConstants.getVersion(); + } + @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (!DumpUtils.checkDumpAndUsageStatsPermission(getContext(), TAG, pw)) return; @@ -4698,6 +4716,10 @@ public class AlarmManagerService extends SystemService { final String tz = getNextArgRequired(); getBinderService().setTimeZone(tz); return 0; + case "get-config-version": + final int version = getBinderService().getConfigVersion(); + pw.println(version); + return 0; default: return handleDefaultCommands(cmd); } @@ -4718,6 +4740,10 @@ public class AlarmManagerService extends SystemService { pw.println(" since the Epoch."); pw.println(" set-timezone TZ"); pw.println(" Set the system timezone to TZ where TZ is an Olson id."); + pw.println(" get-config-version"); + pw.println(" Returns an integer denoting the version of device_config keys the" + + " service is sync'ed to. As long as this returns the same version, the values" + + " of the config are guaranteed to remain the same."); } } }