package com.eoeandorid.reader;
import java.util.Map;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.Toast;
public class EpubReaderActivity extends Activity implements OnGestureListener {
public static EpubReaderActivity activity;
private EpubKernel epubKernel;
private GestureDetector gd;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
gd = new GestureDetector((OnGestureListener)this);
// 设置无标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.epub_reader);
activity = this;
epubKernel = new EpubKernel();
try {
epubKernel.openEpubFile(Environment.getExternalStorageDirectory().getPath()+"/EoeReader/55369.epub", Environment.getExternalStorageDirectory().getPath()+"/EoeReader/epub/55369");
} catch (Exception e) {
}
initUiView();
initData();
}
@Override
protected void onPause() {
super.onPause();
}
private LinearLayout mEpubLinearLayout;
private EpubWebView mCurEpubWebView = null;
private EpubWebView mPreEpubWebview = null;
private EpubWebView mNextEpubWebview = null;
private int scrollWidth = 0;
private int mTotalPage = 0;
private int curHtmlPage = 0;
private int htmlSize = 0;
private static final int NEXT_PAGE = 0;
private static final int PRE_PAGE = 1;
private void initUiView(){
mEpubLinearLayout = (LinearLayout)findViewById(R.id.epubLinearLayout);
}
private void initData(){
Map spainMap = epubKernel.getSpineMap();
htmlSize = spainMap.size();
String curHtml = epubKernel.getHtmlUrlByIndex(curHtmlPage);
mCurEpubWebView = new EpubWebView(this);
mEpubLinearLayout.addView(mCurEpubWebView,
new LinearLayout.LayoutParams(UIHelper.getScreenWidth(activity),UIHelper.getScreenHeight(activity)));
mCurEpubWebView.setAct(activity);
mCurEpubWebView.loadUrl(curHtml);
mPreEpubWebview = new EpubWebView(this);
mPreEpubWebview.setVisibility(View.GONE);
mEpubLinearLayout.addView(mPreEpubWebview,
new LinearLayout.LayoutParams(UIHelper.getScreenWidth(activity),UIHelper.getScreenHeight(activity)));
mCurEpubWebView.setAct(activity);
curHtmlPage++;
String nextHtml = epubKernel.getHtmlUrlByIndex(curHtmlPage);
mNextEpubWebview = new EpubWebView(this);
mNextEpubWebview.setAct(activity);
mEpubLinearLayout.addView(mNextEpubWebview,
new LinearLayout.LayoutParams(UIHelper.getScreenWidth(activity),UIHelper.getScreenHeight(activity)));
LoadHtmlTask htt = new LoadHtmlTask(mNextEpubWebview, nextHtml);
htt.execute();
}
/*override dispatchTouchEvent method and dispatch the touch event to GestureDetector*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
gd.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
private int verticalMinDistance = 20;
private int minVelocity = 0;
private double mCurX = 0;
private double curPage = 1;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
this.mTotalPage = mCurEpubWebView.getTotalPage();
if (e1.getX() - e2.getX() > verticalMinDistance
&& Math.abs(velocityX) > minVelocity) {
if(curPage >= mTotalPage && curHtmlPage == htmlSize){
Toast.makeText(activity, "已经是最后一页了", Toast.LENGTH_SHORT).show();
return true;
}
curPage++;
if(curPage > mTotalPage && curHtmlPage < htmlSize ){
curPage = 1;
changePage(NEXT_PAGE);
}
mCurX = (curPage-1) * UIHelper.getScreenWidth(activity);
mCurEpubWebView.scrollTo((int)mCurX, 0);
} else if (e2.getX() - e1.getX() > verticalMinDistance
&& Math.abs(velocityX) > minVelocity) {
if(curPage <= 1 && curHtmlPage <= 1){
Toast.makeText(activity, "已经是第一页", Toast.LENGTH_SHORT).show();
return true;
}
curPage--;
if(curPage <= 0 && curHtmlPage <= htmlSize ){
changePage(PRE_PAGE);
curPage = mCurEpubWebView.getTotalPage();
}
mCurX = (curPage-1) * UIHelper.getScreenWidth(activity);
mCurEpubWebView.scrollTo((int)mCurX, 0);
}
return true;
}
private void changePage(int num){
EpubWebView tmpCurWebView = mCurEpubWebView;
EpubWebView tmpNextWebView = mNextEpubWebview;
EpubWebView tmpPreWebView = mPreEpubWebview;
if(num == NEXT_PAGE){
mCurEpubWebView = tmpNextWebView;
mPreEpubWebview = tmpCurWebView;
mNextEpubWebview = tmpPreWebView;
tmpNextWebView.setVisibility(View.VISIBLE);
tmpCurWebView.setVisibility(View.GONE);
tmpPreWebView.setVisibility(View.GONE);
curHtmlPage++;
if(curHtmlPage < htmlSize){
preLoadNextHtml(mNextEpubWebview,curHtmlPage);
}
}else if(num == PRE_PAGE){
mCurEpubWebView = tmpPreWebView;
mPreEpubWebview = tmpNextWebView;
mNextEpubWebview = tmpCurWebView;
tmpPreWebView.setVisibility(View.VISIBLE);
tmpCurWebView.setVisibility(View.GONE);
tmpNextWebView.setVisibility(View.GONE);
curHtmlPage--;
int preHtmlPage = curHtmlPage-2;
if(preHtmlPage >= 0){
preLoadNextHtml(mPreEpubWebview,preHtmlPage);
}
}
}
private void preLoadNextHtml(EpubWebView epubView,int page){
String nextHtml = epubKernel.getHtmlUrlByIndex(page);
epubView.setAct(activity);
LoadHtmlTask htt = new LoadHtmlTask(epubView, nextHtml);
htt.execute();
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
//use AsyncTask loading previous or next HTML file.
private class LoadHtmlTask extends AsyncTask<Void,Void,Void>{
private EpubWebView epubWebview;
private String loadUrl;
public LoadHtmlTask(EpubWebView epubWebview,String loadUrl){
this.epubWebview = epubWebview;
this.loadUrl = loadUrl;
}
@Override
protected Void doInBackground(Void... params) {
epubWebview.loadUrl(loadUrl);
return null;
}
}
}