Merge branch 'search-empty-view' into 'master'

Show appropriate message when search results are empty

Closes #512.

See merge request !180
This commit is contained in:
Peter Serwylo 2015-12-19 22:44:11 +00:00
commit b80bebc8bd
6 changed files with 53 additions and 1 deletions

View File

@ -105,6 +105,7 @@
<activity
android:name=".FDroid"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize"
android:configChanges="layoutDirection|locale|keyboardHidden|orientation|screenSize" >
<!-- App URLs -->

View File

@ -258,6 +258,9 @@
<string name="empty_installed_app_list">No apps installed.\n\nThere are apps on your device, but they are not available from F-Droid. This could be because you need to update your repositories, or the repositories genuinely don\'t have your apps available.</string>
<string name="empty_available_app_list">No apps in this category.\n\nTry selecting a different category or updating your repositories to get a fresh list of apps.</string>
<string name="empty_can_update_app_list">All apps up to date.\n\nCongratulations! All of your apps are up to date (or your repositories are out of date).</string>
<string name="empty_search_installed_app_list">No matching installed applications.</string>
<string name="empty_search_available_app_list">No matching applications available.</string>
<string name="empty_search_can_update_app_list">No matching applications for update.</string>
<string name="requesting_root_access_body">Requesting root access…</string>
<string name="root_access_denied_title">Root access denied</string>

View File

@ -14,6 +14,7 @@ import android.support.v4.content.Loader;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.TextView;
import org.fdroid.fdroid.AppDetails;
import org.fdroid.fdroid.Preferences;
@ -64,6 +65,10 @@ public abstract class AppListFragment extends ListFragment implements
protected abstract Uri getDataUri(String query);
protected abstract int getEmptyMessage();
protected abstract int getNoSearchResultsMessage();
/**
* 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
@ -84,6 +89,14 @@ public abstract class AppListFragment extends ListFragment implements
// Do nothing by default.
}
/**
* Utility function to set empty view text which should be different
* depending on whether search is active or not.
*/
private void setEmptyText(int resId) {
((TextView) getListView().getEmptyView()).setText(resId);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@ -177,15 +190,18 @@ public abstract class AppListFragment extends ListFragment implements
/**
* Notifies the subclass via {@link AppListFragment#onSearch()} and {@link AppListFragment#onSearchStopped()}
* about whether or not a search is taking place.
* about whether or not a search is taking place and changes empty message
* appropriately.
* @return True if a user is searching.
*/
private boolean updateSearchStatus() {
if (TextUtils.isEmpty(searchQuery)) {
onSearchStopped();
setEmptyText(getEmptyMessage());
return false;
} else {
onSearch();
setEmptyText(getNoSearchResultsMessage());
return true;
}
}

View File

@ -176,6 +176,16 @@ public class AvailableAppsFragment extends AppListFragment implements
return AppProvider.getSearchUri(query);
}
@Override
protected int getEmptyMessage() {
return R.string.empty_available_app_list;
}
@Override
protected int getNoSearchResultsMessage() {
return R.string.empty_search_available_app_list;
}
private void setCurrentCategory(String category) {
currentCategory = category;
Utils.debugLog(TAG, "Category '" + currentCategory + "' selected.");

View File

@ -28,10 +28,21 @@ public class CanUpdateAppsFragment extends AppListFragment {
return AppProvider.getCanUpdateUri();
}
@Override
protected Uri getDataUri(String query) {
return AppProvider.getSearchCanUpdateUri(query);
}
@Override
protected int getEmptyMessage() {
return R.string.empty_can_update_app_list;
}
@Override
protected int getNoSearchResultsMessage() {
return R.string.empty_search_can_update_app_list;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.can_update_app_list, container, false);

View File

@ -28,10 +28,21 @@ public class InstalledAppsFragment extends AppListFragment {
return AppProvider.getInstalledUri();
}
@Override
protected Uri getDataUri(String query) {
return AppProvider.getSearchInstalledUri(query);
}
@Override
protected int getEmptyMessage() {
return R.string.empty_installed_app_list;
}
@Override
protected int getNoSearchResultsMessage() {
return R.string.empty_search_installed_app_list;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.installed_app_list, container, false);