Update ShowAdminSupportDetailsDialog launchmode to singleTop.
Bug: 26977320
Change-Id: I8d89ba9243c807657fb4b2b8c93e75aab53d907e
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ef0536f..620fbd2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2760,8 +2760,8 @@
<activity android:name="ShowAdminSupportDetailsDialog"
android:theme="@style/Transparent"
- android:excludeFromRecents="true">
-
+ android:excludeFromRecents="true"
+ android:launchMode="singleTop">
<intent-filter>
<action android:name="android.settings.SHOW_ADMIN_SUPPORT_DETAILS" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/src/com/android/settings/ShowAdminSupportDetailsDialog.java b/src/com/android/settings/ShowAdminSupportDetailsDialog.java
index bc7168f..eccd9ea 100644
--- a/src/com/android/settings/ShowAdminSupportDetailsDialog.java
+++ b/src/com/android/settings/ShowAdminSupportDetailsDialog.java
@@ -37,40 +37,59 @@
import android.widget.ImageView;
import android.widget.TextView;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
public class ShowAdminSupportDetailsDialog extends Activity
implements DialogInterface.OnDismissListener {
- private final String TAG = "AdminSupportDialog";
+ private static final String TAG = "AdminSupportDialog";
private DevicePolicyManager mDpm;
+ private EnforcedAdmin mEnforcedAdmin;
+ private View mDialogView;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDpm = getSystemService(DevicePolicyManager.class);
- ComponentName admin = null;
- int userId = UserHandle.myUserId();
- Intent intent = getIntent();
- if (intent != null) {
- // Only allow apps with MANAGE_DEVICE_ADMINS permission to specify admin and user.
- if (checkIfCallerHasPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS)) {
- admin = intent.getParcelableExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN);
- userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
- }
- }
+ mEnforcedAdmin = getAdminDetailsFromIntent(getIntent());
- View rootView = LayoutInflater.from(this).inflate(
+ mDialogView = LayoutInflater.from(this).inflate(
R.layout.admin_support_details_dialog, null);
- setAdminSupportDetails(rootView, admin, userId);
+ setAdminSupportDetails(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId);
new AlertDialog.Builder(this)
- .setView(rootView)
+ .setView(mDialogView)
.setPositiveButton(R.string.okay, null)
.setOnDismissListener(this)
.show();
}
+ @Override
+ public void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ EnforcedAdmin admin = getAdminDetailsFromIntent(intent);
+ if (!mEnforcedAdmin.equals(admin)) {
+ mEnforcedAdmin = admin;
+ setAdminSupportDetails(mDialogView, mEnforcedAdmin.component, mEnforcedAdmin.userId);
+ }
+ }
+
+ private EnforcedAdmin getAdminDetailsFromIntent(Intent intent) {
+ EnforcedAdmin admin = new EnforcedAdmin(null, UserHandle.myUserId());
+ if (intent == null) {
+ return admin;
+ }
+ // Only allow apps with MANAGE_DEVICE_ADMINS permission to specify admin and user.
+ if (checkIfCallerHasPermission(android.Manifest.permission.MANAGE_DEVICE_ADMINS)) {
+ admin.component = intent.getParcelableExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN);
+ admin.userId = intent.getIntExtra(Intent.EXTRA_USER_ID, UserHandle.myUserId());
+ }
+ return admin;
+ }
+
private boolean checkIfCallerHasPermission(String permission) {
IActivityManager am = ActivityManagerNative.getDefault();
try {