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

287 lines
8.9 KiB
Plaintext
Raw Normal View History

2024-02-06 22:23:29 +08:00
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;
}
}
}
}