Improve search suggestion experience when remote ones can't be fetched
Do not show anything in case of network error (it can simply be ignored). Show a snackbar otherwise, which still allows writing things into the search box.
This commit is contained in:
parent
4b7311bafd
commit
f8de72f59f
|
@ -52,6 +52,7 @@ import org.schabi.newpipe.report.UserAction;
|
||||||
import org.schabi.newpipe.util.DeviceUtils;
|
import org.schabi.newpipe.util.DeviceUtils;
|
||||||
import org.schabi.newpipe.util.AnimationUtils;
|
import org.schabi.newpipe.util.AnimationUtils;
|
||||||
import org.schabi.newpipe.util.Constants;
|
import org.schabi.newpipe.util.Constants;
|
||||||
|
import org.schabi.newpipe.util.ExceptionUtils;
|
||||||
import org.schabi.newpipe.util.ExtractorHelper;
|
import org.schabi.newpipe.util.ExtractorHelper;
|
||||||
import org.schabi.newpipe.util.NavigationHelper;
|
import org.schabi.newpipe.util.NavigationHelper;
|
||||||
import org.schabi.newpipe.util.ServiceHelper;
|
import org.schabi.newpipe.util.ServiceHelper;
|
||||||
|
@ -154,6 +155,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
|
||||||
private TextView correctSuggestion;
|
private TextView correctSuggestion;
|
||||||
|
|
||||||
private View suggestionsPanel;
|
private View suggestionsPanel;
|
||||||
|
private boolean suggestionsPanelVisible = false;
|
||||||
private RecyclerView suggestionsRecyclerView;
|
private RecyclerView suggestionsRecyclerView;
|
||||||
|
|
||||||
/*////////////////////////////////////////////////////////////////////////*/
|
/*////////////////////////////////////////////////////////////////////////*/
|
||||||
|
@ -627,6 +629,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "showSuggestionsPanel() called");
|
Log.d(TAG, "showSuggestionsPanel() called");
|
||||||
}
|
}
|
||||||
|
suggestionsPanelVisible = true;
|
||||||
animateView(suggestionsPanel, AnimationUtils.Type.LIGHT_SLIDE_AND_ALPHA, true, 200);
|
animateView(suggestionsPanel, AnimationUtils.Type.LIGHT_SLIDE_AND_ALPHA, true, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,6 +637,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "hideSuggestionsPanel() called");
|
Log.d(TAG, "hideSuggestionsPanel() called");
|
||||||
}
|
}
|
||||||
|
suggestionsPanelVisible = false;
|
||||||
animateView(suggestionsPanel, AnimationUtils.Type.LIGHT_SLIDE_AND_ALPHA, false, 200);
|
animateView(suggestionsPanel, AnimationUtils.Type.LIGHT_SLIDE_AND_ALPHA, false, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -695,7 +699,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBackPressed() {
|
public boolean onBackPressed() {
|
||||||
if (suggestionsPanel.getVisibility() == View.VISIBLE
|
if (suggestionsPanelVisible
|
||||||
&& infoListAdapter.getItemsList().size() > 0
|
&& infoListAdapter.getItemsList().size() > 0
|
||||||
&& !isLoading.get()) {
|
&& !isLoading.get()) {
|
||||||
hideSuggestionsPanel();
|
hideSuggestionsPanel();
|
||||||
|
@ -742,6 +746,13 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
|
||||||
|
|
||||||
final Observable<List<SuggestionItem>> network = ExtractorHelper
|
final Observable<List<SuggestionItem>> network = ExtractorHelper
|
||||||
.suggestionsFor(serviceId, query)
|
.suggestionsFor(serviceId, query)
|
||||||
|
.onErrorReturn(throwable -> {
|
||||||
|
if (!ExceptionUtils.isNetworkRelated(throwable)) {
|
||||||
|
showSnackBarError(throwable, UserAction.GET_SUGGESTIONS,
|
||||||
|
NewPipe.getNameOfService(serviceId), searchString, 0);
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
})
|
||||||
.toObservable()
|
.toObservable()
|
||||||
.map(strings -> {
|
.map(strings -> {
|
||||||
final List<SuggestionItem> result = new ArrayList<>();
|
final List<SuggestionItem> result = new ArrayList<>();
|
||||||
|
@ -924,7 +935,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
|
||||||
suggestionsRecyclerView.smoothScrollToPosition(0);
|
suggestionsRecyclerView.smoothScrollToPosition(0);
|
||||||
suggestionsRecyclerView.post(() -> suggestionListAdapter.setItems(suggestions));
|
suggestionsRecyclerView.post(() -> suggestionListAdapter.setItems(suggestions));
|
||||||
|
|
||||||
if (errorPanelRoot.getVisibility() == View.VISIBLE) {
|
if (suggestionsPanelVisible && errorPanelRoot.getVisibility() == View.VISIBLE) {
|
||||||
hideLoading();
|
hideLoading();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue