blob: 51e1226c37bdf625313d356851d01c03c6f3f1f7 [file] [log] [blame]
/*
* Copyright (C) 2011 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.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewConfiguration;
import android.view.ViewPropertyAnimator;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.TextView;
import com.android.browser.UI.ComboViews;
import java.text.DateFormat;
import java.util.Date;
public class SnapshotBar extends LinearLayout implements OnClickListener {
private static final int MSG_SHOW_TITLE = 1;
private static final long DURATION_SHOW_DATE = BaseUi.HIDE_TITLEBAR_DELAY;
private ImageView mFavicon;
private TextView mDate;
private TextView mTitle;
private View mBookmarks;
private TitleBar mTitleBar;
private View mTabSwitcher;
private View mOverflowMenu;
private View mToggleContainer;
private boolean mIsAnimating;
private ViewPropertyAnimator mTitleAnimator, mDateAnimator;
private float mAnimRadius = 20f;
public SnapshotBar(Context context) {
super(context);
}
public SnapshotBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SnapshotBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setTitleBar(TitleBar titleBar) {
mTitleBar = titleBar;
setFavicon(null);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_SHOW_TITLE) {
mIsAnimating = false;
showTitle();
mTitleBar.getUi().showTitleBarForDuration();
}
}
};
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mFavicon = (ImageView) findViewById(R.id.favicon);
mDate = (TextView) findViewById(R.id.date);
mTitle = (TextView) findViewById(R.id.title);
mBookmarks = findViewById(R.id.all_btn);
mTabSwitcher = findViewById(R.id.tab_switcher);
mOverflowMenu = findViewById(R.id.more);
mToggleContainer = findViewById(R.id.toggle_container);
if (mBookmarks != null) {
mBookmarks.setOnClickListener(this);
}
if (mTabSwitcher != null) {
mTabSwitcher.setOnClickListener(this);
}
if (mOverflowMenu != null) {
mOverflowMenu.setOnClickListener(this);
boolean showMenu = !ViewConfiguration.get(getContext())
.hasPermanentMenuKey();
mOverflowMenu.setVisibility(showMenu ? VISIBLE : GONE);
}
if (mToggleContainer != null) {
mToggleContainer.setOnClickListener(this);
resetAnimation();
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (mToggleContainer != null) {
mAnimRadius = mToggleContainer.getHeight() / 2f;
}
}
void resetAnimation() {
if (mToggleContainer == null) {
// No animation needed/used
return;
}
if (mTitleAnimator != null) {
mTitleAnimator.cancel();
mTitleAnimator = null;
}
if (mDateAnimator != null) {
mDateAnimator.cancel();
mDateAnimator = null;
}
mIsAnimating = false;
mHandler.removeMessages(MSG_SHOW_TITLE);
mTitle.setAlpha(1f);
mTitle.setTranslationY(0f);
mTitle.setRotationX(0f);
mDate.setAlpha(0f);
mDate.setTranslationY(-mAnimRadius);
mDate.setRotationX(90f);
}
private void showDate() {
mTitleAnimator = mTitle.animate()
.alpha(0f)
.translationY(mAnimRadius)
.rotationX(-90f);
mDateAnimator = mDate.animate()
.alpha(1f)
.translationY(0f)
.rotationX(0f);
}
private void showTitle() {
mTitleAnimator = mTitle.animate()
.alpha(1f)
.translationY(0f)
.rotationX(0f);
mDateAnimator = mDate.animate()
.alpha(0f)
.translationY(-mAnimRadius)
.rotationX(90f);
}
@Override
public void onClick(View v) {
if (mBookmarks == v) {
mTitleBar.getUiController().bookmarksOrHistoryPicker(ComboViews.Bookmarks);
} else if (mTabSwitcher == v) {
((PhoneUi) mTitleBar.getUi()).toggleNavScreen();
} else if (mOverflowMenu == v) {
NavigationBarBase navBar = mTitleBar.getNavigationBar();
if (navBar instanceof NavigationBarPhone) {
((NavigationBarPhone)navBar).showMenu(mOverflowMenu);
}
} else if (mToggleContainer == v && !mIsAnimating) {
mIsAnimating = true;
showDate();
mTitleBar.getUi().showTitleBar();
Message m = mHandler.obtainMessage(MSG_SHOW_TITLE);
mHandler.sendMessageDelayed(m, DURATION_SHOW_DATE);
}
}
public void onTabDataChanged(Tab tab) {
if (!tab.isSnapshot()) return;
SnapshotTab snapshot = (SnapshotTab) tab;
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
mDate.setText(dateFormat.format(new Date(snapshot.getDateCreated())));
String title = snapshot.getTitle();
if (TextUtils.isEmpty(title)) {
title = UrlUtils.stripUrl(snapshot.getUrl());
}
mTitle.setText(title);
setFavicon(tab.getFavicon());
resetAnimation();
}
public void setFavicon(Bitmap icon) {
if (mFavicon == null) return;
mFavicon.setImageDrawable(mTitleBar.getUi().getFaviconDrawable(icon));
}
public boolean isAnimating() {
return mIsAnimating;
}
}