From be96b3a2aa7ec6d57ac038d4a5326fc168585ad6 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Tue, 14 Jul 2009 19:49:27 -0700 Subject: [PATCH] Clamp app widget updates from updatePeriodMillis to a minimum of 30 minutes. --- core/java/android/appwidget/AppWidgetProviderInfo.java | 3 +++ services/java/com/android/server/AppWidgetService.java | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java index 8530c355b9351..a2e0ba0a4c269 100644 --- a/core/java/android/appwidget/AppWidgetProviderInfo.java +++ b/core/java/android/appwidget/AppWidgetProviderInfo.java @@ -57,6 +57,9 @@ public class AppWidgetProviderInfo implements Parcelable { * *

This field corresponds to the android:updatePeriodMillis attribute in * the AppWidget meta-data file. + * + *

Note: Updates requested with updatePeriodMillis + * will not be delivered more than once every 30 minutes.

*/ public int updatePeriodMillis; diff --git a/services/java/com/android/server/AppWidgetService.java b/services/java/com/android/server/AppWidgetService.java index 131e156748d01..78db6f93727ee 100644 --- a/services/java/com/android/server/AppWidgetService.java +++ b/services/java/com/android/server/AppWidgetService.java @@ -68,6 +68,7 @@ class AppWidgetService extends IAppWidgetService.Stub private static final String SETTINGS_FILENAME = "appwidgets.xml"; private static final String SETTINGS_TMP_FILENAME = SETTINGS_FILENAME + ".tmp"; + private static final int MIN_UPDATE_PERIOD = 30 * 60 * 1000; // 30 minutes /* * When identifying a Host or Provider based on the calling process, use the uid field. @@ -629,9 +630,12 @@ class AppWidgetService extends IAppWidgetService.Stub Binder.restoreCallingIdentity(token); } if (!alreadyRegistered) { + long period = p.info.updatePeriodMillis; + if (period < MIN_UPDATE_PERIOD) { + period = MIN_UPDATE_PERIOD; + } mAlarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + p.info.updatePeriodMillis, - p.info.updatePeriodMillis, p.broadcast); + SystemClock.elapsedRealtime() + period, period, p.broadcast); } } }