pda/zhuike/.svn/pristine/60/60fb9d277c26ac188e51969d806...

287 lines
8.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.novelbook.android;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.Toast;
import com.novelbook.android.adapter.FileAdapter;
import com.novelbook.android.db.Novel;
import com.novelbook.android.utils.FileUtils;
import com.novelbook.android.utils.Fileutil;
import org.litepal.LitePal;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
public class FileActivity extends Activity_base {
public static final String TAG=FileActivity.class.getSimpleName();
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.btn_choose_all)
Button btnChooseAll;
@BindView(R.id.btn_delete)
Button btnDelete;
@BindView(R.id.btn_add_file)
Button btnAddFile;
@BindView(R.id.lv_file_drawer)
ListView lvFileDrawer;
public static final int EXTERNAL_STORAGE_REQ_CODE = 10 ;
//文件根目录
private File root;
private List<File> listFile = new ArrayList<>();
private static FileAdapter adapter;
private SearchTextFileTask mSearchTextFileTask;
private SaveBookToSqlLiteTask mSaveBookToSqlLiteTask;
@Override
public int getLayoutRes() {
return R.layout.zactivity_file;
}
@Override
protected void initViews() {
}
@Override
protected void setTitle() {
}
@Override
protected void initData() {
getWindow().setBackgroundDrawable(null);
setSupportActionBar(toolbar);
//设置导航图标
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
if(getSupportActionBar() != null) {
getSupportActionBar().setTitle("导入图书");
}
adapter = new FileAdapter(this, listFile);
lvFileDrawer.setAdapter(adapter);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
checkPermission(FileActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE, EXTERNAL_STORAGE_REQ_CODE,"添加图书需要此权限,请允许");
}else{
root = Environment.getExternalStorageDirectory();
searchFile();
}
initListener();
}
@Override
public void fillData() {
}
protected void initListener() {
lvFileDrawer.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// adapter.setSelectedPosition(position);
}
});
lvFileDrawer.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
return true;
}
});
adapter.setCheckedChangeListener(new FileAdapter.CheckedChangeListener() {
@Override
public void onCheckedChanged(int position, CompoundButton buttonView, boolean isChecked) {
setAddFileText(adapter.getCheckNum());
}
});
//全选
btnChooseAll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.checkAll();
}
});
//取消选择
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.cancel();
}
});
//把已经选择的书加入书架
btnAddFile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
saveBookList();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mSearchTextFileTask != null) {
mSearchTextFileTask.cancel(true);
}
if (mSaveBookToSqlLiteTask != null){
mSaveBookToSqlLiteTask.cancel(true);
}
}
//保存选择的txt文件
private void saveBookList(){
List<File> files = adapter.getCheckFiles();
if (files.size() > 0) {
List<Novel> bookLists = new ArrayList<Novel>();
for (File file : files) {
Novel bookList = new Novel();
String bookName = Fileutil.getFileNameNoEx(file.getName());
bookList.setName(bookName);
bookList.setNovelPath(file.getAbsolutePath());
bookLists.add(bookList);
}
mSaveBookToSqlLiteTask = new SaveBookToSqlLiteTask();
mSaveBookToSqlLiteTask.execute(bookLists);
}
}
private class SaveBookToSqlLiteTask extends AsyncTask<List<Novel>,Void,Integer>{
private static final int FAIL = 0;
private static final int SUCCESS = 1;
private static final int REPEAT = 2;
private Novel repeatBookList;
@Override
protected Integer doInBackground(List<Novel>... params) {
List<Novel> bookLists = params[0];
for (Novel bookList : bookLists){
List<Novel> books = LitePal.where("bookpath = ?", bookList.getNovelPath()).find(Novel.class);
if (books.size() > 0){
repeatBookList = bookList;
return REPEAT;
}
}
try {
LitePal.saveAll(bookLists);
} catch (Exception e){
e.printStackTrace();
return FAIL;
}
return SUCCESS;
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
String msg = "";
switch (result){
case FAIL:
msg = "由于一些原因添加书本失败";
break;
case SUCCESS:
msg = "添加书本成功";
setAddFileText(0);
adapter.cancel();
break;
case REPEAT:
msg = "书本" + repeatBookList.getName() + "重复了";
break;
}
Toast.makeText(FileActivity.this, msg, Toast.LENGTH_SHORT).show();
}
}
//设置添加按钮text
protected void setAddFileText(final int num){
btnAddFile.post(new Runnable() {
@Override
public void run() {
btnAddFile.setText("加入书架(" + num + ")项");
}
});
}
protected void searchFile(){
// startTime = System.currentTimeMillis();
mSearchTextFileTask = new SearchTextFileTask();
mSearchTextFileTask.execute();
}
private class SearchTextFileTask extends AsyncTask<Void,Void,Boolean>{
@Override
protected void onPreExecute() {
showProgressDialog(true,"正在扫描txt文件");
}
@Override
protected Boolean doInBackground(Void... params) {
listFile = FileUtils.getSuffixFile(root.getAbsolutePath(),".txt");
if (listFile == null || listFile.isEmpty()){
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
hideProgress();
if (result) {
adapter.setFiles(listFile); //list值传到adapter
setAddFileText(0);
// endTime = System.currentTimeMillis();
// Log.e("time",endTime - startTime + "");
} else {
Toast.makeText(FileActivity.this, "本机查不到txt文件", Toast.LENGTH_SHORT)
.show();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case EXTERNAL_STORAGE_REQ_CODE: {
// 如果请求被拒绝那么通常grantResults数组为空
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//申请成功,进行相应操作
root = Environment.getExternalStorageDirectory();
searchFile();
} else {
//申请失败,可以继续向用户解释。
}
return;
}
}
}
}