Dbrant has uploaded a new change for review. https://gerrit.wikimedia.org/r/322782
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, 162 insertions(+), 3 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/82/322782/1 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..4aa811d --- /dev/null +++ b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCard.java @@ -0,0 +1,63 @@ +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(); + } + + @Override + @NonNull + public String subtitle() { + return announcement.type(); + } + + @Override + @Nullable + public Uri image() { + return null; + } + + @Nullable + @Override + public String extract() { + return announcement.text(); + } + + public boolean hasAction() { + return announcement.action() != null; + } + + @NonNull + public String actionTitle() { + return announcement.action().title(); + } + + @NonNull + public Uri actionUri() { + return Uri.parse(announcement.action().url()); + } + + @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..0e1cf4e --- /dev/null +++ b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementCardView.java @@ -0,0 +1,51 @@ +package org.wikipedia.feed.announcement; + +import android.content.Context; +import android.net.Uri; +import android.support.annotation.NonNull; +import android.widget.Button; +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) Button actionButton; + + public AnnouncementCardView(Context context) { + super(context); + inflate(getContext(), 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()) { + actionButton.setVisibility(GONE); + } else { + actionButton.setVisibility(VISIBLE); + actionButton.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 d712ede..cf12b51 100644 --- a/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java +++ b/app/src/main/java/org/wikipedia/feed/announcement/AnnouncementClient.java @@ -95,7 +95,7 @@ if (!shouldShow(announcement)) { continue; } - L.d("Showing!"); + cards.add(new AnnouncementCard(announcement)); } return cards; } @@ -104,7 +104,7 @@ String country = getGeoIPCountry(); Date now = new Date(); if (announcement.platforms() != null - && !announcement.countries().contains(PLATFORM_CODE)) { + && !announcement.platforms().contains(PLATFORM_CODE)) { return false; } if (announcement.countries() != null 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..d7cffcc --- /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"/> + + <Button + 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: newchange Gerrit-Change-Id: I1353688655ae6d8695db0d97c1eb51e7718d3d38 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Dbrant <dbr...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits