diff options
Diffstat (limited to 'app')
14 files changed, 60 insertions, 56 deletions
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 29cea18dc..3c32407a5 100644 --- a/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java +++ b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java @@ -3,27 +3,23 @@ package de.test.antennapod.dialogs; import android.content.Context; import android.content.Intent; import android.view.View; - -import org.hamcrest.Matcher; -import org.hamcrest.Matchers; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - import androidx.test.espresso.intent.rule.IntentsTestRule; -import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.fragment.EpisodesFragment; import de.test.antennapod.EspressoTestUtils; import de.test.antennapod.ui.UITestUtils; +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.action.ViewActions.scrollTo; -import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition; import static androidx.test.espresso.matcher.ViewMatchers.hasMinimumChildCount; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; @@ -45,7 +41,6 @@ public class ShareDialogTest { @Rule public IntentsTestRule<MainActivity> activityRule = new IntentsTestRule<>(MainActivity.class, false, false); - private UITestUtils uiTestUtils; protected Context context; @Before @@ -54,7 +49,7 @@ public class ShareDialogTest { EspressoTestUtils.clearPreferences(); EspressoTestUtils.clearDatabase(); EspressoTestUtils.setLastNavFragment(EpisodesFragment.TAG); - uiTestUtils = new UITestUtils(context); + UITestUtils uiTestUtils = new UITestUtils(context); uiTestUtils.setup(); uiTestUtils.addLocalFeedData(true); @@ -73,15 +68,9 @@ public class ShareDialogTest { } @Test - public void testShareDialogDisplayed() throws InterruptedException { + public void testShareDialogDisplayed() { onView(withText(R.string.share_label)).perform(click()); onView(allOf(isDisplayed(), withText(R.string.share_label))); } - @Test - public void testShareDialogCancelButton() { - onView(withText(R.string.share_label)).perform(scrollTo()).perform(click()); - onView(withText(R.string.cancel_label)).check(matches(isDisplayed())).perform(scrollTo()).perform(click()); - } - } diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java index dbd4cdb59..79a2d0005 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/ShareDialog.java @@ -1,21 +1,19 @@ package de.danoeh.antennapod.dialog; -import android.app.Dialog; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; +import android.view.LayoutInflater; import android.view.View; - +import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.DialogFragment; -import de.danoeh.antennapod.R; +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import de.danoeh.antennapod.core.util.ShareUtils; import de.danoeh.antennapod.databinding.ShareEpisodeDialogBinding; import de.danoeh.antennapod.model.feed.FeedItem; -import de.danoeh.antennapod.core.util.ShareUtils; -public class ShareDialog extends DialogFragment { +public class ShareDialog extends BottomSheetDialogFragment { private static final String ARGUMENT_FEED_ITEM = "feedItem"; private static final String PREF_NAME = "ShareDialog"; private static final String PREF_SHARE_EPISODE_START_AT = "prefShareEpisodeStartAt"; @@ -39,25 +37,23 @@ public class ShareDialog extends DialogFragment { return dialog; } - @NonNull + @Nullable @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { if (getArguments() != null) { ctx = getActivity(); item = (FeedItem) getArguments().getSerializable(ARGUMENT_FEED_ITEM); prefs = getActivity().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE); } - viewBinding = ShareEpisodeDialogBinding.inflate(getLayoutInflater()); + viewBinding = ShareEpisodeDialogBinding.inflate(inflater); viewBinding.shareDialogRadioGroup.setOnCheckedChangeListener((group, checkedId) -> viewBinding.sharePositionCheckbox.setEnabled(checkedId == viewBinding.shareSocialRadio.getId())); - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); - builder.setTitle(R.string.share_label); - builder.setView(viewBinding.getRoot()); setupOptions(); - builder.setPositiveButton(R.string.share_label, (dialog, id) -> { + viewBinding.shareButton.setOnClickListener((v) -> { boolean includePlaybackPosition = viewBinding.sharePositionCheckbox.isChecked(); int position; if (viewBinding.shareSocialRadio.isChecked()) { @@ -76,9 +72,9 @@ public class ShareDialog extends DialogFragment { .putBoolean(PREF_SHARE_EPISODE_START_AT, includePlaybackPosition) .putInt(PREF_SHARE_EPISODE_TYPE, position) .apply(); - }).setNegativeButton(R.string.cancel_label, (dialog, id) -> dialog.dismiss()); - - return builder.create(); + dismiss(); + }); + return viewBinding.getRoot(); } private void setupOptions() { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index a0722f0f0..18c5d8514 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -12,7 +12,6 @@ import android.widget.ProgressBar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; -import androidx.core.util.ObjectsCompat; import androidx.fragment.app.Fragment; import com.google.android.material.snackbar.Snackbar; import com.leinardi.android.speeddial.SpeedDialView; @@ -48,6 +47,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -188,7 +188,7 @@ public class CompletedDownloadsFragment extends Fragment if (event.hasChangedFeedUpdateStatus(isUpdatingFeeds)) { refreshToolbarState(); } - if (!ObjectsCompat.equals(event.update.mediaIds, runningDownloads)) { + if (!Arrays.equals(event.update.mediaIds, runningDownloads)) { runningDownloads = event.update.mediaIds; loadItems(); return; // Refreshed anyway diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/AddToQueueSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/AddToQueueSwipeAction.java index 514ba9764..3580121df 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/AddToQueueSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/AddToQueueSwipeAction.java @@ -41,7 +41,7 @@ public class AddToQueueSwipeAction implements SwipeAction { } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return filter.showQueued || filter.showNew; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java index 767f5c6c1..a4c69eb2b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/DeleteSwipeAction.java @@ -31,11 +31,14 @@ public class DeleteSwipeAction implements SwipeAction { @Override public void performAction(FeedItem item, Fragment fragment, FeedItemFilter filter) { + if (!item.isDownloaded()) { + return; + } DBWriter.deleteFeedMediaOfItem(fragment.requireContext(), item.getMedia().getId()); } @Override - public boolean willRemove(FeedItemFilter filter) { - return filter.showDownloaded; + public boolean willRemove(FeedItemFilter filter, FeedItem item) { + return filter.showDownloaded && item.isDownloaded(); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/MarkFavoriteSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/MarkFavoriteSwipeAction.java index 2458657a0..162003fab 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/MarkFavoriteSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/MarkFavoriteSwipeAction.java @@ -37,7 +37,7 @@ public class MarkFavoriteSwipeAction implements SwipeAction { } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return filter.showIsFavorite || filter.showNotFavorite; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromInboxSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromInboxSwipeAction.java index df1ef42c1..41d79a711 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromInboxSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromInboxSwipeAction.java @@ -34,12 +34,12 @@ public class RemoveFromInboxSwipeAction implements SwipeAction { @Override public void performAction(FeedItem item, Fragment fragment, FeedItemFilter filter) { if (item.isNew()) { - FeedItemMenuHandler.markReadWithUndo(fragment, item, FeedItem.UNPLAYED, willRemove(filter)); + FeedItemMenuHandler.markReadWithUndo(fragment, item, FeedItem.UNPLAYED, willRemove(filter, item)); } } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return filter.showNew; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromQueueSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromQueueSwipeAction.java index 87cf97f56..9687ab643 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromQueueSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/RemoveFromQueueSwipeAction.java @@ -41,7 +41,7 @@ public class RemoveFromQueueSwipeAction implements SwipeAction { DBWriter.removeQueueItem(fragment.requireActivity(), true, item); - if (willRemove(filter)) { + if (willRemove(filter, item)) { ((MainActivity) fragment.requireActivity()).showSnackbarAbovePlayer( fragment.getResources().getQuantityString(R.plurals.removed_from_queue_batch_label, 1, 1), Snackbar.LENGTH_LONG) @@ -51,7 +51,7 @@ public class RemoveFromQueueSwipeAction implements SwipeAction { } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return filter.showQueued || filter.showNotQueued; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/ShowFirstSwipeDialogAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/ShowFirstSwipeDialogAction.java index 7d626134d..3a6174e8f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/ShowFirstSwipeDialogAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/ShowFirstSwipeDialogAction.java @@ -36,7 +36,7 @@ public class ShowFirstSwipeDialogAction implements SwipeAction { } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return false; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/StartDownloadSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/StartDownloadSwipeAction.java index 2c0110822..84dc8f417 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/StartDownloadSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/StartDownloadSwipeAction.java @@ -38,7 +38,7 @@ public class StartDownloadSwipeAction implements SwipeAction { } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return false; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeAction.java index 23bf99a55..89360fdeb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeAction.java @@ -31,5 +31,5 @@ public interface SwipeAction { void performAction(FeedItem item, Fragment fragment, FeedItemFilter filter); - boolean willRemove(FeedItemFilter filter); + boolean willRemove(FeedItemFilter filter, FeedItem item); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeActions.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeActions.java index 726c1de1a..be35f6503 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeActions.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/SwipeActions.java @@ -158,8 +158,9 @@ public class SwipeActions extends ItemTouchHelper.SimpleCallback implements Life } //check if it will be removed - boolean rightWillRemove = right.willRemove(filter); - boolean leftWillRemove = left.willRemove(filter); + FeedItem item = ((EpisodeItemViewHolder) viewHolder).getFeedItem(); + boolean rightWillRemove = right.willRemove(filter, item); + boolean leftWillRemove = left.willRemove(filter, item); boolean wontLeave = (dx > 0 && !rightWillRemove) || (dx < 0 && !leftWillRemove); //Limit swipe if it's not removed @@ -251,7 +252,7 @@ public class SwipeActions extends ItemTouchHelper.SimpleCallback implements Life String[] actions = prefs.split(","); if (actions.length == 2) { this.right = Stream.of(swipeActions) - .filter(a -> a.getId().equals(actions[0])).single();; + .filter(a -> a.getId().equals(actions[0])).single(); this.left = Stream.of(swipeActions) .filter(a -> a.getId().equals(actions[1])).single(); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/TogglePlaybackStateSwipeAction.java b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/TogglePlaybackStateSwipeAction.java index 4ff07d13c..d4ce8b1d2 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/TogglePlaybackStateSwipeAction.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/swipeactions/TogglePlaybackStateSwipeAction.java @@ -34,11 +34,11 @@ public class TogglePlaybackStateSwipeAction implements SwipeAction { @Override public void performAction(FeedItem item, Fragment fragment, FeedItemFilter filter) { int newState = item.getPlayState() == FeedItem.UNPLAYED ? FeedItem.PLAYED : FeedItem.UNPLAYED; - FeedItemMenuHandler.markReadWithUndo(fragment, item, newState, willRemove(filter)); + FeedItemMenuHandler.markReadWithUndo(fragment, item, newState, willRemove(filter, item)); } @Override - public boolean willRemove(FeedItemFilter filter) { + public boolean willRemove(FeedItemFilter filter, FeedItem item) { return filter.showUnplayed || filter.showPlayed || filter.showNew; } } diff --git a/app/src/main/res/layout/share_episode_dialog.xml b/app/src/main/res/layout/share_episode_dialog.xml index f03899671..9d0a2f38d 100644 --- a/app/src/main/res/layout/share_episode_dialog.xml +++ b/app/src/main/res/layout/share_episode_dialog.xml @@ -7,6 +7,13 @@ android:gravity="center" android:padding="16dp"> + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/share_label" + android:layout_marginBottom="8dp" + style="@style/AntennaPod.TextView.Heading" /> + <RadioGroup android:id="@+id/share_dialog_radio_group" android:layout_width="match_parent" @@ -38,7 +45,7 @@ android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginVertical="8dp" - android:background="?android:attr/listDivider" /> + android:background="?attr/background_elevated" /> <CheckBox android:id="@+id/share_position_checkbox" @@ -46,4 +53,12 @@ android:layout_height="wrap_content" android:text="@string/share_playback_position_dialog_label" /> + <Button + android:id="@+id/shareButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end" + android:text="@string/share_label" + style="@style/Widget.MaterialComponents.Button.TextButton" /> + </LinearLayout> |