287 lines
8.9 KiB
Plaintext
287 lines
8.9 KiB
Plaintext
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|