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;
import android.app.Fragment;
+import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.core.AbstractPreferenceController;
import java.io.IOException;
@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;
+ if (mUserHandle != null) {
+ final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(mContext,
+ UserManager.DISALLOW_MODIFY_ACCOUNTS, mUserHandle.getIdentifier());
+ if (admin != null) {
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, admin);
+ return;
+ }
}
+
ConfirmRemoveAccountDialog.show(mParentFragment, mAccount, mUserHandle);
}
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
+import android.content.ComponentName;
import android.content.Context;
-import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.UserHandle;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowAccountManager;
import com.android.settings.testutils.shadow.ShadowContentResolver;
+import com.android.settings.testutils.shadow.ShadowDevicePolicyManager;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import java.util.ArrayList;
+import java.util.List;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(
+ shadows = {
+ ShadowUserManager.class,
+ ShadowDevicePolicyManager.class
+ })
public class RemoveAccountPreferenceControllerTest {
private static final String KEY_REMOVE_ACCOUNT = "remove_account";
@Test
public void onClick_shouldNotStartConfirmDialogWhenModifyAccountsIsDisallowed() {
when(mFragment.isAdded()).thenReturn(true);
- when(mDevicePolicyManager.createAdminSupportIntent(UserManager.DISALLOW_MODIFY_ACCOUNTS))
- .thenReturn(new Intent());
+
+ final int userId = UserHandle.myUserId();
+ mController.init(new Account("test", "test"), UserHandle.of(userId));
+
+ List<UserManager.EnforcingUser> enforcingUsers = new ArrayList<>();
+ enforcingUsers.add(new UserManager.EnforcingUser(userId,
+ UserManager.RESTRICTION_SOURCE_DEVICE_OWNER));
+ ComponentName componentName = new ComponentName("test", "test");
+ // Ensure that RestrictedLockUtils.checkIfRestrictionEnforced doesn't return null.
+ ShadowUserManager.getShadow().setUserRestrictionSources(
+ UserManager.DISALLOW_MODIFY_ACCOUNTS,
+ UserHandle.of(userId),
+ enforcingUsers);
+ ShadowDevicePolicyManager.getShadow().setDeviceOwnerComponentOnAnyUser(componentName);
+
mController.onClick(null);
verify(mFragmentTransaction, never()).add(
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
+import org.robolectric.shadow.api.Shadow;
/**
* This shadow if using {@link ShadowDevicePolicyManagerWrapper} is not possible.
public class ShadowDevicePolicyManager extends org.robolectric.shadows.ShadowDevicePolicyManager {
private Map<Integer, CharSequence> mSupportMessagesMap = new HashMap<>();
private boolean mIsAdminActiveAsUser = false;
+ ComponentName mDeviceOwnerComponentName;
public void setShortSupportMessageForUser(ComponentName admin, int userHandle, String message) {
mSupportMessagesMap.put(Objects.hash(admin, userHandle), message);
public void setIsAdminActiveAsUser(boolean active) {
mIsAdminActiveAsUser = active;
}
+
+ public static ShadowDevicePolicyManager getShadow() {
+ return (ShadowDevicePolicyManager) Shadow.extract(
+ RuntimeEnvironment.application.getSystemService(DevicePolicyManager.class));
+ }
+
+ public ComponentName getDeviceOwnerComponentOnAnyUser() {
+ return mDeviceOwnerComponentName;
+ }
+
+ public void setDeviceOwnerComponentOnAnyUser(ComponentName admin) {
+ mDeviceOwnerComponentName = admin;
+ }
}