在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → android 高仿UC浏览器源码下载

android 高仿UC浏览器源码下载

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:25.70M
  • 下载次数:82
  • 浏览次数:5471
  • 发布时间:2015-08-20
  • 实例类别:C#语言基础
  • 发 布 人:crazycode
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android 浏览器 下载 c 源码

实例介绍

【实例简介】

【实例截图】

【核心代码】

package cn.hi321.browser.ui.activities;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.webkit.DownloadListener;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebIconDatabase;
import android.webkit.WebView;
import android.webkit.WebView.HitTestResult;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
import cn.hi321.browser.BrowserApp;
import cn.hi321.browser.CrashHandler;
import cn.hi321.browser.config.Constants;
import cn.hi321.browser.controllers.Controller;
import cn.hi321.browser.download.DownloadActivity;
import cn.hi321.browser.download.DownloadHelper;
import cn.hi321.browser.events.EventConstants;
import cn.hi321.browser.events.EventController;
import cn.hi321.browser.events.IDownloadEventsListener;
import cn.hi321.browser.greendroid.QuickAction;
import cn.hi321.browser.greendroid.QuickActionGrid;
import cn.hi321.browser.greendroid.QuickActionWidget;
import cn.hi321.browser.greendroid.QuickActionWidget.OnQuickActionClickListener;
import cn.hi321.browser.model.MediaItem;
import cn.hi321.browser.model.items.DownloadItem;
import cn.hi321.browser.player.SystemPlayer;
import cn.hi321.browser.preferences.PreferencesActivity;
import cn.hi321.browser.providers.BookmarksProviderWrapper;
import cn.hi321.browser.providers.BookmarksProviderWrapper.BookmarksSource;
import cn.hi321.browser.ui.components.CustomWebChromeClient;
import cn.hi321.browser.ui.components.CustomWebView;
import cn.hi321.browser.ui.components.CustomWebViewClient;
import cn.hi321.browser.ui.runnables.HistoryUpdater;
import cn.hi321.browser.utils.AnimationManager;
import cn.hi321.browser.utils.ApplicationUtils;
import cn.hi321.browser.utils.IOUtils;
import cn.hi321.browser.utils.LogUtil;
import cn.hi321.browser.utils.UrlUtils;
import cn.hi321.browser.utils.UserPreference;
import cn.hi321.browser.utils.Utils;
import cn.hi321.browser.view.PopMenu;
import cn.hi321.browser.view.PopWindowAddNewPage;

import com.minisea.cookbook.R;
import com.umeng.analytics.MobclickAgent;
import com.umeng.fb.FeedbackAgent;
import com.umeng.update.UmengUpdateAgent;
import com.umeng.update.UmengUpdateListener;
import com.umeng.update.UpdateResponse;
import com.umeng.content.UmengAction;

public class HomeActivity extends Activity implements OnTouchListener,
		IDownloadEventsListener {

	public static boolean isNeedLoadHide = false;// 不需要加载
	private static String TAG = "HomeActivity";

	public static HomeActivity INSTANCE = null;

	private static final int FLIP_PIXEL_THRESHOLD = 200;
	private static final int FLIP_TIME_THRESHOLD = 400;

	private static final int CONTEXT_MENU_OPEN = Menu.FIRST   10;
	private static final int CONTEXT_MENU_OPEN_IN_NEW_TAB = Menu.FIRST   11;
	private static final int CONTEXT_MENU_DOWNLOAD = Menu.FIRST   12;
	private static final int CONTEXT_MENU_COPY = Menu.FIRST   13;
	private static final int CONTEXT_MENU_SEND_MAIL = Menu.FIRST   14;
	private static final int CONTEXT_MENU_SHARE = Menu.FIRST   15;

	private static final int OPEN_BOOKMARKS_HISTORY_ACTIVITY = 0;
	private static final int OPEN_DOWNLOADS_ACTIVITY = 1;
	public static final int OPEN_FILE_CHOOSER_ACTIVITY = 2;

	protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(
			ViewGroup.LayoutParams.MATCH_PARENT,
			ViewGroup.LayoutParams.MATCH_PARENT);

	protected LayoutInflater mInflater = null;

	private RelativeLayout mTopBar;
	private LinearLayout mBottomBar;

	private LinearLayout mFindBar;
	private ImageButton mFindPreviousButton;
	private ImageButton mFindNextButton;
	private ImageButton mFindCloseButton;

	private EditText mFindText;

	private Button mMoreButton;

	private Button mSearchButton;
	private ImageButton mToolMenuBtn;
	private Button mToolsButton;
	public TextView mUrlEditText;
	private ImageView delectView;
	public ProgressBar mProgressBar;

	private ImageView mBubbleRightView;
	private ImageView mBubbleLeftView;
	public static int selectePosition = -1;

	public CustomWebView mCurrentWebView;
	private List<CustomWebView> mWebViews;

	private FrameLayout mContentView;

	private ImageButton mPreviousButton;
	private ImageButton mNextButton;

	private ImageButton mNewTabButton;

	private boolean mUrlBarVisible;
	private boolean mToolsActionGridVisible = false;
	private boolean mFindDialogVisible = false;

	private ImageButton returnHomeTabBtn;

	public ViewFlipper mViewFlipper;
	private TextView mNewTabButtonNumber;

	private GestureDetector mGestureDetector;

	private SwitchTabsMethod mSwitchTabsMethod = SwitchTabsMethod.BOTH;

	private QuickActionGrid mToolsActionGrid;

	private ValueCallback<Uri> mUploadMessage;

	private OnSharedPreferenceChangeListener mPreferenceChangeListener;

	private View mCustomView;

	private FrameLayout mFullscreenContainer;

	private WebChromeClient.CustomViewCallback mCustomViewCallback;

	private PopWindowAddNewPage mPopWindowAddNewPage;// 添加新标签页
	private PopMenu popMenu;

	private enum SwitchTabsMethod {
		BUTTONS, FLING, BOTH
	}

	public ValueCallback<Uri> getUploadMessage() {
		return mUploadMessage;
	}

	public void setUploadMessage(ValueCallback<Uri> mUploadMessage) {
		this.mUploadMessage = mUploadMessage;
	}

	private RefreshDataBroadcast mRefreshDataBroadcast;

	// [start]生命周期
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		INSTANCE = HomeActivity.this;
		Controller.getInstance().setPreferences(
				PreferenceManager.getDefaultSharedPreferences(this));
		Constants.initializeConstantsFromResources(this);
		
		CrashHandler crashHandler = CrashHandler.getInstance();
		crashHandler.init(INSTANCE);

		UserPreference.ensureIntializePreference(HomeActivity.this);

		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
					WindowManager.LayoutParams.FLAG_FULLSCREEN);
		} else {
			getWindow().setFlags(
					WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
					WindowManager.LayoutParams.FLAG_FULLSCREEN);
		}
		isNeedLoadHide = false;
		// setSereenLuminance();

		setContentView(R.layout.above_slidingmenu);
		EventController.getInstance().addDownloadListener(this);
		mRefreshDataBroadcast = new RefreshDataBroadcast();
		registerReceiver(mRefreshDataBroadcast, new IntentFilter("search"));

		mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		buildComponents();

		mViewFlipper.removeAllViews();

		updateSwitchTabsMethod();
		updateBookmarksDatabaseSource();

		registerPreferenceChangeListener();

		Intent i = getIntent();
		if (i.getData() != null) {
			// App first launch from another app.
			addTab(false);
			navigateToUrl(i.getDataString());// i.getDataString()获得所安装的包名
		} else {

			boolean lastPageRestored = false;
			if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
					Constants.PREFERENCES_BROWSER_RESTORE_LAST_PAGE, false)) {
				if (savedInstanceState != null) {
					String savedUrl = savedInstanceState
							.getString(Constants.EXTRA_SAVED_URL);
					if (savedUrl != null) {
						addTab(false);
						navigateToUrl(savedUrl);
						lastPageRestored = true;
					}
				}
			}

			if (!lastPageRestored) {
				addTab(true);
			}
		}

		initializeWebIconDatabase();
		// isLANDSCAPE = false;

		// 自动更新
		UmengUpdateAgent.update(this);
		UmengUpdateAgent.setUpdateAutoPopup(true);

		// 用户反馈
		/*
		 * FeedbackAgent agent = new FeedbackAgent(MainActivity.this);
		 * agent.sync();
		 */

	}

	/**
	 * Initialize the Web icons database.
	 */
	private void initializeWebIconDatabase() {

		final WebIconDatabase db = WebIconDatabase.getInstance();
		db.open(getDir("icons", 0).getPath());
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();

		WebIconDatabase.getInstance().close();

		mCurrentWebView.setVisibility(View.GONE);
		if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
				Constants.PREFERENCES_PRIVACY_CLEAR_CACHE_ON_EXIT, false)) {
			mCurrentWebView.clearCache(true);
		}

		EventController.getInstance().removeDownloadListener(this);

		PreferenceManager.getDefaultSharedPreferences(this)
				.unregisterOnSharedPreferenceChangeListener(
						mPreferenceChangeListener);

		unregisterReceiver(mRefreshDataBroadcast);
	}

	/**
	 * 连续按两次返回键就退出
	 */

	@Override
	protected void onResume() {
		mCurrentWebView.doOnResume();
		MobclickAgent.onResume(this);
		super.onResume();
	}

	/**
	 * Show a toast alert on tab switch.
	 */
	private void showToastOnTabSwitch() {
		if (Controller
				.getInstance()
				.getPreferences()
				.getBoolean(Constants.PREFERENCES_SHOW_TOAST_ON_TAB_SWITCH,
						true)) {
			String text;
			if (mCurrentWebView.getTitle() != null) {
				text = String.format(
						getString(R.string.Main_ToastTabSwitchFullMessage),
						mViewFlipper.getDisplayedChild()   1,
						mCurrentWebView.getTitle());
			} else {
				text = String.format(
						getString(R.string.Main_ToastTabSwitchMessage),
						mViewFlipper.getDisplayedChild()   1);
			}
			// Toast.makeText(this,"测试啊啊啊"  text, Toast.LENGTH_SHORT).show();
		}
	}

	/**
	 * Show the previous tab, if any.
	 */
	private void showPreviousTab(boolean resetToolbarsRunnable) {

		if (mViewFlipper.getChildCount() > 1) {

			if (mFindDialogVisible) {
				closeFindDialog();
			}

			mCurrentWebView.doOnPause();

			mViewFlipper.setInAnimation(AnimationManager.getInstance()
					.getInFromLeftAnimation());
			mViewFlipper.setOutAnimation(AnimationManager.getInstance()
					.getOutToRightAnimation());

			mViewFlipper.showPrevious();

			mCurrentWebView = mWebViews.get(mViewFlipper.getDisplayedChild());

			mCurrentWebView.doOnResume();

			showToastOnTabSwitch();

			updateUI();
		}
	}

	private int mOriginalOrientation;

	public void showCustomView(View view,
			WebChromeClient.CustomViewCallback callback, boolean isUseNew) {
		if (isUseNew) {
			if (mCustomView != null) {
				callback.onCustomViewHidden();
				return;
			}
			setToolbarsVisibility(false);
			getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
					WindowManager.LayoutParams.FLAG_FULLSCREEN);

			if (Build.VERSION.SDK_INT >= 14) {
				mFullscreenContainer.addView(view);
				mCustomView = view;
				mCustomViewCallback = callback;
				mOriginalOrientation = getRequestedOrientation();
				mContentView.setVisibility(View.INVISIBLE);
				mFullscreenContainer.setVisibility(View.VISIBLE);
				mFullscreenContainer.bringToFront();
				setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
			}
		} else {
			if (mCustomView != null) {
				callback.onCustomViewHidden();
				return;
			}
			mOriginalOrientation = getRequestedOrientation();

			// add by yanggf
			HomeActivity.this.getWindow().getDecorView();
			FrameLayout decor = (FrameLayout) getWindow().getDecorView();
			mFullscreenContainer = new FullscreenHolder(HomeActivity.this);
			mFullscreenContainer.addView(view, COVER_SCREEN_PARAMS);
			decor.addView(mFullscreenContainer, COVER_SCREEN_PARAMS);
			mCustomView = view;
			setStatusBarVisibility(false);
			mCustomViewCallback = callback;
			setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
		}

	}

	public void hideCustomView(boolean isUseNew) {

		Log.e(TAG, "onHideCustomView()===");
		if (isUseNew) {

			mContentView.setVisibility(View.VISIBLE);
			if (mCustomView == null) {
				return;
			}

			boolean isFullScreen = UserPreference.read("fullScreen", false);
			if (isFullScreen) {
				setToolbarsVisibility(false);
				getWindow().setFlags(
						WindowManager.LayoutParams.FLAG_FULLSCREEN,
						WindowManager.LayoutParams.FLAG_FULLSCREEN);
			} else {
				setToolbarsVisibility(true);
				getWindow().setFlags(
						WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
						WindowManager.LayoutParams.FLAG_FULLSCREEN);
			}
			mCustomView.setVisibility(View.GONE);
			mFullscreenContainer.removeView(mCustomView);
			mFullscreenContainer.setVisibility(View.GONE);
			mCustomView = null;
			try {
				mCustomViewCallback.onCustomViewHidden();
			} catch (Exception e) {
			}
			// Show the content view.

			setRequestedOrientation(mOriginalOrientation);
			if (mCurrentWebView != null) {
				mCurrentWebView.doOnResume();
			}

		} else {
			if (mCustomView == null)
				return;

			setStatusBarVisibility(true);
			try {
				FrameLayout decor = (FrameLayout) getWindow().getDecorView();
				if (decor != null && mFullscreenContainer != null) {
					decor.removeView(mFullscreenContainer);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				mCustomViewCallback.onCustomViewHidden();
			} catch (Exception e) {
				e.printStackTrace();
			}
			setRequestedOrientation(mOriginalOrientation);
			if (mCurrentWebView != null) {
				mCurrentWebView.doOnResume();
			}
			mFullscreenContainer = null;
			mCustomView = null;

		}

	}

	/**
	 * Show the next tab, if any.
	 */
	private void showNextTab(boolean resetToolbarsRunnable) {

		if (mViewFlipper.getChildCount() > 1) {

			if (mFindDialogVisible) {
				closeFindDialog();
			}

			mCurrentWebView.doOnPause();

			mViewFlipper.setInAnimation(AnimationManager.getInstance()
					.getInFromRightAnimation());
			mViewFlipper.setOutAnimation(AnimationManager.getInstance()
					.getOutToLeftAnimation());

			mViewFlipper.showNext();

			mCurrentWebView = mWebViews.get(mViewFlipper.getDisplayedChild());

			mCurrentWebView.doOnResume();
			showToastOnTabSwitch();

			// updatePreviousNextTabViewsVisibility();

			updateUI();
		}
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {

		// hideKeyboard(true);

		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			setToolbarsVisibility(false);
		}

		return mGestureDetector.onTouchEvent(event);
	}

	/**
	 * Check if the url is in the AdBlock white list.
	 * 
	 * @param url
	 *            The url to check
	 * @return true if the url is in the white list
	 */
	private boolean checkInAdBlockWhiteList(String url) {

		if (url != null) {
			boolean inList = false;
			Iterator<String> iter = Controller.getInstance()
					.getAdBlockWhiteList(this).iterator();
			while ((iter.hasNext()) && (!inList)) {
				if (url.contains(iter.next())) {
					inList = true;
				}
			}
			return inList;
		} else {
			return false;
		}
	}

	/**  
	 * 网页加载结束执行方法
	 * 
	 * @param url
	 */
	public void onPageFinished(String url) {
		updateUI();
		// updateGoButton();
		// cancelProgressBar();
		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			setToolbarsVisibility(false);
		} else {
			setToolbarsVisibility(true);
		}
		if ((Controller.getInstance().getPreferences().getBoolean(
				Constants.PREFERENCES_ADBLOCKER_ENABLE, true))
				&& (!checkInAdBlockWhiteList(mCurrentWebView.getUrl()))) {
			mCurrentWebView.loadAdSweep();
		}

		WebIconDatabase.getInstance().retainIconForPageUrl(
				mCurrentWebView.getUrl());

	}

	/**
	 * 页面加载开始时调用
	 * 
	 * @param url
	 */
	public void onPageStarted(String url) {
		if (mFindDialogVisible) {
			closeFindDialog();
		}

		mNextButton.setEnabled(false);

		updateGoButton();
		updateUI();

		if (url.equals(Constants.URL_ABOUT_HOME)
				|| url.equals(Constants.URL_ABOUT_START)
				|| url.equals(Constants.URL_ABOUT_VIDEO)) {
			mProgressBar.setVisibility(View.GONE);
		} else {
			showProgressBar();
		}

		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			setToolbarsVisibility(false);
		} else {
			setToolbarsVisibility(true);
		}
	}

	public void onUrlLoading(String url) {
		setToolbarsVisibility(true);
	}

	public void onMailTo(String url) {
		Intent sendMail = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
		startActivity(sendMail);
	}

	public void onExternalApplicationUrl(String url) {
		try {

			Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
			startActivity(i);

		} catch (Exception e) {
			 e.printStackTrace();
			// Notify user that the vnd url cannot be viewed.
			new AlertDialog.Builder(this)
					.setTitle(R.string.Main_VndErrorTitle)
					.setMessage(
							String.format(
									getString(R.string.Main_VndErrorMessage),
									url))
					.setPositiveButton(android.R.string.ok,
							new AlertDialog.OnClickListener() {
								public void onClick(DialogInterface dialog,
										int which) {
								}
							}).setCancelable(true).create().show();
		}
	}

	public void setHttpAuthUsernamePassword(String host, String realm,
			String username, String password) {
		mCurrentWebView.setHttpAuthUsernamePassword(host, realm, username,
				password);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {

		if ((item != null) && (item.getIntent() != null)) {
			Bundle b = item.getIntent().getExtras();

			switch (item.getItemId()) {
			case CONTEXT_MENU_OPEN:
				if (b != null) {
					navigateToUrl(b.getString(Constants.EXTRA_ID_URL));
				}
				return true;

			case CONTEXT_MENU_OPEN_IN_NEW_TAB:
				if (b != null) {
					addTab(false, mViewFlipper.getDisplayedChild());
					navigateToUrl(b.getString(Constants.EXTRA_ID_URL));
				}
				return true;

			case CONTEXT_MENU_DOWNLOAD:

				if (mCurrentWebView != null
						&& mCurrentWebView.getUrl() != null
						&& mCurrentWebView.getUrl().equals(
								Constants.URL_ABOUT_START)) {
					Toast.makeText(HomeActivity.this, "此图片不支持下载", 1).show();
				} else {
					if (b != null) {
						doDownloadStart(b.getString(Constants.EXTRA_ID_URL),
								null, null, null, 0);
					}
				}
				return true;
			case CONTEXT_MENU_COPY:
				if (b != null) {
					ApplicationUtils.copyTextToClipboard(this,
							b.getString(Constants.EXTRA_ID_URL),
							getString(R.string.Commons_UrlCopyToastMessage));
				}
				return true;
			case CONTEXT_MENU_SHARE:
				if (mCurrentWebView != null
						&& mCurrentWebView.getUrl() != null
						&& mCurrentWebView.getUrl().equals(
								Constants.URL_ABOUT_START)) {
					ApplicationUtils.sharePage(HomeActivity.this,
							"传递正能量的321浏览器火爆登场 ", " http://www.hi321.cn/");
				} else {
					if (b != null) {
						ApplicationUtils.sharePage(this, "",
								b.getString(Constants.EXTRA_ID_URL));
					}
				}

				return true;
			default:
				return super.onContextItemSelected(item);
			}
		}

		return super.onContextItemSelected(item);
	}

	@Override
	public void onDownloadEvent(String event, Object data) {
		if (event.equals(EventConstants.EVT_DOWNLOAD_ON_FINISHED)) {

			DownloadItem item = (DownloadItem) data;

			if (item.getErrorMessage() == null) {
				Toast.makeText(this,
						getString(R.string.Main_DownloadFinishedMsg),
						Toast.LENGTH_SHORT).show();
			} else {
				Toast.makeText(
						this,
						getString(R.string.Main_DownloadErrorMsg,
								item.getErrorMessage()), Toast.LENGTH_SHORT)
						.show();
			}
		}
	}

	/**
	 * Gesture listener implementation.
	 */
	private class GestureListener extends
			GestureDetector.SimpleOnGestureListener {

		@Override
		public boolean onDoubleTap(MotionEvent e) {
			mCurrentWebView.zoomIn();
			return super.onDoubleTap(e);
		}

		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
				float velocityY) {
			if (isSwitchTabsByFlingEnabled()) {
				if (e2.getEventTime() - e1.getEventTime() <= FLIP_TIME_THRESHOLD) {
					if (e2.getX() > (e1.getX()   FLIP_PIXEL_THRESHOLD)) {

						showPreviousTab(false);
						return false;
					}

					// going forwards: pushing stuff to the left
					if (e2.getX() < (e1.getX() - FLIP_PIXEL_THRESHOLD)) {

						showNextTab(false);
						return false;
					}
				}
			}

			return super.onFling(e1, e2, velocityX, velocityY);
		}

	}

	 class FullscreenHolder extends FrameLayout {

		public FullscreenHolder(Context ctx) {
			super(ctx);
			setBackgroundColor(ctx.getResources().getColor(
					android.R.color.black));
		}

		@Override
		public boolean onTouchEvent(MotionEvent evt) {
			return true;
		}

	}

	@Override
	/**
	 * 创建MENU
	 */
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add("menu");// 必须创建一项
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	/**
	 * 拦截MENU
	 */
	public boolean onMenuOpened(int featureId, Menu menu) {

		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			setToolbarsVisibility(isFullScreen);
			if (mPopWindowAddNewPage != null && mPopWindowAddNewPage.isShow()) {
				mPopWindowAddNewPage.dismiss();
			}
			if (popMenu.isShow()) {
				popMenu.dismiss();
			} else {
				popMenu.show(mToolMenuBtn);
			}
		} else {
			if (mPopWindowAddNewPage != null && mPopWindowAddNewPage.isShow()) {
				mPopWindowAddNewPage.dismiss();
			}
			if (popMenu.isShow()) {
				popMenu.dismiss();
			} else {
				popMenu.show(mToolMenuBtn);
			}
		}

		return false;// 返回为true 则显示系统menu
	}

	
	@Override
	public void onSaveInstanceState(Bundle outState) {
		outState.putString(Constants.EXTRA_SAVED_URL, mCurrentWebView.getUrl());

		super.onSaveInstanceState(outState);
	}

	/**
	 * 这是屏幕亮暗
	 * */

	private void setSereenLuminance() {
		// 取得当前亮度
		int normal = Settings.System.getInt(getContentResolver(),
				Settings.System.SCREEN_BRIGHTNESS, 255);
		WindowManager.LayoutParams wl = getWindow().getAttributes();
		// 进度条绑定最大亮度,255是最大亮度

		float tmpFloat = (float) normal / 255;
		if (tmpFloat > 0 && tmpFloat <= 1) {
			wl.screenBrightness = tmpFloat;
		}
		getWindow().setAttributes(wl);
	}

	/**
	 * Handle url request from external apps.
	 * 
	 * @param intent
	 *            The intent.
	 */
	@Override
	protected void onNewIntent(Intent intent) {
		if (intent.getData() != null) {
			addTab(false);
			navigateToUrl(intent.getDataString());
		}

		setIntent(intent);

		super.onNewIntent(intent);
	}

	/**
	 * Restart the application.
	 */
	public void restartApplication() {
		PendingIntent intent = PendingIntent.getActivity(this.getBaseContext(),
				0, new Intent(getIntent()), getIntent().getFlags());
		AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		mgr.set(AlarmManager.RTC, System.currentTimeMillis()   2000, intent);
		System.exit(2);
	}

	/**
	 * Create main UI.
	 */
	private void buildComponents() {
		popMenu = new PopMenu(HomeActivity.this, handler);
		mToolsActionGrid = new QuickActionGrid(this);
		mToolsActionGrid.addQuickAction(new QuickAction(this,
				R.drawable.ic_btn_home, R.string.QuickAction_Home));
		mToolsActionGrid.addQuickAction(new QuickAction(this,
				R.drawable.ic_btn_share, R.string.QuickAction_Share));
		mToolsActionGrid.addQuickAction(new QuickAction(this,
				R.drawable.ic_btn_find, R.string.QuickAction_Find));
		// mToolsActionGrid.addQuickAction(new QuickAction(this,
		// R.drawable.ic_btn_select, R.string.QuickAction_SelectText));
		mToolsActionGrid.addQuickAction(new QuickAction(this,
				R.drawable.notification_start, R.string.Download));
		UmengAction.initTimer(this, 30);
		mToolsActionGrid
				.setOnQuickActionClickListener(new OnQuickActionClickListener() {
					@Override
					public void onQuickActionClicked(QuickActionWidget widget,
							int position) {
						switch (position) {
						case 0:
							navigateToHome();
							break;
						case 1:
							System.out.println(" mCurrentWebView.getTitle()=="
									  mCurrentWebView.getTitle());
							if (HomeActivity.INSTANCE.mCurrentWebView != null
									&& HomeActivity.INSTANCE.mCurrentWebView
											.getUrl().equals(
													Constants.URL_ABOUT_START)) {// 是主页
								ApplicationUtils.sharePage(HomeActivity.this,
										"传递正能量的321浏览器火爆登场 ",
										" http://www.hi321.cn/");

							} else {
								ApplicationUtils.sharePage(HomeActivity.this,
										mCurrentWebView.getTitle(),
										mCurrentWebView.getUrl());
							}
							break;
						case 2:
							// Somewhat dirty hack: when the find dialog was
							// shown from a QuickAction,
							// the soft keyboard did not show... Hack is to wait
							// a little before showing
							// the file dialog through a thread.
							startShowFindDialogRunnable();
							break;
						case 3:
							// swithToSelectAndCopyTextMode();//这是文本选取复制
							Intent intent = new Intent(HomeActivity.this,
									DownloadActivity.class);
							startActivity(intent);
							overridePendingTransition(R.anim.hold,
									R.anim.push_bottom_out);

							break;
						case 4:
							String currentUrl = mUrlEditText.getText()
									.toString();

							// Do not reload mobile view if already on it.
							if (!currentUrl
									.startsWith(Constants.URL_GOOGLE_MOBILE_VIEW_NO_FORMAT)) {
								String url = String.format(
										Constants.URL_GOOGLE_MOBILE_VIEW,
										mUrlEditText.getText().toString());
								navigateToUrl(url);
							}
							break;
						}
					}
				});

		mToolsActionGrid
				.setOnDismissListener(new PopupWindow.OnDismissListener() {
					@Override
					public void onDismiss() {
						mToolsActionGridVisible = false;
					}
				});

		mGestureDetector = new GestureDetector(this, new GestureListener());

		mUrlBarVisible = true;

		mWebViews = new ArrayList<CustomWebView>();
		Controller.getInstance().setWebViewList(mWebViews);

		mBubbleRightView = (ImageView) findViewById(R.id.BubbleRightView);
		mBubbleRightView.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				setToolbarsVisibility(true);
			}
		});
		mBubbleRightView.setVisibility(View.GONE);

		mBubbleLeftView = (ImageView) findViewById(R.id.BubbleLeftView);
		mBubbleLeftView.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				setToolbarsVisibility(true);
			}
		});
		mBubbleLeftView.setVisibility(View.GONE);

		mViewFlipper = (ViewFlipper) findViewById(R.id.ViewFlipper);
		mTopBar = (RelativeLayout) findViewById(R.id.BarLayout);
		mTopBar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// Dummy event to steel it from the WebView, in case of clicking
				// between the buttons.
			}
		});

		mBottomBar = (LinearLayout) findViewById(R.id.BottomBarLayout);
		mBottomBar.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// Dummy event to steel it from the WebView, in case of clicking
				// between the buttons.
			}
		});

		mFindBar = (LinearLayout) findViewById(R.id.findControls);
		mFindBar.setVisibility(View.GONE);

		mSearchButton = (Button) findViewById(R.id.searchBtn);
		mSearchButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(HomeActivity.this,
						SearchsActivity.class);
				startActivity(intent);
			}
		});
		mUrlEditText = (TextView) findViewById(R.id.UrlText);
		delectView = (ImageView) findViewById(R.id.delectid);
		mUrlEditText.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent i = new Intent(HomeActivity.this, SearchActivity.class);
				String url = (String) mUrlEditText.getTag();
				if (url != null && url.length() > 6) {
					i.putExtra("url", url);
				}
				HomeActivity.this.startActivity(i);
			}
		});
		delectView.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (isDelet) {
					// 表示删除
					mCurrentWebView.stopLoading();
				} else {
					// 刷新
					mCurrentWebView.reload();
				}
			}
		});
		mToolMenuBtn = (ImageButton) findViewById(R.id.ToolMenuBtn);
		mToolMenuBtn.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				popMenu.show(mToolMenuBtn);
			}
		});

		mToolsButton = (Button) findViewById(R.id.ToolsBtn);
		mToolsButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				openAddBookmarkDialog();
			}
		});
		mMoreButton = (Button) findViewById(R.id.moreBtn);
		mMoreButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mToolsActionGridVisible = true;
				mToolsActionGrid.show(v);
			}
		});
		mProgressBar = (ProgressBar) findViewById(R.id.WebViewProgress);
		// mWebViewProgressTop = (SeekBar)findViewById(R.id.WebViewProgressTop);
		// mProgressBar.setMax(100);

		mPreviousButton = (ImageButton) findViewById(R.id.PreviousBtn);
		mNextButton = (ImageButton) findViewById(R.id.NextBtn);

		mPreviousButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				
				if (mCurrentWebView != null
						&& mCurrentWebView.getUrl() != null
						&& (!mCurrentWebView.getUrl().equals(
								Constants.URL_ABOUT_START) )) {
					

					if(!mCurrentWebView	.canGoBack()&& !mCurrentWebView.getUrl().equals(Constants.URL_ABOUT_URL)){
						removWebView(selectePosition, mCurrentWebView);
						setSelecteLabelPage();
					}else if (mCustomView != null) {
						hideCustomView(false);
					} else if (mFindDialogVisible) {
						closeFindDialog();
					} else {
						navigatePrevious();// 上一页
					}
					
				} else if (mUrlEditText.getText().equals("")
						|| mUrlEditText.getText() == null){
					
					if(!mCurrentWebView	.canGoBack()&&mWebViews.size()>1){
						removWebView(selectePosition, mCurrentWebView);
						setSelecteLabelPage();
					}else{
						navigateToHome();
						updateUI();
					}
				}
				
			}
		});

		mNextButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				navigateNext();// 下一页

			}
		});

		mNewTabButton = (ImageButton) findViewById(R.id.NewTabBtn);
		mNewTabButton.setOnClickListener(new View.OnClickListener() {
			public void onClick(View view) {
				if (mPopWindowAddNewPage != null) {
					if (mPopWindowAddNewPage.isShow()) {
						mPopWindowAddNewPage.dismiss();
						mPopWindowAddNewPage = null;
					}
				}
				mPopWindowAddNewPage = new PopWindowAddNewPage(
						HomeActivity.this, handler, mWebViews,
						mCurrentWebView, mViewFlipper, mNewTabButton);

			}
		});

		returnHomeTabBtn = (ImageButton) findViewById(R.id.returnHomeTabBtn);
		returnHomeTabBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {

				if (mUrlEditText != null
						&& mUrlEditText.getText().toString()
								.equals(Constants.URL_ABOUT_START)
						|| (mCurrentWebView != null
								&& mCurrentWebView.getUrl() != null && mCurrentWebView
								.getUrl().equals(Constants.URL_ABOUT_START))) {
					Toast.makeText(HomeActivity.this, "已经是主页", 0).show();
					navigateToHome();
					return;
				} else {
					navigateToHome();
				}
				updateUI();

			}
		});

		mNewTabButtonNumber = (TextView) findViewById(R.id.number);

		mFindPreviousButton = (ImageButton) findViewById(R.id.find_previous);
		mFindPreviousButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				mCurrentWebView.findNext(false);
				hideKeyboardFromFindDialog();
			}
		});

		mFindNextButton = (ImageButton) findViewById(R.id.find_next);
		mFindNextButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				mCurrentWebView.findNext(true);
				hideKeyboardFromFindDialog();
			}
		});

		mFindCloseButton = (ImageButton) findViewById(R.id.find_close);
		mFindCloseButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				closeFindDialog();
			}
		});

		mFindText = (EditText) findViewById(R.id.find_value);
		mFindText.addTextChangedListener(new TextWatcher() {

			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				doFind();
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}

			@Override
			public void afterTextChanged(Editable s) {
			}
		});
		setAddNewPageSize();
	}

	/**
	 * 显示进度条
	 * */
	public void showProgressBar() {
		if ((mProgressBar != null && Utils.hasNetwork(HomeActivity.this))) {
			mProgressBar.setVisibility(View.VISIBLE);
		} else {
			mProgressBar.setVisibility(View.GONE);
		}
	}

	/**
	 * 关闭进度条
	 * */
	public void cancelProgressBar() {
		// mWebViewProgressTop.setVisibility(View.GONE);
		mProgressBar.setVisibility(View.GONE);
		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			setToolbarsVisibility(false);
		} else {
			setToolbarsVisibility(true);
		}
	}

	/**
	 * 设置PreviousBtn 按钮的背景 canGoBack true 表示还可以继续点击前进
	 * */
	public void setPreviousBackground(boolean canGoBack) {
		if (canGoBack) {
			isNeedLoadHide = true;
			String url = Controller
					.getInstance()
					.getPreferences()
					.getString(Constants.PREFERENCES_GENERAL_HOME_PAGE,
							Constants.URL_ABOUT_START);
			if (mCurrentWebView.getUrl().equals(url)) {
				mPreviousButton.setImageResource(R.drawable.menubar_back_dis);
			} else {
				mPreviousButton.setImageResource(R.drawable.menubar_back_d);
			}

		} else {
			isNeedLoadHide = false;
			mPreviousButton.setImageResource(R.drawable.menubar_back_dis);
		}
	}

	/**
	 * 设置NextBtn 按钮的背景 canNextBtn true 表示还可以继续点击
	 * */
	public void setNextBtnBackground(boolean canNextBtn) {
		if (canNextBtn) {
			isNeedLoadHide = true;
			mNextButton.setImageResource(R.drawable.menubar_forward_d);
		} else {
			mNextButton.setImageResource(R.drawable.menubar_forward_dis);
			isNeedLoadHide = false;
		}
	}

	/**
	 * 全屏切换
	 */
	public void fullScreenChange() {

		boolean isFullScreen = UserPreference.read("fullScreen", false);
		if (isFullScreen) {
			setToolbarsVisibility(false);
			getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
					WindowManager.LayoutParams.FLAG_FULLSCREEN);
		} else {
			setToolbarsVisibility(true);
			getWindow().setFlags(
					WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
					WindowManager.LayoutParams.FLAG_FULLSCREEN);
		}

	}

	public void setAddNewPageSize() {
		if (mWebViews != null) {
			int number = mWebViews.size();
			if (number == 0) {
				number = 1;// 默认设置为1
			}
			mNewTabButtonNumber.setText(number   "");
		}
	}

	public Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			super.handleMessage(msg);
			switch (msg.what) {

			case PopMenu.bookmarks:// 打开书签
				openBookmarksHistoryActivity();
				break;
			case PopMenu.FindPage:// 页面查找
				startShowFindDialogRunnable();
				break;
			case PopMenu.ShareUrl:// 页面分享

				if (mCurrentWebView != null
						&& mCurrentWebView.getUrl().equals(
								Constants.URL_ABOUT_START)) {// 是主页
					ApplicationUtils.sharePage(HomeActivity.this,
							"传递正能量的321浏览器火爆登场 ", " http://www.hi321.cn/");

				} else {
					ApplicationUtils.sharePage(HomeActivity.this,
							mCurrentWebView.getTitle(),
							mCurrentWebView.getUrl());
				}
				break;
			case PopMenu.SelectText:// 选择文本
				swithToSelectAndCopyTextMode();
				break;
			case PopMenu.ADD_BOOKMARK: // 添加书签
				openAddBookmarkDialog();
				break;
			case PopMenu.Download:// 下载管理
				openDownloadsList();
				break;
			case PopMenu.Setting:// 设置
				openPreferences();
				break;
			case PopMenu.Fankui:// 反馈
				openFeedback();
				break;
			case PopMenu.exit:// 退出
				HomeActivity.this.finish();
				break;
			case PopMenu.refreshview:// 刷新
				if (mCurrentWebView.isLoading()) {
					mCurrentWebView.stopLoading();
				} else {
					mCurrentWebView.reload();
				}
				break;

			case PopMenu.Update:

				// 如果想程序启动时自动检查是否需要更新, 把下面两行代码加在Activity 的onCreate()函数里。
				com.umeng.common.Log.LOG = true;
				UmengUpdateAgent.setUpdateOnlyWifi(false); // 目前我们默认在Wi-Fi接入情况下才进行自动提醒。如需要在其他网络环境下进行更新自动提醒,则请添加该行代码
				UmengUpdateAgent.setUpdateAutoPopup(false);
				UmengUpdateAgent.setUpdateListener(updateListener);

				UmengUpdateAgent.update(HomeActivity.this);

				break;

			case PopMenu.FullSeting:
				// mUrlBarVisible = false;
				fullScreenChange();
				break;
			case PopMenu.Guanyu:
				Intent intent = new Intent(HomeActivity.this,
						AboutActivity.class);
				startActivity(intent);
				overridePendingTransition(R.anim.fade, R.anim.hold);
				break;
			case PopMenu.SCREEN_LUMINANCE:
				// 取得当前亮度
				int normal = Settings.System.getInt(getContentResolver(),
						Settings.System.SCREEN_BRIGHTNESS, 255);
				if (normal < 255) {
					// 夜间模式
					// 根据当前进度改变亮度
					Settings.System.putInt(getContentResolver(),
							Settings.System.SCREEN_BRIGHTNESS, 255);
				} else {
					Settings.System.putInt(getContentResolver(),
							Settings.System.SCREEN_BRIGHTNESS, 85);
				}
				setSereenLuminance();

				break;
			case PopWindowAddNewPage.ADDNEWPAGE:
				addTab(true);// 新建标签页
				setAddNewPageSize();
				break;
			case PopWindowAddNewPage.RemoveLabelPage:
				setSelecteLabelPage();
				break;
			case PopWindowAddNewPage.LoadHomelPage:
				navigateToHome();
				updateUI();
				break;
			case PopWindowAddNewPage.SELECTPage:// 选择某一页
				int pos = (Integer) msg.obj;
				selectePosition = pos;
				if (mViewFlipper.getChildCount() > pos) {
					mWebViews = PopWindowAddNewPage.mWebViews;
					mViewFlipper = PopWindowAddNewPage.mViewFlipper;
					mCurrentWebView = mWebViews.get(pos);
					mViewFlipper.getChildAt(pos);
					mViewFlipper.setDisplayedChild(pos);
				}

				updateUI();
				setAddNewPageSize();
				//
				break;
			case PopMenu.SAVEIMAGE:
				View view = HomeActivity.this.getWindow().getDecorView();
				view.setDrawingCacheEnabled(true);
				view.buildDrawingCache();
				Bitmap b1 = view.getDrawingCache();
				final String status = Environment.getExternalStorageState();
				if (status.equals(Environment.MEDIA_MOUNTED)) {
					IOUtils.SaveImage(b1);
					Toast.makeText(HomeActivity.this, "保存成功", 1).show();
				} else {
					Toast.makeText(HomeActivity.this, "没有sdcard", 1).show();
				}
				break;

			default:
				break;
			}

		}

		private void openFeedback() {
			FeedbackAgent agent = new FeedbackAgent(HomeActivity.this);
			agent.startFeedbackActivity();
		}

	};
	
	public void removWebView(final int position,
			final CustomWebView currentWebView) {
		if (mWebViews != null
				&& mWebViews.size() > position) {
			currentWebView.doOnPause();
			currentWebView.destroy();
			mWebViews.remove(position);
			mViewFlipper.removeViewAt(position);
			PopWindowAddNewPage.mWebViews = mWebViews ;
			PopWindowAddNewPage.mViewFlipper = mViewFlipper;
		}
	}

	private void setSelecteLabelPage() {
		List<CustomWebView> mWebViewsRemove = PopWindowAddNewPage.mWebViews;
		ViewFlipper mViewFlip = PopWindowAddNewPage.mViewFlipper;
		if (mWebViewsRemove != null && mWebViewsRemove.size() -1>= 0
				&& mViewFlip != null && mViewFlip.getChildCount()-1 >= 0) {
			selectePosition = mWebViewsRemove.size() -1;
			mWebViews = mWebViewsRemove;
			mViewFlipper = mViewFlip;
			mCurrentWebView = mWebViews.get(selectePosition);
			mViewFlipper.getChildAt(selectePosition);
			mViewFlipper.setDisplayedChild(selectePosition);
		} else {
			navigateToHome();
		}
		updateUI();
		setAddNewPageSize();
	}

	private void registerPreferenceChangeListener() {
		mPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
			@Override
			public void onSharedPreferenceChanged(
					SharedPreferences sharedPreferences, String key) {
				if (key.equals(Constants.PREFERENCE_BOOKMARKS_DATABASE)) {
					updateBookmarksDatabaseSource();
				}
			}
		};

		PreferenceManager.getDefaultSharedPreferences(this)
				.registerOnSharedPreferenceChangeListener(
						mPreferenceChangeListener);
	}

	/**
	 * Apply preferences to the current UI objects.
	 */
	public void applyPreferences() {
		// To update to Bubble position.
		// setToolbarsVisibility(false);

		updateSwitchTabsMethod();

		for (CustomWebView view : mWebViews) {
			view.initializeOptions();
		}
	}

	private void updateSwitchTabsMethod() {
		String method = PreferenceManager.getDefaultSharedPreferences(this)
				.getString(Constants.PREFERENCES_GENERAL_SWITCH_TABS_METHOD,
						"buttons");

		if (method.equals("buttons")) {
			mSwitchTabsMethod = SwitchTabsMethod.BUTTONS;
		} else if (method.equals("fling")) {
			mSwitchTabsMethod = SwitchTabsMethod.FLING;
		} else if (method.equals("both")) {
			mSwitchTabsMethod = SwitchTabsMethod.BOTH;
		} else {
			mSwitchTabsMethod = SwitchTabsMethod.BUTTONS;
		}
	}

	private void updateBookmarksDatabaseSource() {
		String source = PreferenceManager.getDefaultSharedPreferences(this)
				.getString(Constants.PREFERENCE_BOOKMARKS_DATABASE, "STOCK");

		if (source.equals("STOCK")) {
			BookmarksProviderWrapper.setBookmarksSource(BookmarksSource.STOCK);
		} else if (source.equals("INTERNAL")) {
			BookmarksProviderWrapper
					.setBookmarksSource(BookmarksSource.INTERNAL);
		}
	}

	private void setStatusBarVisibility(boolean visible) {
		int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN;
		getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN);
	}

	/**
	 * Initialize a newly created WebView.
	 */
	public void initializeCurrentWebView() {

		mCurrentWebView.setWebViewClient(new CustomWebViewClient(
				HomeActivity.this));
		mCurrentWebView.setWebChromeClient(new CustomWebChromeClient(
				HomeActivity.this));
		mCurrentWebView.setOnTouchListener(this);

		// 调用js意见反馈
		mCurrentWebView.addJavascriptInterface(new Object() {
			public void clickOnAndroid() {
				handler.post(new Runnable() {
					public void run() {
						FeedbackAgent agent = new FeedbackAgent(
								HomeActivity.this);
						agent.startFeedbackActivity();
					}
				});

			}

		}, "feedbrack");

		// mCurrentWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
		mCurrentWebView
				.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {

					@Override
					public void onCreateContextMenu(ContextMenu menu, View v,
							ContextMenuInfo menuInfo) {
						HitTestResult result = ((WebView) v).getHitTestResult();

						int resultType = result.getType();
						if ((resultType == HitTestResult.ANCHOR_TYPE)
								|| (resultType == HitTestResult.IMAGE_ANCHOR_TYPE)
								|| (resultType == HitTestResult.SRC_ANCHOR_TYPE)
								|| (resultType == HitTestResult.SRC_IMAGE_ANCHOR_TYPE)) {

							Intent i = new Intent();
							i.putExtra(Constants.EXTRA_ID_URL,
									result.getExtra());

							MenuItem item = menu.add(0, CONTEXT_MENU_OPEN, 0,
									R.string.Main_MenuOpen);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_OPEN_IN_NEW_TAB, 0,
									R.string.Main_MenuOpenNewTab);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_COPY, 0,
									R.string.Main_MenuCopyLinkUrl);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_DOWNLOAD, 0,
									R.string.Main_MenuDownload);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_SHARE, 0,
									R.string.Main_MenuShareLinkUrl);
							item.setIntent(i);

							menu.setHeaderTitle(result.getExtra());
						} else if (resultType == HitTestResult.IMAGE_TYPE) {
							Intent i = new Intent();
							i.putExtra(Constants.EXTRA_ID_URL,
									result.getExtra());

							MenuItem item = menu.add(0, CONTEXT_MENU_OPEN, 0,
									R.string.Main_MenuViewImage);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_COPY, 0,
									R.string.Main_MenuCopyImageUrl);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_DOWNLOAD, 0,
									R.string.Main_MenuDownloadImage);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_SHARE, 0,
									R.string.Main_MenuShareImageUrl);
							item.setIntent(i);

							menu.setHeaderTitle(result.getExtra());

						} else if (resultType == HitTestResult.EMAIL_TYPE) {

							Intent sendMail = new Intent(Intent.ACTION_VIEW,
									Uri.parse(WebView.SCHEME_MAILTO
											  result.getExtra()));

							MenuItem item = menu.add(0, CONTEXT_MENU_SEND_MAIL,
									0, R.string.Main_MenuSendEmail);
							item.setIntent(sendMail);

							Intent i = new Intent();
							i.putExtra(Constants.EXTRA_ID_URL,
									result.getExtra());

							item = menu.add(0, CONTEXT_MENU_COPY, 0,
									R.string.Main_MenuCopyEmailUrl);
							item.setIntent(i);

							item = menu.add(0, CONTEXT_MENU_SHARE, 0,
									R.string.Main_MenuShareEmailUrl);
							item.setIntent(i);

							menu.setHeaderTitle(result.getExtra());
						}
					}

				});

		mCurrentWebView.setDownloadListener(new DownloadListener() {

			@Override
			public void onDownloadStart(String url, String userAgent,
					String contentDisposition, String mimetype,
					long contentLength) {

				LogUtil.e("onDownloadStart", "---url==="   url
						  "----     userAgent==="   userAgent
						  "----    contentDisposition==="   contentDisposition
						  "----   mimetype===="   mimetype
						  "----   contentLength==="   contentLength);

				doDownloadStart(url, userAgent, contentDisposition, mimetype,
						contentLength);
			}

		});

	}

	/**
	 * Select Text in the webview and automatically sends the selected text to
	 * the clipboard. 选择文本并自动发送webview选中的文本到剪贴板
	 */
	public void swithToSelectAndCopyTextMode() {
		try {
			KeyEvent shiftPressEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
					KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
			shiftPressEvent.dispatch(mCurrentWebView);
		} catch (Exception e) {
			throw new AssertionError(e);
		}
	}

	private void startPlayer(final String url, final DownloadItem item) {
		Intent intent;
		if (mVideoInfo != null) {
			mVideoInfo.setUrl(url);
		} else {
			mVideoInfo = new cn.hi321.browser.media.entity.MediaItem();
			mVideoInfo.setUrl(url);
		}

		try {
			if (item.getFileName().trim().length() > 0)
				mVideoInfo.setTitle(item.getFileName());
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (url.contains("m3u8")) {
			mVideoInfo.setLive(true);
		} else {
			mVideoInfo.setLive(false);
		}

		intent = new Intent(HomeActivity.this, SystemPlayer.class);
		Bundle mBundle = new Bundle();
		mBundle.putSerializable("VideoInfo", mVideoInfo);
		intent.putExtras(mBundle);
		LogUtil.i(TAG, "startActivity");

		HomeActivity.this.startActivity(intent);
	}

	cn.hi321.browser.media.entity.MediaItem mVideoInfo = null;

	/**
	 * Initiate a download. Check the SD card and start the download runnable.
	 * 
	 * @param url
	 *            The url to download.
	 * @param userAgent
	 *            The user agent.
	 * @param contentDisposition
	 *            The content disposition.
	 * @param mimetype
	 *            The mime type.
	 * @param contentLength
	 *            The content length.
	 */
	private void doDownloadStart(final String url, final String userAgent,
			final String contentDisposition, final String mimetype,
			final long contentLength) {

		if (ApplicationUtils.checkCardState(this, true)) {

			final DownloadItem item = new DownloadItem(this, url);
			// Controller.getInstance().addToDownload(item);
			// item.startDownload();
			if (url != null && url.toLowerCase().contains(".m3u8")
					|| mimetype != null
					&& mimetype.toLowerCase().contains("video")
					|| mimetype != null
					&& mimetype.toLowerCase().contains("audio")) {

				if (url != null && url.toLowerCase().contains(".m3u8")) {
					startPlayer(url, item);
					return;
				}

				String[] items = new String[] { "播放", "下载" };
				new AlertDialog.Builder(HomeActivity.this)
						.setTitle(R.string.app_name)
						.setItems(items, new AlertDialog.OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								if (which == 0) {
									startPlayer(url, item);
								} else if (which == 1) {
									MediaItem mediaItem = new MediaItem();
									mediaItem.setId(item.getUrl());
									mediaItem.setUrl(item.getUrl());
									mediaItem.setName(item.getFileName());
									mediaItem.setMimetype(mimetype);
									mediaItem.setContentLength(contentLength);
									mediaItem
											.setContentDisposition(contentDisposition);
									mediaItem.setUserAgent(userAgent);
									mediaItem.setSrcPath(DownloadHelper
											.getDownloadPath()
											  "/"
											  item.getFileName());
									BrowserApp
											.getInstance()
											.getDownloadManager()
											.download(mediaItem,
													HomeActivity.this);

									Toast.makeText(
											HomeActivity.this,
											getString(R.string.Main_DownloadStartedMsg),
											Toast.LENGTH_SHORT).show();
								} else {
									startPlayer(url, item);
								}

							}

						})
						.setNegativeButton(R.string.user_cancel,
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {

									}
								}).create().show();

				return;
			} else {
				new AlertDialog.Builder(HomeActivity.this)
						.setTitle(R.string.app_name)
						.setMessage(
								HomeActivity.this
										.getString(R.string.add_download_tip)
										  item.getFileName())
						.setPositiveButton(android.R.string.ok,
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										MediaItem mediaItem = new MediaItem();
										mediaItem.setId(item.getUrl());
										mediaItem.setUrl(item.getUrl());
										mediaItem.setName(item.getFileName());
										mediaItem.setMimetype(mimetype);
										mediaItem
												.setContentLength(contentLength);
										mediaItem
												.setContentDisposition(contentDisposition);
										mediaItem.setUserAgent(userAgent);
										mediaItem.setSrcPath(DownloadHelper
												.getDownloadPath()
												  "/"
												  item.getFileName());
										BrowserApp
												.getInstance()
												.getDownloadManager()
												.download(mediaItem,
														HomeActivity.this);
										Toast.makeText(
												HomeActivity.this,
												getString(R.string.Main_DownloadStartedMsg),
												Toast.LENGTH_SHORT).show();
									}
								})

						.setNegativeButton(android.R.string.cancel,
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										// result.cancel();
									}
								}).create().show();
				return;
			}
			//
		}
	}

	/**
	 * Add a new tab.
	 * 
	 * @param navigateToHome
	 *            If True, will load the user home page.
	 */
	public void addTab(boolean navigateToHome) {
		addTab(navigateToHome, -1);
	}

	/**
	 * Add a new tab.
	 * 
	 * @param navigateToHome
	 *            If True, will load the user home page.
	 * @param parentIndex
	 *            The index of the new tab.
	 */
	public void addTab(boolean navigateToHome, int parentIndex) {
		if (mFindDialogVisible) {
			closeFindDialog();
		}

		RelativeLayout view = (RelativeLayout) mInflater.inflate(
				R.layout.webview, mViewFlipper, false);
		mFullscreenContainer = (FrameLayout) view
				.findViewById(R.id.fullscreen_custom_content);
		mContentView = (FrameLayout) view.findViewById(R.id.main_content);
		mCurrentWebView = (CustomWebView) view.findViewById(R.id.webview);
		mFullscreenContainer.setFocusable(true);

		initializeCurrentWebView();

		synchronized (mViewFlipper) {
			if (parentIndex != -1) {
				mWebViews.add(parentIndex   1, mCurrentWebView);
				mViewFlipper.addView(view, parentIndex   1);
			} else {
				mWebViews.add(mCurrentWebView);
				mViewFlipper.addView(view);
			}
			selectePosition = mViewFlipper.indexOfChild(view);
			mViewFlipper.setDisplayedChild(selectePosition);
		}

		if (navigateToHome) {
			navigateToHome();
		}
		updateUI();
		// updatePreviousNextTabViewsVisibility();
		mUrlEditText.clearFocus();

	}

	@Override
	protected void onPause() {
		mCurrentWebView.doOnPause();
		super.onPause();
		MobclickAgent.onPause(this);
	}

	@Override
	public void finish() {
		// TODO Auto-generated method stub
		super.finish();
		System.exit(0);
	}

	private void doFind() {
		CharSequence find = mFindText.getText();
		if (find.length() == 0) {
			mFindPreviousButton.setEnabled(false);
			mFindNextButton.setEnabled(false);
			mCurrentWebView.clearMatches();
		} else {
			int found = mCurrentWebView.findAll(find.toString());
			if (found < 2) {
				mFindPreviousButton.setEnabled(false);
				mFindNextButton.setEnabled(false);
			} else {
				mFindPreviousButton.setEnabled(true);
				mFindNextButton.setEnabled(true);
			}
		}
	}

	private void showFindDialog() {
		setFindBarVisibility(true);
		mCurrentWebView.doSetFindIsUp(true);
		CharSequence text = mFindText.getText();
		if (text.length() > 0) {
			mFindText.setSelection(0, text.length());
			doFind();
		} else {
			mFindPreviousButton.setEnabled(false);
			mFindNextButton.setEnabled(false);
		}

		mFindText.requestFocus();
		showKeyboardForFindDialog();
	}

	private void closeFindDialog() {
		hideKeyboardFromFindDialog();
		mCurrentWebView.doNotifyFindDialogDismissed();
		setFindBarVisibility(false);
	}

	private void setFindBarVisibility(boolean visible) {
		if (visible) {
			mFindBar.startAnimation(AnimationManager.getInstance()
					.getTopBarShowAnimation());
			mFindBar.setVisibility(View.VISIBLE);
			mFindDialogVisible = true;
		} else {
			mFindBar.startAnimation(AnimationManager.getInstance()
					.getTopBarHideAnimation());
			mFindBar.setVisibility(View.GONE);
			mFindDialogVisible = false;
		}
	}

	/**
	 * Change the tool bars visibility.
	 * 
	 * @param visible
	 *            If True, the tool bars will be shown.
	 */
	private void setToolbarsVisibility(boolean visible) {// visible 表示非全屏

		if (visible) {// 非全屏
			if (!mUrlBarVisible) {

				mTopBar.setVisibility(View.VISIBLE);
				mBottomBar.setVisibility(View.VISIBLE);
				mBubbleRightView.setVisibility(View.GONE);
				mBubbleLeftView.setVisibility(View.GONE);
			}
			mUrlBarVisible = true;

		} else {// 全屏
			// modify by yanggf

			String title = mUrlEditText.getText().toString();
			System.out.println("title==="   title);
			if ((mCurrentWebView != null && mCurrentWebView.getUrl() != null && mCurrentWebView
					.getUrl().equals(Constants.URL_ABOUT_START))) {
				mTopBar.setVisibility(View.VISIBLE);
				mBottomBar.setVisibility(View.VISIBLE);
				mBubbleRightView.setVisibility(View.GONE);
				mBubbleLeftView.setVisibility(View.GONE);

			} else {
				if (mUrlBarVisible) {
					mTopBar.setVisibility(View.GONE);
					mBottomBar.setVisibility(View.GONE);
					String bubblePosition = Controller
							.getInstance()
							.getPreferences()
							.getString(
									Constants.PREFERENCES_GENERAL_BUBBLE_POSITION,
									"right");

					if (bubblePosition.equals("right")) {
						mBubbleRightView.setVisibility(View.VISIBLE);
						mBubbleLeftView.setVisibility(View.GONE);
					} else if (bubblePosition.equals("left")) {
						mBubbleRightView.setVisibility(View.GONE);
						mBubbleLeftView.setVisibility(View.VISIBLE);
					} else if (bubblePosition.equals("both")) {
						mBubbleRightView.setVisibility(View.VISIBLE);
						mBubbleLeftView.setVisibility(View.VISIBLE);
					} else {
						mBubbleRightView.setVisibility(View.VISIBLE);
						mBubbleLeftView.setVisibility(View.GONE);
					}
					mUrlBarVisible = false;
				}

			}

		}
	}

	private void showKeyboardForFindDialog() {
		InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.showSoftInput(mFindText, InputMethodManager.SHOW_IMPLICIT);
	}

	private void hideKeyboardFromFindDialog() {
		InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(mFindText.getWindowToken(), 0);
	}

	/**
	 * Hide the keyboard.
	 * 
	 * @param delayedHideToolbars
	 *            If True, will start a runnable to delay tool bars hiding. If
	 *            False, tool bars are hidden immediatly.
	 */
	private void hideKeyboard(boolean delayedHideToolbars) {
		InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(mUrlEditText.getWindowToken(), 0);

		if (mUrlBarVisible) {
			if (delayedHideToolbars) {
			} else {

				boolean isFullScreen = UserPreference.read("fullScreen", false);
				if (isFullScreen) {
					setToolbarsVisibility(false);
				}

			}
		}
	}

	/**
	 * Thread to delay the show of the find dialog. This seems to be necessary
	 * when shown from a QuickAction. If not, the keyboard does not show. 50ms
	 * seems to be enough on a Nexus One and on the (rather) slow emulator.
	 * Dirty hack :(
	 */
	private void startShowFindDialogRunnable() {
		new Thread(new Runnable() {

			private Handler mHandler = new Handler() {
				public void handleMessage(Message msg) {
					showFindDialog();
				}
			};

			@Override
			public void run() {
				try {
					Thread.sleep(50);
					mHandler.sendEmptyMessage(0);
				} catch (InterruptedException e) {
					mHandler.sendEmptyMessage(0);
				}

			}
		}).start();
	}

	/**
	 * Hide the tool bars.
	 */
	public void hideToolbars() {
		if (mUrlBarVisible) {
			if ((!mUrlEditText.hasFocus()) && (!mToolsActionGridVisible)) {

				// if (!mCurrentWebView.isLoading()) {
				//
				// setToolbarsVisibility(false);
				// }
			}
		}
		// mHideToolbarsRunnable = null;
	}

	/**
	 * Start a runnable to update history.
	 * 
	 * @param title
	 *            The page title.
	 * @param url
	 *            The page url.
	 */
	public void startHistoryUpdaterRunnable(String title, String url,
			String originalUrl) {
		if ((url != null) && (url.length() > 0)) {
			new Thread(new HistoryUpdater(this, title, url, originalUrl))
					.start();
		}
	}

	/**
	 * Navigate to the given url.
	 * 
	 * @param url
	 *            The url.
	 */
	private void navigateToUrl(String url) {
		// Needed to hide toolbars properly.
		mUrlEditText.clearFocus();
		mCurrentWebView.doOnResume();
		if ((url != null) && (url.length() > 0)) {

			if (UrlUtils.isUrl(url)) {
				url = UrlUtils.checkUrl(url);
			} else {
				url = UrlUtils.getSearchUrl(this, url);
			}

			if (Controller.getInstance().getPreferences()
					.getBoolean(Constants.PREFERENCES_SHOW_FULL_SCREEN, false)
					&& Controller
							.getInstance()
							.getPreferences()
							.getBoolean(
									Constants.PREFERENCES_GENERAL_HIDE_TITLE_BARS,
									true)) {
				hideKeyboard(true);
			}

			if (url.equals(Constants.URL_ABOUT_START)) {

//				mCurrentWebView.loadDataWithBaseURL(
//						"file:///android_asset/startpage/",
//						ApplicationUtils.getStartPage(this), "text/html",
//						"UTF-8", Constants.URL_ABOUT_START);
				
				mCurrentWebView.loadUrl("file:///android_asset/index/index.html");

			} else {

				// If the url is not from GWT mobile view, and is in the mobile
				// view url list, then load it with GWT.
				if ((!url
						.startsWith(Constants.URL_GOOGLE_MOBILE_VIEW_NO_FORMAT))
						&& (UrlUtils.checkInMobileViewUrlList(this, url))) {

					url = String.format(Constants.URL_GOOGLE_MOBILE_VIEW, url);
				}
				mCurrentWebView.loadUrl(url);
			}

		}
	}

	/**
	 * Navigate to the url given in the url edit text.
	 */
	// private void navigateToUrl() {
	// navigateToUrl(mUrlEditText.getText().toString());
	// }

	/**
	 * Navigate to the user home page.
	 */
	private void navigateToHome() {
		isNeedLoadHide = true;
		navigateToUrl(Controller
				.getInstance()
				.getPreferences()
				.getString(Constants.PREFERENCES_GENERAL_HOME_PAGE,
						Constants.URL_ABOUT_START));
	}

	/**
	 * 导航到前一页历史.
	 */
	private void navigatePrevious() {
		// Needed to hide toolbars properly.
		mUrlEditText.clearFocus();
		if (Controller.getInstance().getPreferences()
				.getBoolean(Constants.PREFERENCES_SHOW_FULL_SCREEN, false)
				&& Controller
						.getInstance()
						.getPreferences()
						.getBoolean(
								Constants.PREFERENCES_GENERAL_HIDE_TITLE_BARS,
								true)) {
			hideKeyboard(true);
		}
		if (mCurrentWebView.canGoBack()) {
			String url = Controller
					.getInstance()
					.getPreferences()
					.getString(Constants.PREFERENCES_GENERAL_HOME_PAGE,
							Constants.URL_ABOUT_START);
			String currentUrl = mCurrentWebView.getUrl();
			if (!currentUrl.equals(url)) {
				isNeedLoadHide = true;
				mCurrentWebView.goBack();
			} /*
			 * else { mCurrentWebView.onPause(); }
			 */

			mCurrentWebView.doOnResume();

		}
		updateUI();
	}

	/**
	 * Navigate to the next page in history.
	 */
	private void navigateNext() {
		// Needed to hide toolbars properly.
		mUrlEditText.clearFocus();
		if (Controller.getInstance().getPreferences()
				.getBoolean(Constants.PREFERENCES_SHOW_FULL_SCREEN, false)
				&& Controller
						.getInstance()
						.getPreferences()
						.getBoolean(
								Constants.PREFERENCES_GENERAL_HIDE_TITLE_BARS,
								true)) {
			hideKeyboard(true);
		}

		mCurrentWebView.goForward();
		mCurrentWebView.doOnResume();
		setNextBtnBackground(mCurrentWebView.canGoForward());
	}

	@Override
	public boolean onKeyLongPress(int keyCode, KeyEvent event) {

		switch (keyCode) {
		case KeyEvent.KEYCODE_BACK:
			this.moveTaskToBack(true);
			return true;
		default:
			return super.onKeyLongPress(keyCode, event);
		}
	}
	
	// private boolean isBack = false;
		private long mExitTime;

		@Override
		public boolean onKeyDown(int keyCode, KeyEvent event) {
			// TODO Auto-generated method stub
			if (keyCode == KeyEvent.KEYCODE_BACK) {

				if (mUrlEditText != null
						&& mUrlEditText.getText().toString()
								.equals(Constants.URL_ABOUT_START)
						|| (mCurrentWebView != null
								&& mCurrentWebView.getUrl() != null && mCurrentWebView
								.getUrl().equals(Constants.URL_ABOUT_START))
						|| (mCurrentWebView != null
						&& mCurrentWebView.getUrl() != null && mCurrentWebView
						.getUrl().equals(Constants.URL_ABOUT_URL))
						) {
					
					
					if ((System.currentTimeMillis() - mExitTime) > 2000) {

						Toast.makeText(
								this,
								getResources().getString(R.string.press_again_exit),
								Toast.LENGTH_SHORT).show();
						mExitTime = System.currentTimeMillis();
					}

					else {
						//退出浏览器
						//SplashActivity.removeView();
						HomeActivity.this.finish();
					}
					
					
				} else if (mCurrentWebView != null
						&& mCurrentWebView.getUrl() != null
						&& (!mCurrentWebView.getUrl().equals(
								Constants.URL_ABOUT_START) 
								)) {

					//modfiy by yanggf
//					navigateToHome();
//					updateUI();
					

					if(!mCurrentWebView	.canGoBack()&& !mCurrentWebView.getUrl().equals(Constants.URL_ABOUT_URL)){
						removWebView(selectePosition, mCurrentWebView);
						setSelecteLabelPage();
					}else if (mCustomView != null) {
						hideCustomView(false);
					} else if (mFindDialogVisible) {
						closeFindDialog();
					} else {
						if (mCurrentWebView.canGoBack()) {
							isNeedLoadHide = true;
							mCurrentWebView.goBack();
							mCurrentWebView.doOnResume();
						} else {
							this.moveTaskToBack(true);
						}
					}
					
					return true;
				} else if (mUrlEditText.getText().equals("")
						|| mUrlEditText.getText() == null) {
					
					if(!mCurrentWebView	.canGoBack()&&mWebViews.size()>1){
						removWebView(selectePosition, mCurrentWebView);
						setSelecteLabelPage();
					}else{
						navigateToHome();
						updateUI();
					}
					return true;

				}
				
				

				return true;
			}

			else {

				String volumeKeysBehaviour = PreferenceManager
						.getDefaultSharedPreferences(this).getString(
								Constants.PREFERENCES_UI_VOLUME_KEYS_BEHAVIOUR,
								"DEFAULT");

				if (!volumeKeysBehaviour.equals("DEFAULT")) {
					switch (keyCode) {
					case KeyEvent.KEYCODE_VOLUME_DOWN:

						if (volumeKeysBehaviour.equals("SWITCH_TABS")) {
							showPreviousTab(false);
						} else if (volumeKeysBehaviour.equals("SCROLL")) {
							mCurrentWebView.pageDown(false);
						} else if (volumeKeysBehaviour.equals("HISTORY")) {
							mCurrentWebView.goForward();
							mCurrentWebView.doOnResume();

						} else {
							mCurrentWebView.zoomIn();
						}

						return true;
					case KeyEvent.KEYCODE_VOLUME_UP:

						if (volumeKeysBehaviour.equals("SWITCH_TABS")) {
							showNextTab(false);
						} else if (volumeKeysBehaviour.equals("SCROLL")) {
							mCurrentWebView.pageUp(false);
						} else if (volumeKeysBehaviour.equals("HISTORY")) {
							mCurrentWebView.doOnResume();
							mCurrentWebView.goBack();
						} else {
							mCurrentWebView.zoomOut();
						}

						return true;
					default:
						return super.onKeyDown(keyCode, event);
					}
				}
			}
			return super.onKeyDown(keyCode, event);
		}


	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		switch (keyCode) {
		/*case KeyEvent.KEYCODE_BACK:
			if (mCurrentWebView == null)
				return true;
			if (mCurrentWebView != null
					&& mCurrentWebView.getUrl() != null
					&& !mCurrentWebView.getUrl().equals(
							Constants.URL_ABOUT_START)) {

				if (mCustomView != null) {
					hideCustomView(false);
				} else if (mFindDialogVisible) {
					closeFindDialog();
				} else {
					if (mCurrentWebView.canGoBack()) {
						isNeedLoadHide = true;
						mCurrentWebView.goBack();
						mCurrentWebView.doOnResume();
					} else {
						this.moveTaskToBack(true);
					}
				}
			} else if ((mCurrentWebView.getUrl() != null
					&& !mCurrentWebView.getUrl().equals(
							Constants.URL_ABOUT_START) && !mCurrentWebView
						.canGoBack())) {
				
				removWebView(selectePosition, mCurrentWebView);
				setSelecteLabelPage();
				
//				navigateToHome();
//				updateUI();
//				setAddNewPageSize();

			}
			return true;*/
		case KeyEvent.KEYCODE_SEARCH:
			if (!mFindDialogVisible) {
				showFindDialog();
			}
			return true;

		case KeyEvent.KEYCODE_VOLUME_DOWN:
		case KeyEvent.KEYCODE_VOLUME_UP:
			String volumeKeysBehaviour = PreferenceManager
					.getDefaultSharedPreferences(this).getString(
							Constants.PREFERENCES_UI_VOLUME_KEYS_BEHAVIOUR,
							"DEFAULT");

			if (volumeKeysBehaviour.equals("DEFAULT")) {
				return super.onKeyUp(keyCode, event);
			} else {
				return true;
			}
		default:
			return super.onKeyUp(keyCode, event);
		}
	}

	/**
	 * Set the application title to default.
	 */
	private void clearTitle() {
		this.setTitle(getResources().getString(R.string.ApplicationName));
	}

	/**
	 * Update the application title.
	 */
	private void updateTitle() {
		String value = mCurrentWebView.getTitle();

		if ((value != null) && (value.length() > 0)) {
			this.setTitle(String.format(
					getResources().getString(R.string.ApplicationNameUrl),
					value));
		} else {
			clearTitle();
		}
	}

	/**
	 * Get a Drawable of the current favicon, with its size normalized relative
	 * to current screen density.
	 * 
	 * @return The normalized favicon.
	 */
	private BitmapDrawable getNormalizedFavicon() {

		BitmapDrawable favIcon = new BitmapDrawable(getResources(),
				mCurrentWebView.getFavicon());

		if (mCurrentWebView.getFavicon() != null) {
			int imageButtonSize = ApplicationUtils.getImageButtonSize(this);
			int favIconSize = ApplicationUtils.getFaviconSize(this);

			Bitmap bm = Bitmap.createBitmap(imageButtonSize, imageButtonSize,
					Bitmap.Config.ARGB_4444);
			Canvas canvas = new Canvas(bm);

			favIcon.setBounds((imageButtonSize / 2) - (favIconSize / 2),
					(imageButtonSize / 2) - (favIconSize / 2),
					(imageButtonSize / 2)   (favIconSize / 2),
					(imageButtonSize / 2)   (favIconSize / 2));
			favIcon.draw(canvas);

			favIcon = new BitmapDrawable(getResources(), bm);
		}

		return favIcon;
	}

	/**
	 * Update the "Go" button image.
	 */
	boolean isDelet = false;

	private void updateGoButton() {
		System.out.println("mCurrentWebView.isLoading()----"
				  mCurrentWebView.isLoading());
		if (mCurrentWebView.isLoading()) {
			delectView.setImageResource(R.drawable.searchdelete);
			isDelet = true;
		} else {
			// if
			// (!mCurrentWebView.isSameUrl(mUrlEditText.getText().toString())) {
			// // delectView.setBackgroundResource(R.drawable.ic_btn_go);
			// } else {
			// System.out.println("11111111111111111");
			delectView.setImageResource(R.drawable.refleshbutton);
			isDelet = false;
			// }

		}
	}

	//
	/**
	 * Update the fav icon display.
	 */
	public void updateFavIcon() {
		BitmapDrawable favicon = getNormalizedFavicon();

		if (mCurrentWebView.getFavicon() != null) {

			mUrlEditText.setCompoundDrawablesWithIntrinsicBounds(favicon, null,
					null, null);
			// mToolsButton.setImageDrawable(favicon);
			// delectView.setImageDrawable(favicon);

		} else {
			mUrlEditText.setCompoundDrawablesWithIntrinsicBounds(null, null,
					null, null);
			// delectView.setImageDrawable(null);
			// mToolsButton.setImageResource(R.drawable.fav_icn_default_toolbar);
		}
	}

	/**
	 * Update the UI: Url edit text, previous/next button state,...
	 */
	public void updateUI() {
		mCurrentWebView.doOnResume();
		// mUrlEditText.removeTextChangedListener(mUrlTextWatcher);
		if (mCurrentWebView.getTitle() == null) {
			mUrlEditText.setText(mCurrentWebView.getUrl());
		} else {
			mUrlEditText.setText(mCurrentWebView.getTitle());
		}

		mUrlEditText.setTag(mCurrentWebView.getUrl());
		// mUrlEditText.addTextChangedListener(mUrlTextWatcher);

		
		mNextButton.setEnabled(mCurrentWebView.canGoForward());

		mProgressBar.setProgress(mCurrentWebView.getProgress());
		
		//非主页的时候
		if (mCurrentWebView.getUrl() != null
				&& (!mCurrentWebView.getUrl().equals(
						Constants.URL_ABOUT_URL) )){
			setPreviousBackground(true);
			mPreviousButton.setEnabled(true);
		//主页的时候
		}/*else if(mCurrentWebView.getUrl() != null
				&& (mCurrentWebView.getUrl().equals(
						Constants.URL_ABOUT_URL))){
			
			mPreviousButton.setEnabled(false);
			setPreviousBackground(false);
		}*/
		else{
			mPreviousButton.setEnabled(mCurrentWebView.canGoBack());
			setPreviousBackground(mCurrentWebView.canGoBack());
		}
		
		setNextBtnBackground(mCurrentWebView.canGoForward());
		
		updateGoButton();

		updateTitle();

		updateFavIcon();

	}

	private boolean isSwitchTabsByFlingEnabled() {
		return (mSwitchTabsMethod == SwitchTabsMethod.FLING)
				|| (mSwitchTabsMethod == SwitchTabsMethod.BOTH);
	}

	//
	// private boolean isSwitchTabsByButtonsEnabled() {
	// return (mSwitchTabsMethod == SwitchTabsMethod.BUTTONS) ||
	// (mSwitchTabsMethod == SwitchTabsMethod.BOTH);
	// }

	/**
	 * Open the "Add bookmark" dialog.
	 */
	private void openAddBookmarkDialog() {
		if (HomeActivity.INSTANCE.mCurrentWebView != null
				&& !HomeActivity.INSTANCE.mCurrentWebView.getUrl().equals(
						Constants.URL_ABOUT_START)) {// 是主页
			Intent i = new Intent(this, EditBookmarkActivity.class);

			i.putExtra(Constants.EXTRA_ID_BOOKMARK_ID, (long) -1);
			i.putExtra(Constants.EXTRA_ID_BOOKMARK_TITLE,
					mCurrentWebView.getTitle());
			i.putExtra(Constants.EXTRA_ID_BOOKMARK_URL,
					mCurrentWebView.getUrl());

			startActivity(i);

		}

	}

	/**
	 * Open the bookmark list.
	 */
	private void openBookmarksHistoryActivity() {
		Intent i = new Intent(this, BookmarksHistoryActivity.class);
		startActivityForResult(i, OPEN_BOOKMARKS_HISTORY_ACTIVITY);
	}

	/**
	 * Open the download list.
	 */
	private void openDownloadsList() {
		// Intent i = new Intent(this, DownloadsListActivity.class);
		// startActivityForResult(i, OPEN_DOWNLOADS_ACTIVITY);
		Intent i = new Intent(this, DownloadActivity.class);
		startActivityForResult(i, OPEN_DOWNLOADS_ACTIVITY);
		// startActivityForResult(new Intent(this, CaptureActivity.class), 0);
	}

	/**
	 * Open preferences.
	 */
	private void openPreferences() {
		Intent preferencesActivity = new Intent(this, PreferencesActivity.class);
		startActivity(preferencesActivity);
	}

	public static boolean isLANDSCAPE = false;// 是横屏吗

	@Override
	public void onConfigurationChanged(Configuration newConfig) {
		super.onConfigurationChanged(newConfig);
		if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
			// 当前屏幕为横屏
			isLANDSCAPE = true;

		} else {
			// "当前屏幕为竖屏"
			isLANDSCAPE = false;
		}
		System.out.println("popMenu.isShow()==="   popMenu.isShow());

		// popMenu = new PopMenu(MainActivity.this, myHandler);
		if (popMenu != null && popMenu.isShow()) {
			popMenu.dismiss();
			popMenu = new PopMenu(HomeActivity.this, handler);
			popMenu.show(mToolMenuBtn);
		}

	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
		System.out.println("onActivityResult---------");
		if (requestCode == OPEN_BOOKMARKS_HISTORY_ACTIVITY) {
			if (intent != null) {
				Bundle b = intent.getExtras();
				if (b != null) {
					if (b.getBoolean(Constants.EXTRA_ID_NEW_TAB)) {
						addTab(false);
					}
					navigateToUrl(b.getString(Constants.EXTRA_ID_URL));
				}
			}
		} else if (requestCode == OPEN_FILE_CHOOSER_ACTIVITY) {
			if (mUploadMessage == null) {
				return;
			}

			Uri result = intent == null || resultCode != RESULT_OK ? null
					: intent.getData();
			mUploadMessage.onReceiveValue(result);
			mUploadMessage = null;
		}
	}

	/*
	 * 友盟自动更新
	 */
	UmengUpdateListener updateListener = new UmengUpdateListener() {
		@Override
		public void onUpdateReturned(int updateStatus, UpdateResponse updateInfo) {
			switch (updateStatus) {
			case 0: // has update
				Log.i("--->", "callback result");
				UmengUpdateAgent
						.showUpdateDialog(HomeActivity.this, updateInfo);
				break;
			case 1: // has no update
				Toast.makeText(HomeActivity.this, "没有更新", Toast.LENGTH_SHORT)
						.show();
				break;
			case 2: // none wifi
				Toast.makeText(HomeActivity.this, "没有wifi连接, 只在wifi下更新",
						Toast.LENGTH_SHORT).show();
				break;
			case 3: // time out
				Toast.makeText(HomeActivity.this, "请求超时", Toast.LENGTH_SHORT)
						.show();
				break;
			case 4: // is updating
				/*
				 * Toast.makeText(mContext, "正在下载更新...", Toast.LENGTH_SHORT)
				 * .show();
				 */
				break;
			}

		}
	};

	// 接收编辑消息页面保存之后的消息
	class RefreshDataBroadcast extends BroadcastReceiver {

		@Override
		public void onReceive(Context context, Intent intent) {
			if (intent != null && intent.getAction().equals("search")) {
				String url = intent.getStringExtra("url");

				if (mCurrentWebView.isLoading()) {
					mCurrentWebView.stopLoading();
				} else if (!mCurrentWebView.isSameUrl(url)) {
					navigateToUrl(url);
				} else {
					mCurrentWebView.reload();
				}

			}
		}
	}

}

实例下载地址

android 高仿UC浏览器源码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 renjianjun5257 发表于: 2017-02-23 21:25 09
没有积分怎么赚??

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警