Merge "Fixing user tap on suspended widget" into pi-dev

am: 98deba8412

Change-Id: I689e4e488ec573050c18420c50595cc0d9472178
This commit is contained in:
Suprabh Shukla
2018-05-14 16:48:06 -07:00
committed by android-build-merger
3 changed files with 58 additions and 42 deletions

View File

@@ -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);
}
}