From f8950ae9b8e4b5528ed9cbca2f6639540f11e800 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sun, 6 May 2018 23:46:45 +0200 Subject: Add search function to preferences --- .../antennapod/activity/PreferenceActivity.java | 31 +++++++++++++++++++--- .../preferences/PreferenceController.java | 24 ++++++++++++++++- 2 files changed, 50 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/de') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java index 34c68084f..3f005fe36 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java @@ -14,6 +14,9 @@ import android.widget.FrameLayout; import java.lang.ref.WeakReference; +import com.bytehamster.lib.preferencesearch.SearchPreference; +import com.bytehamster.lib.preferencesearch.SearchPreferenceResult; +import com.bytehamster.lib.preferencesearch.SearchPreferenceResultListener; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.preferences.PreferenceController; @@ -22,7 +25,7 @@ import de.danoeh.antennapod.preferences.PreferenceController; * PreferenceActivity for API 11+. In order to change the behavior of the preference UI, see * PreferenceController. */ -public class PreferenceActivity extends AppCompatActivity { +public class PreferenceActivity extends AppCompatActivity implements SearchPreferenceResultListener { public static final String PARAM_RESOURCE = "resource"; private static WeakReference instance; @@ -35,6 +38,11 @@ public class PreferenceActivity extends AppCompatActivity { this.fragment = fragment; } + @Override + public PreferenceFragmentCompat getFragment() { + return fragment; + } + @Override public Preference findPreference(CharSequence key) { return fragment.findPreference(key); @@ -76,12 +84,21 @@ public class PreferenceActivity extends AppCompatActivity { // since the MainFragment depends on the preferenceController already being created preferenceController = new PreferenceController(preferenceUI); + showPreferenceScreen(R.xml.preferences, false); + } + + private void showPreferenceScreen(int screen, boolean addHistory) { PreferenceFragmentCompat prefFragment = new MainFragment(); preferenceUI.setFragment(prefFragment); Bundle args = new Bundle(); - args.putInt(PARAM_RESOURCE, R.xml.preferences); + args.putInt(PARAM_RESOURCE, screen); prefFragment.setArguments(args); - getSupportFragmentManager().beginTransaction().replace(R.id.content, prefFragment).commit(); + if (addHistory) { + getSupportFragmentManager().beginTransaction().replace(R.id.content, prefFragment) + .addToBackStack(getString(PreferenceController.getTitleOfPage(screen))).commit(); + } else { + getSupportFragmentManager().beginTransaction().replace(R.id.content, prefFragment).commit(); + } } @Override @@ -111,6 +128,12 @@ public class PreferenceActivity extends AppCompatActivity { } } + @Override + public void onSearchResultClicked(SearchPreferenceResult result) { + showPreferenceScreen(result.getResourceFile(), true); + result.highlight(preferenceUI.getFragment()); + } + public static class MainFragment extends PreferenceFragmentCompat { private int screen; @@ -136,7 +159,7 @@ public class PreferenceActivity extends AppCompatActivity { super.onResume(); PreferenceActivity activity = instance.get(); if(activity != null && activity.preferenceController != null) { - activity.setTitle(activity.preferenceController.getTitleOfPage(screen)); + activity.setTitle(PreferenceController.getTitleOfPage(screen)); activity.preferenceUI.setFragment(this); activity.preferenceController.onResume(screen); } diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index 62d4793cf..eb10b1ebc 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -37,6 +37,7 @@ import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; +import com.bytehamster.lib.preferencesearch.SearchPreference; import de.danoeh.antennapod.activity.AboutActivity; import de.danoeh.antennapod.activity.ImportExportActivity; import de.danoeh.antennapod.activity.MediaplayerActivity; @@ -489,6 +490,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc private void setupMainScreen() { final AppCompatActivity activity = ui.getActivity(); + setupSearch(); ui.findPreference(PREF_SCREEN_USER_INTERFACE).setOnPreferenceClickListener(preference -> { openScreen(R.xml.preferences_user_interface, activity); return true; @@ -555,6 +557,25 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc }); } + private void setupSearch() { + final AppCompatActivity activity = ui.getActivity(); + + SearchPreference searchPreference = (SearchPreference) ui.findPreference("searchPreference"); + searchPreference.setActivity(activity); + searchPreference.setFragmentContainerViewId(R.id.content); + searchPreference.setBreadcrumbsEnabled(true); + + searchPreference.addResourceFileToIndex(R.xml.preferences_user_interface, getTitleOfPage(R.xml.preferences_user_interface)); + searchPreference.addResourceFileToIndex(R.xml.preferences_playback, getTitleOfPage(R.xml.preferences_playback)); + searchPreference.addResourceFileToIndex(R.xml.preferences_network, getTitleOfPage(R.xml.preferences_network)); + searchPreference.addResourceFileToIndex(R.xml.preferences_storage, getTitleOfPage(R.xml.preferences_storage)); + String integrations = activity.getString(getTitleOfPage(R.xml.preferences_integrations)); + String flattr = activity.getString(getTitleOfPage(R.xml.preferences_flattr)); + String gpodder = activity.getString(getTitleOfPage(R.xml.preferences_gpodder)); + searchPreference.addResourceFileToIndex(R.xml.preferences_flattr, integrations + " > " + flattr); + searchPreference.addResourceFileToIndex(R.xml.preferences_gpodder, integrations + " > " + gpodder); + } + public PreferenceFragmentCompat openScreen(int preferences, AppCompatActivity activity) { PreferenceFragmentCompat prefFragment = new PreferenceActivity.MainFragment(); Bundle args = new Bundle(); @@ -566,7 +587,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc return prefFragment; } - public int getTitleOfPage(int preferences) { + public static int getTitleOfPage(int preferences) { switch (preferences) { case R.xml.preferences_network: return R.string.network_pref; @@ -1152,6 +1173,7 @@ public class PreferenceController implements SharedPreferences.OnSharedPreferenc public interface PreferenceUI { void setFragment(PreferenceFragmentCompat fragment); + PreferenceFragmentCompat getFragment(); /** * Finds a preference based on its key. -- cgit v1.2.3