Skip to content

Commit b0e0bc5

Browse files
committed
searchfilters: integrate 3rd UI SearchFragment/SearchFragmentLegacy
1 parent f810109 commit b0e0bc5

4 files changed

Lines changed: 113 additions & 3 deletions

File tree

app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
154154

155155
private FragmentSearchBinding searchBinding;
156156

157-
private View searchToolbarContainer;
157+
protected View searchToolbarContainer;
158158
private EditText searchEditText;
159159
private View searchClear;
160160

@@ -171,7 +171,19 @@ public class SearchFragment extends BaseListFragment<SearchInfo, ListExtractor.I
171171
ArrayList<Integer> userSelectedSortFilterList = null;
172172

173173
public static SearchFragment getInstance(final int serviceId, final String searchString) {
174-
final SearchFragment searchFragment = new SearchFragment();
174+
final SearchFragment searchFragment;
175+
final App app = App.getApp();
176+
177+
178+
final String searchUi = PreferenceManager.getDefaultSharedPreferences(app)
179+
.getString(app.getString(R.string.search_filter_ui_key),
180+
app.getString(R.string.search_filter_ui_value));
181+
if (app.getString(R.string.search_filter_ui_option_menu_legacy_key).equals(searchUi)) {
182+
searchFragment = new SearchFragmentLegacy();
183+
} else {
184+
searchFragment = new SearchFragment();
185+
}
186+
175187
searchFragment.setQuery(serviceId, searchString, null, null);
176188

177189
if (!TextUtils.isEmpty(searchString)) {
@@ -667,7 +679,7 @@ private void showKeyboardSearch() {
667679
KeyboardUtil.showKeyboard(activity, searchEditText);
668680
}
669681

670-
private void hideKeyboardSearch() {
682+
protected void hideKeyboardSearch() {
671683
if (DEBUG) {
672684
Log.d(TAG, "hideKeyboardSearch() called");
673685
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Created by evermind-zz 2022, licensed GNU GPL version 3 or later
2+
3+
package org.schabi.newpipe.fragments.list.search;
4+
5+
import android.os.Bundle;
6+
import android.view.Menu;
7+
import android.view.MenuInflater;
8+
import android.view.MenuItem;
9+
import android.view.View;
10+
11+
import org.schabi.newpipe.R;
12+
import org.schabi.newpipe.extractor.NewPipe;
13+
import org.schabi.newpipe.extractor.StreamingService;
14+
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
15+
import org.schabi.newpipe.fragments.list.search.filter.SearchFilterUIOptionMenu;
16+
17+
import androidx.annotation.NonNull;
18+
import androidx.appcompat.widget.Toolbar;
19+
import androidx.core.content.ContextCompat;
20+
import icepick.State;
21+
22+
/**
23+
* Fragment that hosts the action menu based filter 'dialog'.
24+
* <p>
25+
* Called ..Legacy because this was the way NewPipe had implemented the search filter dialog.
26+
* <p>
27+
* The new UI's are handled by {@link SearchFragment} and implemented by
28+
* using {@link androidx.fragment.app.DialogFragment}.
29+
*/
30+
public class SearchFragmentLegacy extends SearchFragment {
31+
32+
@State
33+
protected int countOnPrepareOptionsMenuCalls = 0;
34+
private SearchFilterUIOptionMenu searchFilterUi;
35+
36+
@Override
37+
protected void initializeFilterData() {
38+
try {
39+
final StreamingService service = NewPipe.getService(serviceId);
40+
41+
searchFilterUi = new SearchFilterUIOptionMenu(service, this, requireContext());
42+
searchFilterUi.restorePreviouslySelectedFilters(
43+
userSelectedContentFilterList,
44+
userSelectedSortFilterList);
45+
46+
userSelectedContentFilterList = searchFilterUi.getSelectedContentFilters();
47+
userSelectedSortFilterList = searchFilterUi.getSelectedSortFilters();
48+
selectedContentFilter = searchFilterUi.getSelectedContentFilterItems();
49+
selectedSortFilter = searchFilterUi.getSelectedSortFiltersItems();
50+
} catch (final ExtractionException e) {
51+
throw new RuntimeException(e);
52+
}
53+
}
54+
55+
@Override
56+
public void onSaveInstanceState(@NonNull final Bundle bundle) {
57+
// get data to save its state via Icepick
58+
userSelectedContentFilterList = searchFilterUi.getSelectedContentFilters();
59+
userSelectedSortFilterList = searchFilterUi.getSelectedSortFilters();
60+
61+
super.onSaveInstanceState(bundle);
62+
}
63+
64+
@Override
65+
protected void createMenu(@NonNull final Menu menu,
66+
@NonNull final MenuInflater inflater) {
67+
searchFilterUi.createSearchUI(menu);
68+
}
69+
70+
@Override
71+
public boolean onOptionsItemSelected(@NonNull final MenuItem item) {
72+
return searchFilterUi.onOptionsItemSelected(item);
73+
}
74+
75+
@Override
76+
protected void initViews(final View rootView,
77+
final Bundle savedInstanceState) {
78+
super.initViews(rootView, savedInstanceState);
79+
final Toolbar toolbar = (Toolbar) searchToolbarContainer.getParent();
80+
toolbar.setOverflowIcon(ContextCompat.getDrawable(requireContext(),
81+
R.drawable.ic_sort));
82+
}
83+
84+
@Override
85+
public void onPrepareOptionsMenu(@NonNull final Menu menu) {
86+
super.onPrepareOptionsMenu(menu);
87+
// workaround: we want to hide the keyboard in case we open the options
88+
// menu. As somehow this method gets triggered twice but only the 2nd
89+
// time is relevant as the options menu is selected by the user.
90+
if (++countOnPrepareOptionsMenuCalls > 1) {
91+
hideKeyboardSearch();
92+
}
93+
}
94+
}

app/src/main/res/values/settings_keys.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,15 +1278,18 @@
12781278

12791279
<string name="search_filter_ui_dialog_key">dialog</string>
12801280
<string name="search_filter_ui_option_menu_style_key">style</string>
1281+
<string name="search_filter_ui_option_menu_legacy_key">legacy</string>
12811282

12821283
<string-array name="search_filter_ui_values">
12831284
<item>@string/search_filter_ui_dialog_key</item>
12841285
<item>@string/search_filter_ui_option_menu_style_key</item>
1286+
<item>@string/search_filter_ui_option_menu_legacy_key</item>
12851287
</string-array>
12861288

12871289
<string-array name="search_filter_ui_description">
12881290
<item>@string/search_filter_ui_dialog</item>
12891291
<item>@string/search_filter_ui_style</item>
1292+
<item>@string/search_filter_ui_legacy</item>
12901293
</string-array>
12911294

12921295
<string name="tablet_mode_key">tablet_mode</string>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@
552552
<string name="search_filter_ui">Select Search Filter UI</string>
553553
<string name="search_filter_ui_dialog">Simple Dialog (default)</string>
554554
<string name="search_filter_ui_style">Action Menu styled Dialog</string>
555+
<string name="search_filter_ui_legacy">Action Menu (legacy)</string>
555556
<!-- Seekbar Preview Thumbnail-->
556557
<string name="seekbar_preview_thumbnail_title">Seekbar thumbnail preview</string>
557558
<string name="high_quality_larger">High quality (larger)</string>

0 commit comments

Comments
 (0)