[Language] Should show confirm dialog when deleting the system language

and making the second language automatically become the system language

Bug: 286508825
Test: make RunSettingsRoboTests -j128 ROBOTEST_FILTER=LocaleListEditorTest
Change-Id: I556eecc9eec1ddcdb8947d5ba69d0db2c016e33c
This commit is contained in:
Zoey Chen
2023-07-14 07:47:02 +00:00
parent b1aaa313ef
commit 4900bcfa5c
3 changed files with 68 additions and 16 deletions

View File

@@ -395,10 +395,13 @@ class LocaleDragAndDropAdapter
// drag locale's original position to the top.
mDragLocale = (LocaleStore.LocaleInfo) savedInstanceState.getSerializable(
CFGKEY_DRAG_LOCALE);
mFeedItemList.removeIf(
localeInfo -> TextUtils.equals(localeInfo.getId(), mDragLocale.getId()));
mFeedItemList.add(0, mDragLocale);
notifyItemRangeChanged(0, mFeedItemList.size());
if (mDragLocale != null) {
mFeedItemList.removeIf(
localeInfo -> TextUtils.equals(localeInfo.getId(),
mDragLocale.getId()));
mFeedItemList.add(0, mDragLocale);
notifyItemRangeChanged(0, mFeedItemList.size());
}
}
}
}

View File

@@ -322,7 +322,13 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
// to remove.
mRemoveMode = false;
mShowingRemoveDialog = false;
LocaleStore.LocaleInfo firstLocale =
mAdapter.getFeedItemList().get(0);
mAdapter.removeChecked();
boolean isFirstRemoved =
firstLocale != mAdapter.getFeedItemList().get(0);
showConfirmDialog(isFirstRemoved, isFirstRemoved ? firstLocale
: mAdapter.getFeedItemList().get(0));
setRemoveMode(false);
}
})
@@ -388,22 +394,27 @@ public class LocaleListEditor extends RestrictedSettingsFragment implements View
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP
|| event.getAction() == MotionEvent.ACTION_CANCEL) {
LocaleStore.LocaleInfo localeInfo = mAdapter.getFeedItemList().get(0);
if (!localeInfo.getLocale().equals(LocalePicker.getLocales().get(0))) {
final LocaleDialogFragment localeDialogFragment =
LocaleDialogFragment.newInstance();
Bundle args = new Bundle();
args.putInt(LocaleDialogFragment.ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
args.putSerializable(LocaleDialogFragment.ARG_TARGET_LOCALE, localeInfo);
localeDialogFragment.setArguments(args);
localeDialogFragment.show(mFragmentManager, TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT);
} else {
mAdapter.doTheUpdate();
}
showConfirmDialog(false, mAdapter.getFeedItemList().get(0));
}
return false;
}
private void showConfirmDialog(boolean isFirstRemoved, LocaleStore.LocaleInfo localeInfo) {
Locale currentSystemLocale = LocalePicker.getLocales().get(0);
if (!localeInfo.getLocale().equals(currentSystemLocale)) {
final LocaleDialogFragment localeDialogFragment =
LocaleDialogFragment.newInstance();
Bundle args = new Bundle();
args.putInt(LocaleDialogFragment.ARG_DIALOG_TYPE, DIALOG_CONFIRM_SYSTEM_DEFAULT);
args.putSerializable(LocaleDialogFragment.ARG_TARGET_LOCALE,
isFirstRemoved ? LocaleStore.getLocaleInfo(currentSystemLocale) : localeInfo);
localeDialogFragment.setArguments(args);
localeDialogFragment.show(mFragmentManager, TAG_DIALOG_CONFIRM_SYSTEM_DEFAULT);
} else {
mAdapter.doTheUpdate();
}
}
// Hide the "Remove" menu if there is only one locale in the list, show it otherwise
// This is called when the menu is first created, and then one add / remove locale
private void updateVisibilityOfRemoveMenu() {