jenkins-bot has submitted this change and it was merged.

Change subject: Announcement cards in the feed.
......................................................................


Announcement cards in the feed.

This is not the final design, just the first working version.
Design refinements to appear later.

Bug: T140012
Change-Id: I1353688655ae6d8695db0d97c1eb51e7718d3d38
---
M app/src/main/java/org/wikipedia/feed/FeedFragment.java
A app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCard.java
A app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCardView.java
M app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java
M app/src/main/java/org/wikipedia/feed/model/CardType.java
M app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
A app/src/main/res/layout/view_card_announcement.xml
7 files changed, 153 insertions(+), 9 deletions(-)

Approvals:
  jenkins-bot: Verified
  Niedzielski: Looks good to me, approved



diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java 
b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
index 4efad4a..234a63f 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
@@ -286,6 +286,11 @@
                 getCallback().onFeaturedImageSelected(card);
             }
         }
+
+        @Override
+        public void onAnnouncementAction(@NonNull Uri uri) {
+            UriUtil.handleExternalLink(getContext(), uri);
+        }
     }
 
     private class FeedScrollListener extends RecyclerView.OnScrollListener {
diff --git 
a/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCard.java 
b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCard.java
new file mode 100644
index 0000000..96d242c
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCard.java
@@ -0,0 +1,53 @@
+package org.wikipedia.feed.announcement;
+
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import org.wikipedia.feed.model.Card;
+import org.wikipedia.feed.model.CardType;
+
+public class AnnouncementCard extends Card {
+    @NonNull private final Announcement announcement;
+
+    public AnnouncementCard(@NonNull Announcement announcement) {
+        this.announcement = announcement;
+    }
+
+    @Override
+    @NonNull
+    public String title() {
+        return announcement.type();
+    }
+
+    @Nullable
+    @Override
+    public String extract() {
+        return announcement.text();
+    }
+
+    public boolean hasAction() {
+        return announcement.hasAction();
+    }
+
+    @NonNull
+    public String actionTitle() {
+        return announcement.actionTitle();
+    }
+
+    @NonNull
+    public Uri actionUri() {
+        return Uri.parse(announcement.actionUrl());
+    }
+
+    @NonNull
+    @Override
+    public CardType type() {
+        return CardType.ANNOUNCEMENT;
+    }
+
+    @Override
+    protected int dismissHashCode() {
+        return announcement.id().hashCode();
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCardView.java 
b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCardView.java
new file mode 100644
index 0000000..c1fca41
--- /dev/null
+++ 
b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCardView.java
@@ -0,0 +1,50 @@
+package org.wikipedia.feed.announcement;
+
+import android.content.Context;
+import android.net.Uri;
+import android.support.annotation.NonNull;
+import android.widget.TextView;
+
+import org.wikipedia.R;
+import org.wikipedia.feed.view.DefaultFeedCardView;
+import org.wikipedia.views.ItemTouchHelperSwipeAdapter;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+
+public class AnnouncementCardView extends DefaultFeedCardView<AnnouncementCard>
+        implements ItemTouchHelperSwipeAdapter.SwipeableView {
+    public interface Callback {
+        void onAnnouncementAction(@NonNull Uri uri);
+    }
+
+    @BindView(R.id.view_announcement_text) TextView textView;
+    @BindView(R.id.view_announcement_action) TextView actionView;
+
+    public AnnouncementCardView(Context context) {
+        super(context);
+        inflate(context, R.layout.view_card_announcement, this);
+        ButterKnife.bind(this);
+    }
+
+    @Override public void setCard(@NonNull AnnouncementCard card) {
+        super.setCard(card);
+
+        textView.setText(card.extract());
+
+        if (!card.hasAction()) {
+            actionView.setVisibility(GONE);
+        } else {
+            actionView.setVisibility(VISIBLE);
+            actionView.setText(card.actionTitle());
+        }
+    }
+
+    @OnClick(R.id.view_announcement_action)
+    void onActionClick() {
+        if (getCallback() != null && getCard() != null) {
+            getCallback().onAnnouncementAction(getCard().actionUri());
+        }
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java 
b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java
index aa23fd5..7cf5c9c 100644
--- a/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java
+++ b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java
@@ -98,19 +98,15 @@
         }
     }
 
-    private static List<Card> buildCards(@NonNull List<Announcement> 
announcements) {
+    @VisibleForTesting
+    static List<Card> buildCards(@NonNull List<Announcement> announcements) {
         List<Card> cards = new ArrayList<>();
         String country = getGeoIPCountry();
         Date now = new Date();
         for (Announcement announcement : announcements) {
-            if (!shouldShow(announcement, country, now)) {
-                continue;
+            if (shouldShow(announcement, country, now)) {
+                cards.add(new AnnouncementCard(announcement));
             }
-
-            // TODO: add this card!
-
-            L.d("yes!!");
-
         }
         return cards;
     }
diff --git a/app/src/main/java/org/wikipedia/feed/model/CardType.java 
b/app/src/main/java/org/wikipedia/feed/model/CardType.java
index a6dc189..33f7d22 100644
--- a/app/src/main/java/org/wikipedia/feed/model/CardType.java
+++ b/app/src/main/java/org/wikipedia/feed/model/CardType.java
@@ -3,6 +3,7 @@
 import android.content.Context;
 import android.support.annotation.NonNull;
 
+import org.wikipedia.feed.announcement.AnnouncementCardView;
 import org.wikipedia.feed.becauseyouread.BecauseYouReadCardView;
 import org.wikipedia.feed.continuereading.ContinueReadingCardView;
 import org.wikipedia.feed.featured.FeaturedArticleCardView;
@@ -67,6 +68,11 @@
     MOST_READ_ITEM(10),
     NEWS_ITEM(11),
     NEWS_ITEM_LINK(12),
+    ANNOUNCEMENT(13) {
+        @NonNull @Override public FeedCardView<?> newView(@NonNull Context 
ctx) {
+            return new AnnouncementCardView(ctx);
+        }
+    },
     PROGRESS(99) {
         @NonNull @Override public FeedCardView<?> newView(@NonNull Context 
ctx) {
             return new ProgressCardView(ctx);
diff --git a/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java 
b/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
index 79a7352..4077974 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
@@ -7,6 +7,7 @@
 import android.view.ViewGroup;
 
 import org.wikipedia.feed.FeedCoordinatorBase;
+import org.wikipedia.feed.announcement.AnnouncementCardView;
 import org.wikipedia.feed.image.FeaturedImageCardView;
 import org.wikipedia.feed.model.Card;
 import org.wikipedia.feed.model.CardType;
@@ -19,7 +20,8 @@
 public class FeedAdapter<T extends View & FeedCardView<?>> extends 
DefaultRecyclerAdapter<Card, T> {
     public interface Callback extends ItemTouchHelperSwipeAdapter.Callback,
             PageTitleListCardItemView.Callback, CardHeaderView.Callback,
-            FeaturedImageCardView.Callback, SearchCardView.Callback, 
NewsListCardView.Callback {
+            FeaturedImageCardView.Callback, SearchCardView.Callback, 
NewsListCardView.Callback,
+            AnnouncementCardView.Callback {
         void onRequestMore();
     }
 
diff --git a/app/src/main/res/layout/view_card_announcement.xml 
b/app/src/main/res/layout/view_card_announcement.xml
new file mode 100644
index 0000000..32f7095
--- /dev/null
+++ b/app/src/main/res/layout/view_card_announcement.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android";
+    xmlns:app="http://schemas.android.com/apk/res-auto";
+    xmlns:tools="http://schemas.android.com/tools";
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingTop="16dp">
+
+    <TextView
+        android:id="@+id/view_announcement_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        style="@style/RtlAwareTextView"
+        android:textColor="?attr/feed_text_primary_color"
+        android:paddingLeft="16dp"
+        android:paddingRight="16dp"
+        android:textSize="16sp"
+        tools:text="Lorem ipsum"/>
+
+    <TextView
+        android:id="@+id/view_announcement_action"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="end"
+        android:layout_margin="4dp"
+        style="@style/Widget.AppCompat.Button.Borderless"
+        android:textColor="?attr/colorPrimary"
+        tools:text="Lorem ipsum"/>
+
+</LinearLayout>
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/322782
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I1353688655ae6d8695db0d97c1eb51e7718d3d38
Gerrit-PatchSet: 6
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