jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/350430 )
Change subject: Add OfflineCard/View
......................................................................
Add OfflineCard/View
Layout, Java class, and callback interface for an offline "card" to be
injected into the feed when a network request fails.
TODO: Add to the feed when offline.
TODO: Add unit tests.
Bug: T157381
Change-Id: I3c5375d075fc4ae8f311a67f730835bc0cff3d8b
---
M app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
M app/src/main/java/org/wikipedia/feed/FeedFragment.java
M app/src/main/java/org/wikipedia/feed/model/CardType.java
A app/src/main/java/org/wikipedia/feed/offline/OfflineCard.java
A app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
M app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
M app/src/main/java/org/wikipedia/util/ThrowableUtil.java
A app/src/main/res/layout/view_card_offline.xml
M app/src/main/res/values-qq/strings.xml
M app/src/main/res/values/strings.xml
10 files changed, 117 insertions(+), 11 deletions(-)
Approvals:
Niedzielski: Looks good to me, approved
jenkins-bot: Verified
diff --git a/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
b/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
index 7ec53d7..2bd5662 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
@@ -7,6 +7,7 @@
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.feed.dataclient.FeedClient;
import org.wikipedia.feed.model.Card;
+import org.wikipedia.feed.offline.OfflineCard;
import org.wikipedia.feed.progress.ProgressCard;
import org.wikipedia.settings.Prefs;
@@ -96,6 +97,15 @@
insertCard(card, position);
}
+ void moreFromOffline(@NonNull WikiSite wiki) {
+ int lastIndex = cards.size() - 1;
+ Card card = cards.get(lastIndex);
+ if (card instanceof OfflineCard) {
+ removeCard(card, lastIndex);
+ }
+ more(wiki);
+ }
+
protected abstract void buildScript(int age);
protected void addPendingClient(FeedClient client) {
@@ -115,32 +125,31 @@
if (pos < 0) {
return;
}
- cards.remove(progressCard);
- if (updateListener != null) {
- updateListener.remove(progressCard, pos);
- }
+ removeCard(progressCard, pos);
}
private class ClientRequestCallback implements FeedClient.Callback {
- @Override
- public void success(@NonNull List<? extends Card> cardList) {
+ @Override public void success(@NonNull List<? extends Card> cardList) {
for (Card card : cardList) {
if (!isCardHidden(card)) {
- int progressPos = cards.indexOf(progressCard);
- insertCard(card, progressPos >= 0 ? progressPos :
cards.size());
+ appendCard(card);
}
}
//noinspection ConstantConditions
requestNextCard(wiki);
}
- @Override
- public void error(@NonNull Throwable caught) {
+ @Override public void error(@NonNull Throwable caught) {
//noinspection ConstantConditions
requestNextCard(wiki);
}
}
+ private void appendCard(@NonNull Card card) {
+ int progressPos = cards.indexOf(progressCard);
+ insertCard(card, progressPos >= 0 ? progressPos : cards.size());
+ }
+
private void insertCard(@NonNull Card card, int position) {
cards.add(position, card);
if (updateListener != null) {
diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
index 7af80b2..6601a92 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
@@ -271,6 +271,12 @@
}
@Override
+ public void onRetryFromOffline() {
+ funnel.requestMore(coordinator.getAge());
+ coordinator.moreFromOffline(app.getWikiSite());
+ }
+
+ @Override
public void onError(@NonNull Throwable t) {
FeedbackUtil.showError(getActivity(), t);
}
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 e7fd770..d721e97 100644
--- a/app/src/main/java/org/wikipedia/feed/model/CardType.java
+++ b/app/src/main/java/org/wikipedia/feed/model/CardType.java
@@ -11,6 +11,7 @@
import org.wikipedia.feed.mainpage.MainPageCardView;
import org.wikipedia.feed.mostread.MostReadCardView;
import org.wikipedia.feed.news.NewsListCardView;
+import org.wikipedia.feed.offline.OfflineCardView;
import org.wikipedia.feed.progress.ProgressCardView;
import org.wikipedia.feed.random.RandomCardView;
import org.wikipedia.feed.searchbar.SearchCardView;
@@ -83,6 +84,11 @@
return new AnnouncementCardView(ctx);
}
},
+ OFFLINE(98) {
+ @NonNull @Override public FeedCardView<?> newView(@NonNull Context
ctx) {
+ return new OfflineCardView(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/offline/OfflineCard.java
b/app/src/main/java/org/wikipedia/feed/offline/OfflineCard.java
new file mode 100644
index 0000000..2bd4212
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/feed/offline/OfflineCard.java
@@ -0,0 +1,12 @@
+package org.wikipedia.feed.offline;
+
+import android.support.annotation.NonNull;
+
+import org.wikipedia.feed.model.Card;
+import org.wikipedia.feed.model.CardType;
+
+public class OfflineCard extends Card {
+ @NonNull @Override public CardType type() {
+ return CardType.OFFLINE;
+ }
+}
diff --git a/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
b/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
new file mode 100644
index 0000000..a3f925d
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
@@ -0,0 +1,39 @@
+package org.wikipedia.feed.offline;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.widget.LinearLayout;
+
+import org.wikipedia.R;
+import org.wikipedia.feed.model.Card;
+import org.wikipedia.feed.view.FeedAdapter;
+import org.wikipedia.feed.view.FeedCardView;
+
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+
+public class OfflineCardView extends LinearLayout implements
FeedCardView<Card> {
+ @Nullable private FeedAdapter.Callback callback;
+
+ public OfflineCardView(Context context) {
+ super(context);
+ inflate(getContext(), R.layout.view_card_offline, this);
+ ButterKnife.bind(this);
+ }
+
+ @OnClick(R.id.view_card_offline_button_retry) void onRetryClick() {
+ if (callback != null) {
+ callback.onRetryFromOffline();
+ }
+ }
+
+ @Override public void setCallback(@Nullable FeedAdapter.Callback callback)
{
+ this.callback = callback;
+ }
+
+ @Override public void setCard(@NonNull Card card) { }
+ @Override @Nullable public Card getCard() {
+ return null;
+ }
+}
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 0d6e1e9..e56f504 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
@@ -25,6 +25,7 @@
AnnouncementCardView.Callback, FeaturedArticleCardView.Callback {
void onShowCard(@Nullable Card card);
void onRequestMore();
+ void onRetryFromOffline();
void onError(@NonNull Throwable t);
}
diff --git a/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
b/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
index e2d8ed2..e01ec1a 100644
--- a/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
+++ b/app/src/main/java/org/wikipedia/util/ThrowableUtil.java
@@ -83,7 +83,7 @@
return result;
}
- public static boolean isOffline(@NonNull Throwable caught) {
+ public static boolean isOffline(@Nullable Throwable caught) {
return caught instanceof UnknownHostException
|| caught instanceof SocketException
|| caught instanceof SocketTimeoutException;
diff --git a/app/src/main/res/layout/view_card_offline.xml
b/app/src/main/res/layout/view_card_offline.xml
new file mode 100644
index 0000000..52eed58
--- /dev/null
+++ b/app/src/main/res/layout/view_card_offline.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_margin="12dp"
+ android:orientation="vertical"
+ android:gravity="center">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:text="@string/view_offline_card_text"
+ android:textColor="@color/view_wiki_error_text_color"
+ android:textAlignment="center"
+ android:textSize="16sp" />
+
+ <TextView
+ android:id="@+id/view_card_offline_button_retry"
+ style="@style/Widget.AppCompat.Button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="8dp"
+ android:background="@android:color/white"
+ android:text="@string/page_error_retry"
+ android:minHeight="36dp"
+ android:textSize="14sp"
+ android:fontFamily="sans-serif-medium"
+ android:textColor="@color/view_wiki_error_text_color"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values-qq/strings.xml
b/app/src/main/res/values-qq/strings.xml
index ba795cf..b335f91 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -482,6 +482,7 @@
{{Identical|Today}}</string>
<string name="view_announcement_card_negative_action">Button label that
allows the user to decline the action that this card is requesting.
{{Identical|No thanks}}</string>
+ <string name="view_offline_card_text">Message in the feed informing the user
that additional content cannot be loaded while offline.</string>
<string name="description_edit_text_hint">Hint text that is shown when the
description field is empty.</string>
<string name="description_edit_save">Hint for the button that is pressed for
saving the new description.
{{Identical|Publish}}</string>
diff --git a/app/src/main/res/values/strings.xml
b/app/src/main/res/values/strings.xml
index a6ed98e..96e7674 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -370,6 +370,7 @@
</plurals>
<string name="view_continue_reading_card_subtitle_today">Today</string>
<string name="view_announcement_card_negative_action">No thanks</string>
+ <string name="view_offline_card_text">Content cannot be loaded when
offline.</string>
<!-- /The Feed -->
<!-- Description editing -->
--
To view, visit https://gerrit.wikimedia.org/r/350430
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3c5375d075fc4ae8f311a67f730835bc0cff3d8b
Gerrit-PatchSet: 2
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits