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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/tab/TabContentViewParent.java

Issue 2623493003: Refactor the view hierarchy of snackbars and infobars (Closed)
Patch Set: comments Created 3 years, 11 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 | « chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java ('k') | chrome/android/java_sources.gni » ('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/tab/TabContentViewParent.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContentViewParent.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContentViewParent.java
deleted file mode 100644
index 0543f10dbf1ce7c7d35be3b9d5a0ab0c6851e6d5..0000000000000000000000000000000000000000
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabContentViewParent.java
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright 2016 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.tab;
-
-import android.content.Context;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.design.widget.CoordinatorLayout.Behavior;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.banners.SwipableOverlayView;
-import org.chromium.ui.UiUtils;
-import org.chromium.ui.base.DeviceFormFactor;
-
-/**
- * Parent {@link FrameLayout} holding the infobar and content of a tab. The content could be either
- * a native page or a content view.
- */
-public class TabContentViewParent extends FrameLayout {
- private static final int CONTENT_INDEX = 0;
-
- // A wrapper is needed because infobar's translation is controlled by SwipableOverlayView.
- // Setting infobar's translation directly from this class will cause UI flickering.
- private final FrameLayout mInfobarWrapper;
- private final Behavior<?> mBehavior = new SnackbarAwareBehavior();
-
- private EmptyTabObserver mTabObserver = new EmptyTabObserver() {
- /**
- * @return the {@link View} to show for the given {@link Tab}.
- */
- private View getViewToShow(Tab tab) {
- if (tab.getNativePage() != null) {
- return tab.getNativePage().getView();
- } else if (tab.getBlimpContents() != null) {
- return tab.getBlimpContents().getView();
- } else {
- return tab.getContentViewCore().getContainerView();
- }
- }
-
- @Override
- public void onContentChanged(Tab tab) {
- // If the tab is frozen, both native page and content view are not ready.
- if (tab.isFrozen()) return;
-
- View viewToShow = getViewToShow(tab);
- if (isShowing(viewToShow)) return;
-
- removeCurrentContent();
- LayoutParams lp = (LayoutParams) viewToShow.getLayoutParams();
- if (lp == null) {
- lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
- }
- // Weirdly enough, if gravity is not top, top_margin is not respected by FrameLayout.
- // Yet for many native pages on tablet, top_margin is necessary to not overlap the tab
- // switcher.
- lp.gravity = Gravity.TOP;
- UiUtils.removeViewFromParent(viewToShow);
- addView(viewToShow, CONTENT_INDEX, lp);
- viewToShow.requestFocus();
- }
- };
-
- public TabContentViewParent(Context context, Tab tab) {
- super(context);
- mInfobarWrapper = new FrameLayout(context);
- mInfobarWrapper.setFocusable(true);
- mInfobarWrapper.setFocusableInTouchMode(true);
- addView(mInfobarWrapper,
- new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
- tab.addObserver(mTabObserver);
- }
-
- /**
- * Attach the infobar container to the view hierarchy.
- */
- public void addInfobarView(SwipableOverlayView infobarView, MarginLayoutParams lp) {
- mInfobarWrapper.addView(infobarView, lp);
- }
-
- /**
- * @return The {@link Behavior} that controls how children of this class animate together.
- */
- public Behavior<?> getBehavior() {
- return mBehavior;
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- mInfobarWrapper.setTranslationY(0f);
- }
-
- /**
- * @return Whether the given {@link View} is already in the view hierarchy.
- */
- private boolean isShowing(View view) {
- return view.getParent() == this;
- }
-
- private void removeCurrentContent() {
- // Native page or content view should always be at index 0.
- if (getChildCount() > 1) removeViewAt(CONTENT_INDEX);
- }
-
- private static class SnackbarAwareBehavior
- extends CoordinatorLayout.Behavior<TabContentViewParent> {
- @Override
- public boolean layoutDependsOn(CoordinatorLayout parent, TabContentViewParent child,
- View dependency) {
- // Disable coordination on tablet as they appear at different location on tablet.
- return dependency.getId() == R.id.snackbar
- && !DeviceFormFactor.isTablet(child.getContext());
- }
-
- @Override
- public boolean onDependentViewChanged(CoordinatorLayout parent, TabContentViewParent child,
- View dependency) {
- child.mInfobarWrapper
- .setTranslationY(dependency.getTranslationY() - dependency.getHeight());
- return true;
- }
-
- @Override
- public void onDependentViewRemoved(CoordinatorLayout parent, TabContentViewParent child,
- View dependency) {
- child.mInfobarWrapper.setTranslationY(0);
- }
- }
-}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java ('k') | chrome/android/java_sources.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698