Merge "Use the correct userId when checking if disabled by admin."
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 42ae602..32e5cc1 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -417,7 +417,7 @@
 
             int adminEnforcedQuality = mDPM.getPasswordQuality(null);
             EnforcedAdmin enforcedAdmin = RestrictedLockUtils.checkIfPasswordQualityIsSet(
-                    getActivity());
+                    getActivity(), mUserId);
             for (int i = entries.getPreferenceCount() - 1; i >= 0; --i) {
                 Preference pref = entries.getPreference(i);
                 if (pref instanceof RestrictedPreference) {
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 5ce5cfc..840cd59 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -482,8 +482,8 @@
             boolean serviceAllowed =
                     permittedServices == null || permittedServices.contains(packageName);
             if (!serviceAllowed && !serviceEnabled) {
-                EnforcedAdmin admin =
-                        RestrictedLockUtils.getProfileOrDeviceOwnerOnCallingUser(getActivity());
+                EnforcedAdmin admin = RestrictedLockUtils.checkIfAccessibilityServiceDisallowed(
+                        getActivity(), serviceInfo.packageName, UserHandle.myUserId());
                 if (admin != null) {
                     preference.setDisabledByAdmin(admin);
                 } else {
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 418fd58..33c29bd 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -272,7 +272,7 @@
                 mUserHandle.getIdentifier());
         if (admin == null) {
             admin = RestrictedLockUtils.checkIfAccountManagementDisabled(
-                    getPrefContext(), mAccount.type);
+                    getPrefContext(), mAccount.type, mUserHandle.getIdentifier());
         }
         RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getPrefContext(),
                 removeAccount, admin);
diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java
index d4f824f..3f691e3 100644
--- a/src/com/android/settings/accounts/AddAccountSettings.java
+++ b/src/com/android/settings/accounts/AddAccountSettings.java
@@ -34,11 +34,14 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settingslib.RestrictedLockUtils;
 
 import java.io.IOException;
 
 import static android.content.Intent.EXTRA_USER;
 
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
 /**
  * Entry point Activity for account setup. Works as follows
  *
@@ -171,6 +174,9 @@
         switch (requestCode) {
         case CHOOSE_ACCOUNT_REQUEST:
             if (resultCode == RESULT_CANCELED) {
+                if (data != null) {
+                    startActivityAsUser(data, mUserHandle);
+                }
                 setResult(resultCode);
                 finish();
                 return;
diff --git a/src/com/android/settings/accounts/ChooseAccountActivity.java b/src/com/android/settings/accounts/ChooseAccountActivity.java
index 80017cd..2f904cf 100644
--- a/src/com/android/settings/accounts/ChooseAccountActivity.java
+++ b/src/com/android/settings/accounts/ChooseAccountActivity.java
@@ -39,6 +39,7 @@
 import com.android.settings.InstrumentedPreferenceActivity;
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settingslib.RestrictedLockUtils;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -48,6 +49,8 @@
 
 import static android.content.Intent.EXTRA_USER;
 
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
 /**
  * Activity asking a user to select an account to be set up.
  *
@@ -160,9 +163,19 @@
             }
         }
 
+        final Context context = getPreferenceScreen().getContext();
         if (mProviderList.size() == 1) {
-            // If there's only one provider that matches, just run it.
-            finishWithAccountType(mProviderList.get(0).type);
+            // There's only one provider that matches. If it is disabled by admin show the
+            // support dialog otherwise run it.
+            EnforcedAdmin admin = RestrictedLockUtils.checkIfAccountManagementDisabled(
+                    context, mProviderList.get(0).type, mUserHandle.getIdentifier());
+            if (admin != null) {
+                setResult(RESULT_CANCELED, RestrictedLockUtils.getShowAdminSupportDetailsIntent(
+                        context, admin));
+                finish();
+            } else {
+                finishWithAccountType(mProviderList.get(0).type);
+            }
         } else if (mProviderList.size() > 0) {
             Collections.sort(mProviderList);
             mAddAccountGroup.removeAll();
@@ -170,7 +183,7 @@
                 Drawable drawable = getDrawableForType(pref.type);
                 ProviderPreference p = new ProviderPreference(getPreferenceScreen().getContext(),
                         pref.type, drawable, pref.name);
-                p.checkAccountManagementAndSetDisabled();
+                p.checkAccountManagementAndSetDisabled(mUserHandle.getIdentifier());
                 mAddAccountGroup.addPreference(p);
             }
         } else {
diff --git a/src/com/android/settings/accounts/ProviderPreference.java b/src/com/android/settings/accounts/ProviderPreference.java
index 31f0c8e..817c3b6 100644
--- a/src/com/android/settings/accounts/ProviderPreference.java
+++ b/src/com/android/settings/accounts/ProviderPreference.java
@@ -46,9 +46,9 @@
         return mAccountType;
     }
 
-    public void checkAccountManagementAndSetDisabled() {
+    public void checkAccountManagementAndSetDisabled(int userId) {
         EnforcedAdmin admin = RestrictedLockUtils.checkIfAccountManagementDisabled(
-                getContext(), getAccountType());
+                getContext(), getAccountType(), userId);
         setDisabledByAdmin(admin);
     }
 }
diff --git a/src/com/android/settings/inputmethod/InputMethodPreference.java b/src/com/android/settings/inputmethod/InputMethodPreference.java
index c807e8a..11464bf 100755
--- a/src/com/android/settings/inputmethod/InputMethodPreference.java
+++ b/src/com/android/settings/inputmethod/InputMethodPreference.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.os.UserHandle;
 import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
@@ -121,11 +122,6 @@
         setOnPreferenceClickListener(this);
         setOnPreferenceChangeListener(this);
         useAdminDisabledSummary(true);
-        if (!isAllowedByOrganization) {
-            EnforcedAdmin admin =
-                    RestrictedLockUtils.getProfileOrDeviceOwnerOnCallingUser(context);
-            setDisabledByAdmin(admin);
-        }
     }
 
     public InputMethodInfo getInputMethodInfo() {
@@ -192,11 +188,23 @@
     void updatePreferenceViews() {
         final boolean isAlwaysChecked = mInputMethodSettingValues.isAlwaysCheckedIme(
                 mImi, getContext());
-        // Only when this preference has a switch and an input method should be always enabled,
+        // When this preference has a switch and an input method should be always enabled,
         // this preference should be disabled to prevent accidentally disabling an input method.
-        setEnabled(!((isAlwaysChecked && isImeEnabler()) || (!mIsAllowedByOrganization)));
+        // This preference should also be disabled in case the admin does not allow this input
+        // method.
+        if (isAlwaysChecked && isImeEnabler()) {
+            setDisabledByAdmin(null);
+            setEnabled(false);
+        } else if (!mIsAllowedByOrganization) {
+            EnforcedAdmin admin =
+                    RestrictedLockUtils.checkIfInputMethodDisallowed(getContext(),
+                            mImi.getPackageName(), UserHandle.myUserId());
+            setDisabledByAdmin(admin);
+        } else {
+            setEnabled(true);
+        }
         setChecked(mInputMethodSettingValues.isEnabledImi(mImi));
-        if (mIsAllowedByOrganization) {
+        if (!isDisabledByAdmin()) {
             setSummary(getSummaryString());
         }
     }