Hide "Remove" menu & the drag handle when there's just one locale
When there's just one locale, showing the "Remove" menu and the
drag handle is confusing to the user since nothing can happen if
they try to use them: the drag simply won't happen, and if they
go through the delete process, we give them an error.
Bug: 26730336
Change-Id: Ie219dd9b3d653272b325d7af01aba205a58cd472
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index b56dd6c..28a5588 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -153,7 +153,7 @@
dragCell.setMiniLabel(mNumberFormatter.format(i + 1));
dragCell.setShowCheckbox(mRemoveMode);
dragCell.setShowMiniLabel(!mRemoveMode);
- dragCell.setShowHandle(!mRemoveMode);
+ dragCell.setShowHandle(!mRemoveMode && mDragEnabled);
dragCell.setChecked(false);
dragCell.setTag(feedItem);
dragCell.getCheckbox()
diff --git a/src/com/android/settings/localepicker/LocaleListEditor.java b/src/com/android/settings/localepicker/LocaleListEditor.java
index 18bec15..ef3fbaa 100644
--- a/src/com/android/settings/localepicker/LocaleListEditor.java
+++ b/src/com/android/settings/localepicker/LocaleListEditor.java
@@ -67,7 +67,7 @@
setHasOptionsMenu(true);
LocaleStore.fillCache(this.getContext());
- List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList(this.getContext());
+ final List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList(this.getContext());
mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList);
}
@@ -144,6 +144,7 @@
public void onClick(DialogInterface dialog, int which) {
mAdapter.removeChecked();
setRemoveMode(!mRemoveMode);
+ updateVisibilityOfRemoveMenu();
}
})
.create()
@@ -158,6 +159,7 @@
menuItem.setIcon(R.drawable.ic_delete);
super.onCreateOptionsMenu(menu, inflater);
mMenu = menu;
+ updateVisibilityOfRemoveMenu();
}
private static List<LocaleStore.LocaleInfo> getUserLocaleList(Context context) {
@@ -201,6 +203,15 @@
@Override
public void onLocaleSelected(LocaleStore.LocaleInfo locale) {
mAdapter.addLocale(locale);
+ updateVisibilityOfRemoveMenu();
}
+ // 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() {
+ final MenuItem menuItemRemove = mMenu.findItem(MENU_ID_REMOVE);
+ if (menuItemRemove != null) {
+ menuItemRemove.setVisible(mAdapter.getItemCount() > 1);
+ }
+ }
}