@Override
 protected void hideContextualSearch(boolean immediately) {
   if (isActive() && mBaseTab != null) {
     startHiding(mBaseTab.getId(), false);
     if (immediately) doneHiding();
   }
 }
 @Override
 public boolean handlesTabCreating() {
   // Prevents the new Tab animation from happening when promoting to a new Tab.
   startHiding(mBaseTab.getId(), false);
   doneHiding();
   // Updates TopControls' State so the Toolbar becomes visible.
   // TODO(pedrosimonetti): The transition when promoting to a new tab is only smooth
   // if the SearchContentView's vertical scroll position is zero. Otherwise the
   // ContentView will appear to jump in the screen. Coordinate with @dtrainor to solve
   // this problem.
   mSearchPanel.getManagementDelegate().updateTopControlsState(TopControlsState.BOTH, false);
   return true;
 }
  @Override
  protected void updateSceneLayer(
      Rect viewport,
      Rect contentViewport,
      LayerTitleCache layerTitleCache,
      TabContentManager tabContentManager,
      ResourceManager resourceManager,
      ChromeFullscreenManager fullscreenManager) {
    super.updateSceneLayer(
        viewport,
        contentViewport,
        layerTitleCache,
        tabContentManager,
        resourceManager,
        fullscreenManager);
    assert mSceneLayer != null;

    final LayoutTab[] tabs = getLayoutTabsToRender();
    if (tabs == null || tabs.length != 1 || tabs[0].getId() == Tab.INVALID_TAB_ID) {
      return;
    }
    LayoutTab layoutTab = tabs[0];
    final float dpToPx = getContext().getResources().getDisplayMetrics().density;

    mReaderModeSceneLayer.update(mReaderModePanel, resourceManager);

    mSceneLayer.update(
        dpToPx, contentViewport, layerTitleCache, tabContentManager, fullscreenManager, layoutTab);

    // TODO(pedrosimonetti): Coordinate w/ dtrainor@ to improve integration with TreeProvider.
    SceneLayer overlayLayer = null;
    if (mSearchPanel.isShowing()) {
      overlayLayer = super.getSceneLayer();
    } else if (mReaderModePanel != null && mReaderModePanel.isShowing()) {
      overlayLayer = mReaderModeSceneLayer;
    }
    mSceneLayer.setContentSceneLayer(overlayLayer);

    // TODO(dtrainor): Find the best way to properly track this metric for cold starts.
    // We should probably erase the thumbnail when we select a tab that we need to restore.
    if (tabContentManager != null && tabContentManager.hasFullCachedThumbnail(layoutTab.getId())) {
      TabModelBase.logPerceivedTabSwitchLatencyMetric();
    }
  }
  /** Animate the closing of a tab */
  @Override
  public void onTabClosed(long time, int id, int nextId, boolean incognito) {
    super.onTabClosed(time, id, nextId, incognito);

    if (mClosedTab != null) {
      TabModel nextModel = mTabModelSelector.getModelForTabId(nextId);
      if (nextModel != null) {
        LayoutTab nextLayoutTab =
            createLayoutTab(nextId, nextModel.isIncognito(), NO_CLOSE_BUTTON, NO_TITLE);
        nextLayoutTab.setDrawDecoration(false);

        mLayoutTabs = new LayoutTab[] {nextLayoutTab, mClosedTab};
        updateCacheVisibleIds(new LinkedList<Integer>(Arrays.asList(nextId, mClosedTab.getId())));
      } else {
        mLayoutTabs = new LayoutTab[] {mClosedTab};
      }

      forceAnimationToFinish();
      mAnimatedTab = mClosedTab;
      addToAnimation(
          this,
          Property.DISCARD_AMOUNT,
          0,
          getDiscardRange(),
          TAB_CLOSED_ANIMATION_DURATION,
          0,
          false,
          BakedBezierInterpolator.FADE_OUT_CURVE);

      mClosedTab = null;
      if (nextModel != null) {
        mTabModelSelector.selectModel(nextModel.isIncognito());
      }
    }
    startHiding(nextId, false);
  }
Example #5
0
  /**
   * Pushes all relevant {@link LayoutTab}s from a {@link Layout} to the CC Layer tree. This will
   * let them be rendered on the screen. This should only be called when the Compositor has disabled
   * ScheduleComposite calls as this will change the tree and could subsequently cause unnecessary
   * follow up renders.
   *
   * @param context The {@link Context} to use to query device information.
   * @param layout The {@link Layout} to push to the screen.
   */
  public void pushLayers(
      Context context,
      Rect viewport,
      Rect contentViewport,
      Layout layout,
      LayerTitleCache layerTitleCache,
      TabContentManager tabContentManager,
      ResourceManager resourceManager) {
    if (mNativePtr == 0) return;

    Resources res = context.getResources();
    final float dpToPx = res.getDisplayMetrics().density;

    LayoutTab[] tabs = layout.getLayoutTabsToRender();
    int tabsCount = tabs != null ? tabs.length : 0;

    nativeBeginBuildingFrame(mNativePtr);
    for (int i = 0; i < tabsCount; i++) {
      LayoutTab t = tabs[i];
      assert t.isVisible() : "LayoutTab in that list should be visible";
      final float decoration = t.getDecorationAlpha();

      int borderResource =
          t.isIncognito()
              ? R.drawable.tabswitcher_border_frame_incognito
              : R.drawable.tabswitcher_border_frame;
      int closeBtnResource =
          t.isIncognito() ? R.drawable.btn_tab_close_white_normal : R.drawable.btn_tab_close_normal;
      int borderColorResource = t.isIncognito() ? R.color.tab_back_incognito : R.color.tab_back;
      // TODO(dtrainor, clholgat): remove "* dpToPx" once the native part fully supports dp.
      nativePutLayer(
          mNativePtr,
          t.getId(),
          R.id.control_container,
          closeBtnResource,
          R.drawable.tabswitcher_border_frame_shadow,
          R.drawable.tabswitcher_border_frame_decoration,
          R.drawable.logo_card_back,
          borderResource,
          t.canUseLiveTexture(),
          (t.getFallbackThumbnailId() == ChromeTab.NTP_TAB_ID),
          t.getBackgroundColor(),
          ApiCompatibilityUtils.getColor(res, R.color.tab_switcher_background),
          ApiCompatibilityUtils.getColor(res, borderColorResource),
          t.isIncognito(),
          layout.getOrientation() == Orientation.PORTRAIT,
          t.getRenderX() * dpToPx,
          t.getRenderY() * dpToPx,
          t.getScaledContentWidth() * dpToPx,
          t.getScaledContentHeight() * dpToPx,
          t.getOriginalContentWidth() * dpToPx,
          t.getOriginalContentHeight() * dpToPx,
          contentViewport.height(),
          viewport.left,
          viewport.top,
          viewport.width(),
          viewport.height(),
          t.getClippedX() * dpToPx,
          t.getClippedY() * dpToPx,
          Math.min(t.getClippedWidth(), t.getScaledContentWidth()) * dpToPx,
          Math.min(t.getClippedHeight(), t.getScaledContentHeight()) * dpToPx,
          t.getTiltXPivotOffset() * dpToPx,
          t.getTiltYPivotOffset() * dpToPx,
          t.getTiltX(),
          t.getTiltY(),
          t.getAlpha(),
          t.getBorderAlpha() * decoration,
          decoration,
          t.getShadowOpacity() * decoration,
          t.getBorderCloseButtonAlpha() * decoration,
          LayoutTab.CLOSE_BUTTON_WIDTH_DP * dpToPx,
          t.getStaticToViewBlend(),
          t.getBorderScale(),
          t.getSaturation(),
          t.getBrightness(),
          t.showToolbar(),
          t.anonymizeToolbar(),
          t.getTextBoxBackgroundColor(),
          t.getToolbarAlpha(),
          t.getToolbarYOffset() * dpToPx,
          t.getSideBorderScale(),
          true,
          t.insetBorderVertical(),
          layerTitleCache,
          tabContentManager,
          resourceManager);
    }
    nativeFinishBuildingFrame(mNativePtr);
  }