diff options
| author | Suprabh Shukla <suprabh@google.com> | 2018-05-14 16:48:06 -0700 |
|---|---|---|
| committer | android-build-merger <android-build-merger@google.com> | 2018-05-14 16:48:06 -0700 |
| commit | fa03e5043fda0ca993f3b595a4b44f50cd2943bf (patch) | |
| tree | 86e6d0b78352563925b50a96df371155255f0bc3 /core | |
| parent | fbcae9d73269765f78bf72cb5ecd4334c4f25e0a (diff) | |
| parent | 98deba84123c28949962ce09fe0dd5c3afc6eee7 (diff) | |
Merge "Fixing user tap on suspended widget" into pi-dev
am: 98deba8412
Change-Id: I689e4e488ec573050c18420c50595cc0d9472178
Diffstat (limited to 'core')
| -rw-r--r-- | core/java/com/android/internal/app/SuspendedAppActivity.java | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/core/java/com/android/internal/app/SuspendedAppActivity.java b/core/java/com/android/internal/app/SuspendedAppActivity.java index 25af3557e354..f42a195f001f 100644 --- a/core/java/com/android/internal/app/SuspendedAppActivity.java +++ b/core/java/com/android/internal/app/SuspendedAppActivity.java @@ -16,10 +16,12 @@ package com.android.internal.app; +import android.Manifest; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.UserHandle; import android.util.Slog; @@ -30,35 +32,47 @@ import com.android.internal.R; public class SuspendedAppActivity extends AlertActivity implements DialogInterface.OnClickListener { private static final String TAG = "SuspendedAppActivity"; - public static final String EXTRA_SUSPENDED_PACKAGE = "SuspendedAppActivity.extra.SUSPENDED_PACKAGE"; public static final String EXTRA_SUSPENDING_PACKAGE = "SuspendedAppActivity.extra.SUSPENDING_PACKAGE"; public static final String EXTRA_DIALOG_MESSAGE = "SuspendedAppActivity.extra.DIALOG_MESSAGE"; - public static final String EXTRA_MORE_DETAILS_INTENT = - "SuspendedAppActivity.extra.MORE_DETAILS_INTENT"; private Intent mMoreDetailsIntent; private int mUserId; + private PackageManager mPm; private CharSequence getAppLabel(String packageName) { - final PackageManager pm = getPackageManager(); try { - return pm.getApplicationInfoAsUser(packageName, 0, mUserId).loadLabel(pm); + return mPm.getApplicationInfoAsUser(packageName, 0, mUserId).loadLabel(mPm); } catch (PackageManager.NameNotFoundException ne) { Slog.e(TAG, "Package " + packageName + " not found", ne); } return packageName; } + private Intent getMoreDetailsActivity(String suspendingPackage, String suspendedPackage, + int userId) { + final Intent moreDetailsIntent = new Intent(Intent.ACTION_SHOW_SUSPENDED_APP_DETAILS) + .setPackage(suspendingPackage); + final String requiredPermission = Manifest.permission.SEND_SHOW_SUSPENDED_APP_DETAILS; + final ResolveInfo resolvedInfo = mPm.resolveActivityAsUser(moreDetailsIntent, 0, userId); + if (resolvedInfo != null && resolvedInfo.activityInfo != null + && requiredPermission.equals(resolvedInfo.activityInfo.permission)) { + moreDetailsIntent.putExtra(Intent.EXTRA_PACKAGE_NAME, suspendedPackage) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + return moreDetailsIntent; + } + return null; + } + @Override public void onCreate(Bundle icicle) { - getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); super.onCreate(icicle); + mPm = getPackageManager(); + getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG); final Intent intent = getIntent(); - mMoreDetailsIntent = intent.getParcelableExtra(EXTRA_MORE_DETAILS_INTENT); mUserId = intent.getIntExtra(Intent.EXTRA_USER_ID, -1); if (mUserId < 0) { Slog.wtf(TAG, "Invalid user: " + mUserId); @@ -66,13 +80,13 @@ public class SuspendedAppActivity extends AlertActivity return; } final String suppliedMessage = intent.getStringExtra(EXTRA_DIALOG_MESSAGE); - final CharSequence suspendedAppLabel = getAppLabel( - intent.getStringExtra(EXTRA_SUSPENDED_PACKAGE)); + final String suspendedPackage = intent.getStringExtra(EXTRA_SUSPENDED_PACKAGE); + final String suspendingPackage = intent.getStringExtra(EXTRA_SUSPENDING_PACKAGE); + final CharSequence suspendedAppLabel = getAppLabel(suspendedPackage); final CharSequence dialogMessage; if (suppliedMessage == null) { - dialogMessage = getString(R.string.app_suspended_default_message, - suspendedAppLabel, - getAppLabel(intent.getStringExtra(EXTRA_SUSPENDING_PACKAGE))); + dialogMessage = getString(R.string.app_suspended_default_message, suspendedAppLabel, + getAppLabel(suspendingPackage)); } else { dialogMessage = String.format(getResources().getConfiguration().getLocales().get(0), suppliedMessage, suspendedAppLabel); @@ -82,6 +96,7 @@ public class SuspendedAppActivity extends AlertActivity ap.mTitle = getString(R.string.app_suspended_title); ap.mMessage = dialogMessage; ap.mPositiveButtonText = getString(android.R.string.ok); + mMoreDetailsIntent = getMoreDetailsActivity(suspendingPackage, suspendedPackage, mUserId); if (mMoreDetailsIntent != null) { ap.mNeutralButtonText = getString(R.string.app_suspended_more_details); } @@ -99,4 +114,16 @@ public class SuspendedAppActivity extends AlertActivity } finish(); } + + public static Intent createSuspendedAppInterceptIntent(String suspendedPackage, + String suspendingPackage, String dialogMessage, int userId) { + return new Intent() + .setClassName("android", SuspendedAppActivity.class.getName()) + .putExtra(EXTRA_SUSPENDED_PACKAGE, suspendedPackage) + .putExtra(EXTRA_DIALOG_MESSAGE, dialogMessage) + .putExtra(EXTRA_SUSPENDING_PACKAGE, suspendingPackage) + .putExtra(Intent.EXTRA_USER_ID, userId) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + } } |
