summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorEbrahim Byagowi <ebrahim@gnu.org>2020-04-08 15:32:51 +0430
committerEbrahim Byagowi <ebrahim@gnu.org>2020-04-21 19:30:16 +0430
commitcedfb27ccaef74d954bb3a8f0ea471be63a1375c (patch)
tree40b50e8feef451ab45e015f217d02cc174578829 /app
parent3a86745e8144baa6d0a2cdc88aa0e29d1fd6e66c (diff)
downloadAntennaPod-cedfb27ccaef74d954bb3a8f0ea471be63a1375c.zip
Port AudioPlayer's viewpager to ViewPager2, improve RTL support
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java45
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/PagerIndicatorView.java23
-rw-r--r--app/src/main/res/layout/audioplayer_fragment.xml2
4 files changed, 39 insertions, 32 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 6fb84c29a..b400b8700 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -142,6 +142,7 @@ dependencies {
implementation "androidx.preference:preference:1.1.0"
implementation "androidx.gridlayout:gridlayout:1.0.0"
implementation "androidx.recyclerview:recyclerview:1.1.0"
+ implementation "androidx.viewpager2:viewpager2:1.0.0"
implementation "androidx.coordinatorlayout:coordinatorlayout:1.1.0"
implementation "androidx.media:media:1.1.0"
implementation "androidx.work:work-runtime:$workManagerVersion"
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
index 7f0326019..e57ea63dc 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
@@ -13,20 +13,28 @@ import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
+
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentPagerAdapter;
-import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+import androidx.viewpager2.widget.ViewPager2;
+
import com.google.android.material.bottomsheet.BottomSheetBehavior;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.text.DecimalFormat;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.CastEnabledActivity;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.event.FavoritesEvent;
import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
-import de.danoeh.antennapod.core.feed.Chapter;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
@@ -50,12 +58,6 @@ import io.reactivex.Maybe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-import java.text.DecimalFormat;
-import java.util.List;
/**
* Shows the audio player.
@@ -73,7 +75,7 @@ public class AudioPlayerFragment extends Fragment implements
PlaybackSpeedIndicatorView butPlaybackSpeed;
TextView txtvPlaybackSpeed;
- private ViewPager pager;
+ private ViewPager2 pager;
private PagerIndicatorView pageIndicator;
private TextView txtvPosition;
private TextView txtvLength;
@@ -127,11 +129,10 @@ public class AudioPlayerFragment extends Fragment implements
sbPosition.setOnSeekBarChangeListener(this);
pager = root.findViewById(R.id.pager);
- AudioPlayerPagerAdapter pagerAdapter = new AudioPlayerPagerAdapter(getChildFragmentManager());
- pager.setAdapter(pagerAdapter);
+ pager.setAdapter(new AudioPlayerPagerAdapter(this));
// Required for getChildAt(int) in ViewPagerBottomSheetBehavior to return the correct page
- pager.setOffscreenPageLimit(NUM_CONTENT_FRAGMENTS);
- pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
+ // pager.setOffscreenPageLimit(NUM_CONTENT_FRAGMENTS);
+ pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
pager.post(() -> ((MainActivity) getActivity()).getBottomSheet().updateScrollingChild());
@@ -502,30 +503,30 @@ public class AudioPlayerFragment extends Fragment implements
return false;
}
- private static class AudioPlayerPagerAdapter extends FragmentPagerAdapter {
+ private static class AudioPlayerPagerAdapter extends FragmentStateAdapter {
private static final String TAG = "AudioPlayerPagerAdapter";
- public AudioPlayerPagerAdapter(FragmentManager fm) {
- super(fm);
+ public AudioPlayerPagerAdapter(@NonNull Fragment fragment) {
+ super(fragment);
}
+ @NonNull
@Override
- public Fragment getItem(int position) {
+ public Fragment createFragment(int position) {
Log.d(TAG, "getItem(" + position + ")");
switch (position) {
case POS_COVER:
return new CoverFragment();
case POS_DESCR:
return new ItemDescriptionFragment();
+ default:
case POS_CHAPTERS:
return new ChaptersFragment();
- default:
- return null;
}
}
@Override
- public int getCount() {
+ public int getItemCount() {
return NUM_CONTENT_FRAGMENTS;
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/view/PagerIndicatorView.java b/app/src/main/java/de/danoeh/antennapod/view/PagerIndicatorView.java
index 53a95eede..780ee0d88 100644
--- a/app/src/main/java/de/danoeh/antennapod/view/PagerIndicatorView.java
+++ b/app/src/main/java/de/danoeh/antennapod/view/PagerIndicatorView.java
@@ -1,15 +1,17 @@
package de.danoeh.antennapod.view;
+import android.animation.ArgbEvaluator;
import android.content.Context;
import android.content.res.TypedArray;
-import android.database.DataSetObserver;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
+
import androidx.annotation.Nullable;
-import androidx.vectordrawable.graphics.drawable.ArgbEvaluator;
-import androidx.viewpager.widget.ViewPager;
+import androidx.core.view.ViewCompat;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewpager2.widget.ViewPager2;
public class PagerIndicatorView extends View {
private final Paint paint = new Paint();
@@ -38,26 +40,29 @@ public class PagerIndicatorView extends View {
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
- int[] colorAttrs = new int[] { android.R.attr.textColorSecondary };
+ int[] colorAttrs = new int[]{android.R.attr.textColorSecondary};
TypedArray a = getContext().obtainStyledAttributes(colorAttrs);
circleColorHighlight = a.getColor(0, 0xffffffff);
circleColor = (Integer) new ArgbEvaluator().evaluate(0.8f, 0x00ffffff, circleColorHighlight);
a.recycle();
}
- public void setViewPager(ViewPager pager) {
- numPages = pager.getAdapter().getCount();
- pager.getAdapter().registerDataSetObserver(new DataSetObserver() {
+ public void setViewPager(ViewPager2 pager) {
+ numPages = pager.getAdapter().getItemCount();
+ pager.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
- numPages = pager.getAdapter().getCount();
+ numPages = pager.getAdapter().getItemCount();
invalidate();
}
});
- pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
+ pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
PagerIndicatorView.this.position = position + positionOffset;
+ if (ViewCompat.getLayoutDirection(pager) == ViewCompat.LAYOUT_DIRECTION_RTL) {
+ PagerIndicatorView.this.position = numPages - 1 - PagerIndicatorView.this.position;
+ }
invalidate();
}
});
diff --git a/app/src/main/res/layout/audioplayer_fragment.xml b/app/src/main/res/layout/audioplayer_fragment.xml
index d01228d27..a9e9137f2 100644
--- a/app/src/main/res/layout/audioplayer_fragment.xml
+++ b/app/src/main/res/layout/audioplayer_fragment.xml
@@ -34,7 +34,7 @@
tools:background="@android:color/holo_green_light"
android:elevation="8dp"/>
- <androidx.viewpager.widget.ViewPager
+ <androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"