diff options
-rw-r--r-- | app/build.gradle | 1 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java | 31 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java | 24 | ||||
-rw-r--r-- | app/src/main/res/xml/preferences.xml | 10 | ||||
-rw-r--r-- | build.gradle | 4 | ||||
-rw-r--r-- | circle.yml | 4 |
6 files changed, 62 insertions, 12 deletions
diff --git a/app/build.gradle b/app/build.gradle index 6a991f7f2..f2b78cb0a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -173,6 +173,7 @@ dependencies { implementation "com.github.AntennaPod:AntennaPod-AudioPlayer:$audioPlayerVersion" implementation 'com.github.mfietz:fyydlin:v0.3' + implementation 'com.github.ByteHamster:SearchPreference:v1.0.2' androidTestImplementation "com.jayway.android.robotium:robotium-solo:$robotiumSoloVersion" } 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<PreferenceActivity> instance; @@ -36,6 +39,11 @@ public class PreferenceActivity extends AppCompatActivity { } @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. diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 8472f7b26..d3b72e17c 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,10 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> + + <com.bytehamster.lib.preferencesearch.SearchPreference + android:key="searchPreference" /> + <Preference - android:key="prefScreenInterface" - android:title="@string/user_interface_label" - android:icon="?attr/type_video" /> + android:key="prefScreenInterface" + android:title="@string/user_interface_label" + android:icon="?attr/type_video" /> <Preference android:key="prefScreenPlayback" diff --git a/build.gradle b/build.gradle index a6d391a27..e0ad11e6c 100644 --- a/build.gradle +++ b/build.gradle @@ -37,12 +37,12 @@ subprojects { } project.ext { - compileSdkVersion = 25 + compileSdkVersion = 26 buildToolsVersion = "27.0.3" minSdkVersion = 14 targetSdkVersion = 26 - supportVersion = "25.3.1" + supportVersion = "26.1.0" commonsioVersion = "2.5" commonslangVersion = "3.6" commonstextVersion = "1.3" diff --git a/circle.yml b/circle.yml index 5a5a129ea..52ce389d4 100644 --- a/circle.yml +++ b/circle.yml @@ -12,7 +12,7 @@ dependencies: - ~/.android - ~/android pre: - - echo y | android update sdk --no-ui --all --filter "tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-25" + - echo y | android update sdk --no-ui --all --filter "tool,extra-android-m2repository,extra-android-support,extra-google-google_play_services,extra-google-m2repository,android-26" - echo y | android update sdk --no-ui --all --filter "build-tools-27.0.3" override: - echo override dependencies @@ -20,4 +20,4 @@ dependencies: test: override: - ./gradlew assembleDebug -PdisablePreDex: - timeout: 1800
\ No newline at end of file + timeout: 1800 |