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 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 files = adapter.getCheckFiles(); if (files.size() > 0) { List bookLists = new ArrayList(); 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,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... params) { List bookLists = params[0]; for (Novel bookList : bookLists){ List 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{ @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; } } } }