From ae10cd0db4527bf1b131b05043a9938c56823a8f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 29 Jan 2014 21:21:57 -0500 Subject: [PATCH] save/restore current category in Available view This saves the currently selected category in the Available apps view, and restores that category when the user returns to the Available screen. It drives me totally nuts that it always forgets the category when I nav away from that screen, always returning to What's New. --- .../fragments/AvailableAppsFragment.java | 64 +++++++++++++++---- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java index 7fb0bae68..ee8efedd3 100644 --- a/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java +++ b/src/org/fdroid/fdroid/views/fragments/AvailableAppsFragment.java @@ -1,11 +1,12 @@ package org.fdroid.fdroid.views.fragments; +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; -import android.os.Build; import android.os.Bundle; -import android.os.Handler; import android.support.v4.app.LoaderManager; import android.util.Log; import android.view.LayoutInflater; @@ -23,7 +24,11 @@ import java.util.List; public class AvailableAppsFragment extends AppListFragment implements LoaderManager.LoaderCallbacks { + public static final String PREFERENCES_FILE = "CategorySpinnerPosition"; + public static final String CATEGORY_KEY = "Selection"; + public static String DEFAULT_CATEGORY; + private Spinner categorySpinner; private String currentCategory = null; private AppListAdapter adapter = null; @@ -80,35 +85,31 @@ public class AvailableAppsFragment extends AppListFragment implements final List categories = AppProvider.Helper.categories(getActivity()); - Spinner spinner = new Spinner(getActivity()); + categorySpinner = new Spinner(getActivity()); // Giving it an ID lets the default save/restore state // functionality do its stuff. - spinner.setId(R.id.categorySpinner); + categorySpinner.setId(R.id.categorySpinner); ArrayAdapter adapter = new ArrayAdapter( getActivity(), android.R.layout.simple_spinner_item, categories); adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); - spinner.setAdapter(adapter); + categorySpinner.setAdapter(adapter); getActivity().getContentResolver().registerContentObserver( AppProvider.getContentUri(), false, new CategoryObserver(adapter)); - spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int pos, long id) { - currentCategory = categories.get(pos); - Log.d("FDroid", "Category '" + currentCategory + "' selected."); - getLoaderManager().restartLoader(0, null, AvailableAppsFragment.this); + setCurrentCategory(categories.get(pos)); } @Override public void onNothingSelected(AdapterView parent) { - currentCategory = null; - Log.d("FDroid", "Select empty category."); - getLoaderManager().restartLoader(0, null, AvailableAppsFragment.this); + setCurrentCategory(null); } }); - return spinner; + return categorySpinner; } @Override @@ -132,6 +133,9 @@ public class AvailableAppsFragment extends AppListFragment implements LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + // R.string.category_whatsnew is the default set in AppListManager + DEFAULT_CATEGORY = getActivity().getString(R.string.category_whatsnew); + return view; } @@ -146,4 +150,38 @@ public class AvailableAppsFragment extends AppListFragment implements else return AppProvider.getCategoryUri(currentCategory); } + + private void setCurrentCategory(String category) { + currentCategory = category; + Log.d("FDroid", "Category '" + currentCategory + "' selected."); + getLoaderManager().restartLoader(0, null, AvailableAppsFragment.this); + } + + @Override + public void onResume() { + super.onResume(); + /* restore the saved Category Spinner position */ + Activity activity = getActivity(); + SharedPreferences p = activity.getSharedPreferences(PREFERENCES_FILE, + Context.MODE_PRIVATE); + currentCategory = p.getString(CATEGORY_KEY, DEFAULT_CATEGORY); + for (int i = 0; i < categorySpinner.getCount(); i++) { + if (currentCategory.equals(categorySpinner.getItemAtPosition(i).toString())) { + categorySpinner.setSelection(i); + break; + } + } + setCurrentCategory(currentCategory); + } + + @Override + public void onPause() { + super.onPause(); + /* store the Category Spinner position for when we come back */ + SharedPreferences p = getActivity().getSharedPreferences(PREFERENCES_FILE, + Context.MODE_PRIVATE); + SharedPreferences.Editor e = p.edit(); + e.putString(CATEGORY_KEY, currentCategory); + e.commit(); + } }