From f755baf1c3b8fcbcee68720c8367e03381fffb4b Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Fri, 29 Jan 2016 22:12:30 +0000 Subject: [PATCH] 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 --- .../android/settings/ChooseLockGeneric.java | 2 +- .../accessibility/AccessibilitySettings.java | 4 ++-- .../accounts/AccountSyncSettings.java | 2 +- .../settings/accounts/AddAccountSettings.java | 6 +++++ .../accounts/ChooseAccountActivity.java | 19 ++++++++++++--- .../settings/accounts/ProviderPreference.java | 4 ++-- .../inputmethod/InputMethodPreference.java | 24 ++++++++++++------- 7 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/ChooseLockGeneric.java b/src/com/android/settings/ChooseLockGeneric.java index 03a3fef3f25..5eda429bac4 100644 --- a/src/com/android/settings/ChooseLockGeneric.java +++ b/src/com/android/settings/ChooseLockGeneric.java @@ -416,7 +416,7 @@ public class ChooseLockGeneric extends SettingsActivity { 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 5ce5cfc79d5..840cd593416 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -482,8 +482,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements 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 418fd58348d..33c29bddabd 100644 --- a/src/com/android/settings/accounts/AccountSyncSettings.java +++ b/src/com/android/settings/accounts/AccountSyncSettings.java @@ -272,7 +272,7 @@ public class AccountSyncSettings extends AccountPreferenceBase { 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 d4f824f810e..3f691e3ab15 100644 --- a/src/com/android/settings/accounts/AddAccountSettings.java +++ b/src/com/android/settings/accounts/AddAccountSettings.java @@ -34,11 +34,14 @@ import android.widget.Toast; 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 @@ public class AddAccountSettings extends Activity { 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 80017cdae8d..2f904cf402a 100644 --- a/src/com/android/settings/accounts/ChooseAccountActivity.java +++ b/src/com/android/settings/accounts/ChooseAccountActivity.java @@ -39,6 +39,7 @@ import com.android.internal.util.CharSequences; 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 java.util.Map; 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 @@ public class ChooseAccountActivity extends InstrumentedPreferenceActivity { } } + 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 @@ public class ChooseAccountActivity extends InstrumentedPreferenceActivity { 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 31f0c8e79c7..817c3b6e65a 100644 --- a/src/com/android/settings/accounts/ProviderPreference.java +++ b/src/com/android/settings/accounts/ProviderPreference.java @@ -46,9 +46,9 @@ public class ProviderPreference extends RestrictedPreference { 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 c807e8ab560..11464bf180d 100755 --- a/src/com/android/settings/inputmethod/InputMethodPreference.java +++ b/src/com/android/settings/inputmethod/InputMethodPreference.java @@ -21,6 +21,7 @@ import android.content.ActivityNotFoundException; 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 @@ class InputMethodPreference extends RestrictedSwitchPreference implements OnPref setOnPreferenceClickListener(this); setOnPreferenceChangeListener(this); useAdminDisabledSummary(true); - if (!isAllowedByOrganization) { - EnforcedAdmin admin = - RestrictedLockUtils.getProfileOrDeviceOwnerOnCallingUser(context); - setDisabledByAdmin(admin); - } } public InputMethodInfo getInputMethodInfo() { @@ -192,11 +188,23 @@ class InputMethodPreference extends RestrictedSwitchPreference implements OnPref 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()); } }