OSDN Git Service

Merge "Remove account should show policy transparency dialog when DISALLOW_MODIFY_ACC...
authoryuemingw <yuemingw@google.com>
Mon, 26 Mar 2018 18:51:49 +0000 (18:51 +0000)
committerandroid-build-merger <android-build-merger@google.com>
Mon, 26 Mar 2018 18:51:49 +0000 (18:51 +0000)
am: a3db549834

Change-Id: If7c967d8bf7eddf3a50bd3d629e3e79c85fac5e6

src/com/android/settings/accounts/RemoveAccountPreferenceController.java
tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java
tests/robotests/src/com/android/settings/testutils/shadow/ShadowDevicePolicyManager.java

index 068847f..98ab504 100644 (file)
@@ -21,11 +21,11 @@ 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;
 import android.app.Fragment;
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -44,6 +44,8 @@ import com.android.settings.applications.LayoutPreference;
 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;
@@ -92,12 +94,15 @@ 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;
+        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);
     }
 
index 6020277..3df7c9d 100644 (file)
@@ -32,8 +32,8 @@ import android.accounts.AuthenticatorDescription;
 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;
@@ -48,8 +48,13 @@ import com.android.settings.applications.LayoutPreference;
 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;
@@ -60,6 +65,11 @@ import org.robolectric.annotation.Config;
 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";
@@ -125,8 +135,21 @@ public class RemoveAccountPreferenceControllerTest {
     @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(
index 77daae0..7e2c3cc 100644 (file)
@@ -5,12 +5,14 @@ import android.annotation.Nullable;
 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.
@@ -19,6 +21,7 @@ import java.util.Objects;
 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);
@@ -38,4 +41,17 @@ public class ShadowDevicePolicyManager extends org.robolectric.shadows.ShadowDev
     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;
+    }
 }