Loading apex/jobscheduler/framework/java/android/app/AlarmManager.java +30 −2 Original line number Diff line number Diff line Loading @@ -36,7 +36,9 @@ import android.os.Handler; import android.os.HandlerExecutor; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.WorkSource; import android.text.TextUtils; import android.util.Log; Loading Loading @@ -90,6 +92,14 @@ import java.util.concurrent.Executor; public class AlarmManager { private static final String TAG = "AlarmManager"; /** * Prefix used by {{@link #makeTag(long, WorkSource)}} to make a tag on behalf of the caller * when the {@link #set(int, long, long, long, OnAlarmListener, Handler, WorkSource)} API is * used. This prefix is a unique sequence of characters to differentiate with other tags that * apps may provide to other APIs that accept a listener callback. */ private static final String GENERATED_TAG_PREFIX = "$android.alarm.generated"; /** @hide */ @IntDef(prefix = { "RTC", "ELAPSED" }, value = { RTC_WAKEUP, Loading Loading @@ -911,6 +921,24 @@ public class AlarmManager { targetHandler, workSource, null); } /** * This is only used to make an identifying tag for the deprecated * {@link #set(int, long, long, long, OnAlarmListener, Handler, WorkSource)} API which doesn't * accept a tag. For all other APIs, the tag provided by the app is used, even if it is * {@code null}. */ private static String makeTag(long triggerMillis, WorkSource ws) { final StringBuilder tagBuilder = new StringBuilder(GENERATED_TAG_PREFIX); tagBuilder.append(":"); final int attributionUid = (ws == null || ws.isEmpty()) ? Process.myUid() : ws.getAttributionUid(); tagBuilder.append(UserHandle.formatUid(attributionUid)); tagBuilder.append(":"); tagBuilder.append(triggerMillis); return tagBuilder.toString(); } /** * Direct callback version of {@link #set(int, long, long, long, PendingIntent, WorkSource)}. * Note that repeating alarms must use the PendingIntent variant, not an OnAlarmListener. Loading @@ -937,8 +965,8 @@ public class AlarmManager { public void set(@AlarmType int type, long triggerAtMillis, long windowMillis, long intervalMillis, @NonNull OnAlarmListener listener, @Nullable Handler targetHandler, @Nullable WorkSource workSource) { setImpl(type, triggerAtMillis, windowMillis, intervalMillis, 0, null, listener, null, targetHandler, workSource, null); setImpl(type, triggerAtMillis, windowMillis, intervalMillis, 0, null, listener, makeTag(triggerAtMillis, workSource), targetHandler, workSource, null); } /** Loading Loading
apex/jobscheduler/framework/java/android/app/AlarmManager.java +30 −2 Original line number Diff line number Diff line Loading @@ -36,7 +36,9 @@ import android.os.Handler; import android.os.HandlerExecutor; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.WorkSource; import android.text.TextUtils; import android.util.Log; Loading Loading @@ -90,6 +92,14 @@ import java.util.concurrent.Executor; public class AlarmManager { private static final String TAG = "AlarmManager"; /** * Prefix used by {{@link #makeTag(long, WorkSource)}} to make a tag on behalf of the caller * when the {@link #set(int, long, long, long, OnAlarmListener, Handler, WorkSource)} API is * used. This prefix is a unique sequence of characters to differentiate with other tags that * apps may provide to other APIs that accept a listener callback. */ private static final String GENERATED_TAG_PREFIX = "$android.alarm.generated"; /** @hide */ @IntDef(prefix = { "RTC", "ELAPSED" }, value = { RTC_WAKEUP, Loading Loading @@ -911,6 +921,24 @@ public class AlarmManager { targetHandler, workSource, null); } /** * This is only used to make an identifying tag for the deprecated * {@link #set(int, long, long, long, OnAlarmListener, Handler, WorkSource)} API which doesn't * accept a tag. For all other APIs, the tag provided by the app is used, even if it is * {@code null}. */ private static String makeTag(long triggerMillis, WorkSource ws) { final StringBuilder tagBuilder = new StringBuilder(GENERATED_TAG_PREFIX); tagBuilder.append(":"); final int attributionUid = (ws == null || ws.isEmpty()) ? Process.myUid() : ws.getAttributionUid(); tagBuilder.append(UserHandle.formatUid(attributionUid)); tagBuilder.append(":"); tagBuilder.append(triggerMillis); return tagBuilder.toString(); } /** * Direct callback version of {@link #set(int, long, long, long, PendingIntent, WorkSource)}. * Note that repeating alarms must use the PendingIntent variant, not an OnAlarmListener. Loading @@ -937,8 +965,8 @@ public class AlarmManager { public void set(@AlarmType int type, long triggerAtMillis, long windowMillis, long intervalMillis, @NonNull OnAlarmListener listener, @Nullable Handler targetHandler, @Nullable WorkSource workSource) { setImpl(type, triggerAtMillis, windowMillis, intervalMillis, 0, null, listener, null, targetHandler, workSource, null); setImpl(type, triggerAtMillis, windowMillis, intervalMillis, 0, null, listener, makeTag(triggerAtMillis, workSource), targetHandler, workSource, null); } /** Loading