From ad9de4467bac4b8ca235010a6b8532621c3a03e1 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Sat, 10 Sep 2022 16:09:26 +0200 Subject: Add 'default screen' setting (replaces 'back button behavior') (#6041) --- .../java/de/test/antennapod/EspressoTestUtils.java | 6 +- .../test/antennapod/dialogs/ShareDialogTest.java | 2 +- .../de/test/antennapod/ui/MainActivityTest.java | 100 +-------------------- .../de/test/antennapod/ui/PreferencesTest.java | 32 ------- .../de/test/antennapod/ui/QueueFragmentTest.java | 2 +- .../danoeh/antennapod/activity/MainActivity.java | 63 +++++-------- .../antennapod/dialog/DrawerPreferencesDialog.java | 50 +++++++++++ .../antennapod/fragment/NavDrawerFragment.java | 33 +------ .../UserInterfacePreferencesFragment.java | 67 ++------------ .../main/res/xml/preferences_user_interface.xml | 12 +-- .../core/preferences/UserPreferences.java | 29 ++---- core/src/main/res/values/arrays.xml | 32 ++----- ui/i18n/src/main/res/values/strings.xml | 13 +-- 13 files changed, 114 insertions(+), 327 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/dialog/DrawerPreferencesDialog.java diff --git a/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java b/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java index df3dbb7f8..70282a6f3 100644 --- a/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java @@ -172,12 +172,16 @@ public class EspressoTestUtils { RatingDialog.saveRated(); } - public static void setLastNavFragment(String tag) { + public static void setLaunchScreen(String tag) { InstrumentationRegistry.getInstrumentation().getTargetContext() .getSharedPreferences(NavDrawerFragment.PREF_NAME, Context.MODE_PRIVATE) .edit() .putString(NavDrawerFragment.PREF_LAST_FRAGMENT_TAG, tag) .commit(); + PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getInstrumentation().getTargetContext()) + .edit() + .putString(UserPreferences.PREF_DEFAULT_PAGE, UserPreferences.DEFAULT_PAGE_REMEMBER) + .commit(); } public static void clearDatabase() { diff --git a/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java index c68e13438..49a252ea1 100644 --- a/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java +++ b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java @@ -48,7 +48,7 @@ public class ShareDialogTest { context = InstrumentationRegistry.getInstrumentation().getTargetContext(); EspressoTestUtils.clearPreferences(); EspressoTestUtils.clearDatabase(); - EspressoTestUtils.setLastNavFragment(AllEpisodesFragment.TAG); + EspressoTestUtils.setLaunchScreen(AllEpisodesFragment.TAG); UITestUtils uiTestUtils = new UITestUtils(context); uiTestUtils.setup(); uiTestUtils.addLocalFeedData(true); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java index 81d7731c5..a55670ed6 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java @@ -1,16 +1,15 @@ package de.test.antennapod.ui; -import android.app.Activity; import android.content.Intent; - import androidx.test.espresso.Espresso; import androidx.test.espresso.intent.rule.IntentsTestRule; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.platform.app.InstrumentationRegistry; - -import com.robotium.solo.Solo; - +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.model.feed.Feed; import de.danoeh.antennapod.storage.database.PodDBAdapter; +import de.test.antennapod.EspressoTestUtils; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -19,27 +18,14 @@ import org.junit.runner.RunWith; import java.io.IOException; -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.MainActivity; -import de.danoeh.antennapod.model.feed.Feed; -import de.test.antennapod.EspressoTestUtils; - import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.replaceText; import static androidx.test.espresso.action.ViewActions.scrollTo; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.contrib.ActivityResultMatchers.hasResultCode; -import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant; -import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static de.test.antennapod.EspressoTestUtils.clickPreference; import static de.test.antennapod.EspressoTestUtils.openNavDrawer; import static de.test.antennapod.EspressoTestUtils.waitForViewGlobally; -import static org.hamcrest.Matchers.allOf; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; /** * User interface tests for MainActivity. @@ -47,7 +33,6 @@ import static org.junit.Assert.assertTrue; @RunWith(AndroidJUnit4.class) public class MainActivityTest { - private Solo solo; private UITestUtils uiTestUtils; @Rule @@ -62,8 +47,6 @@ public class MainActivityTest { uiTestUtils = new UITestUtils(InstrumentationRegistry.getInstrumentation().getTargetContext()); uiTestUtils.setup(); - - solo = new Solo(InstrumentationRegistry.getInstrumentation(), activityRule.getActivity()); } @After @@ -91,79 +74,4 @@ public class MainActivityTest { // wait for podcast feed item list waitForViewGlobally(withId(R.id.butShowSettings), 15000); } - - @Test - public void testBackButtonBehaviorGoToPage() { - openNavDrawer(); - onView(withText(R.string.settings_label)).perform(click()); - clickPreference(R.string.user_interface_label); - clickPreference(R.string.pref_back_button_behavior_title); - - onView(withText(R.string.back_button_go_to_page)).perform(click()); - onView(withText(R.string.subscriptions_label)).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - - solo.goBackToActivity(MainActivity.class.getSimpleName()); - solo.goBack(); - solo.goBack(); - onView(allOf(withId(R.id.toolbar), isDisplayed())).check( - matches(hasDescendant(withText(R.string.subscriptions_label)))); - solo.goBack(); - assertThat(activityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); - } - - @Test - public void testBackButtonBehaviorOpenDrawer() { - openNavDrawer(); - onView(withText(R.string.settings_label)).perform(click()); - clickPreference(R.string.user_interface_label); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_open_drawer)).perform(click()); - solo.goBackToActivity(MainActivity.class.getSimpleName()); - solo.goBack(); - solo.goBack(); - assertTrue(((MainActivity) solo.getCurrentActivity()).isDrawerOpen()); - } - - @Test - public void testBackButtonBehaviorDoubleTap() { - openNavDrawer(); - onView(withText(R.string.settings_label)).perform(click()); - clickPreference(R.string.user_interface_label); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_double_tap)).perform(click()); - solo.goBackToActivity(MainActivity.class.getSimpleName()); - solo.goBack(); - solo.goBack(); - solo.goBack(); - assertThat(activityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); - } - - @Test - public void testBackButtonBehaviorPrompt() throws Exception { - openNavDrawer(); - onView(withText(R.string.settings_label)).perform(click()); - clickPreference(R.string.user_interface_label); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_show_prompt)).perform(click()); - solo.goBackToActivity(MainActivity.class.getSimpleName()); - solo.goBack(); - solo.goBack(); - onView(withText(R.string.yes)).perform(click()); - Thread.sleep(100); - assertThat(activityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); - } - - @Test - public void testBackButtonBehaviorDefault() { - openNavDrawer(); - onView(withText(R.string.settings_label)).perform(click()); - clickPreference(R.string.user_interface_label); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_default)).perform(click()); - solo.goBackToActivity(MainActivity.class.getSimpleName()); - solo.goBack(); - solo.goBack(); - assertThat(activityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); - } } diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java index b8f2faa63..25eb60ff4 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -28,9 +28,6 @@ import de.danoeh.antennapod.core.storage.APNullCleanupAlgorithm; import de.danoeh.antennapod.core.storage.APQueueCleanupAlgorithm; import de.danoeh.antennapod.core.storage.EpisodeCleanupAlgorithm; import de.danoeh.antennapod.core.storage.ExceptFavoriteCleanupAlgorithm; -import de.danoeh.antennapod.fragment.AllEpisodesFragment; -import de.danoeh.antennapod.fragment.QueueFragment; -import de.danoeh.antennapod.fragment.SubscriptionFragment; import de.test.antennapod.EspressoTestUtils; import static androidx.test.espresso.Espresso.onData; @@ -503,35 +500,6 @@ public class PreferencesTest { } } - @Test - public void testBackButtonBehaviorGoToPageSelector() { - clickPreference(R.string.user_interface_label); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_go_to_page)).perform(click()); - onView(withText(R.string.queue_label)).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - Awaitility.await().atMost(1000, MILLISECONDS) - .until(() -> UserPreferences.getBackButtonBehavior() == UserPreferences.BackButtonBehavior.GO_TO_PAGE); - Awaitility.await().atMost(1000, MILLISECONDS) - .until(() -> UserPreferences.getBackButtonGoToPage().equals(QueueFragment.TAG)); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_go_to_page)).perform(click()); - onView(withText(R.string.episodes_label)).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - Awaitility.await().atMost(1000, MILLISECONDS) - .until(() -> UserPreferences.getBackButtonBehavior() == UserPreferences.BackButtonBehavior.GO_TO_PAGE); - Awaitility.await().atMost(1000, MILLISECONDS) - .until(() -> UserPreferences.getBackButtonGoToPage().equals(AllEpisodesFragment.TAG)); - clickPreference(R.string.pref_back_button_behavior_title); - onView(withText(R.string.back_button_go_to_page)).perform(click()); - onView(withText(R.string.subscriptions_label)).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - Awaitility.await().atMost(1000, MILLISECONDS) - .until(() -> UserPreferences.getBackButtonBehavior() == UserPreferences.BackButtonBehavior.GO_TO_PAGE); - Awaitility.await().atMost(1000, MILLISECONDS) - .until(() -> UserPreferences.getBackButtonGoToPage().equals(SubscriptionFragment.TAG)); - } - @Test public void testDeleteRemovesFromQueue() { clickPreference(R.string.storage_pref); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java b/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java index 460dfdb3e..da323af76 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java @@ -33,7 +33,7 @@ public class QueueFragmentTest { public void setUp() { EspressoTestUtils.clearPreferences(); EspressoTestUtils.clearDatabase(); - EspressoTestUtils.setLastNavFragment(QueueFragment.TAG); + EspressoTestUtils.setLaunchScreen(QueueFragment.TAG); activityRule.launchActivity(new Intent()); } diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java index 5e570828c..d453af615 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -16,11 +16,9 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; -import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; import androidx.drawerlayout.widget.DrawerLayout; @@ -88,7 +86,6 @@ public class MainActivity extends CastEnabledActivity { private @Nullable ActionBarDrawerToggle drawerToggle; private View navDrawer; private LockableBottomSheetBehavior sheetBehavior; - private long lastBackButtonPressTime = 0; private RecyclerView.RecycledViewPool recycledViewPool = new RecyclerView.RecycledViewPool(); private int lastTheme = 0; @@ -117,17 +114,21 @@ public class MainActivity extends CastEnabledActivity { final FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentByTag(MAIN_FRAGMENT_TAG) == null) { - String lastFragment = NavDrawerFragment.getLastNavFragment(this); - if (ArrayUtils.contains(NavDrawerFragment.NAV_DRAWER_TAGS, lastFragment)) { - loadFragment(lastFragment, null); + if (!UserPreferences.DEFAULT_PAGE_REMEMBER.equals(UserPreferences.getDefaultPage())) { + loadFragment(UserPreferences.getDefaultPage(), null); } else { - try { - loadFeedFragmentById(Integer.parseInt(lastFragment), null); - } catch (NumberFormatException e) { - // it's not a number, this happens if we removed - // a label from the NAV_DRAWER_TAGS - // give them a nice default... - loadFragment(QueueFragment.TAG, null); + String lastFragment = NavDrawerFragment.getLastNavFragment(this); + if (ArrayUtils.contains(NavDrawerFragment.NAV_DRAWER_TAGS, lastFragment)) { + loadFragment(lastFragment, null); + } else { + try { + loadFeedFragmentById(Integer.parseInt(lastFragment), null); + } catch (NumberFormatException e) { + // it's not a number, this happens if we removed + // a label from the NAV_DRAWER_TAGS + // give them a nice default... + loadFragment(HomeFragment.TAG, null); + } } } } @@ -467,36 +468,12 @@ public class MainActivity extends CastEnabledActivity { } else if (getSupportFragmentManager().getBackStackEntryCount() != 0) { super.onBackPressed(); } else { - switch (UserPreferences.getBackButtonBehavior()) { - case OPEN_DRAWER: - if (drawerLayout != null) { // Tablet layout does not have drawer - drawerLayout.openDrawer(navDrawer); - } - break; - case SHOW_PROMPT: - new AlertDialog.Builder(this) - .setMessage(R.string.close_prompt) - .setPositiveButton(R.string.yes, (dialogInterface, i) -> MainActivity.super.onBackPressed()) - .setNegativeButton(R.string.no, null) - .setCancelable(false) - .show(); - break; - case DOUBLE_TAP: - if (lastBackButtonPressTime < System.currentTimeMillis() - 2000) { - Toast.makeText(this, R.string.double_tap_toast, Toast.LENGTH_SHORT).show(); - lastBackButtonPressTime = System.currentTimeMillis(); - } else { - super.onBackPressed(); - } - break; - case GO_TO_PAGE: - if (NavDrawerFragment.getLastNavFragment(this).equals(UserPreferences.getBackButtonGoToPage())) { - super.onBackPressed(); - } else { - loadFragment(UserPreferences.getBackButtonGoToPage(), null); - } - break; - default: super.onBackPressed(); + String toPage = UserPreferences.getDefaultPage(); + if (NavDrawerFragment.getLastNavFragment(this).equals(toPage) + || UserPreferences.DEFAULT_PAGE_REMEMBER.equals(toPage)) { + super.onBackPressed(); + } else { + loadFragment(toPage, null); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/DrawerPreferencesDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/DrawerPreferencesDialog.java new file mode 100644 index 000000000..9fa9e583d --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/dialog/DrawerPreferencesDialog.java @@ -0,0 +1,50 @@ +package de.danoeh.antennapod.dialog; + +import android.content.Context; +import androidx.appcompat.app.AlertDialog; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.fragment.NavDrawerFragment; + +import java.util.List; + +public class DrawerPreferencesDialog { + public static void show(Context context, Runnable callback) { + final List hiddenDrawerItems = UserPreferences.getHiddenDrawerItems(); + final String[] navTitles = context.getResources().getStringArray(R.array.nav_drawer_titles); + boolean[] checked = new boolean[NavDrawerFragment.NAV_DRAWER_TAGS.length]; + for (int i = 0; i < NavDrawerFragment.NAV_DRAWER_TAGS.length; i++) { + String tag = NavDrawerFragment.NAV_DRAWER_TAGS[i]; + if (!hiddenDrawerItems.contains(tag)) { + checked[i] = true; + } + } + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(R.string.drawer_preferences); + builder.setMultiChoiceItems(navTitles, checked, (dialog, which, isChecked) -> { + if (isChecked) { + hiddenDrawerItems.remove(NavDrawerFragment.NAV_DRAWER_TAGS[which]); + } else { + hiddenDrawerItems.add(NavDrawerFragment.NAV_DRAWER_TAGS[which]); + } + }); + builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { + UserPreferences.setHiddenDrawerItems(hiddenDrawerItems); + + if (hiddenDrawerItems.contains(UserPreferences.getDefaultPage())) { + for (String tag : NavDrawerFragment.NAV_DRAWER_TAGS) { + if (!hiddenDrawerItems.contains(tag)) { + UserPreferences.setDefaultPage(tag); + break; + } + } + } + + if (callback != null) { + callback.run(); + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java index 7d8cadd02..8339b050c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java @@ -16,7 +16,6 @@ import android.widget.ProgressBar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; -import androidx.appcompat.app.AlertDialog; import androidx.core.util.Pair; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; @@ -32,6 +31,7 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.NavDrawerData; +import de.danoeh.antennapod.dialog.DrawerPreferencesDialog; import de.danoeh.antennapod.dialog.RemoveFeedDialog; import de.danoeh.antennapod.dialog.RenameItemDialog; import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; @@ -219,35 +219,6 @@ public class NavDrawerFragment extends Fragment implements SharedPreferences.OnS loadData(); } - private void showDrawerPreferencesDialog() { - final List hiddenDrawerItems = UserPreferences.getHiddenDrawerItems(); - String[] navLabels = new String[NAV_DRAWER_TAGS.length]; - final boolean[] checked = new boolean[NAV_DRAWER_TAGS.length]; - for (int i = 0; i < NAV_DRAWER_TAGS.length; i++) { - String tag = NAV_DRAWER_TAGS[i]; - navLabels[i] = navAdapter.getLabel(tag); - if (!hiddenDrawerItems.contains(tag)) { - checked[i] = true; - } - } - - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(R.string.drawer_preferences); - builder.setMultiChoiceItems(navLabels, checked, (dialog, which, isChecked) -> { - if (isChecked) { - hiddenDrawerItems.remove(NAV_DRAWER_TAGS[which]); - } else { - hiddenDrawerItems.add(NAV_DRAWER_TAGS[which]); - } - }); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> { - UserPreferences.setHiddenDrawerItems(hiddenDrawerItems); - navAdapter.notifyDataSetChanged(); // Update selection - }); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - } - private final NavListAdapter.ItemAccess itemAccess = new NavListAdapter.ItemAccess() { @Override public int getCount() { @@ -367,7 +338,7 @@ public class NavDrawerFragment extends Fragment implements SharedPreferences.OnS @Override public boolean onItemLongClick(int position) { if (position < navAdapter.getFragmentTags().size()) { - showDrawerPreferencesDialog(); + DrawerPreferencesDialog.show(getContext(), () -> navAdapter.notifyDataSetChanged()); return true; } else { contextPressedItem = flatItemList.get(position - navAdapter.getSubscriptionOffset()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java index ff974179e..ef6dabe24 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java @@ -3,20 +3,19 @@ package de.danoeh.antennapod.fragment.preferences; import android.content.Context; import android.os.Build; import android.os.Bundle; -import com.google.android.material.snackbar.Snackbar; +import android.widget.ListView; import androidx.appcompat.app.AlertDialog; import androidx.core.app.ActivityCompat; import androidx.preference.PreferenceFragmentCompat; -import android.widget.ListView; +import com.google.android.material.snackbar.Snackbar; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.PreferenceActivity; -import de.danoeh.antennapod.event.PlayerStatusEvent; -import de.danoeh.antennapod.event.UnreadItemsUpdateEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; +import de.danoeh.antennapod.dialog.DrawerPreferencesDialog; import de.danoeh.antennapod.dialog.FeedSortDialog; -import de.danoeh.antennapod.fragment.NavDrawerFragment; -import org.apache.commons.lang3.ArrayUtils; +import de.danoeh.antennapod.dialog.SubscriptionsFilterDialog; +import de.danoeh.antennapod.event.PlayerStatusEvent; +import de.danoeh.antennapod.event.UnreadItemsUpdateEvent; import org.greenrobot.eventbus.EventBus; import java.util.List; @@ -55,7 +54,7 @@ public class UserInterfacePreferencesFragment extends PreferenceFragmentCompat { findPreference(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS) .setOnPreferenceClickListener(preference -> { - showDrawerPreferencesDialog(); + DrawerPreferencesDialog.show(getContext(), null); return true; }); @@ -64,31 +63,6 @@ public class UserInterfacePreferencesFragment extends PreferenceFragmentCompat { showNotificationButtonsDialog(); return true; }); - - findPreference(UserPreferences.PREF_BACK_BUTTON_BEHAVIOR) - .setOnPreferenceChangeListener((preference, newValue) -> { - if (!newValue.equals("page")) { - return true; - } - final Context context = getActivity(); - final String[] navTitles = context.getResources().getStringArray(R.array.back_button_go_to_pages); - final String[] navTags = context.getResources().getStringArray(R.array.back_button_go_to_pages_tags); - final String[] choice = { UserPreferences.getBackButtonGoToPage() }; - - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(R.string.back_button_go_to_page_title); - builder.setSingleChoiceItems(navTitles, ArrayUtils.indexOf(navTags, - UserPreferences.getBackButtonGoToPage()), (dialogInterface, i) -> { - if (i >= 0) { - choice[0] = navTags[i]; - } - }); - builder.setPositiveButton(R.string.confirm_label, (dialogInterface, i) -> UserPreferences.setBackButtonGoToPage(choice[0])); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - return true; - }); - findPreference(UserPreferences.PREF_FILTER_FEED) .setOnPreferenceClickListener((preference -> { SubscriptionsFilterDialog.showDialog(requireContext()); @@ -111,33 +85,6 @@ public class UserInterfacePreferencesFragment extends PreferenceFragmentCompat { } } - private void showDrawerPreferencesDialog() { - final Context context = getActivity(); - final List hiddenDrawerItems = UserPreferences.getHiddenDrawerItems(); - final String[] navTitles = context.getResources().getStringArray(R.array.nav_drawer_titles); - final String[] NAV_DRAWER_TAGS = NavDrawerFragment.NAV_DRAWER_TAGS; - boolean[] checked = new boolean[NavDrawerFragment.NAV_DRAWER_TAGS.length]; - for (int i = 0; i < NAV_DRAWER_TAGS.length; i++) { - String tag = NAV_DRAWER_TAGS[i]; - if (!hiddenDrawerItems.contains(tag)) { - checked[i] = true; - } - } - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(R.string.drawer_preferences); - builder.setMultiChoiceItems(navTitles, checked, (dialog, which, isChecked) -> { - if (isChecked) { - hiddenDrawerItems.remove(NAV_DRAWER_TAGS[which]); - } else { - hiddenDrawerItems.add(NAV_DRAWER_TAGS[which]); - } - }); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> - UserPreferences.setHiddenDrawerItems(hiddenDrawerItems)); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - } - private void showNotificationButtonsDialog() { final Context context = getActivity(); final List preferredButtons = UserPreferences.getCompactNotificationButtons(); diff --git a/app/src/main/res/xml/preferences_user_interface.xml b/app/src/main/res/xml/preferences_user_interface.xml index 59e7092a1..dd3810efc 100644 --- a/app/src/main/res/xml/preferences_user_interface.xml +++ b/app/src/main/res/xml/preferences_user_interface.xml @@ -77,12 +77,12 @@ + android:entryValues="@array/default_page_values" + android:entries="@array/default_page_titles" + android:key="prefDefaultPage" + android:title="@string/pref_default_page" + android:summary="@string/pref_default_page_sum" + android:defaultValue="HomeFragment"/> @string/skip_episode_label - - @string/back_button_default - @string/back_button_go_to_page - @string/back_button_open_drawer - @string/back_button_double_tap - @string/back_button_show_prompt - - - - default - page - drawer - doubletap - prompt + + HomeFragment + QueueFragment + InboxFragment + EpisodesFragment + SubscriptionFragment + remember - + @string/home_label @string/queue_label @string/inbox_label @string/episodes_label @string/subscriptions_label - - - - HomeFragment - QueueFragment - InboxFragment - EpisodesFragment - SubscriptionFragment + @string/remember_last_page diff --git a/ui/i18n/src/main/res/values/strings.xml b/ui/i18n/src/main/res/values/strings.xml index 4a233f6a4..d6b80f6fd 100644 --- a/ui/i18n/src/main/res/values/strings.xml +++ b/ui/i18n/src/main/res/values/strings.xml @@ -519,16 +519,9 @@ Switched to ExoPlayer. Skip Silence in Audio Behavior - Back Button Behavior - Change behavior of the back button. - Default - Open navigation drawer - Double tap to exit - Confirm to exit - Are you sure you want to close AntennaPod? - Tap back button again to exit - Go to pageā€¦ - Select page + Default Page + Screen that is opened when starting AntennaPod. + Remember last page Delete removes from Queue Automatically remove an episode from the queue when it is deleted. Subscription Filter -- cgit v1.2.3