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
diff --git a/res/values/strings.xml b/res/values/strings.xml
index af02ae5..6f43881 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3036,6 +3036,8 @@
<!-- Development Settings summary. The summary of the item to take the user to Development settings. Development settings are settings meant for application developers. -->
<string name="development_settings_summary">Set options for app development</string>
<!-- Setting checkbox title for Whether to enable USB debugging support on the phone. -->
+ <!-- Error message for users that aren't allowed to modify developer options [CHAR LIMIT=none] -->
+ <string name="development_settings_not_available">Developer options are not available for this user</string>
<string name="enable_adb">USB debugging</string>
<!-- Setting checkbox summary for Whether to enable USB debugging support on the phone -->
<string name="enable_adb_summary">Debug mode when USB is connected</string>
@@ -4369,6 +4371,8 @@
<string name="user_cannot_manage_message" product="tablet">Only the tablet\'s owner can manage users.</string>
<!-- Message to secondary users that only owner can manage users [CHAR LIMIT=none] -->
<string name="user_cannot_manage_message" product="default">Only the phone\'s owner can manage users.</string>
+ <!-- Message to limited users that they cannot add accounts [CHAR LIMIT=100] -->
+ <string name="user_cannot_add_accounts_message">Limited users cannot add accounts</string>
<!-- User details remove user menu [CHAR LIMIT=20] -->
<string name="user_remove_user_menu">Delete <xliff:g id="user_name">%1$s</xliff:g> from this device</string>
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 8694e9d..4597bf0 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -47,6 +47,7 @@
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.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 @@
private Dialog mAdbDialog;
private Dialog mAdbKeysDialog;
+ private boolean mUnavailable;
+
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -211,6 +215,12 @@
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 @@
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 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 f1b7752..39906eb 100644
--- a/src/com/android/settings/accounts/AddAccountSettings.java
+++ b/src/com/android/settings/accounts/AddAccountSettings.java
@@ -28,7 +28,9 @@
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 @@
}
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 46aa566..8a093ca 100644
--- a/src/com/android/settings/accounts/ManageAccountsSettings.java
+++ b/src/com/android/settings/accounts/ManageAccountsSettings.java
@@ -332,6 +332,7 @@
getPreferenceScreen().addPreference(preference);
if (mFirstAccount == null) {
mFirstAccount = account;
+ getActivity().invalidateOptionsMenu();
}
}
}