Niedzielski has uploaded a new change for review. https://gerrit.wikimedia.org/r/312059
Change subject: Add multicolumn support to feed header ...................................................................... Add multicolumn support to feed header This feels a little clunky but seems acceptable. Change-Id: Ifb5b8a49a25cf272caa7b195fad7dd74d11f2436 --- M app/src/main/java/org/wikipedia/feed/FeedFragment.java A app/src/main/java/org/wikipedia/feed/FeedHeaderView.java M app/src/main/res/layout/fragment_feed.xml A app/src/main/res/layout/view_feed_header.xml M app/src/main/res/values/dimens.xml M app/src/main/res/values/strings.xml 6 files changed, 90 insertions(+), 45 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/59/312059/1 diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java b/app/src/main/java/org/wikipedia/feed/FeedFragment.java index f0f5a65..2829087 100644 --- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java +++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java @@ -5,9 +5,9 @@ import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.AppBarLayout; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; -import android.support.v4.content.ContextCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; @@ -16,7 +16,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import org.wikipedia.BackPressedHandler; import org.wikipedia.BuildConfig; @@ -49,14 +48,15 @@ import butterknife.Unbinder; public class FeedFragment extends Fragment implements BackPressedHandler { - @BindView(R.id.feed_swipe_refresh_layout) SwipeRefreshLayout swipeRefreshLayout; + @BindView(R.id.fragment_feed_swipe_refresh_layout) SwipeRefreshLayout swipeRefreshLayout; + @BindView(R.id.fragment_feed_app_bar) AppBarLayout appBarLayout; @BindView(R.id.fragment_feed_feed) FeedView feedView; - @BindView(R.id.fragment_feed_header) View feedHeader; - @BindView(R.id.fragment_feed_header_image) ImageView feedHeaderImage; + private Unbinder unbinder; private WikipediaApp app; private FeedCoordinator coordinator; private FeedFunnel funnel; + private AppBarLayout.OnOffsetChangedListener appBarLayoutOffsetListener; private FeedViewCallback feedCallback = new FeedCallback(); private FeedScrollListener feedScrollListener = new FeedScrollListener(); private OverflowCallback overflowCallback = new OverflowCallback(); @@ -102,9 +102,6 @@ feedView.callback(feedCallback); feedView.addOnScrollListener(feedScrollListener); - feedHeaderImage.setImageDrawable(ContextCompat.getDrawable(getContext(), - headerImageToggle() ? R.drawable.ic_feed_header_male : R.drawable.ic_feed_header_female)); - swipeRefreshLayout.setColorSchemeResources(R.color.foundation_blue); swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override @@ -114,6 +111,12 @@ coordinator.more(app.getSite()); } }); + appBarLayoutOffsetListener = new AppBarLayout.OnOffsetChangedListener() { + @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { + swipeRefreshLayout.setEnabled(verticalOffset == 0); + } + }; + appBarLayout.addOnOffsetChangedListener(appBarLayoutOffsetListener); coordinator.setFeedUpdateListener(new FeedCoordinator.FeedUpdateListener() { @Override @@ -139,6 +142,7 @@ @Override public void onDestroyView() { coordinator.setFeedUpdateListener(null); + appBarLayout.removeOnOffsetChangedListener(appBarLayoutOffsetListener); swipeRefreshLayout.setOnRefreshListener(null); feedView.removeOnScrollListener(feedScrollListener); feedView.callback((FeedViewCallback) null); @@ -289,11 +293,6 @@ @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); - int yOffset = feedView.computeVerticalScrollOffset(); - if (yOffset <= feedHeader.getHeight() - || feedHeader.getTranslationY() > -feedHeader.getHeight()) { - feedHeader.setTranslationY(-yOffset); - } boolean shouldShowSearchIcon = feedView.getFirstVisibleItemPosition() != 0; if (shouldShowSearchIcon != searchIconVisible) { searchIconVisible = shouldShowSearchIcon; @@ -313,11 +312,6 @@ } }); snackbar.show(); - } - - private boolean headerImageToggle() { - String id = app.getAppInstallID(); - return id.charAt(id.length() - 1) % 2 == 0; } private void showOverflowMenu(@NonNull View anchor) { diff --git a/app/src/main/java/org/wikipedia/feed/FeedHeaderView.java b/app/src/main/java/org/wikipedia/feed/FeedHeaderView.java new file mode 100644 index 0000000..b1e2e35 --- /dev/null +++ b/app/src/main/java/org/wikipedia/feed/FeedHeaderView.java @@ -0,0 +1,38 @@ +package org.wikipedia.feed; + +import android.content.Context; +import android.support.design.widget.CollapsingToolbarLayout; +import android.util.AttributeSet; +import android.widget.ImageView; + +import org.wikipedia.R; +import org.wikipedia.WikipediaApp; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class FeedHeaderView extends CollapsingToolbarLayout { + @BindView(R.id.view_feed_header_image) ImageView image; + + public FeedHeaderView(Context context) { + this(context, null); + } + + public FeedHeaderView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public FeedHeaderView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + inflate(getContext(), R.layout.view_feed_header, this); + ButterKnife.bind(this); + image.setImageResource(isDrawableMale() ? R.drawable.ic_feed_header_male + : R.drawable.ic_feed_header_female); + } + + private boolean isDrawableMale() { + String id = WikipediaApp.getInstance().getAppInstallID(); + return id.charAt(id.length() - 1) % 2 == 0; + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index 28f484a..aa40775 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -1,48 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.v4.widget.SwipeRefreshLayout +<org.wikipedia.views.SwipeRefreshLayoutWithScroll xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/feed_swipe_refresh_layout" + android:id="@+id/fragment_feed_swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/feed_window_background_color"> - <FrameLayout + <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> - <FrameLayout - android:id="@+id/fragment_feed_header" + <android.support.design.widget.AppBarLayout android:layout_width="match_parent" - android:layout_height="150dp"> + android:layout_height="wrap_content" + android:id="@+id/fragment_feed_app_bar"> - <ImageView - android:id="@+id/fragment_feed_header_image" - android:layout_width="match_parent" - android:layout_height="match_parent" - app:srcCompat="@drawable/ic_feed_header_female" - android:background="@color/dark_blue" - android:contentDescription="@null"/> - - <TextView + <org.wikipedia.feed.FeedHeaderView android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="16dp" - android:gravity="center" - android:textStyle="italic" - android:maxLines="1" - android:text="@string/feed_header_label" - android:textColor="@android:color/white"/> + app:layout_scrollFlags="scroll|exitUntilCollapsed" /> - </FrameLayout> + </android.support.design.widget.AppBarLayout> <org.wikipedia.feed.view.FeedView android:id="@+id/fragment_feed_feed" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" - app:minColumnWidth="@dimen/view_feed_min_column_width"/> + app:minColumnWidth="@dimen/view_feed_min_column_width" + app:layout_behavior="@string/appbar_scrolling_view_behavior" + app:behavior_overlapTop="32dp" /> - </FrameLayout> + </android.support.design.widget.CoordinatorLayout> -</android.support.v4.widget.SwipeRefreshLayout> +</org.wikipedia.views.SwipeRefreshLayoutWithScroll> \ No newline at end of file diff --git a/app/src/main/res/layout/view_feed_header.xml b/app/src/main/res/layout/view_feed_header.xml new file mode 100644 index 0000000..4eb3ef1 --- /dev/null +++ b/app/src/main/res/layout/view_feed_header.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<merge + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <ImageView + android:id="@+id/view_feed_header_image" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="150dp" + app:srcCompat="@drawable/ic_feed_header_female" + android:background="@color/dark_blue" + android:contentDescription="@null" /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:gravity="center" + android:textStyle="italic" + android:text="@string/view_feed_header_text" + android:textColor="@android:color/white" /> + +</merge> \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 8f7939c..0ad0aa0 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -90,7 +90,7 @@ <!-- The Feed --> <dimen name="view_feed_header_height">160dp</dimen> - <dimen name="view_feed_padding_top">120dp</dimen> + <dimen name="view_feed_padding_top">10dp</dimen> <dimen name="view_feed_min_column_width">320dp</dimen> <dimen name="view_list_card_margin_vertical">5dp</dimen> <dimen name="view_list_card_margin_horizontal">7dp</dimen> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 976a7bf..8891ef9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -312,7 +312,7 @@ <string name="menu_feed_card_dismiss">Hide this card</string> <string name="menu_feed_card_dismissed">Card hidden.</string> <string name="menu_feed_overflow_label">More options</string> - <string name="feed_header_label">Explore the world of free knowledge</string> + <string name="view_feed_header_text">Explore the world of free knowledge</string> <string name="feed_featured_image_share_subject">Featured image from Wikimedia Commons</string> <string name="feed">Explore</string> -- To view, visit https://gerrit.wikimedia.org/r/312059 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifb5b8a49a25cf272caa7b195fad7dd74d11f2436 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits