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

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewTablet.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 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
Index: chrome/android/java_staging/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewTablet.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewTablet.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewTablet.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2ed0f43785cb5e6ac5ded9bee4b3043ea70f31e
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/widget/emptybackground/EmptyBackgroundViewTablet.java
@@ -0,0 +1,167 @@
+// 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.widget.emptybackground;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.metrics.RecordUserAction;
+import org.chromium.chrome.browser.appmenu.AppMenuButtonHelper;
+import org.chromium.chrome.browser.appmenu.AppMenuHandler;
+import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.widget.incognitotoggle.IncognitoToggleButtonTablet;
+import org.chromium.ui.UiUtils;
+
+/**
+ * Represents the background screen that shows when no tabs are visible. This {@link View}
+ * handles making itself invisible or not automatically depending on the state of the system.
+ */
+public class EmptyBackgroundViewTablet extends FrameLayout {
+ private static final int ANIMATE_DURATION_MS = 200;
+
+ private TabModelSelector mTabModelSelector;
+ private ChromeTabCreator mTabCreator;
+
+ private Animator mCurrentTransitionAnimation;
+
+ private Animator mAnimateInAnimation;
+ private Animator mAnimateOutAnimation;
+
+ /**
+ * Creates an instance of {@link EmptyBackgroundViewTablet}.
+ * @param context The {@link Context} to create this {@link View} under.
+ * @param attrs An {@link AttributeSet} that contains information on how to build this
+ * {@link View}.
+ */
+ public EmptyBackgroundViewTablet(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public void onFinishInflate() {
+ super.onFinishInflate();
+
+ View newTabButton = findViewById(R.id.empty_new_tab_button);
+ newTabButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mTabCreator == null) return;
+ mTabCreator.launchNTP();
+ }
+ });
+
+ buildAnimatorSets();
+ }
+
+ /**
+ * Sets the {@link TabModelSelector} that will be queried for information about the state of
+ * the system.
+ * @param tabModelSelector A {@link TabModelSelector} that represents the state of the system.
+ */
+ public void setTabModelSelector(TabModelSelector tabModelSelector) {
+ mTabModelSelector = tabModelSelector;
+
+ IncognitoToggleButtonTablet incognitoToggle = (IncognitoToggleButtonTablet) findViewById(
+ R.id.empty_incognito_toggle_button);
+
+ incognitoToggle.setTabModelSelector(mTabModelSelector);
+ }
+
+ /**
+ * Sets the {@link ChromeTabCreator} that will be used to open the New Tab Page.
+ * @param tabCreator A {@link ChromeTabCreator} to open the New Tab Page.
+ */
+ public void setTabCreator(ChromeTabCreator tabCreator) {
+ mTabCreator = tabCreator;
+ }
+
+ /**
+ * Creates an on touch listener for the menu button using the given menu handler.
+ * @param menuHandler The menu handler to be used for showing the pop up menu.
+ */
+ public void setMenuOnTouchListener(final AppMenuHandler menuHandler) {
+ final ImageButton menuBtn = (ImageButton) findViewById(R.id.empty_menu_button);
+ final AppMenuButtonHelper menuPopupButtonHelper = new AppMenuButtonHelper(menuHandler);
+ menuBtn.setOnTouchListener(menuPopupButtonHelper);
+ menuPopupButtonHelper.setOnAppMenuShownListener(new Runnable() {
+ @Override
+ public void run() {
+ RecordUserAction.record("MobileToolbarShowMenu");
+ }
+ });
+ }
+
+ public void setEmptyContainerState(boolean shouldShow) {
+ Animator nextAnimator = null;
+
+ if (shouldShow && getVisibility() != View.VISIBLE
+ && mCurrentTransitionAnimation != mAnimateInAnimation) {
+ nextAnimator = mAnimateInAnimation;
+ UiUtils.hideKeyboard(this);
+ } else if (!shouldShow && getVisibility() != View.GONE
+ && mCurrentTransitionAnimation != mAnimateOutAnimation) {
+ nextAnimator = mAnimateOutAnimation;
+ }
+
+ if (nextAnimator != null) {
+ if (mCurrentTransitionAnimation != null) mCurrentTransitionAnimation.cancel();
+ mCurrentTransitionAnimation = nextAnimator;
+ mCurrentTransitionAnimation.start();
+ }
+ }
+
+ private void buildAnimatorSets() {
+ TypedArray a = getContext().getTheme().obtainStyledAttributes(R.style.ToolbarButton,
+ new int[] {android.R.attr.layout_height});
+ int viewHeight = a.getDimensionPixelSize(0, 0);
+ a.recycle();
+ View view = findViewById(R.id.empty_layout_button_container);
+
+ // Build the in animation
+ mAnimateInAnimation = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, -viewHeight, 0.f);
+ mAnimateInAnimation.setDuration(ANIMATE_DURATION_MS);
+
+ mAnimateInAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mCurrentTransitionAnimation = null;
+ getRootView().findViewById(R.id.control_container).setVisibility(INVISIBLE);
+ }
+ });
+
+ // Build the out animation
+ mAnimateOutAnimation = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, 0.f, -viewHeight);
+ mAnimateOutAnimation.setDuration(ANIMATE_DURATION_MS);
+
+ mAnimateOutAnimation.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ setVisibility(View.VISIBLE);
+ getRootView().findViewById(R.id.control_container).setVisibility(VISIBLE);
+ }
+
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ setVisibility(View.GONE);
+ mCurrentTransitionAnimation = null;
+ }
+ });
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698