package com.borqs.browser;
import org.chromium.content.browser.ContentView;
import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.borqs.browser.UrlInputView.UrlInputListener;
public class NavigationBarBase extends LinearLayout implements
OnClickListener, UrlInputListener, OnFocusChangeListener,
TextWatcher {
protected BaseUi mBaseUi;
protected TitleBar mTitleBar;
protected UiController mUiController;
protected UrlInputView mUrlInput;
private ImageView mFavicon;
private ImageView mLockIcon;
public NavigationBarBase(Context context) {
super(context);
}
public NavigationBarBase(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NavigationBarBase(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mLockIcon = (ImageView) findViewById(R.id.lock);
mFavicon = (ImageView) findViewById(R.id.favicon);
mUrlInput = (UrlInputView) findViewById(R.id.url);
mUrlInput.setTextColor(Color.WHITE);
mUrlInput.setUrlInputListener(this);
mUrlInput.setOnFocusChangeListener(this);
mUrlInput.setSelectAllOnFocus(true);
mUrlInput.addTextChangedListener(this);
}
public void setTitleBar(TitleBar titleBar) {
mTitleBar = titleBar;
mBaseUi = mTitleBar.getUi();
mUiController = mTitleBar.getUiController();
mUrlInput.setController(mUiController);
}
public void setLock(Drawable d) {
if (mLockIcon == null) return;
if (d == null) {
mLockIcon.setVisibility(View.GONE);
} else {
mLockIcon.setImageDrawable(d);
mLockIcon.setVisibility(View.VISIBLE);
}
}
public void setFavicon(Bitmap icon) {
if (mFavicon == null) return;
mFavicon.setImageDrawable(mBaseUi.getFaviconDrawable(icon));
}
protected void setFocusState(boolean focus) {
}
public boolean isEditingUrl() {
return mUrlInput.hasFocus();
}
void stopEditingUrl() {
ContentView currentTopWebView = mUiController.getCurrentTopContentView();
if (currentTopWebView != null) {
currentTopWebView.requestFocus();
}
}
void setDisplayTitle(String title) {
if (!isEditingUrl()) {
if (!title.equals(mUrlInput.getText().toString())) {
mUrlInput.setText(title, false);
}
}
}
void setIncognitoMode(boolean incognito) {
mUrlInput.setIncognitoMode(incognito);
}
/**
* called from the Ui when the user wants to edit
* @param clearInput clear the input field
*/
void startEditingUrl(boolean clearInput, boolean forceIME) {
// editing takes preference of progress
setVisibility(View.VISIBLE);
if (mTitleBar.useQuickControls()) {
mTitleBar.getProgressView().setVisibility(View.GONE);
}
if (!mUrlInput.hasFocus()) {
mUrlInput.requestFocus();
}
if (clearInput) {
mUrlInput.setText("");
}
if (forceIME) {
mUrlInput.showIME();
}
}
public void onProgressStarted() {
}
public void onProgressStopped() {
}
public boolean isMenuShowing() {
return false;
}
public void onTabDataChanged(Tab tab) {
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void onFocusChange(View view, boolean hasFocus) {
// if losing focus and not in touch mode, leave as is
if (hasFocus || view.isInTouchMode() || mUrlInput.needsUpdate()) {
setFocusState(hasFocus);
}
if (hasFocus) {
mBaseUi.showTitleBar();
} else if (!mUrlInput.needsUpdate()) {
mUrlInput.dismissDropDown();
mUrlInput.hideIME();
if (mUrlInput.getText().length() == 0) {
Tab currentTab = mUiController.getTabControl().getCurrentTab();
if (currentTab != null) {
setDisplayTitle(currentTab.getUrl());
}
}
mBaseUi.suggestHideTitleBar();
}
mUrlInput.clearNeedsUpdate();
}
@Override
public void onDismiss() {
// TODO Auto-generated method stub
}
@Override
public void onAction(String text, String extra, String source) {
stopEditingUrl();
if (UrlInputView.TYPED.equals(source)) {
String url = UrlUtils.smartUrlFilter(text, false);
Tab t = mBaseUi.getActiveTab();
// Only shortcut javascript URIs for now, as there is special
// logic in UrlHandler for other schemas
if (url != null && t != null && url.startsWith("javascript:")) {
mUiController.loadUrl(t, url);
setDisplayTitle(text);
return;
}
}
Intent i = new Intent();
String action = Intent.ACTION_SEARCH;
i.setAction(action);
i.putExtra(SearchManager.QUERY, text);
if (extra != null) {
i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
}
if (source != null) {
Bundle appData = new Bundle();
appData.putString("source", source); // ww
i.putExtra(SearchManager.APP_DATA, appData);
}
mUiController.handleNewIntent(i);
setDisplayTitle(text);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
/**
* callback from the suggestion dropdown
* copy text to input field and stay in edit mode
*/
@Override
public void onCopySuggestion(String text) {
mUrlInput.setText(text, true);
if (text != null) {
mUrlInput.setSelection(text.length());
}
}
public void setCurrentUrlIsBookmark(boolean isBookmark) {
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent evt) {
if (evt.getKeyCode() == KeyEvent.KEYCODE_BACK) {
// catch back key in order to do slightly more cleanup than usual
stopEditingUrl();
return true;
}
return super.dispatchKeyEventPreIme(evt);
}
}