From 3dc45fbc57c664539e97bc3031337aeb9643a90e Mon Sep 17 00:00:00 2001 From: Hui Yu Date: Mon, 16 Mar 2020 18:56:21 -0700 Subject: Update AppOps & UsageStats when app widget tapped. When the app widget on the launcher is tapped on: 1. Update AppOps. AppOps treats the underlying app as foreground so the app can get while-in-use permission. 2. Report a USER_INTERACTION event to UsageStats so UsageStats can update mLastTimeUsed and mLastTimeVisible of this package. Bug: 149043079 Test: manual test, tapped on a widget. Change-Id: Ic8c91190881cf5dcf89f0f72cfd410b0c2e86bf6 --- core/java/android/widget/RemoteViews.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'core/java/android/widget/RemoteViews.java') diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 7f6c0d2077f1..4a27d3a0e71d 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -29,6 +29,7 @@ import android.app.Application; import android.app.PendingIntent; import android.app.RemoteInput; import android.appwidget.AppWidgetHostView; +import android.appwidget.AppWidgetManager; import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.ContextWrapper; @@ -4130,8 +4131,18 @@ public class RemoteViews implements Parcelable, Filter { // The NEW_TASK flags are applied through the activity options and not as a part of // the call to startIntentSender() to ensure that they are consistently applied to // both mutable and immutable PendingIntents. + final IntentSender intentSender = pendingIntent.getIntentSender(); + final int uid = intentSender.getCreatorUid(); + final String packageName = intentSender.getCreatorPackage(); + if (uid != -1 && packageName != null) { + final AppWidgetManager appWidgetManager = + context.getSystemService(AppWidgetManager.class); + if (appWidgetManager != null) { + appWidgetManager.noteAppWidgetTapped(uid, packageName); + } + } context.startIntentSender( - pendingIntent.getIntentSender(), options.first, + intentSender, options.first, 0, 0, 0, options.second.toBundle()); } catch (IntentSender.SendIntentException e) { Log.e(LOG_TAG, "Cannot send pending intent: ", e); -- cgit v1.2.3