summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java5
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/QueueRecyclerAdapter.java31
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/SubscriptionsRecyclerAdapter.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/RemoveFeedDialog.java2
-rw-r--r--app/src/main/java/de/danoeh/antennapod/dialog/VariableSpeedDialog.java40
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/EpisodesListFragment.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedItemlistFragment.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/SubscriptionFragment.java5
-rw-r--r--app/src/main/res/layout/playback_speed_seek_bar.xml11
-rw-r--r--app/src/main/res/menu/nav_feed_context.xml3
12 files changed, 69 insertions, 45 deletions
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 d51ae63ba..c71bff357 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java
@@ -244,9 +244,8 @@ public class PreferencesTest {
public void testPlaybackSpeeds() {
clickPreference(R.string.playback_pref);
clickPreference(R.string.playback_speed);
- onView(isRoot()).perform(waitForView(withText("0.75"), 1000));
- onView(withText("0.75")).check(matches(isDisplayed()));
- onView(withText(R.string.close_label)).perform(click());
+ onView(isRoot()).perform(waitForView(withText("1.25"), 1000));
+ onView(withText("1.25")).check(matches(isDisplayed()));
}
@Test
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>