Fix back stack being cleared after searching (#7757)

This commit is contained in:
ByteHamster
2025-04-13 22:20:42 +02:00
committed by GitHub
parent 74def18a48
commit d95e03b51b
11 changed files with 17 additions and 28 deletions

View File

@ -99,7 +99,6 @@ public class MainActivity extends CastEnabledActivity {
public static final String EXTRA_FEED_ID = "fragment_feed_id"; public static final String EXTRA_FEED_ID = "fragment_feed_id";
public static final String EXTRA_REFRESH_ON_START = "refresh_on_start"; public static final String EXTRA_REFRESH_ON_START = "refresh_on_start";
public static final String EXTRA_ADD_TO_BACK_STACK = "add_to_back_stack";
public static final String KEY_GENERATED_VIEW_ID = "generated_view_id"; public static final String KEY_GENERATED_VIEW_ID = "generated_view_id";
private @Nullable DrawerLayout drawerLayout; private @Nullable DrawerLayout drawerLayout;
@ -666,11 +665,10 @@ public class MainActivity extends CastEnabledActivity {
long feedId = intent.getLongExtra(EXTRA_FEED_ID, 0); long feedId = intent.getLongExtra(EXTRA_FEED_ID, 0);
Bundle args = intent.getBundleExtra(MainActivityStarter.EXTRA_FRAGMENT_ARGS); Bundle args = intent.getBundleExtra(MainActivityStarter.EXTRA_FRAGMENT_ARGS);
if (feedId > 0) { if (feedId > 0) {
boolean addToBackStack = intent.getBooleanExtra(EXTRA_ADD_TO_BACK_STACK, false); if (intent.getBooleanExtra(MainActivityStarter.EXTRA_CLEAR_BACK_STACK, false)) {
if (addToBackStack) {
loadChildFragment(FeedItemlistFragment.newInstance(feedId));
} else {
loadFeedFragmentById(feedId, args); loadFeedFragmentById(feedId, args);
} else {
loadChildFragment(FeedItemlistFragment.newInstance(feedId));
} }
} }
sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
@ -678,10 +676,10 @@ public class MainActivity extends CastEnabledActivity {
String tag = intent.getStringExtra(MainActivityStarter.EXTRA_FRAGMENT_TAG); String tag = intent.getStringExtra(MainActivityStarter.EXTRA_FRAGMENT_TAG);
Bundle args = intent.getBundleExtra(MainActivityStarter.EXTRA_FRAGMENT_ARGS); Bundle args = intent.getBundleExtra(MainActivityStarter.EXTRA_FRAGMENT_ARGS);
if (tag != null) { if (tag != null) {
if (intent.getBooleanExtra(MainActivityStarter.EXTRA_ADD_TO_BACK_STACK, false)) { if (intent.getBooleanExtra(MainActivityStarter.EXTRA_CLEAR_BACK_STACK, false)) {
loadChildFragment(createFragmentInstance(tag, args));
} else {
loadFragment(tag, null); loadFragment(tag, null);
} else {
loadChildFragment(createFragmentInstance(tag, args));
} }
} }
sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);

View File

@ -385,6 +385,7 @@ public class NavDrawerFragment extends Fragment implements SharedPreferences.OnS
if (UserPreferences.getHiddenDrawerItems().contains(getLastNavFragment(getContext()))) { if (UserPreferences.getHiddenDrawerItems().contains(getLastNavFragment(getContext()))) {
new MainActivityStarter(getContext()) new MainActivityStarter(getContext())
.withFragmentLoaded(UserPreferences.getDefaultPage()) .withFragmentLoaded(UserPreferences.getDefaultPage())
.withClearBackStack()
.withDrawerOpen() .withDrawerOpen()
.start(); .start();
} }

View File

@ -254,6 +254,7 @@ public class FeedInfoFragment extends Fragment implements MaterialToolbar.OnMenu
DBWriter.setFeedState(getContext(), feed, Feed.STATE_SUBSCRIBED); DBWriter.setFeedState(getContext(), feed, Feed.STATE_SUBSCRIBED);
MainActivityStarter mainActivityStarter = new MainActivityStarter(getContext()); MainActivityStarter mainActivityStarter = new MainActivityStarter(getContext());
mainActivityStarter.withOpenFeed(feed.getId()); mainActivityStarter.withOpenFeed(feed.getId());
mainActivityStarter.withClearBackStack();
getActivity().finish(); getActivity().finish();
startActivity(mainActivityStarter.getIntent()); startActivity(mainActivityStarter.getIntent());
}); });

View File

@ -59,7 +59,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import static de.danoeh.antennapod.ui.appstartintent.OnlineFeedviewActivityStarter.ARG_FEEDURL; import static de.danoeh.antennapod.ui.appstartintent.OnlineFeedviewActivityStarter.ARG_FEEDURL;
import static de.danoeh.antennapod.ui.appstartintent.OnlineFeedviewActivityStarter.ARG_STARTED_FROM_SEARCH;
import static de.danoeh.antennapod.ui.appstartintent.OnlineFeedviewActivityStarter.ARG_WAS_MANUAL_URL; import static de.danoeh.antennapod.ui.appstartintent.OnlineFeedviewActivityStarter.ARG_WAS_MANUAL_URL;
/** /**
@ -358,9 +357,6 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
// feed.getId() is always 0, we have to retrieve the id from the feed list from the database // feed.getId() is always 0, we have to retrieve the id from the feed list from the database
MainActivityStarter mainActivityStarter = new MainActivityStarter(this); MainActivityStarter mainActivityStarter = new MainActivityStarter(this);
mainActivityStarter.withOpenFeed(feedId); mainActivityStarter.withOpenFeed(feedId);
if (getIntent().getBooleanExtra(ARG_STARTED_FROM_SEARCH, false)) {
mainActivityStarter.withAddToBackStack();
}
finish(); finish();
startActivity(mainActivityStarter.getIntent()); startActivity(mainActivityStarter.getIntent());
} }

View File

@ -211,7 +211,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (showVideoPlayer) { if (showVideoPlayer) {
return new VideoPlayerActivityStarter(context).getIntent(); return new VideoPlayerActivityStarter(context).getIntent();
} else { } else {
return new MainActivityStarter(context).withOpenPlayer().getIntent(); return new MainActivityStarter(context).withClearBackStack().withOpenPlayer().getIntent();
} }
} }
@ -223,7 +223,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
if (media.getMediaType() == MediaType.VIDEO && !isCasting) { if (media.getMediaType() == MediaType.VIDEO && !isCasting) {
return new VideoPlayerActivityStarter(context).getIntent(); return new VideoPlayerActivityStarter(context).getIntent();
} else { } else {
return new MainActivityStarter(context).withOpenPlayer().getIntent(); return new MainActivityStarter(context).withClearBackStack().withOpenPlayer().getIntent();
} }
} }

View File

@ -14,7 +14,7 @@ public class MainActivityStarter {
public static final String INTENT = "de.danoeh.antennapod.intents.MAIN_ACTIVITY"; public static final String INTENT = "de.danoeh.antennapod.intents.MAIN_ACTIVITY";
public static final String EXTRA_OPEN_PLAYER = "open_player"; public static final String EXTRA_OPEN_PLAYER = "open_player";
public static final String EXTRA_FEED_ID = "fragment_feed_id"; public static final String EXTRA_FEED_ID = "fragment_feed_id";
public static final String EXTRA_ADD_TO_BACK_STACK = "add_to_back_stack"; public static final String EXTRA_CLEAR_BACK_STACK = "clear_back_stack";
public static final String EXTRA_FRAGMENT_TAG = "fragment_tag"; public static final String EXTRA_FRAGMENT_TAG = "fragment_tag";
public static final String EXTRA_OPEN_DRAWER = "open_drawer"; public static final String EXTRA_OPEN_DRAWER = "open_drawer";
public static final String EXTRA_OPEN_DOWNLOAD_LOGS = "open_download_logs"; public static final String EXTRA_OPEN_DOWNLOAD_LOGS = "open_download_logs";
@ -56,8 +56,8 @@ public class MainActivityStarter {
return this; return this;
} }
public MainActivityStarter withAddToBackStack() { public MainActivityStarter withClearBackStack() {
intent.putExtra(EXTRA_ADD_TO_BACK_STACK, true); intent.putExtra(EXTRA_CLEAR_BACK_STACK, true);
return this; return this;
} }

View File

@ -7,7 +7,6 @@ public class OnlineFeedviewActivityStarter {
public static final String INTENT = "de.danoeh.antennapod.intents.ONLINE_FEEDVIEW"; public static final String INTENT = "de.danoeh.antennapod.intents.ONLINE_FEEDVIEW";
public static final String ARG_FEEDURL = "arg.feedurl"; public static final String ARG_FEEDURL = "arg.feedurl";
public static final String ARG_WAS_MANUAL_URL = "manual_url"; public static final String ARG_WAS_MANUAL_URL = "manual_url";
public static final String ARG_STARTED_FROM_SEARCH = "started_from_search";
private final Intent intent; private final Intent intent;
public OnlineFeedviewActivityStarter(Context context, String feedUrl) { public OnlineFeedviewActivityStarter(Context context, String feedUrl) {
@ -16,11 +15,6 @@ public class OnlineFeedviewActivityStarter {
intent.putExtra(ARG_FEEDURL, feedUrl); intent.putExtra(ARG_FEEDURL, feedUrl);
} }
public OnlineFeedviewActivityStarter withStartedFromSearch() {
intent.putExtra(ARG_STARTED_FROM_SEARCH, true);
return this;
}
public OnlineFeedviewActivityStarter withManualUrl() { public OnlineFeedviewActivityStarter withManualUrl() {
intent.putExtra(ARG_WAS_MANUAL_URL, true); intent.putExtra(ARG_WAS_MANUAL_URL, true);
return this; return this;

View File

@ -97,8 +97,7 @@ public class OnlineSearchFragment extends Fragment {
//Show information about the podcast when the list item is clicked //Show information about the podcast when the list item is clicked
gridView.setOnItemClickListener((parent, view1, position, id) -> { gridView.setOnItemClickListener((parent, view1, position, id) -> {
PodcastSearchResult podcast = searchResults.get(position); PodcastSearchResult podcast = searchResults.get(position);
startActivity(new OnlineFeedviewActivityStarter(getContext(), podcast.feedUrl) startActivity(new OnlineFeedviewActivityStarter(getContext(), podcast.feedUrl).getIntent());
.withStartedFromSearch().getIntent());
}); });
progressBar = root.findViewById(R.id.progressBar); progressBar = root.findViewById(R.id.progressBar);
txtvError = root.findViewById(R.id.txtvError); txtvError = root.findViewById(R.id.txtvError);

View File

@ -47,7 +47,6 @@ public class QuickFeedDiscoveryFragment extends Fragment implements AdapterView.
viewBinding = QuickFeedDiscoveryBinding.inflate(inflater); viewBinding = QuickFeedDiscoveryBinding.inflate(inflater);
viewBinding.discoverMore.setOnClickListener(v -> startActivity(new MainActivityStarter(getContext()) viewBinding.discoverMore.setOnClickListener(v -> startActivity(new MainActivityStarter(getContext())
.withFragmentLoaded(DiscoveryFragment.TAG) .withFragmentLoaded(DiscoveryFragment.TAG)
.withAddToBackStack()
.getIntent())); .getIntent()));
adapter = new FeedDiscoverAdapter(getActivity()); adapter = new FeedDiscoverAdapter(getActivity());

View File

@ -31,7 +31,7 @@ public class FeedStatisticsDialogFragment extends DialogFragment {
dialog.setPositiveButton(android.R.string.ok, null); dialog.setPositiveButton(android.R.string.ok, null);
dialog.setNeutralButton(R.string.open_podcast, (dialogInterface, i) -> { dialog.setNeutralButton(R.string.open_podcast, (dialogInterface, i) -> {
long feedId = getArguments().getLong(EXTRA_FEED_ID); long feedId = getArguments().getLong(EXTRA_FEED_ID);
new MainActivityStarter(getContext()).withOpenFeed(feedId).withAddToBackStack().start(); new MainActivityStarter(getContext()).withOpenFeed(feedId).start();
}); });
dialog.setTitle(getArguments().getString(EXTRA_FEED_TITLE)); dialog.setTitle(getArguments().getString(EXTRA_FEED_TITLE));
dialog.setView(R.layout.feed_statistics_dialog); dialog.setView(R.layout.feed_statistics_dialog);

View File

@ -69,7 +69,8 @@ public abstract class WidgetUpdater {
if (widgetState.media != null && widgetState.media.getMediaType() == MediaType.VIDEO) { if (widgetState.media != null && widgetState.media.getMediaType() == MediaType.VIDEO) {
startMediaPlayer = new VideoPlayerActivityStarter(context).getPendingIntent(); startMediaPlayer = new VideoPlayerActivityStarter(context).getPendingIntent();
} else { } else {
startMediaPlayer = new MainActivityStarter(context).withOpenPlayer().getPendingIntent(); startMediaPlayer = new MainActivityStarter(context)
.withOpenPlayer().withClearBackStack().getPendingIntent();
} }
PendingIntent startPlaybackSpeedDialog = new PlaybackSpeedActivityStarter(context).getPendingIntent(); PendingIntent startPlaybackSpeedDialog = new PlaybackSpeedActivityStarter(context).getPendingIntent();