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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java

Issue 2758753003: 📰 Refresh the tiles when a removal is undone (Closed)
Patch Set: address comments Created 3 years, 9 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
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroupDelegateImpl.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java
index 97358343430531bad0ffadafc8a6a99cfc4c22f2..865b3bce07e11f168d140054e79740255b46d202 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroup.java
@@ -22,6 +22,7 @@
import android.view.ViewGroup;
import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.base.Callback;
import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.R;
@@ -48,7 +49,12 @@
* Performs work in other parts of the system that the {@link TileGroup} should not know about.
*/
public interface Delegate {
- void removeMostVisitedItem(Tile tile);
+ /**
+ * @param tile The tile corresponding to the most visited item to remove.
+ * @param removalUndoneCallback The callback to invoke if the removal is reverted. The
+ * callback's argument is the URL being restored.
+ */
+ void removeMostVisitedItem(Tile tile, Callback<String> removalUndoneCallback);
void openMostVisitedItem(int windowDisposition, Tile tile);
@@ -153,6 +159,14 @@
@Nullable
private String mPendingRemovalUrl;
+ /**
+ * URL of the most recently added tile. Used to identify when a given tile's insertion is
+ * confirmed by the tile backend. This is relevant when a previously existing tile is removed,
+ * then the user undoes the action and wants that tile back.
+ */
+ @Nullable
+ private String mPendingInsertionUrl;
+
private boolean mHasReceivedData;
/**
@@ -196,6 +210,8 @@ public TileGroup(Context context, SuggestionsUiDelegate uiDelegate,
public void onMostVisitedURLsAvailable(final String[] titles, final String[] urls,
final String[] whitelistIconPaths, final int[] sources) {
boolean removalCompleted = mPendingRemovalUrl != null;
+ boolean insertionCompleted = mPendingInsertionUrl == null;
+
Set<String> addedUrls = new HashSet<>();
mPendingTileData = new Tile[titles.length];
for (int i = 0; i < titles.length; i++) {
@@ -213,10 +229,20 @@ public void onMostVisitedURLsAvailable(final String[] titles, final String[] url
addedUrls.add(urls[i]);
if (urls[i].equals(mPendingRemovalUrl)) removalCompleted = false;
+ if (urls[i].equals(mPendingInsertionUrl)) insertionCompleted = true;
}
- if (removalCompleted) mPendingRemovalUrl = null;
- if (!mHasReceivedData || !mUiDelegate.isVisible() || removalCompleted) loadTiles();
+ boolean expectedChangeCompleted = false;
+ if (mPendingRemovalUrl != null && removalCompleted) {
+ mPendingRemovalUrl = null;
+ expectedChangeCompleted = true;
+ }
+ if (mPendingInsertionUrl != null && insertionCompleted) {
+ mPendingInsertionUrl = null;
+ expectedChangeCompleted = true;
+ }
+
+ if (!mHasReceivedData || !mUiDelegate.isVisible() || expectedChangeCompleted) loadTiles();
}
@Override
@@ -436,7 +462,7 @@ public void removeItem() {
// Note: This does not track all the removals, but will track the most recent one. If
// that removal is committed, it's good enough for change detection.
mPendingRemovalUrl = mUrl;
- mTileGroupDelegate.removeMostVisitedItem(tile);
+ mTileGroupDelegate.removeMostVisitedItem(tile, new RemovalUndoneCallback());
}
@Override
@@ -459,6 +485,13 @@ public void onCreateContextMenu(
}
}
+ private class RemovalUndoneCallback extends Callback<String> {
+ @Override
+ public void onResult(String restoredUrl) {
+ mPendingInsertionUrl = restoredUrl;
+ }
+ }
+
private class OfflineModelObserver extends SuggestionsOfflineModelObserver<Tile> {
public OfflineModelObserver(OfflinePageBridge bridge) {
super(bridge);
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/suggestions/TileGroupDelegateImpl.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698