diff options
author | ByteHamster <info@bytehamster.com> | 2020-03-23 14:05:11 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-03-23 14:33:30 +0100 |
commit | 5ad7228b4e8650d1fa84bf28db8d810dd0b4aebf (patch) | |
tree | f05fca1307f18beb7ed4984f2233252b54779233 /app/src/main/java/de/danoeh | |
parent | 6b79daacfe72b54bf48f46fdfde7b8a2515e3a58 (diff) | |
download | AntennaPod-5ad7228b4e8650d1fa84bf28db8d810dd0b4aebf.zip |
Going down the BottomSheetBehavior rabbit hole...
BottomSheetBehavior only supports one scrolling child. Add support for a ViewPager.
ViewPager.getChildAt sometimes does not match the actual position.
Make sure that it keeps all children using setOffscreenPageLimit
Diffstat (limited to 'app/src/main/java/de/danoeh')
4 files changed, 24 insertions, 19 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java index 8b0aa537e..cb72a9150 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java @@ -2,7 +2,6 @@ package de.danoeh.antennapod.adapter; import android.content.Context; import android.text.TextUtils; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -116,7 +115,6 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte @Override public int getItemCount() { if (media == null || media.getChapters() == null) { - Log.d("aaaaa", "0"); return 0; } // ignore invalid chapters @@ -126,7 +124,6 @@ public class ChaptersListAdapter extends RecyclerView.Adapter<ChaptersListAdapte counter++; } } - Log.d("aaaaa", "0"+counter); return counter; } 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 d1c073cac..3be79a094 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java @@ -16,7 +16,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.fragment.app.FragmentPagerAdapter; import androidx.viewpager.widget.ViewPager; import com.google.android.material.bottomsheet.BottomSheetBehavior; import de.danoeh.antennapod.R; @@ -119,6 +119,14 @@ public class AudioPlayerFragment extends Fragment implements pager = root.findViewById(R.id.pager); AudioPlayerPagerAdapter pagerAdapter = new AudioPlayerPagerAdapter(getFragmentManager()); pager.setAdapter(pagerAdapter); + // Required for getChildAt(int) in ViewPagerBottomSheetBehavior to return the correct page + pager.setOffscreenPageLimit(NUM_CONTENT_FRAGMENTS); + pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { + @Override + public void onPageSelected(int position) { + pager.post(() -> ((MainActivity) getActivity()).getBottomSheet().updateScrollingChild()); + } + }); pageIndicator = root.findViewById(R.id.page_indicator); pageIndicator.setViewPager(pager); pageIndicator.setOnClickListener(v -> @@ -468,7 +476,7 @@ public class AudioPlayerFragment extends Fragment implements return false; } - private static class AudioPlayerPagerAdapter extends FragmentStatePagerAdapter { + private static class AudioPlayerPagerAdapter extends FragmentPagerAdapter { private static final String TAG = "AudioPlayerPagerAdapter"; public AudioPlayerPagerAdapter(FragmentManager fm) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java index 256615199..58cc9290c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; +import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.util.playback.PlaybackController; import de.danoeh.antennapod.core.util.playback.Timeline; import de.danoeh.antennapod.view.ShownotesWebView; @@ -35,7 +36,8 @@ public class ItemDescriptionFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG, "Creating view"); - webvDescription = new ShownotesWebView(getActivity().getApplicationContext()); + View root = inflater.inflate(R.layout.item_description_fragment, container, false); + webvDescription = root.findViewById(R.id.webview); webvDescription.setTimecodeSelectedListener(time -> { if (controller != null) { controller.seekTo(time); @@ -46,7 +48,7 @@ public class ItemDescriptionFragment extends Fragment { webvDescription.postDelayed(ItemDescriptionFragment.this::restoreFromPreference, 50); }); registerForContextMenu(webvDescription); - return webvDescription; + return root; } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java b/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java index f4c073fc6..8e8d98fc9 100644 --- a/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java +++ b/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java @@ -5,14 +5,13 @@ import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import androidx.coordinatorlayout.widget.CoordinatorLayout; -import com.google.android.material.bottomsheet.BottomSheetBehavior; +import com.google.android.material.bottomsheet.ViewPagerBottomSheetBehavior; /** * Based on https://stackoverflow.com/a/40798214 */ -public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> { - - private boolean mLocked = false; +public class LockableBottomSheetBehavior<V extends View> extends ViewPagerBottomSheetBehavior<V> { + private boolean isLocked = false; public LockableBottomSheetBehavior() {} @@ -21,14 +20,14 @@ public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBeha } public void setLocked(boolean locked) { - mLocked = locked; + isLocked = locked; } @Override public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { boolean handled = false; - if (!mLocked) { + if (!isLocked) { handled = super.onInterceptTouchEvent(parent, child, event); } @@ -39,7 +38,7 @@ public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBeha public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { boolean handled = false; - if (!mLocked) { + if (!isLocked) { handled = super.onTouchEvent(parent, child, event); } @@ -51,7 +50,7 @@ public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBeha View target, int nestedScrollAxes) { boolean handled = false; - if (!mLocked) { + if (!isLocked) { handled = super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); } @@ -61,14 +60,14 @@ public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBeha @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target, int dx, int dy, int[] consumed) { - if (!mLocked) { + if (!isLocked) { super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed); } } @Override public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target) { - if (!mLocked) { + if (!isLocked) { super.onStopNestedScroll(coordinatorLayout, child, target); } } @@ -78,11 +77,10 @@ public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBeha float velocityX, float velocityY) { boolean handled = false; - if (!mLocked) { + if (!isLocked) { handled = super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY); } return handled; - } } |