jenkins-bot has submitted this change and it was merged. Change subject: Top o' the feed. ......................................................................
Top o' the feed. - Composed the layout of the feed header, using a CoordinatorLayout and AppToolbarLayout. - FeedView is now itself a descendant of RecyclerView, instead of RelativeLayout. - FeedFragment now has a Callback through which it passes a Toolbar view, and expects the parent activity to take this Toolbar and make it be the "active" toolbar of the activity (i.e. override the default toolbar of the activity). Change-Id: I93e4868594f19033c9fcd561d036719f21a8b8fe --- M app/src/main/java/org/wikipedia/feed/FeedActivity.java M app/src/main/java/org/wikipedia/feed/FeedFragment.java M app/src/main/java/org/wikipedia/feed/view/FeedView.java M app/src/main/java/org/wikipedia/feed/view/ListCardView.java A app/src/main/res/drawable/feed_app_bar.png R app/src/main/res/drawable/ic_search_white_24dp.xml M app/src/main/res/layout/fragment_feed.xml D app/src/main/res/layout/view_feed.xml M app/src/main/res/layout/view_search_bar.xml A app/src/main/res/menu/menu_feed.xml M app/src/main/res/values/dimens.xml M app/src/main/res/values/strings_no_translate.xml 12 files changed, 121 insertions(+), 74 deletions(-) Approvals: BearND: Looks good to me, approved Mholloway: Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/app/src/main/java/org/wikipedia/feed/FeedActivity.java b/app/src/main/java/org/wikipedia/feed/FeedActivity.java index b4eb52b..d137b7d 100644 --- a/app/src/main/java/org/wikipedia/feed/FeedActivity.java +++ b/app/src/main/java/org/wikipedia/feed/FeedActivity.java @@ -2,10 +2,11 @@ import android.content.Context; import android.content.Intent; +import android.support.v7.widget.Toolbar; import org.wikipedia.activity.SingleFragmentActivity; -public class FeedActivity extends SingleFragmentActivity<FeedFragment> { +public class FeedActivity extends SingleFragmentActivity<FeedFragment> implements FeedFragment.Callback { public static Intent newIntent(Context context) { return new Intent(context, FeedActivity.class); } @@ -15,4 +16,15 @@ } @Override protected void setTheme() { } + + @Override + public void onAddToolbar(Toolbar toolbar) { + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + + @Override + public void onRemoveToolbar(Toolbar toolbar) { + setSupportActionBar(null); + } } \ No newline at end of file diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java b/app/src/main/java/org/wikipedia/feed/FeedFragment.java index 4239e20..00fe3c6 100644 --- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java +++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java @@ -2,8 +2,13 @@ import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.design.widget.CollapsingToolbarLayout; import android.support.v4.app.Fragment; +import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -19,14 +24,20 @@ import butterknife.BindView; import butterknife.ButterKnife; -import butterknife.OnClick; import butterknife.Unbinder; public class FeedFragment extends Fragment implements CallbackFragment<CallbackFragment.Callback> { @BindView(R.id.fragment_feed_feed) FeedView feedView; + @BindView(R.id.feed_collapsing_toolbar_layout) CollapsingToolbarLayout collapsingToolbarLayout; + @BindView(R.id.feed_toolbar) Toolbar toolbar; private Unbinder unbinder; private WikipediaApp app; private FeedCoordinator coordinator; + + public interface Callback extends CallbackFragment.Callback { + void onAddToolbar(Toolbar toolbar); + void onRemoveToolbar(Toolbar toolbar); + } public static FeedFragment newInstance() { return new FeedFragment(); @@ -49,6 +60,10 @@ unbinder = ButterKnife.bind(this, view); feedView.set(coordinator.getCards()); + if (getCallback() != null) { + getCallback().onAddToolbar(toolbar); + } + coordinator.setFeedUpdateListener(new FeedCoordinator.FeedUpdateListener() { @Override public void update(List<Card> cards) { @@ -63,19 +78,40 @@ return view; } + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(true); + } + @Override public void onDestroyView() { + if (getCallback() != null) { + getCallback().onRemoveToolbar(toolbar); + } unbinder.unbind(); super.onDestroyView(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.menu_feed, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_feed_search: + + // TODO: remove + coordinator.more(app.getSite()); + + return true; + default: + return super.onOptionsItemSelected(item); + } } @Override @Nullable public Callback getCallback() { return FragmentUtil.getCallback(this, Callback.class); } - - // TODO: [Feed] remove. - @OnClick(R.id.fragment_feed_add_card) void addCard() { - coordinator.more(app.getSite()); - feedView.update(); - } - } diff --git a/app/src/main/java/org/wikipedia/feed/view/FeedView.java b/app/src/main/java/org/wikipedia/feed/view/FeedView.java index 6519699..d2ed57d 100644 --- a/app/src/main/java/org/wikipedia/feed/view/FeedView.java +++ b/app/src/main/java/org/wikipedia/feed/view/FeedView.java @@ -1,12 +1,9 @@ package org.wikipedia.feed.view; -import android.annotation.TargetApi; import android.content.Context; -import android.os.Build; import android.support.annotation.NonNull; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.AttributeSet; -import android.widget.FrameLayout; import org.wikipedia.R; import org.wikipedia.feed.model.Card; @@ -16,11 +13,7 @@ import java.util.Collections; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; - -public class FeedView extends FrameLayout { - @BindView(R.id.view_feed_recycler) AutoFitRecyclerView recyclerView; +public class FeedView extends AutoFitRecyclerView { private StaggeredGridLayoutManager recyclerLayoutManager; private FeedRecyclerAdapter recyclerAdapter; @@ -39,17 +32,11 @@ init(); } - @TargetApi(Build.VERSION_CODES.LOLLIPOP) - public FeedView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - init(); - } - public void set(@NonNull List<Card> cards) { // TODO: should this class be responsible for showing a "no items in collection" view? It // would be nice to show placeholder elements while it loads. recyclerAdapter = new FeedRecyclerAdapter(cards); - recyclerView.setAdapter(recyclerAdapter); + setAdapter(recyclerAdapter); } public void update() { @@ -57,19 +44,15 @@ } private void init() { - inflate(getContext(), R.layout.view_feed, this); - ButterKnife.bind(this); - initRecycler(); - } - - private void initRecycler() { - recyclerLayoutManager = new StaggeredGridLayoutManager(recyclerView.getColumns(), + setVerticalScrollBarEnabled(true); + minColumnWidth((int) getResources().getDimension(R.dimen.view_feed_min_column_width)); + recyclerLayoutManager = new StaggeredGridLayoutManager(getColumns(), StaggeredGridLayoutManager.VERTICAL); - recyclerView.setLayoutManager(recyclerLayoutManager); - recyclerView.addItemDecoration(new MarginItemDecoration(getContext(), + setLayoutManager(recyclerLayoutManager); + addItemDecoration(new MarginItemDecoration(getContext(), R.dimen.view_list_card_margin_horizontal, R.dimen.view_list_card_margin_vertical, R.dimen.view_list_card_margin_horizontal, R.dimen.view_list_card_margin_vertical)); - recyclerView.callback(new RecyclerViewColumnCallback()); + callback(new RecyclerViewColumnCallback()); set(Collections.<Card>emptyList()); } diff --git a/app/src/main/java/org/wikipedia/feed/view/ListCardView.java b/app/src/main/java/org/wikipedia/feed/view/ListCardView.java index bc0ea68..64d75f7 100644 --- a/app/src/main/java/org/wikipedia/feed/view/ListCardView.java +++ b/app/src/main/java/org/wikipedia/feed/view/ListCardView.java @@ -62,6 +62,7 @@ R.dimen.view_list_card_item_margin)); recyclerView.addItemDecoration(new DrawableItemDecoration(getContext(), R.drawable.divider, true)); + recyclerView.setNestedScrollingEnabled(false); } protected abstract static class RecyclerAdapter<T> diff --git a/app/src/main/res/drawable/feed_app_bar.png b/app/src/main/res/drawable/feed_app_bar.png new file mode 100644 index 0000000..1229a29 --- /dev/null +++ b/app/src/main/res/drawable/feed_app_bar.png Binary files differ diff --git a/app/src/main/res/drawable/ic_search_black_24dp.xml b/app/src/main/res/drawable/ic_search_white_24dp.xml similarity index 92% rename from app/src/main/res/drawable/ic_search_black_24dp.xml rename to app/src/main/res/drawable/ic_search_white_24dp.xml index affc7ba..47432c1 100644 --- a/app/src/main/res/drawable/ic_search_black_24dp.xml +++ b/app/src/main/res/drawable/ic_search_white_24dp.xml @@ -4,6 +4,6 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> <path - android:fillColor="#FF000000" + android:fillColor="#FFFFFFFF" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> </vector> diff --git a/app/src/main/res/layout/fragment_feed.xml b/app/src/main/res/layout/fragment_feed.xml index c13729b..c77a153 100644 --- a/app/src/main/res/layout/fragment_feed.xml +++ b/app/src/main/res/layout/fragment_feed.xml @@ -1,37 +1,56 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<android.support.design.widget.CoordinatorLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:background="@color/feed_window_background" + android:fitsSystemWindows="true"> - <org.wikipedia.views.StatusBarBlankView + <android.support.design.widget.AppBarLayout android:layout_width="match_parent" - android:layout_height="wrap_content" /> + android:layout_height="260dp" + android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" + android:fitsSystemWindows="true"> - <TextView - style="@style/TextAppearance.AppCompat.Large" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/activity_vertical_margin" - android:layout_marginRight="@dimen/margin" - android:layout_marginLeft="@dimen/margin" - android:text="@string/activity_feed_title" /> + <android.support.design.widget.CollapsingToolbarLayout + android:id="@+id/feed_collapsing_toolbar_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + app:layout_scrollFlags="scroll|exitUntilCollapsed" + app:contentScrim="@color/main_toolbar_background" + app:titleEnabled="false"> - <!-- TODO: [Feed] remove. --> - <Button - android:id="@+id/fragment_feed_add_card" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginRight="@dimen/margin" - android:layout_marginBottom="@dimen/activity_vertical_margin" - android:layout_marginLeft="@dimen/margin" - android:text="Get more" /> + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scaleType="centerCrop" + android:fitsSystemWindows="true" + android:src="@drawable/feed_app_bar" + app:layout_collapseMode="parallax" + /> + + <android.support.v7.widget.Toolbar + android:id="@+id/feed_toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + app:title="@string/activity_feed_title" + app:background="@color/main_toolbar_background" + app:layout_collapseMode="pin" /> + </android.support.design.widget.CollapsingToolbarLayout> + + </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:layout_marginTop="-100dp" + android:scrollbars="vertical" android:paddingLeft="@dimen/view_list_card_margin_horizontal" - android:paddingRight="@dimen/view_list_card_margin_horizontal" /> + android:paddingRight="@dimen/view_list_card_margin_horizontal" + app:minColumnWidth="@dimen/view_feed_min_column_width" + app:layout_behavior="@string/appbar_scrolling_view_behavior"/> -</LinearLayout> \ No newline at end of file +</android.support.design.widget.CoordinatorLayout> diff --git a/app/src/main/res/layout/view_feed.xml b/app/src/main/res/layout/view_feed.xml deleted file mode 100644 index 128c7c9..0000000 --- a/app/src/main/res/layout/view_feed.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?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"> - - <org.wikipedia.views.AutoFitRecyclerView - android:id="@+id/view_feed_recycler" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:scrollbars="vertical" - app:minColumnWidth="@dimen/view_feed_min_column_width" /> - -</merge> \ No newline at end of file diff --git a/app/src/main/res/layout/view_search_bar.xml b/app/src/main/res/layout/view_search_bar.xml index 5650be7..c4c3d03 100644 --- a/app/src/main/res/layout/view_search_bar.xml +++ b/app/src/main/res/layout/view_search_bar.xml @@ -13,7 +13,7 @@ <ImageView android:layout_width="48dp" android:layout_height="48dp" - app:srcCompat="@drawable/ic_search_black_24dp" + app:srcCompat="@drawable/ic_search_white_24dp" android:scaleType="center" android:tint="@color/gray_background" android:contentDescription="@string/search_hint" /> diff --git a/app/src/main/res/menu/menu_feed.xml b/app/src/main/res/menu/menu_feed.xml new file mode 100644 index 0000000..050383e --- /dev/null +++ b/app/src/main/res/menu/menu_feed.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> + +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item android:id="@+id/menu_feed_search" + android:title="@string/search_hint" + android:icon="@drawable/ic_search_white_24dp" + app:showAsAction="ifRoom"/> +</menu> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7d4fda6..04b2183 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_min_column_width">229.3dp</dimen> - <dimen name="view_list_card_margin_vertical">16dp</dimen> + <dimen name="view_list_card_margin_vertical">8dp</dimen> <dimen name="view_list_card_margin_horizontal">5.3dp</dimen> <dimen name="view_list_card_item_margin">16dp</dimen> </resources> diff --git a/app/src/main/res/values/strings_no_translate.xml b/app/src/main/res/values/strings_no_translate.xml index 549380b..97b300d 100644 --- a/app/src/main/res/values/strings_no_translate.xml +++ b/app/src/main/res/values/strings_no_translate.xml @@ -42,7 +42,7 @@ <!-- The Feed --> <!-- TODO: [Feed] move translatable strings to strings.xml. --> - <string name="feed">Home</string> + <string name="feed">Explore Wikipedia</string> <string name="activity_feed_title">@string/feed</string> <string name="nav_item_feed">@string/feed</string> <string name="view_card_footer_button">See more</string> -- To view, visit https://gerrit.wikimedia.org/r/294544 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I93e4868594f19033c9fcd561d036719f21a8b8fe Gerrit-PatchSet: 4 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Dbrant <dbr...@wikimedia.org> Gerrit-Reviewer: BearND <bsitzm...@wikimedia.org> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org> Gerrit-Reviewer: Mholloway <mhollo...@wikimedia.org> Gerrit-Reviewer: Niedzielski <sniedziel...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits