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

Reply via email to