summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2022-09-10 16:09:26 +0200
committerGitHub <noreply@github.com>2022-09-10 16:09:26 +0200
commitad9de4467bac4b8ca235010a6b8532621c3a03e1 (patch)
treecdcf5bcf47166ef4072b657372204e7456c55cba
parent5ace16b31bdbed175c4f65a14a15bd7f133ba504 (diff)
downloadAntennaPod-ad9de4467bac4b8ca235010a6b8532621c3a03e1.zip
Add 'default screen' setting (replaces 'back button behavior') (#6041)
-rw-r--r--app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java6
-rw-r--r--app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java100
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java32
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java63
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/DrawerPreferencesDialog.java50
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java33
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/UserInterfacePreferencesFragment.java67
-rw-r--r--app/src/main/res/xml/preferences_user_interface.xml12
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/preferences/UserPreferences.java29
-rw-r--r--core/src/main/res/values/arrays.xml32
-rw-r--r--ui/i18n/src/main/res/values/strings.xml13
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>