summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorSuprabh Shukla <suprabh@google.com>2018-05-14 16:48:06 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-05-14 16:48:06 -0700
commitfa03e5043fda0ca993f3b595a4b44f50cd2943bf (patch)
tree86e6d0b78352563925b50a96df371155255f0bc3 /core
parentfbcae9d73269765f78bf72cb5ecd4334c4f25e0a (diff)
parent98deba84123c28949962ce09fe0dd5c3afc6eee7 (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.java51
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);
+ }
}