diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java | 77 |
1 files changed, 42 insertions, 35 deletions
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 a6aec2425..3f005fe36 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java @@ -1,13 +1,12 @@ package de.danoeh.antennapod.activity; -import android.app.Activity; import android.content.Intent; import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceFragment; -import android.preference.PreferenceScreen; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceFragmentCompat; +import android.support.v7.preference.PreferenceScreen; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; @@ -15,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; @@ -23,20 +25,25 @@ 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; private PreferenceController preferenceController; private final PreferenceController.PreferenceUI preferenceUI = new PreferenceController.PreferenceUI() { - private PreferenceFragment fragment; + private PreferenceFragmentCompat fragment; @Override - public void setFragment(PreferenceFragment fragment) { + public void setFragment(PreferenceFragmentCompat fragment) { this.fragment = fragment; } @Override + public PreferenceFragmentCompat getFragment() { + return fragment; + } + + @Override public Preference findPreference(CharSequence key) { return fragment.findPreference(key); } @@ -47,7 +54,7 @@ public class PreferenceActivity extends AppCompatActivity { } @Override - public Activity getActivity() { + public AppCompatActivity getActivity() { return PreferenceActivity.this; } }; @@ -77,12 +84,21 @@ public class PreferenceActivity extends AppCompatActivity { // since the MainFragment depends on the preferenceController already being created preferenceController = new PreferenceController(preferenceUI); - PreferenceFragment prefFragment = new MainFragment(); + 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); - getFragmentManager().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 @@ -101,10 +117,10 @@ public class PreferenceActivity extends AppCompatActivity { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: - if (getFragmentManager().getBackStackEntryCount() == 0) { + if (getSupportFragmentManager().getBackStackEntryCount() == 0) { finish(); } else { - getFragmentManager().popBackStack(); + getSupportFragmentManager().popBackStack(); } return true; default: @@ -112,13 +128,23 @@ public class PreferenceActivity extends AppCompatActivity { } } - public static class MainFragment extends PreferenceFragment { + @Override + public void onSearchResultClicked(SearchPreferenceResult result) { + showPreferenceScreen(result.getResourceFile(), true); + result.highlight(preferenceUI.getFragment()); + } + + public static class MainFragment extends PreferenceFragmentCompat { private int screen; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); + } + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { screen = getArguments().getInt(PARAM_RESOURCE); addPreferencesFromResource(screen); PreferenceActivity activity = instance.get(); @@ -133,35 +159,16 @@ public class PreferenceActivity extends AppCompatActivity { super.onResume(); PreferenceActivity activity = instance.get(); if(activity != null && activity.preferenceController != null) { - activity.setTitle(getTitle(screen)); + activity.setTitle(PreferenceController.getTitleOfPage(screen)); activity.preferenceUI.setFragment(this); activity.preferenceController.onResume(screen); } } - private int getTitle(int preferences) { - switch (preferences) { - case R.xml.preferences_network: - return R.string.network_pref; - case R.xml.preferences_autodownload: - return R.string.pref_automatic_download_title; - case R.xml.preferences_playback: - return R.string.playback_pref; - case R.xml.preferences_storage: - return R.string.storage_pref; - case R.xml.preferences_user_interface: - return R.string.user_interface_label; - case R.xml.preferences_integrations: - return R.string.integrations_label; - default: - return R.string.settings_label; - } - } - @Override public void onPause() { PreferenceActivity activity = instance.get(); - if (screen == R.xml.preferences_integrations) { + if (screen == R.xml.preferences_gpodder) { activity.preferenceController.unregisterGpodnet(); } super.onPause(); |