package com.andorid.shu.love;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Timer;
import java.util.TimerTask;
import com.sqlite.DbHelper;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Display;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
public class BookActivity extends Activity {
/** Called when the activity is first created. */
public final static int OPENMARK = 0;
public final static int SAVEMARK = 1;
public final static int TEXTSET = 2;
private PageWidget mPageWidget;
private Bitmap mCurPageBitmap, mNextPageBitmap;
private Canvas mCurPageCanvas, mNextPageCanvas;
private BookPageFactory pagefactory;
private static Boolean isExit = false;//�����ж��Ƿ��Ƴ�
private static Boolean hasTask = false;
private int whichSize=6;//��ǰ�������С
private int txtProgress = 0;//��ǰ�Ķ��Ľ���
private String txtPath = "/sdcard/lovereader/����¶�.txt";
private String bookPath = "/sdcard/lovereader/";
final String[] font = new String[] {"20","24","26","30","32","36",
"40","46","50","56","60","66","70"};
int curPostion;
DbHelper db;
Context mContext;
Cursor mCursor;
BookInfo book = null;
SetupInfo setup = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Display display = getWindowManager().getDefaultDisplay();
int w = display.getWidth();
int h = display.getHeight();
System.out.println(w + "\t" + h);
mCurPageBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mNextPageBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCurPageCanvas = new Canvas(mCurPageBitmap);
mNextPageCanvas = new Canvas(mNextPageBitmap);
pagefactory = new BookPageFactory(w, h);
pagefactory.setBgBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.bg));
//ȡ�ô��ݵIJ���
Intent intent = getIntent();
String bookid = intent.getStringExtra("bookid");
mContext = this;
db = new DbHelper(mContext);
try {
book = db.getBookInfo(Integer.parseInt(bookid));
setup = db.getSetupInfo();
} catch (Exception e) {
e.printStackTrace();
}
if(book != null){
pagefactory.setFileName(book.bookname);
mPageWidget = new PageWidget(this, w, h);
setContentView(mPageWidget);
pagefactory.openbook(bookPath + book.bookname);
int m_mbBufLen = pagefactory.getBufLen();
if (book.bookmark > 0) {
whichSize = setup.fontsize;
pagefactory.setFontSize(Integer.parseInt(font[setup.fontsize]));
//pos = String.valueOf(m_mbBufLen*0.1);
int begin = m_mbBufLen*100/100;
pagefactory.setBeginPos(Integer.valueOf(book.bookmark));
try {
pagefactory.prePage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//setContentView(mPageWidget);
pagefactory.onDraw(mNextPageCanvas);
mPageWidget.setBitmaps(mNextPageBitmap, mNextPageBitmap);
//mPageWidget.invalidate();
mPageWidget.postInvalidate();
db.close();
}else{
pagefactory.onDraw(mCurPageCanvas);
//setContentView(mPageWidget);
mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap);
}
mPageWidget.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
boolean ret = false;
if (v == mPageWidget) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
mPageWidget.abortAnimation();
mPageWidget.calcCornerXY(e.getX(), e.getY());
pagefactory.onDraw(mCurPageCanvas);
if (mPageWidget.DragToRight()) {
try {
pagefactory.prePage();
} catch (IOException e1) {
e1.printStackTrace();
}
if (pagefactory.isfirstPage()){
Toast.makeText(mContext, "�Ѿ��ǵ�һҳ",Toast.LENGTH_SHORT).show();
return false;
}
pagefactory.onDraw(mNextPageCanvas);
} else {
try {
pagefactory.nextPage();
} catch (IOException e1) {
e1.printStackTrace();
}
if (pagefactory.islastPage()){
Toast.makeText(mContext, "�Ѿ������һҳ",Toast.LENGTH_SHORT).show();
return false;
}
pagefactory.onDraw(mNextPageCanvas);
}
mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap);
}
ret = mPageWidget.doTouchEvent(e);
return ret;
}
return false;
}
});
}else{
Toast.makeText(mContext, "�����鲻���ڣ������Ѿ�ɾ��",Toast.LENGTH_SHORT).show();
BookActivity.this.finish();
}
//mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap);
}
// static {
// AdManager.init("6922e1ee73dac5b3", "2eec7a7b5e83c490", 31, false);
// }
protected boolean copyFile() {
try {
String dst = txtPath;
File outFile = new File(dst);
if (!outFile.exists()) {
File destDir = new File("/sdcard/lovereader");
if (!destDir.exists()) {
destDir.mkdirs();
}
InputStream inStream = getResources().openRawResource(
R.raw.text);
outFile.createNewFile();
FileOutputStream fs = new FileOutputStream(outFile);
byte[] buffer = new byte[1024 * 1024];// 1MB
int byteread = 0;
while ((byteread = inStream.read(buffer)) != -1) {
fs.write(buffer, 0, byteread);
}
inStream.close();
fs.close();
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public boolean onCreateOptionsMenu(Menu menu) {// �����˵�
super.onCreateOptionsMenu(menu);
//ͨ��MenuInflater��XML ʵ����Ϊ Menu Object
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {// �����˵�
int ID = item.getItemId();
switch (ID) {
case R.id.exitto:
addBookMark();
//dialog.cancel();
finish();
//creatIsExit();
break;
case R.id.fontsize:
new AlertDialog.Builder(this)
.setTitle("��ѡ��")
.setIcon(android.R.drawable.ic_dialog_info)
.setSingleChoiceItems(font, whichSize,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
setFontSize(Integer.parseInt(font[which]));
whichSize = which;
//Toast.makeText(mContext, "��ѡ�е���"+font[which], Toast.LENGTH_SHORT).show();
// dialog.dismiss();
}
}
)
.setNegativeButton("ȡ��", null)
.show();
break;
case R.id.nowprogress:
LayoutInflater inflater = getLayoutInflater();
final View layout = inflater.inflate(R.layout.bar,
(ViewGroup) findViewById(R.id.seekbar));
SeekBar seek = (SeekBar)layout.findViewById(R.id.seek);
final TextView textView = (TextView)layout.findViewById(R.id.textprogress);
txtProgress = pagefactory.getCurProgress();
seek.setProgress(txtProgress);
textView.setText(String.format(getString(R.string.progress), txtProgress+"%"));
seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressBar = 0;
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progressBar = seekBar.getProgress();
int m_mbBufLen = pagefactory.getBufLen();
int pos = m_mbBufLen*progressBar/100;
if(progressBar == 0){
pos = 1;
}
pagefactory.setBeginPos(Integer.valueOf(pos));
try {
pagefactory.prePage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//setContentView(mPageWidget);
pagefactory.onDraw(mCurPageCanvas);
mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap);
//mPageWidget.invalidate();
mPageWidget.postInvalidate();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
//Toast.makeText(mContext, "StartTouch", Toast.LENGTH_SHORT).show();
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser){
textView.setText(String.format(getString(R.string.progress), progress+"%"));
}
}
});
new AlertDialog.Builder(this).setTitle("��ת").setView(layout)
.setPositiveButton("ȷ��",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//Toast.makeText(mContext, "��ѡ�е���", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
).show();
break;
default:
break;
}
return true;
}
private void setFontSize(int size){
pagefactory.setFontSize(size);
int pos = pagefactory.getCurPostionBeg();
pagefactory.setBeginPos(pos);
try {
pagefactory.nextPage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setContentView(mPageWidget);
pagefactory.onDraw(mNextPageCanvas);
//mPageWidget.setBitmaps(mCurPageBitmap, mCurPageBitmap);
mPageWidget.setBitmaps(mNextPageBitmap, mNextPageBitmap);
mPageWidget.invalidate();
//mPageWidget.postInvalidate();
}
private void creatIsExit() {
Dialog dialog = new AlertDialog.Builder(BookActivity.this).setTitle(
"��ʾ").setMessage(
"�Ƿ�ȷ���˳���ȷ���������").setPositiveButton(
"ȷ��",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
finish();
}
}).setNegativeButton("ȡ��",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create();// ������ť
dialog.show();
}
Timer tExit = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
isExit = false;
hasTask = true;
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//pagefactory.createLog();
//System.out.println("TabHost_Index.java onKeyDown");
if (keyCode == KeyEvent.KEYCODE_BACK) {
addBookMark();
this.finish();
// if(isExit == false ) {
// isExit = true;
// Toast.makeText(this, "�ٰ�һ�κ��˼��˳�Ӧ�ó���",
// Toast.LENGTH_SHORT).show();
// if(!hasTask) {
// tExit.schedule(task, 2000);
// }
// } else {
// finish();
// System.exit(0);
// }
}
return false;
}
//�����ǩ
public void addBookMark(){
Message msg = new Message();
msg.what = SAVEMARK;
msg.arg1 = whichSize;
curPostion = pagefactory.getCurPostion();
msg.arg2 = curPostion;
mhHandler.sendMessage(msg);
}
Handler mhHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case TEXTSET:
pagefactory.changBackGround(msg.arg1);
pagefactory.onDraw(mCurPageCanvas);
mPageWidget.postInvalidate();
break;
case OPENMARK:
try {
mCursor = db.select();
} catch (Exception e) {
e.printStackTrace();
}
if (mCursor.getCount() > 0) {
mCursor.moveToPosition(mCursor.getCount() - 1);
String pos = mCursor.getString(2);
String tmp = mCursor.getString(1);
pagefactory.setBeginPos(Integer.valueOf(pos));
try {
pagefactory.prePage();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pagefactory.onDraw(mNextPageCanvas);
mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap);
mPageWidget.invalidate();
db.close();
}
break;
case SAVEMARK:
try {
db.update(book.id, book.bookname, String.valueOf(msg.arg2));
db.updateSetup(setup.id,String.valueOf(msg.arg1), "0", "0");
//mCursor = db.select();
} catch (Exception e) {
e.printStackTrace();
}
// System.out.println(mCursor.getCount());
// if (mCursor.getCount() > 0) {
// mCursor.moveToPosition(mCursor.getCount()-1);
// db.update(book.id, book.bookname, String.valueOf(msg.arg2),String.valueOf(msg.arg1));
// } else {
// db.insert("", String.valueOf(msg.arg2),String.valueOf(msg.arg1));
// }
db.close();
break;
default:
break;
}
super.handleMessage(msg);
}
};
}