From c39dcc1ce4d1885ef1de926b67e88cf2dd1acaff Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Sat, 13 Apr 2013 18:30:59 -0700 Subject: [PATCH] Don't show developer options to secondary users Show just a message that developer options are not available for the user. Also fix silent exit of AddAccount operation by showing a toast that user cannot add accounts. Bug: 7409523 Bug: 8519646 Bug: 7304007 Change-Id: Id3f430d568d6b7151ac55f86dbc0ef91803fa10c --- res/values/strings.xml | 4 ++++ .../android/settings/DevelopmentSettings.java | 24 +++++++++++++++++++ .../settings/accounts/AddAccountSettings.java | 12 ++++++++-- .../accounts/ManageAccountsSettings.java | 1 + 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index af02ae53a70..6f438810f88 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3036,6 +3036,8 @@ Set options for app development + + Developer options are not available for this user USB debugging Debug mode when USB is connected @@ -4369,6 +4371,8 @@ Only the tablet\'s owner can manage users. Only the phone\'s owner can manage users. + + Limited users cannot add accounts Delete %1$s from this device diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index 8694e9dc0fd..4597bf0d348 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -47,6 +47,7 @@ import android.os.ServiceManager; import android.os.StrictMode; import android.os.SystemProperties; import android.os.UserHandle; +import android.os.UserManager; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; @@ -64,6 +65,7 @@ import android.view.IWindowManager; import android.view.View; import android.widget.CompoundButton; import android.widget.Switch; +import android.widget.TextView; import java.util.ArrayList; import java.util.HashSet; @@ -202,6 +204,8 @@ public class DevelopmentSettings extends PreferenceFragment private Dialog mAdbDialog; private Dialog mAdbKeysDialog; + private boolean mUnavailable; + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -211,6 +215,12 @@ public class DevelopmentSettings extends PreferenceFragment ServiceManager.getService(Context.BACKUP_SERVICE)); mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE); + if (android.os.Process.myUserHandle().getIdentifier() != UserHandle.USER_OWNER) { + mUnavailable = true; + setPreferenceScreen(new PreferenceScreen(getActivity(), null)); + return; + } + addPreferencesFromResource(R.xml.development_prefs); mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB); @@ -333,6 +343,10 @@ public class DevelopmentSettings extends PreferenceFragment final int padding = activity.getResources().getDimensionPixelSize( R.dimen.action_bar_switch_padding); mEnabledSwitch.setPaddingRelative(0, 0, padding, 0); + if (mUnavailable) { + mEnabledSwitch.setEnabled(false); + return; + } mEnabledSwitch.setOnCheckedChangeListener(this); } @@ -379,6 +393,16 @@ public class DevelopmentSettings extends PreferenceFragment public void onResume() { super.onResume(); + if (mUnavailable) { + // Show error message + TextView emptyView = (TextView) getView().findViewById(android.R.id.empty); + getListView().setEmptyView(emptyView); + if (emptyView != null) { + emptyView.setText(R.string.development_settings_not_available); + } + return; + } + if (mDpm.getMaximumTimeToLock(null) > 0) { // A DeviceAdmin has specified a maximum time until the device // will lock... in this case we can't allow the user to turn diff --git a/src/com/android/settings/accounts/AddAccountSettings.java b/src/com/android/settings/accounts/AddAccountSettings.java index f1b7752fc47..39906eb3043 100644 --- a/src/com/android/settings/accounts/AddAccountSettings.java +++ b/src/com/android/settings/accounts/AddAccountSettings.java @@ -28,7 +28,9 @@ import android.content.Intent; import android.os.Bundle; import android.os.UserManager; import android.util.Log; +import android.widget.Toast; +import com.android.settings.R; import com.android.settings.Utils; import java.io.IOException; @@ -124,9 +126,15 @@ public class AddAccountSettings extends Activity { } final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); - if (mAddAccountCalled || um.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS)) { + if (um.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS)) { + // We aren't allowed to add an account. + Toast.makeText(this, R.string.user_cannot_add_accounts_message, Toast.LENGTH_LONG) + .show(); + finish(); + return; + } + if (mAddAccountCalled) { // We already called add account - maybe the callback was lost. - // Or we aren't allowed to add an account. finish(); return; } diff --git a/src/com/android/settings/accounts/ManageAccountsSettings.java b/src/com/android/settings/accounts/ManageAccountsSettings.java index 46aa566ec89..8a093ca6b1f 100644 --- a/src/com/android/settings/accounts/ManageAccountsSettings.java +++ b/src/com/android/settings/accounts/ManageAccountsSettings.java @@ -332,6 +332,7 @@ public class ManageAccountsSettings extends AccountPreferenceBase getPreferenceScreen().addPreference(preference); if (mFirstAccount == null) { mFirstAccount = account; + getActivity().invalidateOptionsMenu(); } } }