From 99acff3b8feee5f69acb138a328aa323da8109dc Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 13 Jun 2019 23:09:59 +0200 Subject: Restructured preferences code --- .../antennapod/activity/PreferenceActivity.java | 193 ++++++++------------- 1 file changed, 68 insertions(+), 125 deletions(-) (limited to 'app/src/main/java/de/danoeh/antennapod/activity') 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 452e91bd3..c13f713e0 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/PreferenceActivity.java @@ -1,12 +1,9 @@ package de.danoeh.antennapod.activity; -import android.content.Intent; import android.os.Bundle; 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,56 +12,25 @@ import android.widget.FrameLayout; import com.bytehamster.lib.preferencesearch.SearchPreferenceResult; import com.bytehamster.lib.preferencesearch.SearchPreferenceResultListener; -import java.lang.ref.WeakReference; - import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.preferences.PreferenceController; +import de.danoeh.antennapod.fragment.preferences.AutoDownloadPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.FlattrPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.GpodderPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.IntegrationsPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.MainPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.NetworkPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.PlaybackPreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.StoragePreferencesFragment; +import de.danoeh.antennapod.fragment.preferences.UserInterfacePreferencesFragment; /** * PreferenceActivity for API 11+. In order to change the behavior of the preference UI, see * PreferenceController. */ public class PreferenceActivity extends AppCompatActivity implements SearchPreferenceResultListener { - - public static final String PARAM_RESOURCE = "resource"; - private static WeakReference instance; - private PreferenceController preferenceController; - private final PreferenceController.PreferenceUI preferenceUI = new PreferenceController.PreferenceUI() { - private PreferenceFragmentCompat fragment; - - @Override - public void setFragment(PreferenceFragmentCompat fragment) { - this.fragment = fragment; - } - - @Override - public PreferenceFragmentCompat getFragment() { - return fragment; - } - - @Override - public Preference findPreference(CharSequence key) { - return fragment.findPreference(key); - } - - @Override - public PreferenceScreen getPreferenceScreen() { - return fragment.getPreferenceScreen(); - } - - @Override - public AppCompatActivity getActivity() { - return PreferenceActivity.this; - } - }; - @Override protected void onCreate(Bundle savedInstanceState) { - // This must be the FIRST thing we do, otherwise other code may not have the - // reference it needs - instance = new WeakReference<>(this); - setTheme(UserPreferences.getTheme()); super.onCreate(savedInstanceState); @@ -73,38 +39,67 @@ public class PreferenceActivity extends AppCompatActivity implements SearchPrefe ab.setDisplayHomeAsUpEnabled(true); } - // set up layout FrameLayout root = new FrameLayout(this); root.setId(R.id.content); root.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); setContentView(root); - // we need to create the PreferenceController before the MainFragment - // since the MainFragment depends on the preferenceController already being created - preferenceController = new PreferenceController(preferenceUI); + getSupportFragmentManager().beginTransaction().replace(R.id.content, new MainPreferencesFragment()).commit(); - 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, screen); - prefFragment.setArguments(args); - if (addHistory) { - getSupportFragmentManager().beginTransaction().replace(R.id.content, prefFragment) - .addToBackStack(getString(PreferenceController.getTitleOfPage(screen))).commit(); - } else { - getSupportFragmentManager().beginTransaction().replace(R.id.content, prefFragment).commit(); + private PreferenceFragmentCompat getPreferenceScreen(int screen) { + PreferenceFragmentCompat prefFragment = null; + + if (screen == R.xml.preferences_user_interface) { + prefFragment = new UserInterfacePreferencesFragment(); + } else if (screen == R.xml.preferences_integrations) { + prefFragment = new IntegrationsPreferencesFragment(); + } else if (screen == R.xml.preferences_network) { + prefFragment = new NetworkPreferencesFragment(); + } else if (screen == R.xml.preferences_storage) { + prefFragment = new StoragePreferencesFragment(); + } else if (screen == R.xml.preferences_autodownload) { + prefFragment = new AutoDownloadPreferencesFragment(); + } else if (screen == R.xml.preferences_gpodder) { + prefFragment = new GpodderPreferencesFragment(); + } else if (screen == R.xml.preferences_flattr) { + prefFragment = new FlattrPreferencesFragment(); + } else if (screen == R.xml.preferences_playback) { + prefFragment = new PlaybackPreferencesFragment(); } + return prefFragment; } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - preferenceController.onActivityResult(requestCode, resultCode, data); + public static int getTitleOfPage(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; + case R.xml.preferences_flattr: + return R.string.flattr_label; + case R.xml.preferences_gpodder: + return R.string.gpodnet_main_label; + default: + return R.string.settings_label; + } + } + + public PreferenceFragmentCompat openScreen(int screen) { + PreferenceFragmentCompat fragment = getPreferenceScreen(screen); + getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment) + .addToBackStack(getString(getTitleOfPage(screen))).commit(); + return fragment; } @Override @@ -115,72 +110,20 @@ public class PreferenceActivity extends AppCompatActivity implements SearchPrefe @Override public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - if (getSupportFragmentManager().getBackStackEntryCount() == 0) { - finish(); - } else { - getSupportFragmentManager().popBackStack(); - } - return true; - default: - return false; + if (item.getItemId() == android.R.id.home) { + if (getSupportFragmentManager().getBackStackEntryCount() == 0) { + finish(); + } else { + getSupportFragmentManager().popBackStack(); + } + return true; } + return false; } @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(); - if (activity != null && activity.preferenceController != null) { - activity.preferenceUI.setFragment(this); - activity.preferenceController.onCreate(screen); - } - } - - @Override - public void onResume() { - super.onResume(); - PreferenceActivity activity = instance.get(); - if(activity != null && activity.preferenceController != null) { - activity.setTitle(PreferenceController.getTitleOfPage(screen)); - activity.preferenceUI.setFragment(this); - activity.preferenceController.onResume(screen); - } - } - - @Override - public void onPause() { - PreferenceActivity activity = instance.get(); - if (screen == R.xml.preferences_gpodder) { - activity.preferenceController.unregisterGpodnet(); - } - super.onPause(); - } - - @Override - public void onStop() { - PreferenceActivity activity = instance.get(); - if (screen == R.xml.preferences_storage) { - activity.preferenceController.unsubscribeExportSubscription(); - } - super.onStop(); - } + PreferenceFragmentCompat fragment = openScreen(result.getResourceFile()); + result.highlight(fragment); } } -- cgit v1.2.3