diff options
author | ByteHamster <ByteHamster@users.noreply.github.com> | 2022-09-10 16:09:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-10 16:09:26 +0200 |
commit | ad9de4467bac4b8ca235010a6b8532621c3a03e1 (patch) | |
tree | cdcf5bcf47166ef4072b657372204e7456c55cba | |
parent | 5ace16b31bdbed175c4f65a14a15bd7f133ba504 (diff) | |
download | AntennaPod-ad9de4467bac4b8ca235010a6b8532621c3a03e1.zip |
Add 'default screen' setting (replaces 'back button behavior') (#6041)
13 files changed, 114 insertions, 327 deletions
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; @@ -504,35 +501,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); if (!UserPreferences.shouldDeleteRemoveFromQueue()) { 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<String> 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<String> 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<String> 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<Integer> 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 @@ </PreferenceCategory> <PreferenceCategory android:title="@string/behavior"> <ListPreference - android:entryValues="@array/back_button_behavior_values" - android:entries="@array/back_button_behavior_options" - android:key="prefBackButtonBehavior" - android:title="@string/pref_back_button_behavior_title" - android:summary="@string/pref_back_button_behavior_sum" - android:defaultValue="default"/> + 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"/> <Preference android:key="prefSwipe" android:summary="@string/swipeactions_summary" diff --git a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java index 47a447021..f0227ae7b 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java +++ b/core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java @@ -61,8 +61,7 @@ public class UserPreferences { public static final String PREF_LOCKSCREEN_BACKGROUND = "prefLockscreenBackground"; private static final String PREF_SHOW_DOWNLOAD_REPORT = "prefShowDownloadReport"; private static final String PREF_SHOW_AUTO_DOWNLOAD_REPORT = "prefShowAutoDownloadReport"; - public static final String PREF_BACK_BUTTON_BEHAVIOR = "prefBackButtonBehavior"; - private static final String PREF_BACK_BUTTON_GO_TO_PAGE = "prefBackButtonGoToPage"; + public static final String PREF_DEFAULT_PAGE = "prefDefaultPage"; public static final String PREF_FILTER_FEED = "prefSubscriptionsFilter"; public static final String PREF_SUBSCRIPTION_TITLE = "prefSubscriptionTitle"; @@ -137,6 +136,7 @@ public class UserPreferences { public static final int FEED_ORDER_COUNTER = 0; public static final int FEED_ORDER_ALPHABETICAL = 1; public static final int FEED_ORDER_MOST_PLAYED = 3; + public static final String DEFAULT_PAGE_REMEMBER = "remember"; private static Context context; private static SharedPreferences prefs; @@ -901,29 +901,12 @@ public class UserPreferences { return getUpdateTimeOfDay().length == 2; } - public enum BackButtonBehavior { - DEFAULT, OPEN_DRAWER, DOUBLE_TAP, SHOW_PROMPT, GO_TO_PAGE + public static String getDefaultPage() { + return prefs.getString(PREF_DEFAULT_PAGE, "HomeFragment"); } - public static BackButtonBehavior getBackButtonBehavior() { - switch (prefs.getString(PREF_BACK_BUTTON_BEHAVIOR, "default")) { - case "drawer": return BackButtonBehavior.OPEN_DRAWER; - case "doubletap": return BackButtonBehavior.DOUBLE_TAP; - case "prompt": return BackButtonBehavior.SHOW_PROMPT; - case "page": return BackButtonBehavior.GO_TO_PAGE; - case "default": // Deliberate fall-through - default: return BackButtonBehavior.DEFAULT; - } - } - - public static String getBackButtonGoToPage() { - return prefs.getString(PREF_BACK_BUTTON_GO_TO_PAGE, "QueueFragment"); - } - - public static void setBackButtonGoToPage(String tag) { - prefs.edit() - .putString(PREF_BACK_BUTTON_GO_TO_PAGE, tag) - .apply(); + public static void setDefaultPage(String defaultPage) { + prefs.edit().putString(PREF_DEFAULT_PAGE, defaultPage).apply(); } public static boolean timeRespectsSpeed() { diff --git a/core/src/main/res/values/arrays.xml b/core/src/main/res/values/arrays.xml index 0ff5df376..0ae8cf96e 100644 --- a/core/src/main/res/values/arrays.xml +++ b/core/src/main/res/values/arrays.xml @@ -263,35 +263,21 @@ <item>@string/skip_episode_label</item> </string-array> - <string-array name="back_button_behavior_options"> - <item>@string/back_button_default</item> - <item>@string/back_button_go_to_page</item> - <item>@string/back_button_open_drawer</item> - <item>@string/back_button_double_tap</item> - <item>@string/back_button_show_prompt</item> - </string-array> - - <string-array name="back_button_behavior_values"> - <item>default</item> - <item>page</item> - <item>drawer</item> - <item>doubletap</item> - <item>prompt</item> + <string-array name="default_page_values"> + <item>HomeFragment</item> + <item>QueueFragment</item> + <item>InboxFragment</item> + <item>EpisodesFragment</item> + <item>SubscriptionFragment</item> + <item>remember</item> </string-array> - <string-array name="back_button_go_to_pages"> + <string-array name="default_page_titles"> <item>@string/home_label</item> <item>@string/queue_label</item> <item>@string/inbox_label</item> <item>@string/episodes_label</item> <item>@string/subscriptions_label</item> - </string-array> - - <string-array name="back_button_go_to_pages_tags"> - <item>HomeFragment</item> - <item>QueueFragment</item> - <item>InboxFragment</item> - <item>EpisodesFragment</item> - <item>SubscriptionFragment</item> + <item>@string/remember_last_page</item> </string-array> </resources> 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 @@ <string name="media_player_switched_to_exoplayer">Switched to ExoPlayer.</string> <string name="pref_skip_silence_title">Skip Silence in Audio</string> <string name="behavior">Behavior</string> - <string name="pref_back_button_behavior_title">Back Button Behavior</string> - <string name="pref_back_button_behavior_sum">Change behavior of the back button.</string> - <string name="back_button_default">Default</string> - <string name="back_button_open_drawer">Open navigation drawer</string> - <string name="back_button_double_tap">Double tap to exit</string> - <string name="back_button_show_prompt">Confirm to exit</string> - <string name="close_prompt">Are you sure you want to close AntennaPod?</string> - <string name="double_tap_toast">Tap back button again to exit</string> - <string name="back_button_go_to_page">Go to pageā¦</string> - <string name="back_button_go_to_page_title">Select page</string> + <string name="pref_default_page">Default Page</string> + <string name="pref_default_page_sum">Screen that is opened when starting AntennaPod.</string> + <string name="remember_last_page">Remember last page</string> <string name="pref_delete_removes_from_queue_title">Delete removes from Queue</string> <string name="pref_delete_removes_from_queue_sum">Automatically remove an episode from the queue when it is deleted.</string> <string name="pref_filter_feed_title">Subscription Filter</string> |