diff options
author | Bijan Amirzada <bijana@codeaurora.org> | 2014-02-26 17:08:10 -0800 |
---|---|---|
committer | Bijan Amirzada <bijana@codeaurora.org> | 2014-03-04 14:03:36 -0800 |
commit | 69b30beb16df7916c7679ed69d70e3ebcdeb2085 (patch) | |
tree | 9b81f4a397f041deb5f1ef54e91b92666712b385 /src/com/android/browser/TabBar.java | |
parent | 43555c9eb09b318276231eb31dab79f9f41f128c (diff) | |
download | android_packages_apps_Gello-69b30beb16df7916c7679ed69d70e3ebcdeb2085.tar.gz android_packages_apps_Gello-69b30beb16df7916c7679ed69d70e3ebcdeb2085.tar.bz2 android_packages_apps_Gello-69b30beb16df7916c7679ed69d70e3ebcdeb2085.zip |
Copy of new files from 1599
Modified folder structure - added swe folder
Change-Id: I2b48a1635ad0a6406398aa9f1021a1f43baebeef
Diffstat (limited to 'src/com/android/browser/TabBar.java')
-rw-r--r-- | src/com/android/browser/TabBar.java | 534 |
1 files changed, 0 insertions, 534 deletions
diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java deleted file mode 100644 index cf82e015..00000000 --- a/src/com/android/browser/TabBar.java +++ /dev/null @@ -1,534 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.browser; - -import android.animation.Animator; -import android.animation.Animator.AnimatorListener; -import android.animation.AnimatorSet; -import android.animation.ObjectAnimator; -import android.app.Activity; -import android.content.Context; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.BitmapShader; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Shader; -import android.graphics.drawable.Drawable; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * tabbed title bar for xlarge screen browser - */ -public class TabBar extends LinearLayout implements OnClickListener { - - private static final int PROGRESS_MAX = 100; - - private Activity mActivity; - private UiController mUiController; - private TabControl mTabControl; - private XLargeUi mUi; - - private int mTabWidth; - - private TabScrollView mTabs; - - private ImageButton mNewTab; - private int mButtonWidth; - - private Map<Tab, TabView> mTabMap; - - private int mCurrentTextureWidth = 0; - private int mCurrentTextureHeight = 0; - - private Drawable mActiveDrawable; - private Drawable mInactiveDrawable; - - private final Paint mActiveShaderPaint = new Paint(); - private final Paint mInactiveShaderPaint = new Paint(); - private final Paint mFocusPaint = new Paint(); - private final Matrix mActiveMatrix = new Matrix(); - private final Matrix mInactiveMatrix = new Matrix(); - - private BitmapShader mActiveShader; - private BitmapShader mInactiveShader; - - private int mTabOverlap; - private int mAddTabOverlap; - private int mTabSliceWidth; - private boolean mUseQuickControls; - - public TabBar(Activity activity, UiController controller, XLargeUi ui) { - super(activity); - mActivity = activity; - mUiController = controller; - mTabControl = mUiController.getTabControl(); - mUi = ui; - Resources res = activity.getResources(); - mTabWidth = (int) res.getDimension(R.dimen.tab_width); - mActiveDrawable = res.getDrawable(R.drawable.bg_urlbar); - mInactiveDrawable = res.getDrawable(R.drawable.browsertab_inactive); - - mTabMap = new HashMap<Tab, TabView>(); - LayoutInflater factory = LayoutInflater.from(activity); - factory.inflate(R.layout.tab_bar, this); - setPadding(0, (int) res.getDimension(R.dimen.tab_padding_top), 0, 0); - mTabs = (TabScrollView) findViewById(R.id.tabs); - mNewTab = (ImageButton) findViewById(R.id.newtab); - mNewTab.setOnClickListener(this); - - updateTabs(mUiController.getTabs()); - mButtonWidth = -1; - // tab dimensions - mTabOverlap = (int) res.getDimension(R.dimen.tab_overlap); - mAddTabOverlap = (int) res.getDimension(R.dimen.tab_addoverlap); - mTabSliceWidth = (int) res.getDimension(R.dimen.tab_slice); - - mActiveShaderPaint.setStyle(Paint.Style.FILL); - mActiveShaderPaint.setAntiAlias(true); - - mInactiveShaderPaint.setStyle(Paint.Style.FILL); - mInactiveShaderPaint.setAntiAlias(true); - - mFocusPaint.setStyle(Paint.Style.STROKE); - mFocusPaint.setStrokeWidth(res.getDimension(R.dimen.tab_focus_stroke)); - mFocusPaint.setAntiAlias(true); - mFocusPaint.setColor(res.getColor(R.color.tabFocusHighlight)); - } - - @Override - public void onConfigurationChanged(Configuration config) { - super.onConfigurationChanged(config); - Resources res = mActivity.getResources(); - mTabWidth = (int) res.getDimension(R.dimen.tab_width); - // force update of tab bar - mTabs.updateLayout(); - } - - void setUseQuickControls(boolean useQuickControls) { - mUseQuickControls = useQuickControls; - mNewTab.setVisibility(mUseQuickControls ? View.GONE - : View.VISIBLE); - } - - int getTabCount() { - return mTabMap.size(); - } - - void updateTabs(List<Tab> tabs) { - mTabs.clearTabs(); - mTabMap.clear(); - for (Tab tab : tabs) { - TabView tv = buildTabView(tab); - mTabs.addTab(tv); - } - mTabs.setSelectedTab(mTabControl.getCurrentPosition()); - } - - @Override - protected void onMeasure(int hspec, int vspec) { - super.onMeasure(hspec, vspec); - int w = getMeasuredWidth(); - // adjust for new tab overlap - if (!mUseQuickControls) { - w -= mAddTabOverlap; - } - setMeasuredDimension(w, getMeasuredHeight()); - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - // use paddingLeft and paddingTop - int pl = getPaddingLeft(); - int pt = getPaddingTop(); - int sw = mTabs.getMeasuredWidth(); - int w = right - left - pl; - if (mUseQuickControls) { - mButtonWidth = 0; - } else { - mButtonWidth = mNewTab.getMeasuredWidth() - mAddTabOverlap; - if (w-sw < mButtonWidth) { - sw = w - mButtonWidth; - } - } - mTabs.layout(pl, pt, pl + sw, bottom - top); - // adjust for overlap - if (!mUseQuickControls) { - mNewTab.layout(pl + sw - mAddTabOverlap, pt, - pl + sw + mButtonWidth - mAddTabOverlap, bottom - top); - } - } - - public void onClick(View view) { - if (mNewTab == view) { - mUiController.openTabToHomePage(); - } else if (mTabs.getSelectedTab() == view) { - if (mUseQuickControls) { - if (mUi.isTitleBarShowing() && !isLoading()) { - mUi.stopEditingUrl(); - mUi.hideTitleBar(); - } else { - mUi.stopWebViewScrolling(); - mUi.editUrl(false, false); - } - } else if (mUi.isTitleBarShowing() && !isLoading()) { - mUi.stopEditingUrl(); - mUi.hideTitleBar(); - } else { - showUrlBar(); - } - } else if (view instanceof TabView) { - final Tab tab = ((TabView) view).mTab; - int ix = mTabs.getChildIndex(view); - if (ix >= 0) { - mTabs.setSelectedTab(ix); - mUiController.switchToTab(tab); - } - } - } - - private void showUrlBar() { - mUi.stopWebViewScrolling(); - mUi.showTitleBar(); - } - - private TabView buildTabView(Tab tab) { - TabView tabview = new TabView(mActivity, tab); - mTabMap.put(tab, tabview); - tabview.setOnClickListener(this); - return tabview; - } - - private static Bitmap getDrawableAsBitmap(Drawable drawable, int width, int height) { - Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(b); - drawable.setBounds(0, 0, width, height); - drawable.draw(c); - c.setBitmap(null); - return b; - } - - /** - * View used in the tab bar - */ - class TabView extends LinearLayout implements OnClickListener { - - Tab mTab; - View mTabContent; - TextView mTitle; - View mIncognito; - View mSnapshot; - ImageView mIconView; - ImageView mLock; - ImageView mClose; - boolean mSelected; - Path mPath; - Path mFocusPath; - int[] mWindowPos; - - /** - * @param context - */ - public TabView(Context context, Tab tab) { - super(context); - setWillNotDraw(false); - mPath = new Path(); - mFocusPath = new Path(); - mWindowPos = new int[2]; - mTab = tab; - setGravity(Gravity.CENTER_VERTICAL); - setOrientation(LinearLayout.HORIZONTAL); - setPadding(mTabOverlap, 0, mTabSliceWidth, 0); - LayoutInflater inflater = LayoutInflater.from(getContext()); - mTabContent = inflater.inflate(R.layout.tab_title, this, true); - mTitle = (TextView) mTabContent.findViewById(R.id.title); - mIconView = (ImageView) mTabContent.findViewById(R.id.favicon); - mLock = (ImageView) mTabContent.findViewById(R.id.lock); - mClose = (ImageView) mTabContent.findViewById(R.id.close); - mClose.setOnClickListener(this); - mIncognito = mTabContent.findViewById(R.id.incognito); - mSnapshot = mTabContent.findViewById(R.id.snapshot); - mSelected = false; - // update the status - updateFromTab(); - } - - @Override - public void onClick(View v) { - if (v == mClose) { - closeTab(); - } - } - - private void updateFromTab() { - String displayTitle = mTab.getTitle(); - if (displayTitle == null) { - displayTitle = mTab.getUrl(); - } - setDisplayTitle(displayTitle); - if (mTab.getFavicon() != null) { - setFavicon(mUi.getFaviconDrawable(mTab.getFavicon())); - } - updateTabIcons(); - } - - private void updateTabIcons() { - mIncognito.setVisibility( - mTab.isPrivateBrowsingEnabled() ? - View.VISIBLE : View.GONE); - mSnapshot.setVisibility(mTab.isSnapshot() - ? View.VISIBLE : View.GONE); - } - - @Override - public void setActivated(boolean selected) { - mSelected = selected; - mClose.setVisibility(mSelected ? View.VISIBLE : View.GONE); - mIconView.setVisibility(mSelected ? View.GONE : View.VISIBLE); - mTitle.setTextAppearance(mActivity, mSelected ? - R.style.TabTitleSelected : R.style.TabTitleUnselected); - setHorizontalFadingEdgeEnabled(!mSelected); - super.setActivated(selected); - updateLayoutParams(); - setFocusable(!selected); - postInvalidate(); - } - - public void updateLayoutParams() { - LayoutParams lp = (LinearLayout.LayoutParams) getLayoutParams(); - lp.width = mTabWidth; - lp.height = LayoutParams.MATCH_PARENT; - setLayoutParams(lp); - } - - void setDisplayTitle(String title) { - mTitle.setText(title); - } - - void setFavicon(Drawable d) { - mIconView.setImageDrawable(d); - } - - void setLock(Drawable d) { - if (null == d) { - mLock.setVisibility(View.GONE); - } else { - mLock.setImageDrawable(d); - mLock.setVisibility(View.VISIBLE); - } - } - - private void closeTab() { - if (mTab == mTabControl.getCurrentTab()) { - mUiController.closeCurrentTab(); - } else { - mUiController.closeTab(mTab); - } - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - super.onLayout(changed, l, t, r, b); - setTabPath(mPath, 0, 0, r - l, b - t); - setFocusPath(mFocusPath, 0, 0, r - l, b - t); - } - - @Override - protected void dispatchDraw(Canvas canvas) { - if (mCurrentTextureWidth != mUi.getContentWidth() || - mCurrentTextureHeight != getHeight()) { - mCurrentTextureWidth = mUi.getContentWidth(); - mCurrentTextureHeight = getHeight(); - - if (mCurrentTextureWidth > 0 && mCurrentTextureHeight > 0) { - Bitmap activeTexture = getDrawableAsBitmap(mActiveDrawable, - mCurrentTextureWidth, mCurrentTextureHeight); - Bitmap inactiveTexture = getDrawableAsBitmap(mInactiveDrawable, - mCurrentTextureWidth, mCurrentTextureHeight); - - mActiveShader = new BitmapShader(activeTexture, - Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - mActiveShaderPaint.setShader(mActiveShader); - - mInactiveShader = new BitmapShader(inactiveTexture, - Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); - mInactiveShaderPaint.setShader(mInactiveShader); - } - } - // add some monkey protection - if ((mActiveShader != null) && (mInactiveShader != null)) { - int state = canvas.save(); - getLocationInWindow(mWindowPos); - Paint paint = mSelected ? mActiveShaderPaint : mInactiveShaderPaint; - drawClipped(canvas, paint, mPath, mWindowPos[0]); - canvas.restoreToCount(state); - } - super.dispatchDraw(canvas); - } - - private void drawClipped(Canvas canvas, Paint paint, Path clipPath, int left) { - // TODO: We should change the matrix/shader only when needed - final Matrix matrix = mSelected ? mActiveMatrix : mInactiveMatrix; - matrix.setTranslate(-left, 0.0f); - (mSelected ? mActiveShader : mInactiveShader).setLocalMatrix(matrix); - canvas.drawPath(clipPath, paint); - if (isFocused()) { - canvas.drawPath(mFocusPath, mFocusPaint); - } - } - - private void setTabPath(Path path, int l, int t, int r, int b) { - path.reset(); - path.moveTo(l, b); - path.lineTo(l, t); - path.lineTo(r - mTabSliceWidth, t); - path.lineTo(r, b); - path.close(); - } - - private void setFocusPath(Path path, int l, int t, int r, int b) { - path.reset(); - path.moveTo(l, b); - path.lineTo(l, t); - path.lineTo(r - mTabSliceWidth, t); - path.lineTo(r, b); - } - - } - - private void animateTabOut(final Tab tab, final TabView tv) { - ObjectAnimator scalex = ObjectAnimator.ofFloat(tv, "scaleX", 1.0f, 0.0f); - ObjectAnimator scaley = ObjectAnimator.ofFloat(tv, "scaleY", 1.0f, 0.0f); - ObjectAnimator alpha = ObjectAnimator.ofFloat(tv, "alpha", 1.0f, 0.0f); - AnimatorSet animator = new AnimatorSet(); - animator.playTogether(scalex, scaley, alpha); - animator.setDuration(150); - animator.addListener(new AnimatorListener() { - - @Override - public void onAnimationCancel(Animator animation) { - } - - @Override - public void onAnimationEnd(Animator animation) { - mTabs.removeTab(tv); - mTabMap.remove(tab); - mUi.onRemoveTabCompleted(tab); - } - - @Override - public void onAnimationRepeat(Animator animation) { - } - - @Override - public void onAnimationStart(Animator animation) { - } - - }); - animator.start(); - } - - private void animateTabIn(final Tab tab, final TabView tv) { - ObjectAnimator scalex = ObjectAnimator.ofFloat(tv, "scaleX", 0.0f, 1.0f); - scalex.setDuration(150); - scalex.addListener(new AnimatorListener() { - - @Override - public void onAnimationCancel(Animator animation) { - } - - @Override - public void onAnimationEnd(Animator animation) { - mUi.onAddTabCompleted(tab); - } - - @Override - public void onAnimationRepeat(Animator animation) { - } - - @Override - public void onAnimationStart(Animator animation) { - mTabs.addTab(tv); - } - - }); - scalex.start(); - } - - // TabChangeListener implementation - - public void onSetActiveTab(Tab tab) { - mTabs.setSelectedTab(mTabControl.getTabPosition(tab)); - } - - public void onFavicon(Tab tab, Bitmap favicon) { - TabView tv = mTabMap.get(tab); - if (tv != null) { - tv.setFavicon(mUi.getFaviconDrawable(favicon)); - } - } - - public void onNewTab(Tab tab) { - TabView tv = buildTabView(tab); - animateTabIn(tab, tv); - } - - public void onRemoveTab(Tab tab) { - TabView tv = mTabMap.get(tab); - if (tv != null) { - animateTabOut(tab, tv); - } else { - mTabMap.remove(tab); - } - } - - public void onUrlAndTitle(Tab tab, String url, String title) { - TabView tv = mTabMap.get(tab); - if (tv != null) { - if (title != null) { - tv.setDisplayTitle(title); - } else if (url != null) { - tv.setDisplayTitle(UrlUtils.stripUrl(url)); - } - tv.updateTabIcons(); - } - } - - private boolean isLoading() { - Tab tab = mTabControl.getCurrentTab(); - if (tab != null) { - return tab.inPageLoad(); - } else { - return false; - } - } - -} |