summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-23 14:05:11 +0100
committerByteHamster <info@bytehamster.com>2020-03-23 14:33:30 +0100
commit5ad7228b4e8650d1fa84bf28db8d810dd0b4aebf (patch)
treef05fca1307f18beb7ed4984f2233252b54779233 /app/src/main/java/de/danoeh
parent6b79daacfe72b54bf48f46fdfde7b8a2515e3a58 (diff)
downloadAntennaPod-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')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/adapter/ChaptersListAdapter.java3
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java12
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java6
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java22
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;
-
}
}