Mholloway has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/350659 )
Change subject: Insert OfflineCard when offline
......................................................................
Insert OfflineCard when offline
Appends the OfflineCard to the end of the feed when an offline exception
is thrown and halts further loading.
Bug: T157381
Change-Id: Ia0f6a996c23b17f4a27d25cf8e8068609d3eefdd
---
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/offline/OfflineCardView.java
M app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
M app/src/main/res/layout/view_card_offline.xml
5 files changed, 70 insertions(+), 8 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/59/350659/1
diff --git a/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
b/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
index 2bd5662..dd0bf69 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedCoordinatorBase.java
@@ -10,6 +10,8 @@
import org.wikipedia.feed.offline.OfflineCard;
import org.wikipedia.feed.progress.ProgressCard;
import org.wikipedia.settings.Prefs;
+import org.wikipedia.util.ThrowableUtil;
+import org.wikipedia.util.log.L;
import java.util.ArrayList;
import java.util.Collections;
@@ -23,6 +25,7 @@
public interface FeedUpdateListener {
void insert(Card card, int pos);
+ void swap(Card card, int pos);
void remove(Card card, int pos);
}
@@ -64,11 +67,15 @@
}
pendingClients.clear();
cards.clear();
- insertCard(progressCard, 0);
}
public void more(@NonNull WikiSite wiki) {
this.wiki = wiki;
+
+ if (cards.size() == 0) {
+ insertCard(progressCard, 0);
+ }
+
if (cards.size() > 1) {
currentAge++;
}
@@ -97,12 +104,12 @@
insertCard(card, position);
}
- void moreFromOffline(@NonNull WikiSite wiki) {
- int lastIndex = cards.size() - 1;
- Card card = cards.get(lastIndex);
+ void retryFromOffline(@NonNull WikiSite wiki) {
+ Card card = cards.get(lastIndex());
if (card instanceof OfflineCard) {
- removeCard(card, lastIndex);
+ swapCard(progressCard, lastIndex());
}
+ currentAge--;
more(wiki);
}
@@ -110,6 +117,10 @@
protected void addPendingClient(FeedClient client) {
pendingClients.add(client);
+ }
+
+ private int lastIndex() {
+ return cards.size() - 1;
}
private void requestNextCard(@NonNull WikiSite wiki) {
@@ -140,8 +151,14 @@
}
@Override public void error(@NonNull Throwable caught) {
- //noinspection ConstantConditions
- requestNextCard(wiki);
+ if (ThrowableUtil.isOffline(caught)) {
+ appendCard(new OfflineCard());
+ removeProgressCard();
+ } else {
+ //noinspection ConstantConditions
+ requestNextCard(wiki);
+ L.w(caught);
+ }
}
}
@@ -157,6 +174,14 @@
}
}
+ private void swapCard(@NonNull Card card, int position) {
+ cards.remove(cards.get(position));
+ cards.add(position, card);
+ if (updateListener != null) {
+ updateListener.swap(card, position);
+ }
+ }
+
private void removeCard(@NonNull Card card, int position) {
cards.remove(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 6601a92..dabf4c0 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
@@ -122,6 +122,15 @@
}
}
+ @Override public void swap(Card card, int pos) {
+ if (isAdded()) {
+ swipeRefreshLayout.setRefreshing(false);
+ if (feedView != null && feedAdapter != null) {
+ feedAdapter.notifyItemChanged(pos);
+ }
+ }
+ }
+
@Override public void remove(Card card, int pos) {
if (isAdded()) {
swipeRefreshLayout.setRefreshing(false);
@@ -273,7 +282,7 @@
@Override
public void onRetryFromOffline() {
funnel.requestMore(coordinator.getAge());
- coordinator.moreFromOffline(app.getWikiSite());
+ coordinator.retryFromOffline(app.getWikiSite());
}
@Override
diff --git a/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
b/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
index a3f925d..1a3e99d 100644
--- a/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
+++ b/app/src/main/java/org/wikipedia/feed/offline/OfflineCardView.java
@@ -4,16 +4,20 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.widget.LinearLayout;
+import android.widget.Space;
import org.wikipedia.R;
import org.wikipedia.feed.model.Card;
import org.wikipedia.feed.view.FeedAdapter;
import org.wikipedia.feed.view.FeedCardView;
+import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class OfflineCardView extends LinearLayout implements
FeedCardView<Card> {
+ @BindView(R.id.view_card_offline_top_padding) Space padding;
+
@Nullable private FeedAdapter.Callback callback;
public OfflineCardView(Context context) {
@@ -32,6 +36,19 @@
this.callback = callback;
}
+ // This view has a transparent background, so it'll need a little padding
if it appears directly
+ // below the search card, so that it doesn't partially overlap the dark
blue background.
+ public void setTopPadding() {
+ padding.setVisibility(VISIBLE);
+ }
+
+ // Hide the top padding when detached so that if this View is reused
further down the feed, it
+ // won't have the leftover padding inappropriately.
+ @Override public void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ padding.setVisibility(GONE);
+ }
+
@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 e56f504..c0eccc3 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
@@ -13,6 +13,7 @@
import org.wikipedia.feed.model.Card;
import org.wikipedia.feed.model.CardType;
import org.wikipedia.feed.news.NewsListCardView;
+import org.wikipedia.feed.offline.OfflineCardView;
import org.wikipedia.feed.searchbar.SearchCardView;
import org.wikipedia.views.DefaultRecyclerAdapter;
import org.wikipedia.views.DefaultViewHolder;
@@ -54,6 +55,10 @@
//noinspection unchecked
((FeedCardView<Card>) view).setCard(item);
+
+ if (view instanceof OfflineCardView && position == 1) {
+ ((OfflineCardView) view).setTopPadding();
+ }
}
@Override public void onViewAttachedToWindow(DefaultViewHolder<T> holder) {
diff --git a/app/src/main/res/layout/view_card_offline.xml
b/app/src/main/res/layout/view_card_offline.xml
index 52eed58..0f0ecfc 100644
--- a/app/src/main/res/layout/view_card_offline.xml
+++ b/app/src/main/res/layout/view_card_offline.xml
@@ -7,6 +7,12 @@
android:orientation="vertical"
android:gravity="center">
+ <Space
+ android:id="@+id/view_card_offline_top_padding"
+ android:layout_width="match_parent"
+ android:layout_height="36dp"
+ android:visibility="gone"/>
+
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
--
To view, visit https://gerrit.wikimedia.org/r/350659
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia0f6a996c23b17f4a27d25cf8e8068609d3eefdd
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits