diff options
author | ByteHamster <info@bytehamster.com> | 2021-10-14 21:40:12 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2021-10-14 21:40:12 +0200 |
commit | e734d43e7287a0f0f3f678c5875a34bf6bc75716 (patch) | |
tree | 7feb076b68c10f804c4784c10c498d750d72f0b9 /app/src/main | |
parent | 66250bebea5e2bef515651d310811ea7682a3c13 (diff) | |
parent | f4d3ebb22de54985466c5776e22ca4da8b3c7acc (diff) | |
download | AntennaPod-e734d43e7287a0f0f3f678c5875a34bf6bc75716.zip |
Merge branch 'master' into develop
Diffstat (limited to 'app/src/main')
11 files changed, 67 insertions, 42 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java index 6055582a3..383d670f1 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java @@ -7,6 +7,7 @@ import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; +import androidx.core.view.ViewCompat; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.preferences.UserPreferences; @@ -37,22 +38,32 @@ public class QueueRecyclerAdapter extends EpisodeItemListAdapter { @Override @SuppressLint("ClickableViewAccessibility") protected void afterBindViewHolder(EpisodeItemViewHolder holder, int pos) { - View.OnTouchListener startDragTouchListener = (v1, event) -> { - if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { - Log.d(TAG, "startDrag()"); - swipeActions.startDrag(holder); - } - return false; - }; - if (!dragDropEnabled || inActionMode()) { holder.dragHandle.setVisibility(View.GONE); holder.dragHandle.setOnTouchListener(null); holder.coverHolder.setOnTouchListener(null); } else { holder.dragHandle.setVisibility(View.VISIBLE); - holder.dragHandle.setOnTouchListener(startDragTouchListener); - holder.coverHolder.setOnTouchListener(startDragTouchListener); + holder.dragHandle.setOnTouchListener((v1, event) -> { + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + Log.d(TAG, "startDrag()"); + swipeActions.startDrag(holder); + } + return false; + }); + holder.coverHolder.setOnTouchListener((v1, event) -> { + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + boolean isLtr = ViewCompat.getLayoutDirection(holder.itemView) == ViewCompat.LAYOUT_DIRECTION_LTR; + float factor = isLtr ? 1 : -1; + if (factor * event.getX() < factor * 0.5 * v1.getWidth()) { + Log.d(TAG, "startDrag()"); + swipeActions.startDrag(holder); + } else { + Log.d(TAG, "Ignoring drag in right half of the image"); + } + } + return false; + }); } holder.isInQueue.setVisibility(View.GONE); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java index 773f15dcb..a73e247e8 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java @@ -133,6 +133,7 @@ public class SubscriptionsRecyclerAdapter extends SelectableAdapter<Subscription MenuInflater inflater = mainActivityRef.get().getMenuInflater(); inflater.inflate(R.menu.nav_feed_context, menu); menu.setHeaderTitle(selectedFeed.getTitle()); + menu.findItem(R.id.multi_select).setVisible(true); } } diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java index c4ae5e058..9fcf8be69 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java @@ -69,7 +69,7 @@ public class RemoveFeedDialog { private static String getMessageId(Context context, List<Feed> feeds) { if (feeds.size() == 1) { if (feeds.get(0).isLocalFeed()) { - return context.getString(R.string.feed_delete_confirmation_local_msg); + return context.getString(R.string.feed_delete_confirmation_local_msg, feeds.get(0).getTitle()); } else { return context.getString(R.string.feed_delete_confirmation_msg, feeds.get(0).getTitle()); } diff --git a/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java index dffd49c45..5d13f6f00 100644 --- a/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java +++ b/app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java @@ -1,15 +1,17 @@ package de.danoeh.antennapod.dialog; -import android.app.Dialog; +import android.os.Build; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +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 androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.google.android.material.chip.Chip; import com.google.android.material.snackbar.Snackbar; import de.danoeh.antennapod.R; @@ -25,7 +27,7 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -public class VariableSpeedDialog extends DialogFragment { +public class VariableSpeedDialog extends BottomSheetDialogFragment { private SpeedSelectionAdapter adapter; private final DecimalFormat speedFormat; private PlaybackController controller; @@ -70,12 +72,10 @@ public class VariableSpeedDialog extends DialogFragment { controller = null; } - @NonNull + @Nullable @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setPositiveButton(R.string.close_label, null); - + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { View root = View.inflate(getContext(), R.layout.speed_select_dialog, null); speedSeekBar = root.findViewById(R.id.speed_seek_bar); speedSeekBar.setProgressChangedListener(multiplier -> { @@ -95,9 +95,7 @@ public class VariableSpeedDialog extends DialogFragment { addCurrentSpeedChip.setCloseIconResource(R.drawable.ic_add); addCurrentSpeedChip.setOnCloseIconClickListener(v -> addCurrentSpeed()); addCurrentSpeedChip.setOnClickListener(v -> addCurrentSpeed()); - - builder.setView(root); - return builder.create(); + return root; } private void addCurrentSpeed() { @@ -119,8 +117,9 @@ public class VariableSpeedDialog extends DialogFragment { @NonNull public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { Chip chip = new Chip(getContext()); - chip.setCloseIconVisible(true); - chip.setCloseIconResource(R.drawable.ic_delete); + if (Build.VERSION.SDK_INT >= 17) { + chip.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); + } return new ViewHolder(chip); } @@ -129,16 +128,19 @@ public class VariableSpeedDialog extends DialogFragment { float speed = selectedSpeeds.get(position); holder.chip.setText(speedFormat.format(speed)); - holder.chip.setOnCloseIconClickListener(v -> { + holder.chip.setOnLongClickListener(v -> { selectedSpeeds.remove(speed); UserPreferences.setPlaybackSpeedArray(selectedSpeeds); notifyDataSetChanged(); + return true; }); holder.chip.setOnClickListener(v -> { - if (controller != null) { - dismiss(); - controller.setPlaybackSpeed(speed); - } + new Handler(Looper.getMainLooper()).postDelayed(() -> { + if (controller != null) { + dismiss(); + controller.setPlaybackSpeed(speed); + } + }, 200); }); } 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 74661d240..6c8baef29 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -84,6 +84,7 @@ public class CompletedDownloadsFragment extends Fragment implements progressBar = root.findViewById(R.id.progLoading); speedDialView = root.findViewById(R.id.fabSD); + speedDialView.setOverlayLayout(root.findViewById(R.id.fabSDOverlay)); speedDialView.inflate(R.menu.episodes_apply_action_speeddial); speedDialView.removeActionItemById(R.id.download_batch); speedDialView.removeActionItemById(R.id.mark_read_batch); @@ -273,8 +274,10 @@ public class CompletedDownloadsFragment extends Fragment implements @Override public void afterBindViewHolder(EpisodeItemViewHolder holder, int pos) { - DeleteActionButton actionButton = new DeleteActionButton(getItem(pos)); - actionButton.configure(holder.secondaryActionButton, holder.secondaryActionIcon, getActivity()); + if (!inActionMode()) { + DeleteActionButton actionButton = new DeleteActionButton(getItem(pos)); + actionButton.configure(holder.secondaryActionButton, holder.secondaryActionIcon, getActivity()); + } } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java index 6d63e4ab2..7ea76bb8d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java @@ -168,10 +168,9 @@ public abstract class EpisodesListFragment extends Fragment { @Override public boolean onContextItemSelected(@NonNull MenuItem item) { Log.d(TAG, "onContextItemSelected() called with: " + "item = [" + item + "]"); - if (!getUserVisibleHint()) { - return false; - } - if (!isVisible()) { + if (!getUserVisibleHint() || !isVisible() || !isMenuVisible()) { + // The method is called on all fragments in a ViewPager, so this needs to be ignored in invisible ones. + // Apparently, none of the visibility check method works reliably on its own, so we just use all. return false; } if (item.getItemId() == R.id.share_item) { 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 fb3b8d136..0ee60866d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java @@ -238,6 +238,7 @@ public class FeedItemlistFragment extends Fragment implements AdapterView.OnItem // Init action UI (via a FAB Speed Dial) speedDialView = root.findViewById(R.id.fabSD); + speedDialView.setOverlayLayout(root.findViewById(R.id.fabSDOverlay)); speedDialView.inflate(R.menu.episodes_apply_action_speeddial); speedDialView.setOnChangeListener(new SpeedDialView.OnChangeListener() { @Override 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 c4bef220e..1b7d236c6 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -465,6 +465,7 @@ public class QueueFragment extends Fragment implements Toolbar.OnMenuItemClickLi progLoading.setVisibility(View.VISIBLE); speedDialView = root.findViewById(R.id.fabSD); + speedDialView.setOverlayLayout(root.findViewById(R.id.fabSDOverlay)); speedDialView.inflate(R.menu.episodes_apply_action_speeddial); speedDialView.removeActionItemById(R.id.mark_read_batch); speedDialView.removeActionItemById(R.id.mark_unread_batch); 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 68cc04a28..db19c828d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java @@ -167,6 +167,7 @@ public class SubscriptionFragment extends Fragment }); speedDialView = root.findViewById(R.id.fabSD); + speedDialView.setOverlayLayout(root.findViewById(R.id.fabSDOverlay)); speedDialView.inflate(R.menu.nav_feed_action_speeddial); speedDialView.setOnChangeListener(new SpeedDialView.OnChangeListener() { @Override @@ -303,6 +304,10 @@ public class SubscriptionFragment extends Fragment .observeOn(AndroidSchedulers.mainThread()) .subscribe( result -> { + if (listItems != null && listItems.size() > result.size()) { + // We have fewer items. This can result in items being selected that are no longer visible. + subscriptionAdapter.endSelectMode(); + } listItems = result; subscriptionAdapter.setItems(result); subscriptionAdapter.notifyDataSetChanged(); diff --git a/app/src/main/res/layout/playback_speed_seek_bar.xml b/app/src/main/res/layout/playback_speed_seek_bar.xml index c6feda030..155a2261a 100644 --- a/app/src/main/res/layout/playback_speed_seek_bar.xml +++ b/app/src/main/res/layout/playback_speed_seek_bar.xml @@ -8,8 +8,8 @@ <TextView android:id="@+id/butDecSpeed" - android:layout_width="32dp" - android:layout_height="32dp" + android:layout_width="40dp" + android:layout_height="40dp" android:gravity="center" android:text="-" android:clickable="true" @@ -24,14 +24,15 @@ <SeekBar android:id="@+id/playback_speed" android:layout_width="0dp" - android:layout_height="32dp" + android:layout_height="wrap_content" android:max="70" + android:paddingVertical="4dp" android:layout_weight="1" /> <TextView android:id="@+id/butIncSpeed" - android:layout_width="32dp" - android:layout_height="32dp" + android:layout_width="40dp" + android:layout_height="40dp" android:gravity="center" android:text="+" android:clickable="true" diff --git a/app/src/main/res/menu/nav_feed_context.xml b/app/src/main/res/menu/nav_feed_context.xml index ac3b24d0d..e45fe24e0 100644 --- a/app/src/main/res/menu/nav_feed_context.xml +++ b/app/src/main/res/menu/nav_feed_context.xml @@ -24,5 +24,6 @@ <item android:id="@+id/multi_select" android:menuCategory="container" - android:title="@string/multi_select" /> + android:title="@string/multi_select" + android:visible="false" /> </menu> |