| // 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.content.Context; |
| import android.graphics.Canvas; |
| import android.util.AttributeSet; |
| import android.view.View; |
| |
| import org.chromium.base.ApiCompatibilityUtils; |
| import org.chromium.chrome.R; |
| import org.chromium.chrome.browser.ChromeFeatureList; |
| import org.chromium.chrome.browser.gesturenav.HistoryNavigationLayout; |
| import org.chromium.chrome.browser.util.ViewUtils; |
| |
| /** |
| * The New Tab Page for use in the incognito profile. |
| */ |
| public class IncognitoNewTabPageView extends HistoryNavigationLayout { |
| private IncognitoNewTabPageManager mManager; |
| private boolean mFirstShow = true; |
| private NewTabPageScrollView mScrollView; |
| |
| private int mSnapshotWidth; |
| private int mSnapshotHeight; |
| private int mSnapshotScrollY; |
| |
| /** |
| * Manages the view interaction with the rest of the system. |
| */ |
| interface IncognitoNewTabPageManager { |
| /** Loads a page explaining details about incognito mode in the current tab. */ |
| void loadIncognitoLearnMore(); |
| |
| /** |
| * Called when the NTP has completely finished loading (all views will be inflated |
| * and any dependent resources will have been loaded). |
| */ |
| void onLoadingComplete(); |
| } |
| |
| /** Default constructor needed to inflate via XML. */ |
| public IncognitoNewTabPageView(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| } |
| |
| @Override |
| protected void onFinishInflate() { |
| super.onFinishInflate(); |
| |
| mScrollView = (NewTabPageScrollView) findViewById(R.id.ntp_scrollview); |
| mScrollView.setBackgroundColor( |
| ApiCompatibilityUtils.getColor(getResources(), R.color.ntp_bg_incognito)); |
| setContentDescription(getResources().getText( |
| ChromeFeatureList.isEnabled(ChromeFeatureList.INCOGNITO_STRINGS) |
| ? R.string.accessibility_new_private_tab_page |
| : R.string.accessibility_new_incognito_tab_page)); |
| |
| // FOCUS_BEFORE_DESCENDANTS is needed to support keyboard shortcuts. Otherwise, pressing |
| // any shortcut causes the UrlBar to be focused. See ViewRootImpl.leaveTouchMode(). |
| mScrollView.setDescendantFocusability(FOCUS_BEFORE_DESCENDANTS); |
| |
| View learnMore = findViewById(R.id.learn_more); |
| learnMore.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| mManager.loadIncognitoLearnMore(); |
| } |
| }); |
| } |
| |
| /** |
| * Initialize the incognito New Tab Page. |
| * @param manager The manager that handles external dependencies of the view. |
| */ |
| void initialize(IncognitoNewTabPageManager manager) { |
| mManager = manager; |
| } |
| |
| /** @return The IncognitoNewTabPageManager associated with this IncognitoNewTabPageView. */ |
| protected IncognitoNewTabPageManager getManager() { |
| return mManager; |
| } |
| |
| /** |
| * @see org.chromium.chrome.browser.compositor.layouts.content. |
| * InvalidationAwareThumbnailProvider#shouldCaptureThumbnail() |
| */ |
| boolean shouldCaptureThumbnail() { |
| if (getWidth() == 0 || getHeight() == 0) return false; |
| |
| return getWidth() != mSnapshotWidth |
| || getHeight() != mSnapshotHeight |
| || mScrollView.getScrollY() != mSnapshotScrollY; |
| } |
| |
| /** |
| * @see org.chromium.chrome.browser.compositor.layouts.content. |
| * InvalidationAwareThumbnailProvider#captureThumbnail(Canvas) |
| */ |
| void captureThumbnail(Canvas canvas) { |
| ViewUtils.captureBitmap(this, canvas); |
| mSnapshotWidth = getWidth(); |
| mSnapshotHeight = getHeight(); |
| mSnapshotScrollY = mScrollView.getScrollY(); |
| } |
| |
| @Override |
| public void onAttachedToWindow() { |
| super.onAttachedToWindow(); |
| assert mManager != null; |
| if (mFirstShow) { |
| mManager.onLoadingComplete(); |
| mFirstShow = false; |
| } |
| } |
| } |