blob: cd3b2305025f62947744777497b8383f50cbbf62 [file] [log] [blame]
/*
* 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 com.android.browser.UrlInputView.UrlInputListener;
import android.app.Activity;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
/**
* tabbed title bar for xlarge screen browser
*/
public class TitleBarXLarge extends TitleBarBase
implements UrlInputListener, OnClickListener {
private static final int PROGRESS_MAX = 100;
private UiController mUiController;
private Drawable mStopDrawable;
private Drawable mReloadDrawable;
private View mContainer;
private View mBackButton;
private View mForwardButton;
private CheckBox mStar;
private View mSearchButton;
private View mFocusContainer;
private View mUnfocusContainer;
private View mGoButton;
private ImageView mStopButton;
private View mAllButton;
private View mClearButton;
private PageProgressView mProgressView;
private UrlInputView mUrlFocused;
private TextView mUrlUnfocused;
private boolean mInLoad;
public TitleBarXLarge(Activity activity, UiController controller) {
super(activity);
mUiController = controller;
Resources resources = activity.getResources();
mStopDrawable = resources.getDrawable(R.drawable.ic_stop_normal);
mReloadDrawable = resources.getDrawable(R.drawable.ic_refresh_normal);
rebuildLayout(activity, true);
}
private void rebuildLayout(Context context, boolean rebuildData) {
LayoutInflater factory = LayoutInflater.from(context);
factory.inflate(R.layout.url_bar, this);
mContainer = findViewById(R.id.taburlbar);
mUrlFocused = (UrlInputView) findViewById(R.id.url_focused);
mUrlUnfocused = (TextView) findViewById(R.id.url_unfocused);
mAllButton = findViewById(R.id.all_btn);
// TODO: Change enabled states based on whether you can go
// back/forward. Probably should be done inside onPageStarted.
mBackButton = findViewById(R.id.back);
mForwardButton = findViewById(R.id.forward);
mStar = (CheckBox) findViewById(R.id.star);
mStopButton = (ImageView) findViewById(R.id.stop);
mSearchButton = findViewById(R.id.search);
mLockIcon = (ImageView) findViewById(R.id.lock);
mGoButton = findViewById(R.id.go);
mClearButton = findViewById(R.id.clear);
mProgressView = (PageProgressView) findViewById(R.id.progress);
mFocusContainer = findViewById(R.id.urlbar_focused);
mUnfocusContainer = findViewById(R.id.urlbar_unfocused);
mBackButton.setOnClickListener(this);
mForwardButton.setOnClickListener(this);
mStar.setOnClickListener(this);
mAllButton.setOnClickListener(this);
mStopButton.setOnClickListener(this);
mSearchButton.setOnClickListener(this);
mGoButton.setOnClickListener(this);
mClearButton.setOnClickListener(this);
mUrlFocused.setUrlInputListener(this);
mUrlFocused.setContainer(mFocusContainer);
mUrlFocused.setController(mUiController);
mUnfocusContainer.setOnClickListener(this);
}
public void setCurrentUrlIsBookmark(boolean isBookmark) {
mStar.setChecked(isBookmark);
}
@Override
public void onClick(View v) {
if (mUnfocusContainer == v) {
setUrlMode(true);
} else if (mBackButton == v) {
mUiController.getCurrentTopWebView().goBack();
} else if (mForwardButton == v) {
mUiController.getCurrentTopWebView().goForward();
} else if (mStar == v) {
mUiController.bookmarkCurrentPage(
AddBookmarkPage.DEFAULT_FOLDER_ID);
} else if (mAllButton == v) {
mUiController.bookmarksOrHistoryPicker(false);
} else if (mSearchButton == v) {
search();
} else if (mStopButton == v) {
stopOrRefresh();
} else if (mGoButton == v) {
if (!TextUtils.isEmpty(mUrlFocused.getText())) {
onAction(mUrlFocused.getText().toString(), null);
}
} else if (mClearButton == v) {
mUrlFocused.setText("");
}
}
int getHeightWithoutProgress() {
return mContainer.getHeight();
}
@Override
void setFavicon(Bitmap icon) { }
// UrlInputListener implementation
@Override
public void onAction(String text, String extra) {
mUiController.getCurrentTopWebView().requestFocus();
((BaseUi) mUiController.getUi()).hideFakeTitleBar();
Intent i = new Intent();
i.setAction(Intent.ACTION_SEARCH);
i.putExtra(SearchManager.QUERY, text);
if (extra != null) {
i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
}
mUiController.handleNewIntent(i);
setUrlMode(false);
setDisplayTitle(text);
}
@Override
public void onDismiss() {
mUiController.getCurrentTopWebView().requestFocus();
((BaseUi) mUiController.getUi()).hideFakeTitleBar();
setUrlMode(false);
setDisplayTitle(mUiController.getCurrentWebView().getUrl());
}
@Override
public void onEdit(String text) {
setDisplayTitle(text, true);
if (text != null) {
mUrlFocused.setSelection(text.length());
}
}
private void setUrlMode(boolean focused) {
swapUrlContainer(focused);
if (focused) {
mUrlFocused.selectAll();
mUrlFocused.requestFocus();
mUrlFocused.setDropDownWidth(mUnfocusContainer.getWidth());
mUrlFocused.setDropDownHorizontalOffset(-mUrlFocused.getLeft());
mSearchButton.setVisibility(View.GONE);
mGoButton.setVisibility(View.VISIBLE);
} else {
mSearchButton.setVisibility(View.VISIBLE);
mGoButton.setVisibility(View.GONE);
}
}
private void swapUrlContainer(boolean focus) {
mUnfocusContainer.setVisibility(focus ? View.GONE : View.VISIBLE);
mFocusContainer.setVisibility(focus ? View.VISIBLE : View.GONE);
}
private void search() {
setDisplayTitle("");
mUrlUnfocused.requestFocus();
}
private void stopOrRefresh() {
if (mInLoad) {
mUiController.stopLoading();
} else {
mUiController.getCurrentTopWebView().reload();
}
}
/**
* Update the progress, from 0 to 100.
*/
@Override
void setProgress(int newProgress) {
if (newProgress >= PROGRESS_MAX) {
mProgressView.setProgress(PageProgressView.MAX_PROGRESS);
mProgressView.setVisibility(View.GONE);
mInLoad = false;
mStopButton.setImageDrawable(mReloadDrawable);
} else {
if (!mInLoad) {
mProgressView.setVisibility(View.VISIBLE);
mInLoad = true;
mStopButton.setImageDrawable(mStopDrawable);
}
mProgressView.setProgress(newProgress * PageProgressView.MAX_PROGRESS
/ PROGRESS_MAX);
}
}
@Override
/* package */ void setDisplayTitle(String title) {
mUrlFocused.setText(title, false);
mUrlUnfocused.setText(title);
}
void setDisplayTitle(String title, boolean filter) {
mUrlFocused.setText(title, filter);
mUrlUnfocused.setText(title);
}
/**
* Custom CheckBox which does not toggle when pressed. Used by mStar.
*/
public static class CustomCheck extends CheckBox {
public CustomCheck(Context context) {
super(context);
}
public CustomCheck(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomCheck(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void toggle() {
// Do nothing
}
}
}