Merge "When Remove Account is disallowed, show dialog"

This commit is contained in:
Philipp Weiß
2017-07-06 08:08:43 +00:00
committed by Android (Google) Code Review
4 changed files with 56 additions and 3 deletions

View File

@@ -21,6 +21,7 @@ import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OperationCanceledException;
import android.app.admin.DevicePolicyManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -30,16 +31,20 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.PreferenceScreen;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.enterprise.DevicePolicyManagerWrapper;
import com.android.settings.enterprise.DevicePolicyManagerWrapperImpl;
import com.android.settingslib.core.AbstractPreferenceController;
import java.io.IOException;
@@ -52,10 +57,19 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl
private Account mAccount;
private Fragment mParentFragment;
private UserHandle mUserHandle;
private DevicePolicyManagerWrapper mDpm;
public RemoveAccountPreferenceController(Context context, Fragment parent) {
this(context, parent, new DevicePolicyManagerWrapperImpl(
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE)));
}
@VisibleForTesting
RemoveAccountPreferenceController(Context context, Fragment parent,
DevicePolicyManagerWrapper dpm) {
super(context);
mParentFragment = parent;
mDpm = dpm;
}
@Override
@@ -79,6 +93,12 @@ public class RemoveAccountPreferenceController extends AbstractPreferenceControl
@Override
public void onClick(View v) {
final Intent intent = mDpm.createAdminSupportIntent(UserManager.DISALLOW_MODIFY_ACCOUNTS);
if (intent != null) {
// DISALLOW_MODIFY_ACCOUNTS is active, show admin support dialog
mContext.startActivity(intent);
return;
}
ConfirmRemoveAccountDialog.show(mParentFragment, mAccount, mUserHandle);
}

View File

@@ -18,6 +18,7 @@ package com.android.settings.enterprise;
import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.Intent;
import android.os.UserHandle;
import android.support.annotation.Nullable;
@@ -143,4 +144,11 @@ public interface DevicePolicyManagerWrapper {
* @see android.app.admin.DevicePolicyManager#isUninstallInQueue
*/
boolean isUninstallInQueue(String packageName);
/**
* Calls {@code DevicePolicyManager.createAdminSupportIntent()}.
*
* @see android.app.admin.DevicePolicyManager#createAdminSupportIntent
*/
Intent createAdminSupportIntent(String restriction);
}

View File

@@ -19,6 +19,7 @@ package com.android.settings.enterprise;
import android.annotation.NonNull;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Intent;
import android.os.UserHandle;
import android.support.annotation.Nullable;
@@ -111,4 +112,9 @@ public class DevicePolicyManagerWrapperImpl implements DevicePolicyManagerWrappe
public boolean isUninstallInQueue(String packageName) {
return mDpm.isUninstallInQueue(packageName);
}
@Override
public Intent createAdminSupportIntent(@NonNull String restriction) {
return mDpm.createAdminSupportIntent(restriction);
}
}