package cn.com.karl.reader;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.SlidingDrawer;
import android.widget.TextView;
import android.widget.Toast;
import cn.com.karl.model.Book;
import cn.com.karl.pageturn.Turntest;
import cn.com.karl.sqlite.BookDAO;
import cn.com.karl.sqlite.CollectDAO;
public class BookShelfActivity extends BaseActivity implements
OnItemClickListener {
public TextView tv_name, tv_path;
private GridView bookShelf;
static List<File> txtList;// 文件列表
public List<Book> bookList;
private GridView menu_grid;
private SlidingDrawer sd;// 滑动抽屉
private Button iv;
private int[] menu_icon = { R.drawable.menu_search, R.drawable.menu_quit };
private String[] menu_name = { "搜索SD卡", "退出" };
private List<Map<String, Object>> menu_list;
private SimpleAdapter simpleAdapter = null;
public static String filePath;
public static int temp;
public static String bookName;
public BookDAO bookDao;
public boolean boo;
/* 设置长按菜单常量 */
private static final int delete_local = Menu.FIRST;// 从本地删除
private static final int add_local = Menu.FIRST + 1;// 添加到本地书架
private static final int add_collect = Menu.FIRST + 2;// 添加到我的收藏
private static final int delete = Menu.FIRST + 3;// 删除
ShlefAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
// 去掉标题
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 设置横屏
// this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
bookDao = new BookDAO(BookShelfActivity.this);
bookList = bookDao.query();
txtList = new ArrayList<File>();
menu_list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = null;
for (int i = 0; i < menu_icon.length; i++) {
map = new HashMap<String, Object>();
map.put("menu_icon", menu_icon[i]);
map.put("menu_name", menu_name[i]);
menu_list.add(map);
}
bookShelf = (GridView) findViewById(R.id.bookShelf);
if (bookList.size() <= 0) {
Toast.makeText(getApplicationContext(), "你的书架还没有书籍,快去添加几本吧!",
Toast.LENGTH_SHORT).show();
// Intent intent = new Intent();
new MyTask().execute(0);
}
adapter = new ShlefAdapter(bookList);
bookShelf.setAdapter(adapter);
bookShelf.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(BookShelfActivity.this,
Turntest.class);
intent.putExtra("filePath", bookList.get(position).getPath());
startActivity(intent);
Toast.makeText(getApplicationContext(), "" + position,
Toast.LENGTH_SHORT).show();
}
});
menu_grid = (GridView) findViewById(R.id.allApps);
simpleAdapter = new SimpleAdapter(this, menu_list,
R.layout.local_menu_griditems, new String[] { "menu_icon",
"menu_name" }, new int[] { R.id.menu_icon,
R.id.menu_name });
menu_grid.setAdapter(simpleAdapter);
menu_grid.setOnItemClickListener(this);
sd = (SlidingDrawer) findViewById(R.id.sliding);
iv = (Button) findViewById(R.id.imageViewIcon);
sd.setOnDrawerOpenListener(new SlidingDrawer.OnDrawerOpenListener()// 开抽屉
{
@Override
public void onDrawerOpened() {
iv.setText("返回");
iv.setBackgroundResource(R.drawable.btn_local);// 响应开抽屉事件
// ,把图片设为向下的
}
});
sd.setOnDrawerCloseListener(new SlidingDrawer.OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
iv.setText("菜单");
iv.setBackgroundResource(R.drawable.btn_local);// 响应关抽屉事件
}
});
super.registerForContextMenu(this.bookShelf);
bookShelf.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
filePath = bookList.get(position).getPath();
Log.d("!!!!!", "~~~~~~~~~~~本地书架的路径" + filePath);
bookName = bookList.get(position).getName();
temp = position;
return false;
}
});
}
class ShlefAdapter extends BaseAdapter {
private List<Book> booklist;
public ShlefAdapter(List<Book> booklist) {
this.booklist = booklist;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return booklist.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return booklist.get(arg0);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View contentView, ViewGroup arg2) {
// TODO Auto-generated method stub
if (contentView == null) {
contentView = LayoutInflater.from(getApplicationContext())
.inflate(R.layout.item1, null);
TextView view = (TextView) contentView
.findViewById(R.id.book_name);
view.setText(booklist.get(position).getName());
Log.d("@@@@@@@", "!!!!!书的名称" + booklist.get(position).getName());
view.setBackgroundResource(R.drawable.cover_txt);
}
return contentView;
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
if (position == 2) {
exitDialog();
} else if (position == 0) {
new MyTask().execute(0);
}
}
/**
* 获取文件列表
*
* @param filePath
*/
public void GetFiles(File filePath) {
File[] files = filePath.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
GetFiles(files[i]);
} else {
if (files[i].getName().toLowerCase().endsWith(".txt")) {
txtList.add(files[i]);
Log.d("###", "$%%%%" + files[i].getPath());
}
}
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
exitDialog();
return true;
}
return super.onKeyDown(keyCode, event);
}
public void exitDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("你确定退出吗?").setCancelable(false)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton("返回", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
// 异步任务类
class MyTask extends AsyncTask<Integer, Integer, String[]> {
private ProgressDialog dialog;
protected void onPreExecute() {
dialog = ProgressDialog.show(BookShelfActivity.this, "",
"正在扫描SD卡,请稍候....");
super.onPreExecute();
}
protected String[] doInBackground(Integer... params) {
if (!android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
} else {
GetFiles(Environment.getExternalStorageDirectory());
}
return null;
}
protected void onPostExecute(String[] result) {
dialog.dismiss();
Toast.makeText(BookShelfActivity.this, "扫描完毕", Toast.LENGTH_LONG)
.show();
Log.d("$$$$$$$$",
"########" + Environment.getExternalStorageDirectory());
if (Environment.getExternalStorageDirectory().equals("/mnt/sdcard")) {
Log.d("$$$$$$$$", "########木有执行????");
Toast.makeText(BookShelfActivity.this, "sd卡中没有图书",
Toast.LENGTH_LONG).show();
} else {
Intent in = new Intent();
in.setClass(BookShelfActivity.this, QueryList.class);
BookShelfActivity.this.startActivity(in);
}
super.onPostExecute(result);
}
}
/* 长按列表上下文菜单 */
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("操作");
menu.add(1, add_local, 1, "查看具体信息");
menu.add(2, add_collect, 2, "添加到收藏列表");
menu.add(3, delete, 3, "从书架删除");
menu.add(4, delete_local, 4, "从本地彻底删除");
super.onCreateContextMenu(menu, v, menuInfo);
}
/**
* 点击上下文的选择事件
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case delete_local:
boo = true;
deleteDialog(boo);
break;
case add_local:
LayoutInflater inflater = LayoutInflater
.from(BookShelfActivity.this);
View view = inflater.inflate(R.layout.alert_info, null);
tv_name = (TextView) view.findViewById(R.id.alert_name);
tv_path = (TextView) view.findViewById(R.id.alert_path);
tv_name.setText(bookName);
tv_path.setText(filePath);
AlertDialog dialog = new AlertDialog.Builder(BookShelfActivity.this)
.setTitle("图书信息").setView(view)
.setPositiveButton("确定", null).create();
dialog.show();
break;
case add_collect:
addCollect();
break;
case delete:
boo = false;
deleteDialog(boo);
break;
}
return true;
}
// 删除书架图书的对话框
private void deleteDialog(boolean boo) {
Builder dialog = new AlertDialog.Builder(BookShelfActivity.this);
if (boo == false) {
dialog.setIcon(R.drawable.ic_launcher)
.setTitle("系统提示:")
.setMessage("是否从书架删除该书籍?")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
boolean boo = bookDao.delete(temp);
if (boo == true) {
Toast.makeText(getApplicationContext(),
"删除成功!", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(),
"删除失败或文件不存在",
Toast.LENGTH_SHORT).show();
}
}
}).setNeutralButton("取消", null).create().show();
} else {
dialog.setIcon(R.drawable.ic_launcher)
.setTitle("系统提示:")
.setMessage("是否从本地彻底删除该书籍?")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
boolean boo = bookDao.delete(temp);
boo = delete();
if (boo == true) {
Toast.makeText(getApplicationContext(),
"删除成功!", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(getApplicationContext(),
"删除失败或文件不存在",
Toast.LENGTH_SHORT).show();
}
}
}).setNeutralButton("取消", null).create().show();
}
// new AlertDialog.Builder(BookShelfActivity.this)
// .setIcon(R.drawable.ic_launcher).setTitle("系统提示:")
// .setMessage("是否从书架删除该书籍?")
// .setPositiveButton("确定", new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// boolean boo = bookDao.delete(temp);
// if (boo == true) {
// Toast.makeText(getApplicationContext(), "删除成功!",
// Toast.LENGTH_SHORT).show();
// } else {
// Toast.makeText(getApplicationContext(),
// "删除失败或文件不存在", Toast.LENGTH_SHORT).show();
// }
// }
//
// }).setNeutralButton("取消", null).create().show();
}
// 添加到收藏列表
public void addCollect() {
CollectDAO collect = new CollectDAO(BookShelfActivity.this);
long l = collect.insert(bookName, filePath);
if (l == 0) {
Toast.makeText(this, "收藏列表中已经添加了本书!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "图书收藏成功!", Toast.LENGTH_SHORT).show();
}
}
// 从本地删除
public boolean delete() {
File file = new File(filePath);
if (file.exists()) {
Log.d("#########", "$$$$$$" + filePath + "^^^^^^^^^^^" + temp);
file.delete();
// adapter.notifyDataSetChanged();
handler.sendEmptyMessage(0);
return true;
} else {
return false;
}
}
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
bookList.remove(temp);
Log.d("#######", "##########刷新adapter");
adapter.notifyDataSetChanged();
};
};
// 删除书架图书的对话框
// private void deleteDialog2() {
//
// new AlertDialog.Builder(BookShelfActivity.this)
// .setIcon(R.drawable.ic_launcher).setTitle("系统提示:")
// .setMessage("是否从本地删除该书籍?")
// .setPositiveButton("确定", new DialogInterface.OnClickListener() {
//
// @Override
// public void onClick(DialogInterface dialog, int which) {
// boolean boo = delete();
// if (boo == true) {
// Toast.makeText(getApplicationContext(), "删除成功!",
// Toast.LENGTH_SHORT).show();
// } else {
// Toast.makeText(getApplicationContext(),
// "删除失败或文件不存在", Toast.LENGTH_SHORT).show();
// }
// }
//
// }).setNeutralButton("取消", null).create().show();
// }
}