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.
This commit is contained in:
parent
2f6a812fdc
commit
ae10cd0db4
@ -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<Cursor> {
|
||||
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<String> 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<String> adapter = new ArrayAdapter<String>(
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user