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

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

Issue 2365313002: Reland: Ntp: restore scroll position. (Closed)
Patch Set: Rebase. Created 4 years, 3 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/ntp/NewTabPageView.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/ntp/NewTabPage.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
index d934aa9b86569434e8f089c2f2c2635636510bc9..264d2e8cd6d86c806b385bcb4c557df632641521 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -13,6 +13,8 @@ import android.net.Uri;
import android.os.Build;
import android.os.SystemClock;
import android.support.v4.view.ViewCompat;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -22,6 +24,7 @@ import android.view.View;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.Callback;
import org.chromium.base.CommandLine;
+import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
@@ -70,6 +73,8 @@ import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
import org.chromium.chrome.browser.util.UrlUtilities;
import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.content_public.browser.NavigationController;
+import org.chromium.content_public.browser.NavigationEntry;
import org.chromium.content_public.common.Referrer;
import org.chromium.net.NetworkChangeNotifier;
import org.chromium.ui.base.DeviceFormFactor;
@@ -87,6 +92,7 @@ import jp.tomorrowkey.android.gifplayer.BaseGifImage;
*/
public class NewTabPage
implements NativePage, InvalidationAwareThumbnailProvider, TemplateUrlServiceObserver {
+ private static final String TAG = "NewTabPage";
// MostVisitedItem Context menu item IDs.
static final int ID_OPEN_IN_NEW_WINDOW = 0;
@@ -104,6 +110,9 @@ public class NewTabPage
private static final int CTA_IMAGE_CLICKED = 1;
private static final int ANIMATED_LOGO_CLICKED = 2;
+ // Key for the scroll position data that may be stored in a navigation entry.
+ private static final String NAVIGATION_ENTRY_SCROLL_POSITION_KEY = "NewTabPageScrollPosition";
+
private static final String CHROME_CONTENT_SUGGESTIONS_REFERRER =
"https://www.googleapis.com/auth/chrome-content-suggestions";
@@ -671,6 +680,29 @@ public class NewTabPage
public void onHidden(Tab tab) {
if (mIsLoaded) recordNTPInteractionTime();
}
+
+ @Override
+ public void onPageLoadStarted(Tab tab, String url) {
+ int scrollPosition = mNewTabPageView.getScrollPosition();
+ if (scrollPosition == RecyclerView.NO_POSITION) return;
+
+ if (mTab.getWebContents() == null) return;
+
+ NavigationController controller = mTab.getWebContents().getNavigationController();
+ int index = controller.getLastCommittedEntryIndex();
+ NavigationEntry entry = controller.getEntryAtIndex(index);
+ if (entry == null) return;
+
+ // At least under test conditions this method may be called initially for the load
+ // of the NTP itself, at which point the last committed entry is not for the NTP
+ // yet. This method will then be called a second time when the user navigates away,
+ // at which point the last committed entry is for the NTP. The extra data must only
+ // be set in the latter case.
+ if (!isNTPUrl(entry.getUrl())) return;
+
+ controller.setEntryExtraData(index, NAVIGATION_ENTRY_SCROLL_POSITION_KEY,
+ Integer.toString(scrollPosition));
+ }
};
mTab.addObserver(mTabObserver);
mMostVisitedSites = buildMostVisitedSites(mProfile);
@@ -683,7 +715,8 @@ public class NewTabPage
LayoutInflater inflater = LayoutInflater.from(activity);
mNewTabPageView = (NewTabPageView) inflater.inflate(R.layout.new_tab_page_view, null);
- mNewTabPageView.initialize(mNewTabPageManager, mSearchProviderHasLogo);
+ mNewTabPageView.initialize(
+ mNewTabPageManager, mSearchProviderHasLogo, getScrollPositionFromNavigationEntry());
RecordHistogram.recordBooleanHistogram(
"NewTabPage.MobileIsUserOnline", NetworkChangeNotifier.isOnline());
@@ -843,6 +876,29 @@ public class NewTabPage
}
/**
+ * Returns the value of the adapter scroll position that was stored in the last committed
+ * navigation entry. Returns {@code RecyclerView.NO_POSITION} if there is no last committed
+ * navigation entry, or if no data is found.
+ * @return The adapter scroll position.
+ */
+ private int getScrollPositionFromNavigationEntry() {
+ if (mTab.getWebContents() == null) return RecyclerView.NO_POSITION;
+
+ NavigationController controller = mTab.getWebContents().getNavigationController();
+ int index = controller.getLastCommittedEntryIndex();
+ String scrollPositionData =
+ controller.getEntryExtraData(index, NAVIGATION_ENTRY_SCROLL_POSITION_KEY);
+ if (TextUtils.isEmpty(scrollPositionData)) return RecyclerView.NO_POSITION;
+
+ try {
+ return Integer.parseInt(scrollPositionData);
+ } catch (NumberFormatException e) {
+ Log.w(TAG, "Bad data found for scroll position: %s", scrollPositionData, e);
+ return RecyclerView.NO_POSITION;
+ }
+ }
+
+ /**
* @return Whether the NTP has finished loaded.
*/
@VisibleForTesting
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698