Show app categories correctly. Fixes #214.
The categories were previously selected in the Spinner, then passed directly to the database. Once the categories became translated, this meant we were sending the translated category to the database. However, the database only knows about English categories, and so we instead need to look up the English translation for the selected category before passing to the database. This is done by keeping a list of original category names which is indexed the same as the translated ones.
This commit is contained in:
parent
51a091fe44
commit
1a114c6c45
@ -18,6 +18,8 @@
|
||||
* Split up search terms when querying the app database - "fire fox" now
|
||||
matches FireFox
|
||||
|
||||
* Fixed bug where categories were always empty on non-english locales
|
||||
|
||||
* Misc fixes to the "swap" workflow (especially on Android 2.3 devices)
|
||||
|
||||
### 0.83 (2015-03-26)
|
||||
|
@ -41,6 +41,7 @@ public class AvailableAppsFragment extends AppListFragment implements
|
||||
public static final String CATEGORY_KEY = "Selection";
|
||||
public static String DEFAULT_CATEGORY;
|
||||
|
||||
private List<String> categories;
|
||||
private Spinner categorySpinner;
|
||||
private String currentCategory = null;
|
||||
private AppListAdapter adapter = null;
|
||||
@ -103,43 +104,53 @@ public class AvailableAppsFragment extends AppListFragment implements
|
||||
}
|
||||
}
|
||||
|
||||
/* Suppress deprecation warnings because:
|
||||
* * setBackgroundDrawable(Drawable) -> setBackground(Drawable) was only in API 16
|
||||
/**
|
||||
* Attempt to translate category names with fallback to default name if no translation available
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
private Spinner createCategorySpinner() {
|
||||
|
||||
List<String> categories = AppProvider.Helper.categories(getActivity());
|
||||
|
||||
// attempt to translate category names with fallback to default name
|
||||
private List<String> translateCategories(List<String> categories) {
|
||||
List<String> translatedCategories = new ArrayList<>(categories.size());
|
||||
Resources res = getResources();
|
||||
for (final String category : categories) {
|
||||
int id = res.getIdentifier(category.replace(" & ", "_"), "string", getActivity().getPackageName());
|
||||
translatedCategories.add(id == 0 ? category : getString(id));
|
||||
}
|
||||
return translatedCategories;
|
||||
}
|
||||
|
||||
categorySpinner = new Spinner(getActivity());
|
||||
// Giving it an ID lets the default save/restore state
|
||||
// functionality do its stuff.
|
||||
categorySpinner.setId(R.id.categorySpinner);
|
||||
// with holo, the menu gets lost since it looks the same as an app list item
|
||||
/**
|
||||
* With holo, the menu gets lost since it looks the same as an app list item.
|
||||
* Suppress deprecation warnings because:
|
||||
* * setBackgroundDrawable(Drawable) -> setBackground(Drawable) was only in API 16
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
private void styleSpinner(Spinner spinner) {
|
||||
if (Build.VERSION.SDK_INT >= 14) {
|
||||
Drawable menuButton = getResources().getDrawable(android.R.drawable.btn_dropdown);
|
||||
if (FDroidApp.getCurTheme() == FDroidApp.Theme.dark) {
|
||||
menuButton.setAlpha(32); // make it darker via alpha
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= 16) {
|
||||
categorySpinner.setBackground(menuButton);
|
||||
spinner.setBackground(menuButton);
|
||||
} else {
|
||||
categorySpinner.setBackgroundDrawable(menuButton);
|
||||
spinner.setBackgroundDrawable(menuButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Spinner createCategorySpinner() {
|
||||
|
||||
categories = AppProvider.Helper.categories(getActivity());
|
||||
|
||||
categorySpinner = new Spinner(getActivity());
|
||||
|
||||
// Giving it an ID lets the default save/restore state functionality do its stuff.
|
||||
categorySpinner.setId(R.id.categorySpinner);
|
||||
|
||||
styleSpinner(categorySpinner);
|
||||
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(
|
||||
getActivity(), android.R.layout.simple_spinner_item, translatedCategories);
|
||||
adapter.setDropDownViewResource(
|
||||
android.R.layout.simple_spinner_dropdown_item);
|
||||
getActivity(), android.R.layout.simple_spinner_item, translateCategories(categories));
|
||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
|
||||
categorySpinner.setAdapter(adapter);
|
||||
|
||||
getActivity().getContentResolver().registerContentObserver(
|
||||
@ -149,7 +160,8 @@ public class AvailableAppsFragment extends AppListFragment implements
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
|
||||
getListView().setSelection(0);
|
||||
setCurrentCategory(categorySpinner.getItemAtPosition(pos).toString());
|
||||
Log.d(TAG, "Selected category: " + categories.get(pos));
|
||||
setCurrentCategory(categories.get(pos));
|
||||
}
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user