When searching "Available" tab, search all the things.

Removed the option to search the currently selected category, as suggested
by others on gitlab.
This commit is contained in:
Peter Serwylo 2015-12-10 07:57:52 +11:00
parent cc759b17a4
commit 86fb652fc3
4 changed files with 54 additions and 59 deletions

View File

@ -2,7 +2,8 @@
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:animateLayoutChanges="true">
<Spinner
android:id="@+id/category_spinner"

View File

@ -431,11 +431,8 @@ public class AppProvider extends FDroidProvider {
private static final String PATH_NO_APKS = "noApks";
private static final String PATH_APPS = "apps";
private static final String PATH_RECENTLY_UPDATED = "recentlyUpdated";
private static final String PATH_SEARCH_RECENTLY_UPDATED = "searchRecentlyUpdated";
private static final String PATH_NEWLY_ADDED = "newlyAdded";
private static final String PATH_SEARCH_NEWLY_ADDED = "searchNewlyAdded";
private static final String PATH_CATEGORY = "category";
private static final String PATH_SEARCH_CATEGORY = "searchCategory";
private static final String PATH_IGNORED = "ignored";
private static final String PATH_CALC_APP_DETAILS_FROM_INDEX = "calcDetailsFromIndex";
private static final String PATH_REPO = "repo";
@ -454,9 +451,6 @@ public class AppProvider extends FDroidProvider {
private static final int SEARCH_REPO = REPO + 1;
private static final int SEARCH_INSTALLED = SEARCH_REPO + 1;
private static final int SEARCH_CAN_UPDATE = SEARCH_INSTALLED + 1;
private static final int SEARCH_CATEGORY = SEARCH_CAN_UPDATE + 1;
private static final int SEARCH_NEWLY_ADDED = SEARCH_CATEGORY + 1;
private static final int SEARCH_RECENTLY_UPDATED = SEARCH_NEWLY_ADDED + 1;
static {
matcher.addURI(getAuthority(), null, CODE_LIST);
@ -466,9 +460,6 @@ public class AppProvider extends FDroidProvider {
matcher.addURI(getAuthority(), PATH_NEWLY_ADDED, NEWLY_ADDED);
matcher.addURI(getAuthority(), PATH_CATEGORY + "/*", CATEGORY);
matcher.addURI(getAuthority(), PATH_SEARCH + "/*", SEARCH);
matcher.addURI(getAuthority(), PATH_SEARCH_NEWLY_ADDED + "/*", SEARCH_NEWLY_ADDED);
matcher.addURI(getAuthority(), PATH_SEARCH_RECENTLY_UPDATED + "/*", SEARCH_RECENTLY_UPDATED);
matcher.addURI(getAuthority(), PATH_SEARCH_CATEGORY + "/*/*", SEARCH_CATEGORY);
matcher.addURI(getAuthority(), PATH_SEARCH_INSTALLED + "/*", SEARCH_INSTALLED);
matcher.addURI(getAuthority(), PATH_SEARCH_CAN_UPDATE + "/*", SEARCH_CAN_UPDATE);
matcher.addURI(getAuthority(), PATH_SEARCH_REPO + "/*/*", SEARCH_REPO);
@ -488,24 +479,10 @@ public class AppProvider extends FDroidProvider {
return Uri.withAppendedPath(getContentUri(), PATH_RECENTLY_UPDATED);
}
public static Uri getSearchRecentlyUpdatedUri(String query) {
return getContentUri().buildUpon()
.appendPath(PATH_SEARCH_RECENTLY_UPDATED)
.appendEncodedPath(query)
.build();
}
public static Uri getNewlyAddedUri() {
return Uri.withAppendedPath(getContentUri(), PATH_NEWLY_ADDED);
}
public static Uri getSearchNewlyAddedUri(String query) {
return getContentUri().buildUpon()
.appendPath(PATH_SEARCH_NEWLY_ADDED)
.appendEncodedPath(query)
.build();
}
public static Uri getIgnoredUri() {
return Uri.withAppendedPath(getContentUri(), PATH_IGNORED);
}
@ -521,14 +498,6 @@ public class AppProvider extends FDroidProvider {
.build();
}
public static Uri getSearchCategoryUri(String category, String query) {
return getContentUri().buildUpon()
.appendPath(PATH_SEARCH_CATEGORY)
.appendEncodedPath(category)
.appendEncodedPath(query)
.build();
}
public static Uri getNoApksUri() {
return Uri.withAppendedPath(getContentUri(), PATH_NO_APKS);
}
@ -820,37 +789,18 @@ public class AppProvider extends FDroidProvider {
includeSwap = false;
break;
case SEARCH_CATEGORY:
String query = uri.getPathSegments().get(2);
String category = uri.getPathSegments().get(1);
selection = selection.add(queryCategory(category)).add(querySearch(query));
includeSwap = false;
break;
case RECENTLY_UPDATED:
sortOrder = getTableName() + ".lastUpdated DESC";
selection = selection.add(queryRecentlyUpdated());
includeSwap = false;
break;
case SEARCH_RECENTLY_UPDATED:
sortOrder = " fdroid_app.lastUpdated DESC";
selection = selection.add(queryRecentlyUpdated()).add(querySearch(uri.getLastPathSegment()));
includeSwap = false;
break;
case NEWLY_ADDED:
sortOrder = getTableName() + ".added DESC";
selection = selection.add(queryNewlyAdded());
includeSwap = false;
break;
case SEARCH_NEWLY_ADDED:
sortOrder = " fdroid_app.added DESC";
selection = selection.add(queryNewlyAdded()).add(querySearch(uri.getLastPathSegment()));
includeSwap = false;
break;
default:
Log.e(TAG, "Invalid URI for app content provider: " + uri);
throw new UnsupportedOperationException("Invalid URI for app content provider: " + uri);

View File

@ -64,6 +64,26 @@ public abstract class AppListFragment extends ListFragment implements
protected abstract Uri getDataUri(String query);
/**
* Subclasses can choose to do different things based on when a user begins searching.
* For example, the "Available" tab chooses to hide its category spinner to make it clear
* that it is searching all apps, not the current category.
* NOTE: This will get called <em>multiple</em> times, every time the user changes the
* search query.
*/
protected void onSearch() {
// Do nothing by default.
}
/**
* Alerts the child class that the user is no longer performing a search.
* This is triggered every time the search query is blank.
* @see AppListFragment#onSearch()
*/
protected void onSearchStopped() {
// Do nothing by default.
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@ -150,11 +170,26 @@ public abstract class AppListFragment extends ListFragment implements
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = TextUtils.isEmpty(searchQuery) ? getDataUri() : getDataUri(searchQuery);
Uri uri = updateSearchStatus() ? getDataUri(searchQuery) : getDataUri();
return new CursorLoader(
getActivity(), uri, APP_PROJECTION, null, null, APP_SORT);
}
/**
* Notifies the subclass via {@link AppListFragment#onSearch()} and {@link AppListFragment#onSearchStopped()}
* about whether or not a search is taking place.
* @return True if a user is searching.
*/
private boolean updateSearchStatus() {
if (TextUtils.isEmpty(searchQuery)) {
onSearchStopped();
return false;
} else {
onSearch();
return true;
}
}
public void updateSearchQuery(@Nullable String query) {
searchQuery = query;
if (isAdded()) {

View File

@ -164,14 +164,9 @@ public class AvailableAppsFragment extends AppListFragment implements
return AppProvider.getCategoryUri(currentCategory);
}
@Override
protected Uri getDataUri(String query) {
if (currentCategory == null || currentCategory.equals(AppProvider.Helper.getCategoryAll(getActivity())))
return AppProvider.getSearchUri(query);
if (currentCategory.equals(AppProvider.Helper.getCategoryRecentlyUpdated(getActivity())))
return AppProvider.getSearchRecentlyUpdatedUri(query);
if (currentCategory.equals(AppProvider.Helper.getCategoryWhatsNew(getActivity())))
return AppProvider.getSearchNewlyAddedUri(query);
return AppProvider.getSearchCategoryUri(currentCategory, query);
return AppProvider.getSearchUri(query);
}
private void setCurrentCategory(String category) {
@ -207,4 +202,18 @@ public class AvailableAppsFragment extends AppListFragment implements
e.putString(CATEGORY_KEY, currentCategory);
e.commit();
}
@Override
protected void onSearch() {
if (categorySpinner != null) {
categorySpinner.setVisibility(View.GONE);
}
}
@Override
protected void onSearchStopped() {
if (categorySpinner != null) {
categorySpinner.setVisibility(View.VISIBLE);
}
}
}