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 69f5fb264..b5edcc878 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -186,16 +186,16 @@ public class MainActivity extends CastEnabledActivity { } }; - public void setupToolbarToggle(@Nullable Toolbar toolbar) { + public void setupToolbarToggle(@NonNull Toolbar toolbar, boolean displayUpArrow) { if (drawerLayout != null) { // Tablet layout does not have a drawer drawerLayout.removeDrawerListener(drawerToggle); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close); drawerLayout.addDrawerListener(drawerToggle); drawerToggle.syncState(); - drawerToggle.setDrawerIndicatorEnabled(getSupportFragmentManager().getBackStackEntryCount() == 0); + drawerToggle.setDrawerIndicatorEnabled(!displayUpArrow); drawerToggle.setToolbarNavigationClickListener(v -> getSupportFragmentManager().popBackStack()); - } else if (getSupportFragmentManager().getBackStackEntryCount() == 0) { + } else if (!displayUpArrow) { toolbar.setNavigationIcon(null); } else { toolbar.setNavigationIcon(ThemeUtils.getDrawableFromAttr(this, R.attr.homeAsUpIndicator)); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java index ed88214fe..08e23fc7f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java @@ -50,9 +50,11 @@ public class AddFeedFragment extends Fragment { public static final String TAG = "AddFeedFragment"; private static final int REQUEST_CODE_CHOOSE_OPML_IMPORT_PATH = 1; private static final int REQUEST_CODE_ADD_LOCAL_FOLDER = 2; + private static final String KEY_UP_ARROW = "up_arrow"; private AddfeedBinding viewBinding; private MainActivity activity; + private boolean displayUpArrow; @Override @Nullable @@ -64,7 +66,11 @@ public class AddFeedFragment extends Fragment { activity = (MainActivity) getActivity(); Toolbar toolbar = viewBinding.toolbar; - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); viewBinding.searchItunesButton.setOnClickListener(v -> activity.loadChildFragment(OnlineSearchFragment.newInstance(ItunesPodcastSearcher.class))); @@ -119,6 +125,12 @@ public class AddFeedFragment extends Fragment { return viewBinding.getRoot(); } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + private void showAddViaUrlDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); builder.setTitle(R.string.add_podcast_by_url); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java index ffb3e71fa..5c83cee57 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java @@ -28,16 +28,17 @@ public class DownloadsFragment extends PagedToolbarFragment { public static final String TAG = "DownloadsFragment"; public static final String ARG_SELECTED_TAB = "selected_tab"; + private static final String PREF_LAST_TAB_POSITION = "tab_position"; + private static final String KEY_UP_ARROW = "up_arrow"; public static final int POS_RUNNING = 0; private static final int POS_COMPLETED = 1; public static final int POS_LOG = 2; private static final int TOTAL_COUNT = 3; - private static final String PREF_LAST_TAB_POSITION = "tab_position"; - private ViewPager2 viewPager; private TabLayout tabLayout; + private boolean displayUpArrow; @Override public View onCreateView(@NonNull LayoutInflater inflater, @@ -48,7 +49,11 @@ public class DownloadsFragment extends PagedToolbarFragment { Toolbar toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(R.string.downloads_label); toolbar.inflateMenu(R.menu.downloads); - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); viewPager = root.findViewById(R.id.viewpager); viewPager.setAdapter(new DownloadsPagerAdapter(this)); @@ -81,6 +86,12 @@ public class DownloadsFragment extends PagedToolbarFragment { return root; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java index eff23f7a3..1ca5d524b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesFragment.java @@ -24,6 +24,7 @@ public class EpisodesFragment extends PagedToolbarFragment { public static final String TAG = "EpisodesFragment"; private static final String PREF_LAST_TAB_POSITION = "tab_position"; + private static final String KEY_UP_ARROW = "up_arrow"; private static final int POS_NEW_EPISODES = 0; private static final int POS_ALL_EPISODES = 1; @@ -31,6 +32,7 @@ public class EpisodesFragment extends PagedToolbarFragment { private static final int TOTAL_COUNT = 3; private TabLayout tabLayout; + private boolean displayUpArrow; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -44,7 +46,11 @@ public class EpisodesFragment extends PagedToolbarFragment { toolbar.setTitle(R.string.episodes_label); toolbar.inflateMenu(R.menu.episodes); MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), 0, ""); - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); ViewPager2 viewPager = rootView.findViewById(R.id.viewpager); viewPager.setAdapter(new EpisodesPagerAdapter(this)); @@ -88,6 +94,12 @@ public class EpisodesFragment extends PagedToolbarFragment { editor.apply(); } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + static class EpisodesPagerAdapter extends FragmentStateAdapter { EpisodesPagerAdapter(@NonNull Fragment fragment) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java index 0bfb63718..9e9bd2ca8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -88,6 +88,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem Toolbar.OnMenuItemClickListener { private static final String TAG = "ItemlistFragment"; private static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id"; + private static final String KEY_UP_ARROW = "up_arrow"; private FeedItemListAdapter adapter; private MoreContentListFooterUtil nextPageLoader; @@ -105,6 +106,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem private View header; private Toolbar toolbar; private ToolbarIconTintManager iconTintManager; + private boolean displayUpArrow; private long feedID; private Feed feed; @@ -145,7 +147,11 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem toolbar = root.findViewById(R.id.toolbar); toolbar.inflateMenu(R.menu.feedlist); toolbar.setOnMenuItemClickListener(this); - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); refreshToolbarState(); recyclerView = root.findViewById(R.id.recyclerView); @@ -230,6 +236,12 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem adapter = null; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + private final MenuItemUtils.UpdateRefreshMenuItemChecker updateRefreshMenuItemChecker = new MenuItemUtils.UpdateRefreshMenuItemChecker() { @Override public boolean isRefreshing() { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 973fcb978..e97b7cd7f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -41,6 +41,7 @@ import java.util.List; public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuItemClickListener { public static final String TAG = "PlaybackHistoryFragment"; + private static final String KEY_UP_ARROW = "up_arrow"; private List playbackHistory; private PlaybackHistoryListAdapter adapter; @@ -49,6 +50,7 @@ public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuI private EmptyViewHandler emptyView; private ProgressBar progressBar; private Toolbar toolbar; + private boolean displayUpArrow; @Override public void onCreate(Bundle savedInstanceState) { @@ -63,7 +65,11 @@ public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuI toolbar = root.findViewById(R.id.toolbar); toolbar.setTitle(R.string.playback_history_label); toolbar.setOnMenuItemClickListener(this); - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); toolbar.inflateMenu(R.menu.playback_history); refreshToolbarState(); @@ -98,6 +104,12 @@ public class PlaybackHistoryFragment extends Fragment implements Toolbar.OnMenuI } } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(FeedItemEvent event) { Log.d(TAG, "onEventMainThread() called with: " + "event = [" + event + "]"); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 983bf4de1..2850acc15 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -12,6 +12,7 @@ import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; @@ -67,6 +68,7 @@ import static de.danoeh.antennapod.dialog.EpisodesApplyActionFragment.ACTION_REM */ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickListener { public static final String TAG = "QueueFragment"; + private static final String KEY_UP_ARROW = "up_arrow"; private TextView infoBar; private EpisodeItemListRecyclerView recyclerView; @@ -74,6 +76,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi private EmptyViewHandler emptyView; private ProgressBar progLoading; private Toolbar toolbar; + private boolean displayUpArrow; private List queue; @@ -420,7 +423,11 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi View root = inflater.inflate(R.layout.queue_fragment, container, false); toolbar = root.findViewById(R.id.toolbar); toolbar.setOnMenuItemClickListener(this); - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); toolbar.inflateMenu(R.menu.queue); MenuItemUtils.setupSearchItem(toolbar.getMenu(), (MainActivity) getActivity(), 0, ""); refreshToolbarState(); @@ -530,6 +537,12 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi return root; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + private void onFragmentLoaded(final boolean restoreScrollPosition) { if (queue != null && queue.size() > 0) { if (recyclerAdapter == null) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java index 4735cab42..470d815c3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.widget.ProgressBar; +import androidx.annotation.NonNull; import androidx.annotation.StringRes; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; @@ -66,6 +67,8 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem public static final String TAG = "SubscriptionFragment"; private static final String PREFS = "SubscriptionFragment"; private static final String PREF_NUM_COLUMNS = "columns"; + private static final String KEY_UP_ARROW = "up_arrow"; + private static final int MIN_NUM_COLUMNS = 2; private static final int[] COLUMN_CHECKBOX_IDS = { R.id.subscription_num_columns_2, @@ -84,6 +87,7 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem private int mPosition = -1; private boolean isUpdatingFeeds = false; + private boolean displayUpArrow; private Disposable disposable; private SharedPreferences prefs; @@ -102,7 +106,11 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem View root = inflater.inflate(R.layout.fragment_subscriptions, container, false); toolbar = root.findViewById(R.id.toolbar); toolbar.setOnMenuItemClickListener(this); - ((MainActivity) getActivity()).setupToolbarToggle(toolbar); + displayUpArrow = getParentFragmentManager().getBackStackEntryCount() != 0; + if (savedInstanceState != null) { + displayUpArrow = savedInstanceState.getBoolean(KEY_UP_ARROW); + } + ((MainActivity) getActivity()).setupToolbarToggle(toolbar, displayUpArrow); toolbar.inflateMenu(R.menu.subscriptions); for (int i = 0; i < COLUMN_CHECKBOX_IDS.length; i++) { // Do this in Java to localize numbers @@ -129,6 +137,12 @@ public class SubscriptionFragment extends Fragment implements Toolbar.OnMenuItem return root; } + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + outState.putBoolean(KEY_UP_ARROW, displayUpArrow); + super.onSaveInstanceState(outState); + } + private void refreshToolbarState() { int columns = prefs.getInt(PREF_NUM_COLUMNS, getDefaultNumOfColumns()); toolbar.getMenu().findItem(COLUMN_CHECKBOX_IDS[columns - MIN_NUM_COLUMNS]).setChecked(true);