diff options
author | Ebrahim Byagowi <ebrahim@gnu.org> | 2020-04-08 15:32:51 +0430 |
---|---|---|
committer | Ebrahim Byagowi <ebrahim@gnu.org> | 2020-04-21 19:30:16 +0430 |
commit | cedfb27ccaef74d954bb3a8f0ea471be63a1375c (patch) | |
tree | 40b50e8feef451ab45e015f217d02cc174578829 /app | |
parent | 3a86745e8144baa6d0a2cdc88aa0e29d1fd6e66c (diff) | |
download | AntennaPod-cedfb27ccaef74d954bb3a8f0ea471be63a1375c.zip |
Port AudioPlayer's viewpager to ViewPager2, improve RTL support
Diffstat (limited to 'app')
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" |