package com.dotcool.view;
import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.dotcool.R;
import com.dotcool.bll.DbDataOperation;
import com.dotcool.bll.DbTags;
import com.dotcool.bll.FileBrowser;
import com.dotcool.bll.OnFileBrowserListener;
import com.dotcool.model.Book;
import com.dotcool.util.AppUtil;
import com.dotcool.util.BookUtil;
import com.dotcool.util.TimeUtil;
public class BookshelfActivity extends Activity implements OnFileBrowserListener,OnItemClickListener
{
private ListView lvBookshelf;
private static boolean isDelFile;
private static CheckBox checkBox;
private MenuItem miOpenBook,miDeleteBook,miBookUpload,miBookDetail;
private CustomAdapter adapter ;
private ImageButton handle;
private FileBrowser fileBrowser = null;
private RelativeLayout ll=null;
//db
private ContentResolver resolver;
public static ArrayList<Book> bookList = new ArrayList<Book>();
private Book book;
private String currentFileName;
private String currentPath = "/mnt/sdcard/";
private int bookPosition;
private ImageView backImageV;
private TextView titleTextV;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.bookshelf);
init();
}
@Override
protected void onResume()
{
super.onResume();
bookList = DbDataOperation.getBookInfo(resolver);
adapter.notifyDataSetChanged();
}
public void init()
{
resolver = getContentResolver();
bookList = DbDataOperation.getBookInfo(resolver);
lvBookshelf = (ListView)findViewById(R.id.lvBookshelf);
fileBrowser = (FileBrowser)findViewById(R.id.filebrowser);
fileBrowser.setOnFileBrowserListener(this);
lvBookshelf.setOnItemClickListener(this);
ll=(RelativeLayout)findViewById(R.id.content);
adapter = new CustomAdapter();
lvBookshelf.setAdapter(adapter);
lvBookshelf.setOnCreateContextMenuListener(new OnCreateContextMenuListener()
{
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
{
AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
bookPosition = info.position;
menu.add(Menu.NONE,R.id.menu_open,0,"打开");
menu.add(Menu.NONE, R.id.menu_del, 1, "删除 " );
menu.add(Menu.NONE, R.id.menu_des, 1, "详细 " );
}
});
titleTextV=(TextView)findViewById(R.id.profile_header_title);
titleTextV.setText("本地文件");
backImageV=(ImageView)findViewById(R.id.profile_header_back);
backImageV.setOnClickListener(new OnClickListener(){
public void onClick(View arg0) {
// TODO Auto-generated method stub
ll.setVisibility(View.INVISIBLE);
}
});
}
class CustomAdapter extends BaseAdapter
{
TextView tvBookNameCover,tvBookName,tvBookAuthor,tvBookAddTime,tvBookProgress;
public int getCount()
{
return bookList.size();
}
public Object getItem(int position)
{
return null;
}
public long getItemId(int position)
{
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
book = bookList.get(position);
if(convertView==null)
convertView = (LinearLayout)getLayoutInflater().inflate(R.layout.bookshelf_item_listview, null);
tvBookNameCover = (TextView)convertView.findViewById(R.id.tvBookNameCover);
tvBookName = (TextView)convertView.findViewById(R.id.tvBookName);
tvBookAuthor = (TextView)convertView.findViewById(R.id.tvBookAuthor);
tvBookAddTime = (TextView)convertView.findViewById(R.id.tvBookTime);
tvBookProgress = (TextView)convertView.findViewById(R.id.tvBookProgress);
//tvBookNameCover.setText(book.getBookName());
String tmp=book.getBookPath();
if(tmp.indexOf(".txt")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_txt));
}else if(tmp.indexOf(".chm")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_chm));
}else if(tmp.indexOf(".ebk")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_ebk));
}else if(tmp.indexOf(".epub")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_epub));
}else if(tmp.indexOf(".html")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_html));
}else if(tmp.indexOf(".pdb")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_pdb));
}else if(tmp.indexOf(".umd")!=-1){
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_umd));
}else {
tvBookNameCover.setBackgroundDrawable(getResources().getDrawable(R.drawable.cover_txt));
}
tvBookName.setText(book.getBookName());
tvBookAuthor.setText(book.getBookAuthor());
tvBookAddTime.setText(book.getBookAddTime());
tvBookProgress.setText(book.getBookProgress());
return convertView;
}
}
/**
* 重写列表项点击事件监听器
*/
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
Intent intent = new Intent(BookshelfActivity.this,BookReadActivity.class);
intent.putExtra(DbTags.FIELD_BOOK_PATH, bookList.get(position).getBookPath());
intent.putExtra(DbTags.FIELD_BOOK_ID, bookList.get(position).getBookId());
intent.putExtra(DbTags.FIELD_BOOK_PROGRESS, bookList.get(position).getBookProgress());
intent.putExtra(DbTags.FIELD_BOOK_NAME, bookList.get(position).getBookName());
intent.putExtra(DbTags.FIELD_BOOK_BEGIN_POSITION, bookList.get(position).getBookBeginPosition());
System.out.println(bookList.get(position).getBookPath());
startActivity(intent);
}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
// TODO Auto-generated method stub
super .onCreateOptionsMenu(menu);
menu.add(0, R.id.menu_share, 1, "分享 " ).setIcon(R.drawable.menu_share);
menu.add(0, R.id.menu_feedback, 2, "反馈 " ).setIcon(R.drawable.menu_feedback);
menu.add(1, R.id.menu_exit, 3, "关于 " ).setIcon(R.drawable.menu_about);
menu.add(1, R.id.menu_about, 4, "本地 " ).setIcon(R.drawable.menu_exit);
return true ;
}
public boolean onOptionsItemSelected(android.view.MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_share:
AppUtil.appShare(this);
return true;
case R.id.menu_feedback:
AppUtil.appFeedback(this);
return true;
case R.id.menu_about:
ll.setVisibility(View.VISIBLE);
return true;
case R.id.menu_exit:
Intent intent = new Intent(BookshelfActivity.this,AboutActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
if(item.getItemId() ==R.id.menu_open)
{
Intent intent = new Intent(BookshelfActivity.this,BookReadActivity.class);
intent.putExtra(DbTags.FIELD_BOOK_PATH, bookList.get(bookPosition).getBookPath());
intent.putExtra(DbTags.FIELD_BOOK_ID, bookList.get(bookPosition).getBookId());
intent.putExtra(DbTags.FIELD_BOOK_NAME, bookList.get(bookPosition).getBookName());
intent.putExtra(DbTags.FIELD_BOOK_PROGRESS, bookList.get(bookPosition).getBookProgress());
intent.putExtra(DbTags.FIELD_BOOK_BEGIN_POSITION, bookList.get(bookPosition).getBookBeginPosition());
startActivity(intent);
ll.setVisibility(View.INVISIBLE);
}
else if(item.getItemId()==R.id.menu_del)
{
checkBox = new CheckBox(this);
checkBox.setText("同时删除本地文件");
new AlertDialog.Builder(this).setTitle("删除").setMessage("真的要删除吗?").setView(checkBox).setPositiveButton("确定", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
isDelFile = checkBox.isChecked();
if(isDelFile)
{
File file = new File(bookList.get(bookPosition).getBookPath());
file.delete();
}
DbDataOperation.deleteBook(resolver, bookList.get(bookPosition).getBookId());
bookList = DbDataOperation.getBookInfo(resolver);
adapter.notifyDataSetChanged();
ll.setVisibility(View.INVISIBLE);
}
}).setNegativeButton("取消", null).show();
}
else if(item.getItemId()==R.id.menu_des)
{
String bookDetail = "书名:"+bookList.get(bookPosition).getBookName()+
"\n格式:"+BookUtil.getBookFormat(bookList.get(bookPosition).getBookPath())+
"\n大小:"+bookList.get(bookPosition).getBookSize()+
"\n进度:"+bookList.get(bookPosition).getBookProgress()+
"\n路径:"+bookList.get(bookPosition).getBookPath();
new AlertDialog.Builder(this).setTitle("详细信息").setMessage(bookDetail).setPositiveButton("确定", null).show();
}else if(item==miBookUpload){
}
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_MENU) {
super.openOptionsMenu();
}else if(keyCode==KeyEvent.KEYCODE_BACK)
{
if(ll.getVisibility()==View.VISIBLE){
ll.setVisibility(View.INVISIBLE);
return true;
}else{
AppUtil.appExit(this);
return super.onKeyDown(keyCode, event);
}
}
return super.onKeyDown(keyCode, event);
}
public void onFileItemClick(final String fileName)
{
currentFileName = fileName;
new AlertDialog.Builder(this).setItems(new String[]{"直接阅读","加入书架","详细信息"}, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
if(which==0)
{
BookUtil.getBookContent(currentFileName);
Intent intent = new Intent(BookshelfActivity.this,BookReadActivity.class);
intent.putExtra(DbTags.FIELD_BOOK_PATH, fileName);
intent.putExtra(DbTags.FIELD_BOOK_PROGRESS, "onlyRead");
startActivity(intent);
}
else if(which==1)
{
// Toast.makeText(BookshelfActivity.this, BookUtil.isExist(bookList, fileName)+"", Toast.LENGTH_LONG).show();
if(BookUtil.isExist(bookList, fileName)==true)
{
new AlertDialog.Builder(BookshelfActivity.this).setTitle("提示").setMessage("此书在书架中已存在,无需继续添加!").setPositiveButton("确定", null).show();
}
else
{
DbDataOperation.insertToBookInfo(resolver, BookUtil.getBookName(currentPath, fileName), "未知", fileName, TimeUtil.getCurrentTime(),
TimeUtil.getCurrentTime(), 0, "未分类",BookUtil.getBookSize(fileName), "0.0%");
bookList = DbDataOperation.getBookInfo(resolver);
adapter.notifyDataSetChanged();
}
}
else if(which==2)
{
String detail = "文件名:"+fileName.replaceAll(currentPath+"/", "")+"\n"
+"文件路径:"+fileName+"\n"
+"文件大小:"+BookUtil.getBookSize(fileName);
new AlertDialog.Builder(BookshelfActivity.this).setTitle("详细信息").setMessage(detail).setPositiveButton("确定", null).show();
}
}
}).show();
}
public void onDirItemClick(String path)
{
currentPath = path;
}
}