Index: chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java |
deleted file mode 100644 |
index 709d47ec4312c3e481525b822277cdb883e44820..0000000000000000000000000000000000000000 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/RecentTabsPage.java |
+++ /dev/null |
@@ -1,274 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-package org.chromium.chrome.browser.ntp; |
- |
-import android.app.Activity; |
-import android.graphics.Canvas; |
-import android.graphics.Color; |
-import android.os.SystemClock; |
-import android.view.ContextMenu; |
-import android.view.ContextMenu.ContextMenuInfo; |
-import android.view.LayoutInflater; |
-import android.view.View; |
-import android.view.ViewGroup; |
-import android.widget.ExpandableListView; |
- |
-import org.chromium.base.ActivityState; |
-import org.chromium.base.ApplicationStatus; |
-import org.chromium.base.metrics.RecordHistogram; |
-import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.NativePage; |
-import org.chromium.chrome.browser.UrlConstants; |
-import org.chromium.chrome.browser.compositor.layouts.content.InvalidationAwareThumbnailProvider; |
-import org.chromium.chrome.browser.util.ViewUtils; |
- |
-import java.util.concurrent.TimeUnit; |
- |
-/** |
- * The native recent tabs page. Lists recently closed tabs, open windows and tabs from the user's |
- * synced devices, and snapshot documents sent from Chrome to Mobile in an expandable list view. |
- */ |
-public class RecentTabsPage |
- implements NativePage, ApplicationStatus.ActivityStateListener, |
- ExpandableListView.OnChildClickListener, |
- ExpandableListView.OnGroupCollapseListener, |
- ExpandableListView.OnGroupExpandListener, RecentTabsManager.UpdatedCallback, |
- View.OnAttachStateChangeListener, View.OnCreateContextMenuListener, |
- InvalidationAwareThumbnailProvider { |
- private final Activity mActivity; |
- private final ExpandableListView mListView; |
- private final String mTitle; |
- private final ViewGroup mView; |
- |
- private RecentTabsManager mRecentTabsManager; |
- private RecentTabsRowAdapter mAdapter; |
- |
- private boolean mSnapshotContentChanged; |
- private int mSnapshotListPosition; |
- private int mSnapshotListTop; |
- private int mSnapshotWidth; |
- private int mSnapshotHeight; |
- |
- /** |
- * Whether the page is in the foreground and is visible. |
- */ |
- private boolean mInForeground; |
- |
- /** |
- * Whether {@link #mView} is attached to the application window. |
- */ |
- private boolean mIsAttachedToWindow; |
- |
- /** |
- * The time, whichever is most recent, that the page: |
- * - Moved to the foreground |
- * - Became visible |
- */ |
- private long mForegroundTimeMs; |
- |
- /** |
- * Constructor returns an instance of RecentTabsPage. |
- * |
- * @param activity The activity this view belongs to. |
- * @param recentTabsManager The RecentTabsManager which provides the model data. |
- */ |
- public RecentTabsPage(Activity activity, RecentTabsManager recentTabsManager) { |
- mActivity = activity; |
- mRecentTabsManager = recentTabsManager; |
- |
- mTitle = activity.getResources().getString(R.string.recent_tabs); |
- mRecentTabsManager.setUpdatedCallback(this); |
- LayoutInflater inflater = LayoutInflater.from(activity); |
- mView = (ViewGroup) inflater.inflate(R.layout.recent_tabs_page, null); |
- mListView = (ExpandableListView) mView.findViewById(R.id.odp_listview); |
- mAdapter = buildAdapter(activity, recentTabsManager); |
- mListView.setAdapter(mAdapter); |
- mListView.setOnChildClickListener(this); |
- mListView.setGroupIndicator(null); |
- mListView.setOnGroupCollapseListener(this); |
- mListView.setOnGroupExpandListener(this); |
- mListView.setOnCreateContextMenuListener(this); |
- |
- mView.addOnAttachStateChangeListener(this); |
- ApplicationStatus.registerStateListenerForActivity(this, activity); |
- // {@link #mInForeground} will be updated once the view is attached to the window. |
- |
- onUpdated(); |
- } |
- |
- private static RecentTabsRowAdapter buildAdapter(Activity activity, |
- RecentTabsManager recentTabsManager) { |
- return new RecentTabsRowAdapter(activity, recentTabsManager); |
- } |
- |
- /** |
- * Updates whether the page is in the foreground based on whether the application is in the |
- * foreground and whether {@link #mView} is attached to the application window. If the page is |
- * no longer in the foreground, records the time that the page spent in the foreground to UMA. |
- */ |
- private void updateForegroundState() { |
- boolean inForeground = mIsAttachedToWindow |
- && ApplicationStatus.getStateForActivity(mActivity) == ActivityState.RESUMED; |
- if (mInForeground == inForeground) { |
- return; |
- } |
- |
- mInForeground = inForeground; |
- if (mInForeground) { |
- mForegroundTimeMs = SystemClock.elapsedRealtime(); |
- } else { |
- RecordHistogram.recordTimesHistogram("NewTabPage.RecentTabsPage.TimeVisibleAndroid", |
- SystemClock.elapsedRealtime() - mForegroundTimeMs, TimeUnit.MILLISECONDS); |
- } |
- } |
- |
- // NativePage overrides |
- |
- @Override |
- public String getUrl() { |
- return UrlConstants.RECENT_TABS_URL; |
- } |
- |
- @Override |
- public String getTitle() { |
- return mTitle; |
- } |
- |
- @Override |
- public int getBackgroundColor() { |
- return Color.WHITE; |
- } |
- |
- @Override |
- public View getView() { |
- return mView; |
- } |
- |
- @Override |
- public String getHost() { |
- return UrlConstants.RECENT_TABS_HOST; |
- } |
- |
- @Override |
- public void destroy() { |
- assert getView().getParent() == null : "Destroy called before removed from window"; |
- mRecentTabsManager.destroy(); |
- mRecentTabsManager = null; |
- mAdapter.notifyDataSetInvalidated(); |
- mAdapter = null; |
- mListView.setAdapter((RecentTabsRowAdapter) null); |
- |
- mView.removeOnAttachStateChangeListener(this); |
- ApplicationStatus.unregisterActivityStateListener(this); |
- } |
- |
- @Override |
- public void updateForUrl(String url) { |
- } |
- |
- // ApplicationStatus.ActivityStateListener |
- @Override |
- public void onActivityStateChange(Activity activity, int state) { |
- // Called when the user locks the screen or moves Chrome to the background via the task |
- // switcher. |
- updateForegroundState(); |
- } |
- |
- // View.OnAttachStateChangeListener |
- @Override |
- public void onViewAttachedToWindow(View view) { |
- // Called when the user opens the RecentTabsPage or switches back to the RecentTabsPage from |
- // another tab. |
- mIsAttachedToWindow = true; |
- updateForegroundState(); |
- } |
- |
- @Override |
- public void onViewDetachedFromWindow(View view) { |
- // Called when the user navigates from the RecentTabsPage or switches to another tab. |
- mIsAttachedToWindow = false; |
- updateForegroundState(); |
- } |
- |
- // ExpandableListView.OnChildClickedListener |
- @Override |
- public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, |
- int childPosition, long id) { |
- return mAdapter.getGroup(groupPosition).onChildClick(childPosition); |
- } |
- |
- // ExpandableListView.OnGroupExpandedListener |
- @Override |
- public void onGroupExpand(int groupPosition) { |
- mAdapter.getGroup(groupPosition).setCollapsed(false); |
- mSnapshotContentChanged = true; |
- } |
- |
- // ExpandableListView.OnGroupCollapsedListener |
- @Override |
- public void onGroupCollapse(int groupPosition) { |
- mAdapter.getGroup(groupPosition).setCollapsed(true); |
- mSnapshotContentChanged = true; |
- } |
- |
- // RecentTabsManager.UpdatedCallback |
- @Override |
- public void onUpdated() { |
- mAdapter.notifyDataSetChanged(); |
- for (int i = 0; i < mAdapter.getGroupCount(); i++) { |
- if (mAdapter.getGroup(i).isCollapsed()) { |
- mListView.collapseGroup(i); |
- } else { |
- mListView.expandGroup(i); |
- } |
- } |
- mSnapshotContentChanged = true; |
- } |
- |
- @Override |
- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { |
- // Would prefer to have this context menu view managed internal to RecentTabsGroupView |
- // Unfortunately, setting either onCreateContextMenuListener or onLongClickListener |
- // disables the native onClick (expand/collapse) behaviour of the group view. |
- ExpandableListView.ExpandableListContextMenuInfo info = |
- (ExpandableListView.ExpandableListContextMenuInfo) menuInfo; |
- |
- int type = ExpandableListView.getPackedPositionType(info.packedPosition); |
- int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition); |
- |
- if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { |
- mAdapter.getGroup(groupPosition).onCreateContextMenuForGroup(menu, mActivity); |
- } else if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { |
- int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition); |
- mAdapter.getGroup(groupPosition).onCreateContextMenuForChild(childPosition, menu, |
- mActivity); |
- } |
- } |
- |
- // InvalidationAwareThumbnailProvider |
- |
- @Override |
- public boolean shouldCaptureThumbnail() { |
- if (mView.getWidth() == 0 || mView.getHeight() == 0) return false; |
- |
- View topItem = mListView.getChildAt(0); |
- return mSnapshotContentChanged |
- || mSnapshotListPosition != mListView.getFirstVisiblePosition() |
- || mSnapshotListTop != (topItem == null ? 0 : topItem.getTop()) |
- || mView.getWidth() != mSnapshotWidth |
- || mView.getHeight() != mSnapshotHeight; |
- } |
- |
- @Override |
- public void captureThumbnail(Canvas canvas) { |
- ViewUtils.captureBitmap(mView, canvas); |
- mSnapshotContentChanged = false; |
- mSnapshotListPosition = mListView.getFirstVisiblePosition(); |
- View topItem = mListView.getChildAt(0); |
- mSnapshotListTop = topItem == null ? 0 : topItem.getTop(); |
- mSnapshotWidth = mView.getWidth(); |
- mSnapshotHeight = mView.getHeight(); |
- } |
-} |