Mholloway has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/338107 )

Change subject: Update TFA footer saved indicators based on user actions
......................................................................

Update TFA footer saved indicators based on user actions

Updates the visual indication of saved state immediately upon returning
from AddToReadingListDialog.

Updates all TFA card saved indicators upon returning to the feed fragment
from another nav tab, and in onResume for when returning from a separate,
stand-alone activity and/or fragment, such as PageActivity.

Bug: T139377
Change-Id: I510863003de30096108a3e20beb0917f522bb59a
---
M app/src/main/java/org/wikipedia/feed/FeedFragment.java
M app/src/main/java/org/wikipedia/feed/featured/FeaturedArticleCardView.java
M app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
M app/src/main/java/org/wikipedia/feed/view/FeedView.java
M app/src/main/java/org/wikipedia/main/MainFragment.java
5 files changed, 68 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/07/338107/1

diff --git a/app/src/main/java/org/wikipedia/feed/FeedFragment.java 
b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
index 70cef84..abd677e 100644
--- a/app/src/main/java/org/wikipedia/feed/FeedFragment.java
+++ b/app/src/main/java/org/wikipedia/feed/FeedFragment.java
@@ -22,11 +22,13 @@
 import org.wikipedia.WikipediaApp;
 import org.wikipedia.activity.FragmentUtil;
 import org.wikipedia.analytics.FeedFunnel;
+import org.wikipedia.feed.featured.FeaturedArticleCard;
 import org.wikipedia.feed.image.FeaturedImage;
 import org.wikipedia.feed.image.FeaturedImageCard;
 import org.wikipedia.feed.model.Card;
 import org.wikipedia.feed.news.NewsItemCard;
 import org.wikipedia.feed.view.FeedAdapter;
+import org.wikipedia.feed.view.FeedCardView;
 import org.wikipedia.feed.view.FeedView;
 import org.wikipedia.history.HistoryEntry;
 import org.wikipedia.settings.Prefs;
@@ -62,6 +64,7 @@
         void onFeedVoiceSearchRequested();
         void onFeedSelectPage(HistoryEntry entry);
         void onFeedAddPageToList(HistoryEntry entry);
+        void onFeedAddPageToList(FeedFragment fragment, FeaturedArticleCard 
card, HistoryEntry entry);
         void onFeedSharePage(HistoryEntry entry);
         void onFeedNewsItemSelected(NewsItemCard card);
         void onFeedShareImage(FeaturedImageCard card);
@@ -84,6 +87,21 @@
         coordinator = new FeedCoordinator(app);
         coordinator.more(app.getWikiSite());
         funnel = new FeedFunnel(app);
+    }
+
+    public void updateCardViews() {
+        for (Card card : coordinator.getCards()) {
+            if (card instanceof FeaturedArticleCard) {
+                updateView(card);
+            }
+        }
+    }
+
+    public <T extends Card> void updateView(T card) {
+        FeedCardView<T> view = ((FeedCardView<T>) 
feedView.findViewByPosition(feedAdapter.getItemPosition(card)));
+        if (view != null) {
+            view.setCard(card);
+        }
     }
 
     @Nullable @Override public View onCreateView(LayoutInflater inflater,
@@ -138,6 +156,12 @@
         });
 
         return view;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        updateCardViews();
     }
 
     @Override
@@ -241,6 +265,14 @@
         }
 
         @Override
+        public void onAddPageToList(@NonNull FeaturedArticleCard card, 
@NonNull HistoryEntry entry) {
+            ((FeedCardView<FeaturedArticleCard>) 
feedView.findViewByPosition(feedAdapter.getItemPosition(card))).setCard(card);
+            if (getCallback() != null) {
+                getCallback().onFeedAddPageToList(FeedFragment.this, card, 
entry);
+            }
+        }
+
+        @Override
         public void onSharePage(@NonNull HistoryEntry entry) {
             if (getCallback() != null) {
                 getCallback().onFeedSharePage(entry);
diff --git 
a/app/src/main/java/org/wikipedia/feed/featured/FeaturedArticleCardView.java 
b/app/src/main/java/org/wikipedia/feed/featured/FeaturedArticleCardView.java
index b83668b..2bd01be 100644
--- a/app/src/main/java/org/wikipedia/feed/featured/FeaturedArticleCardView.java
+++ b/app/src/main/java/org/wikipedia/feed/featured/FeaturedArticleCardView.java
@@ -29,6 +29,10 @@
 
 public class FeaturedArticleCardView extends 
DefaultFeedCardView<FeaturedArticleCard>
         implements ItemTouchHelperSwipeAdapter.SwipeableView {
+    public interface Callback {
+        void onAddPageToList(@NonNull FeaturedArticleCard card, @NonNull 
HistoryEntry entry);
+    }
+
     @BindView(R.id.view_featured_article_card_header) View headerView;
     @BindView(R.id.view_featured_article_card_footer) View footerView;
     @BindView(R.id.view_featured_article_card_image) 
FaceAndColorDetectImageView imageView;
@@ -151,7 +155,7 @@
         @Override
         public void onClick(View v) {
             if (getCallback() != null && getCard() != null) {
-                
getCallback().onAddPageToList(getCard().historyEntry(HistoryEntry.SOURCE_FEED_FEATURED));
+                getCallback().onAddPageToList(getCard(), 
getCard().historyEntry(HistoryEntry.SOURCE_FEED_FEATURED));
             }
         }
     }
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 d968e3e..d10cc78 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedAdapter.java
@@ -8,6 +8,7 @@
 
 import org.wikipedia.feed.FeedCoordinatorBase;
 import org.wikipedia.feed.announcement.AnnouncementCardView;
+import org.wikipedia.feed.featured.FeaturedArticleCardView;
 import org.wikipedia.feed.image.FeaturedImageCardView;
 import org.wikipedia.feed.model.Card;
 import org.wikipedia.feed.model.CardType;
@@ -21,7 +22,7 @@
     public interface Callback extends ItemTouchHelperSwipeAdapter.Callback,
             PageTitleListCardItemView.Callback, CardHeaderView.Callback,
             FeaturedImageCardView.Callback, SearchCardView.Callback, 
NewsListCardView.Callback,
-            AnnouncementCardView.Callback {
+            AnnouncementCardView.Callback, FeaturedArticleCardView.Callback {
         void onRequestMore();
     }
 
@@ -72,6 +73,10 @@
         return item(position).type().code();
     }
 
+    public int getItemPosition(@NonNull Card card) {
+        return items().indexOf(card);
+    }
+
     @NonNull private T newView(@NonNull Context context, int viewType) {
         //noinspection unchecked
         return (T) CardType.of(viewType).newView(context);
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 e469bae..e907d84 100644
--- a/app/src/main/java/org/wikipedia/feed/view/FeedView.java
+++ b/app/src/main/java/org/wikipedia/feed/view/FeedView.java
@@ -54,6 +54,10 @@
         return visibleItems[0];
     }
 
+    public View findViewByPosition(int pos) {
+        return getLayoutManager().findViewByPosition(pos);
+    }
+
     private void init() {
         setVerticalScrollBarEnabled(true);
         recyclerLayoutManager = new StaggeredGridLayoutManager(getColumns(),
diff --git a/app/src/main/java/org/wikipedia/main/MainFragment.java 
b/app/src/main/java/org/wikipedia/main/MainFragment.java
index 25d3fb6..1f119f0 100644
--- a/app/src/main/java/org/wikipedia/main/MainFragment.java
+++ b/app/src/main/java/org/wikipedia/main/MainFragment.java
@@ -5,6 +5,7 @@
 import android.app.Activity;
 import android.app.DownloadManager;
 import android.content.ActivityNotFoundException;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.graphics.Bitmap;
@@ -33,6 +34,7 @@
 import org.wikipedia.analytics.IntentFunnel;
 import org.wikipedia.analytics.LoginFunnel;
 import org.wikipedia.feed.FeedFragment;
+import org.wikipedia.feed.featured.FeaturedArticleCard;
 import org.wikipedia.feed.image.FeaturedImage;
 import org.wikipedia.feed.image.FeaturedImageCard;
 import org.wikipedia.feed.news.NewsActivity;
@@ -233,6 +235,20 @@
                         AddToReadingListDialog.InvokeSource.FEED));
     }
 
+    @Override public void onFeedAddPageToList(@NonNull final FeedFragment 
fragment,
+                                              @NonNull final 
FeaturedArticleCard card,
+                                              @NonNull HistoryEntry entry) {
+        bottomSheetPresenter.show(getChildFragmentManager(),
+                AddToReadingListDialog.newInstance(entry.getTitle(),
+                        AddToReadingListDialog.InvokeSource.FEED,
+                        new DialogInterface.OnDismissListener() {
+                            @Override
+                            public void onDismiss(DialogInterface 
dialogInterface) {
+                                fragment.updateView(card);
+                            }
+                        }));
+    }
+
     @Override public void onFeedSharePage(HistoryEntry entry) {
         ShareUtil.shareText(getContext(), entry.getTitle());
     }
@@ -400,6 +416,11 @@
     }
 
     @OnPageChange(R.id.fragment_main_view_pager) void onTabChanged(int 
position) {
+        Fragment fragment = ((NavTabFragmentPagerAdapter) 
viewPager.getAdapter()).getCurrentFragment();
+        if (fragment instanceof FeedFragment) {
+           ((FeedFragment) fragment).updateCardViews();
+        }
+
         Callback callback = callback();
         if (callback != null) {
             NavTab tab = NavTab.of(position);

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I510863003de30096108a3e20beb0917f522bb59a
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

Reply via email to