diff options
author | ByteHamster <info@bytehamster.com> | 2020-03-12 22:11:07 +0100 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-03-15 20:09:20 +0100 |
commit | 32dd30705a8d34412285da3eab75e908af7c8439 (patch) | |
tree | 3ed016a3cf9524883fb35b94dd3acaef0c7ebf2d /app/src/main/java/de/danoeh/antennapod/view | |
parent | 7f4d43deb16ee0ce6a49f78805e5600d3e01161f (diff) | |
download | AntennaPod-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.java | 74 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/view/ToolbarIconTintManager.java | 50 |
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); +} |