Improved dialog management in Settings>Users

Bug: 7266284 Delete not functional after orientation change
Bug: 7266182 Set up now not functional after orientation change

Also remove "vibrate when ringing" on tablets
Bug: 7253081

Change-Id: Ie616747f2e3292c401613eb2041b5a5a289cde20
This commit is contained in:
Amith Yamasani
2012-10-02 14:51:46 -07:00
parent fd94d51e94
commit c861cf8447
3 changed files with 62 additions and 14 deletions

View File

@@ -182,6 +182,10 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
} }
} }
public void onDialogShowing() {
// override in subclass to attach a dismiss listener, for instance
}
public static class SettingsDialogFragment extends DialogFragment { public static class SettingsDialogFragment extends DialogFragment {
private static final String KEY_DIALOG_ID = "key_dialog_id"; private static final String KEY_DIALOG_ID = "key_dialog_id";
private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id"; private static final String KEY_PARENT_FRAGMENT_ID = "key_parent_fragment_id";
@@ -215,6 +219,15 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
} }
} }
@Override
public void onStart() {
super.onStart();
if (mParentFragment != null && mParentFragment instanceof SettingsPreferenceFragment) {
((SettingsPreferenceFragment) mParentFragment).onDialogShowing();
}
}
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
if (savedInstanceState != null) { if (savedInstanceState != null) {

View File

@@ -170,8 +170,11 @@ public class SoundSettings extends SettingsPreferenceFragment implements
Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (vibrator == null || !vibrator.hasVibrator()) { if (vibrator == null || !vibrator.hasVibrator()) {
getPreferenceScreen().removePreference(mVibrateWhenRinging); removePreference(KEY_VIBRATE);
getPreferenceScreen().removePreference(mHapticFeedback); removePreference(KEY_HAPTIC_FEEDBACK);
}
if (!Utils.isVoiceCapable(getActivity())) {
removePreference(KEY_VIBRATE);
} }
if (TelephonyManager.PHONE_TYPE_CDMA == activePhoneType) { if (TelephonyManager.PHONE_TYPE_CDMA == activePhoneType) {

View File

@@ -56,6 +56,7 @@ import com.android.settings.R;
import com.android.settings.SelectableEditTextPreference; import com.android.settings.SelectableEditTextPreference;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -66,6 +67,11 @@ public class UserSettings extends SettingsPreferenceFragment
private static final String TAG = "UserSettings"; private static final String TAG = "UserSettings";
/** UserId of the user being removed */
private static final String SAVE_REMOVING_USER = "removing_user";
/** UserId of the user that was just added */
private static final String SAVE_ADDING_USER = "adding_user";
private static final String KEY_USER_NICKNAME = "user_nickname"; private static final String KEY_USER_NICKNAME = "user_nickname";
private static final String KEY_USER_LIST = "user_list"; private static final String KEY_USER_LIST = "user_list";
private static final String KEY_USER_ME = "user_me"; private static final String KEY_USER_ME = "user_me";
@@ -140,6 +146,15 @@ public class UserSettings extends SettingsPreferenceFragment
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
if (icicle != null) {
if (icicle.containsKey(SAVE_ADDING_USER)) {
mAddedUserId = icicle.getInt(SAVE_ADDING_USER);
}
if (icicle.containsKey(SAVE_REMOVING_USER)) {
mRemovingUserId = icicle.getInt(SAVE_REMOVING_USER);
}
}
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
addPreferencesFromResource(R.xml.user_settings); addPreferencesFromResource(R.xml.user_settings);
mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST); mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST);
@@ -179,6 +194,14 @@ public class UserSettings extends SettingsPreferenceFragment
getActivity().unregisterReceiver(mUserChangeReceiver); getActivity().unregisterReceiver(mUserChangeReceiver);
} }
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SAVE_ADDING_USER, mAddedUserId);
outState.putInt(SAVE_REMOVING_USER, mRemovingUserId);
}
@Override @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (mIsOwner) { if (mIsOwner) {
@@ -245,7 +268,6 @@ public class UserSettings extends SettingsPreferenceFragment
synchronized (mUserLock) { synchronized (mUserLock) {
if (mRemovingUserId == -1 && !mAddingUser) { if (mRemovingUserId == -1 && !mAddingUser) {
showDialog(DIALOG_ADD_USER); showDialog(DIALOG_ADD_USER);
setOnDismissListener(this);
} }
} }
} }
@@ -255,7 +277,6 @@ public class UserSettings extends SettingsPreferenceFragment
if (mRemovingUserId == -1 && !mAddingUser) { if (mRemovingUserId == -1 && !mAddingUser) {
mRemovingUserId = userId; mRemovingUserId = userId;
showDialog(DIALOG_CONFIRM_REMOVE); showDialog(DIALOG_CONFIRM_REMOVE);
setOnDismissListener(this);
} }
} }
} }
@@ -265,11 +286,18 @@ public class UserSettings extends SettingsPreferenceFragment
showDialog(DIALOG_SETUP_USER); showDialog(DIALOG_SETUP_USER);
} }
@Override
public void onDialogShowing() {
super.onDialogShowing();
setOnDismissListener(this);
}
@Override @Override
public Dialog onCreateDialog(int dialogId) { public Dialog onCreateDialog(int dialogId) {
switch (dialogId) { switch (dialogId) {
case DIALOG_CONFIRM_REMOVE: case DIALOG_CONFIRM_REMOVE: {
return new AlertDialog.Builder(getActivity()) Dialog dlg = new AlertDialog.Builder(getActivity())
.setTitle(UserHandle.myUserId() == mRemovingUserId .setTitle(UserHandle.myUserId() == mRemovingUserId
? R.string.user_confirm_remove_self_title ? R.string.user_confirm_remove_self_title
: R.string.user_confirm_remove_title) : R.string.user_confirm_remove_title)
@@ -284,12 +312,14 @@ public class UserSettings extends SettingsPreferenceFragment
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.create(); .create();
return dlg;
}
case DIALOG_USER_CANNOT_MANAGE: case DIALOG_USER_CANNOT_MANAGE:
return new AlertDialog.Builder(getActivity()) return new AlertDialog.Builder(getActivity())
.setMessage(R.string.user_cannot_manage_message) .setMessage(R.string.user_cannot_manage_message)
.setPositiveButton(android.R.string.ok, null) .setPositiveButton(android.R.string.ok, null)
.create(); .create();
case DIALOG_ADD_USER: case DIALOG_ADD_USER: {
final SharedPreferences preferences = getActivity().getPreferences( final SharedPreferences preferences = getActivity().getPreferences(
Context.MODE_PRIVATE); Context.MODE_PRIVATE);
final boolean longMessageDisplayed = preferences.getBoolean( final boolean longMessageDisplayed = preferences.getBoolean(
@@ -297,7 +327,7 @@ public class UserSettings extends SettingsPreferenceFragment
final int messageResId = longMessageDisplayed final int messageResId = longMessageDisplayed
? R.string.user_add_user_message_short ? R.string.user_add_user_message_short
: R.string.user_add_user_message_long; : R.string.user_add_user_message_long;
return new AlertDialog.Builder(getActivity()) Dialog dlg = new AlertDialog.Builder(getActivity())
.setTitle(R.string.user_add_user_title) .setTitle(R.string.user_add_user_title)
.setMessage(messageResId) .setMessage(messageResId)
.setPositiveButton(android.R.string.ok, .setPositiveButton(android.R.string.ok,
@@ -312,8 +342,10 @@ public class UserSettings extends SettingsPreferenceFragment
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.create(); .create();
case DIALOG_SETUP_USER: return dlg;
return new AlertDialog.Builder(getActivity()) }
case DIALOG_SETUP_USER: {
Dialog dlg = new AlertDialog.Builder(getActivity())
.setTitle(R.string.user_setup_dialog_title) .setTitle(R.string.user_setup_dialog_title)
.setMessage(R.string.user_setup_dialog_message) .setMessage(R.string.user_setup_dialog_message)
.setPositiveButton(R.string.user_setup_button_setup_now, .setPositiveButton(R.string.user_setup_button_setup_now,
@@ -324,7 +356,8 @@ public class UserSettings extends SettingsPreferenceFragment
}) })
.setNegativeButton(R.string.user_setup_button_setup_later, null) .setNegativeButton(R.string.user_setup_button_setup_later, null)
.create(); .create();
return dlg;
}
default: default:
return null; return null;
} }
@@ -396,9 +429,7 @@ public class UserSettings extends SettingsPreferenceFragment
final ArrayList<Integer> missingIcons = new ArrayList<Integer>(); final ArrayList<Integer> missingIcons = new ArrayList<Integer>();
for (UserInfo user : users) { for (UserInfo user : users) {
Preference pref; Preference pref;
if (user.id == mRemovingUserId) { if (user.id == UserHandle.myUserId()) {
continue;
} else if (user.id == UserHandle.myUserId()) {
pref = mMePreference; pref = mMePreference;
mNicknamePreference.setText(user.name); mNicknamePreference.setText(user.name);
mNicknamePreference.setSummary(user.name); mNicknamePreference.setSummary(user.name);
@@ -544,6 +575,7 @@ public class UserSettings extends SettingsPreferenceFragment
synchronized (mUserLock) { synchronized (mUserLock) {
mAddingUser = false; mAddingUser = false;
mRemovingUserId = -1; mRemovingUserId = -1;
updateUserList();
} }
} }