summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/view
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-12 22:11:07 +0100
committerByteHamster <info@bytehamster.com>2020-03-15 20:09:20 +0100
commit32dd30705a8d34412285da3eab75e908af7c8439 (patch)
tree3ed016a3cf9524883fb35b94dd3acaef0c7ebf2d /app/src/main/java/de/danoeh/antennapod/view
parent7f4d43deb16ee0ce6a49f78805e5600d3e01161f (diff)
downloadAntennaPod-32dd30705a8d34412285da3eab75e908af7c8439.zip
Added collapsing feed info
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/NestedScrollingListView.java74
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java50
2 files changed, 124 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/NestedScrollingListView.java b/app/src/main/java/de/danoeh/antennapod/view/NestedScrollingListView.java
new file mode 100644
index 000000000..e7a6eefc2
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/view/NestedScrollingListView.java
@@ -0,0 +1,74 @@
+package de.danoeh.antennapod.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ListView;
+import androidx.core.view.NestedScrollingChild;
+import androidx.core.view.NestedScrollingChildHelper;
+
+/**
+ * ListView that can be wrapped in NestedScrollView
+ * Based on https://stackoverflow.com/a/34920961.
+ */
+public class NestedScrollingListView extends ListView implements NestedScrollingChild {
+ private final NestedScrollingChildHelper nestedScrollingChildHelper;
+
+ public NestedScrollingListView(Context context) {
+ super(context);
+ nestedScrollingChildHelper = new NestedScrollingChildHelper(this);
+ setNestedScrollingEnabled(true);
+ }
+
+ public NestedScrollingListView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ nestedScrollingChildHelper = new NestedScrollingChildHelper(this);
+ setNestedScrollingEnabled(true);
+ }
+
+ @Override
+ public void setNestedScrollingEnabled(boolean enabled) {
+ nestedScrollingChildHelper.setNestedScrollingEnabled(enabled);
+ }
+
+ @Override
+ public boolean isNestedScrollingEnabled() {
+ return nestedScrollingChildHelper.isNestedScrollingEnabled();
+ }
+
+ @Override
+ public boolean startNestedScroll(int axes) {
+ return nestedScrollingChildHelper.startNestedScroll(axes);
+ }
+
+ @Override
+ public void stopNestedScroll() {
+ nestedScrollingChildHelper.stopNestedScroll();
+ }
+
+ @Override
+ public boolean hasNestedScrollingParent() {
+ return nestedScrollingChildHelper.hasNestedScrollingParent();
+ }
+
+ @Override
+ public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed,
+ int dyUnconsumed, int[] offsetInWindow) {
+ return nestedScrollingChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed,
+ dxUnconsumed, dyUnconsumed, offsetInWindow);
+ }
+
+ @Override
+ public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {
+ return nestedScrollingChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow);
+ }
+
+ @Override
+ public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) {
+ return nestedScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed);
+ }
+
+ @Override
+ public boolean dispatchNestedPreFling(float velocityX, float velocityY) {
+ return nestedScrollingChildHelper.dispatchNestedPreFling(velocityX, velocityY);
+ }
+}
diff --git a/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java b/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java
new file mode 100644
index 000000000..22d83301c
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java
@@ -0,0 +1,50 @@
+package de.danoeh.antennapod.view;
+
+import android.content.Context;
+import android.graphics.PorterDuff;
+import android.view.ContextThemeWrapper;
+import androidx.appcompat.widget.Toolbar;
+import androidx.core.view.ViewCompat;
+import com.google.android.material.appbar.AppBarLayout;
+import com.google.android.material.appbar.CollapsingToolbarLayout;
+import de.danoeh.antennapod.R;
+
+public abstract class ToolbarIconTintManager implements AppBarLayout.OnOffsetChangedListener {
+ private final Context context;
+ private final CollapsingToolbarLayout collapsingToolbar;
+ private final Toolbar toolbar;
+ private boolean isTinted = false;
+
+ public ToolbarIconTintManager(Context context, Toolbar toolbar, CollapsingToolbarLayout collapsingToolbar) {
+ this.context = context;
+ this.collapsingToolbar = collapsingToolbar;
+ this.toolbar = toolbar;
+ }
+
+ @Override
+ public void onOffsetChanged(AppBarLayout appBarLayout, int offset) {
+ boolean tint = (collapsingToolbar.getHeight() + offset) > (2 * ViewCompat.getMinimumHeight(collapsingToolbar));
+ if (isTinted != tint) {
+ isTinted = tint;
+ updateTint();
+ }
+ }
+
+ public void updateTint() {
+ if (isTinted) {
+ doTint(new ContextThemeWrapper(context, R.style.Theme_AntennaPod_Dark));
+ //toolbar.getNavigationIcon().setColorFilter(0xffffffff, PorterDuff.Mode.SRC_ATOP);
+ toolbar.getOverflowIcon().setColorFilter(0xffffffff, PorterDuff.Mode.SRC_ATOP);
+ } else {
+ doTint(context);
+ //toolbar.getNavigationIcon().clearColorFilter();
+ toolbar.getOverflowIcon().clearColorFilter();
+ }
+ }
+
+ /**
+ * View expansion was changed. Icons need to be tinted
+ * @param themedContext ContextThemeWrapper with dark theme while expanded
+ */
+ protected abstract void doTint(Context themedContext);
+}