Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1179)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java

Issue 2061803002: 📰 The Status card reports disabled sync states (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@simplifyBridge
Patch Set: yolo: another big bag of changes Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java
index 72d428aa54dc5800a3afaa018915ce8ef7be15d6..217949aa121b78293dc4e0111fbf2811855e41e9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/NewTabPageAdapter.java
@@ -16,6 +16,7 @@
import org.chromium.chrome.browser.ntp.NewTabPageLayout;
import org.chromium.chrome.browser.ntp.NewTabPageUma;
import org.chromium.chrome.browser.ntp.NewTabPageView.NewTabPageManager;
+import org.chromium.chrome.browser.ntp.snippets.DisabledReason;
import org.chromium.chrome.browser.ntp.snippets.SnippetArticle;
import org.chromium.chrome.browser.ntp.snippets.SnippetArticleViewHolder;
import org.chromium.chrome.browser.ntp.snippets.SnippetHeaderListItem;
@@ -35,10 +36,17 @@
public class NewTabPageAdapter extends Adapter<NewTabPageViewHolder> implements SnippetsObserver {
private static final String TAG = "Ntp";
+ /**
+ * Position of the first card in the adapter. This is always going to be a valid position,
+ * occupied either by a card showing content or by a status card.
+ */
+ private static final int FIRST_CARD_POSITION = 2;
+
private final NewTabPageManager mNewTabPageManager;
private final NewTabPageLayout mNewTabPageLayout;
private final AboveTheFoldListItem mAboveTheFoldListItem;
private final SnippetHeaderListItem mHeaderListItem;
+ private StatusListItem mStatusListItem;
private final List<NewTabPageListItem> mNewTabPageListItems;
private final ItemTouchCallbacks mItemTouchCallbacks;
private NewTabPageRecyclerView mRecyclerView;
@@ -113,6 +121,7 @@ public NewTabPageAdapter(NewTabPageManager manager, NewTabPageLayout newTabPageL
mNewTabPageListItems = new ArrayList<NewTabPageListItem>();
mWantsSnippets = true;
mSnippetsBridge = snippetsBridge;
+ mStatusListItem = StatusListItem.create(snippetsBridge.getDisabledReason(), this, manager);
loadSnippets(new ArrayList<SnippetArticle>());
mSnippetsBridge.setObserver(this);
@@ -141,10 +150,22 @@ public void onSnippetsReceived(List<SnippetArticle> listSnippets) {
}
@Override
- public void onSnippetsDisabled() {
- // Clear the snippets, wait for new updates in case the service is reenabled later.
- loadSnippets(new ArrayList<SnippetArticle>());
- mWantsSnippets = true;
+ public void onDisabledReasonChanged(int disabledReason) {
+ // Observers should not be registered for that state
+ assert disabledReason != DisabledReason.EXPLICITLY_DISABLED;
+
+ mStatusListItem = StatusListItem.create(disabledReason, this, mNewTabPageManager);
+ if (getItemCount() > 4 /* above-the-fold + header + card + spacing */) {
+ // We had many items, implies that the service was previously enabled and just
+ // transitioned. to a disabled state. We now clear it.
+ loadSnippets(new ArrayList<SnippetArticle>());
+ } else {
+ mNewTabPageListItems.set(FIRST_CARD_POSITION, mStatusListItem);
+ notifyItemRangeChanged(FIRST_CARD_POSITION, 2); // Update both the first card and the
+ // spacing item coming after it.
+ }
+
+ if (disabledReason == DisabledReason.NONE) mWantsSnippets = true;
}
@Override
@@ -174,7 +195,7 @@ public NewTabPageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
}
if (viewType == NewTabPageListItem.VIEW_TYPE_STATUS) {
- return new StatusListItem.ViewHolder(mRecyclerView, this);
+ return new StatusListItem.ViewHolder(mRecyclerView);
}
return null;
@@ -217,7 +238,7 @@ private void loadSnippets(List<SnippetArticle> listSnippets) {
if (hasContentToShow) {
mNewTabPageListItems.addAll(listSnippets);
} else {
- mNewTabPageListItems.add(new StatusListItem());
+ mNewTabPageListItems.add(mStatusListItem);
}
mNewTabPageListItems.add(new SpacingListItem());
@@ -263,7 +284,7 @@ private void addStatusCardIfNecessary() {
if (mNewTabPageListItems.size() == 3 /* above-the-fold + header + spacing */) {
// TODO(dgn) hack until we refactor the entire class with sections, etc.
// (see https://crbug.com/616090)
- mNewTabPageListItems.add(2, new StatusListItem());
+ mNewTabPageListItems.add(FIRST_CARD_POSITION, mStatusListItem);
// We also want to refresh the header and the bottom padding.
mHeaderListItem.setVisible(false);

Powered by Google App Engine
This is Rietveld 408576698