Use the correct userId when checking if disabled by admin.
And when adding accounts if only one account type is possible and
it is disabled by admin, show the admin support dialog.
Bug: 26897250
Bug: 26767564
Change-Id: I5cca64491a100efc34307c45aa35c14412f043cd
diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java
index 03a3fef..5eda429 100644
--- a/src/com/android/settings/ChooseLockGeneric.java
+++ b/src/com/android/settings/ChooseLockGeneric.java
@@ -416,7 +416,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());
}
}