RustAssistant/app/src/main/java/com/coldmint/rust/pro/FileManagerActivity.kt

998 lines
43 KiB
Kotlin
Raw Normal View History

2022-04-04 14:03:10 +00:00
package com.coldmint.rust.pro
import com.coldmint.rust.pro.base.BaseActivity
import com.coldmint.rust.pro.tool.BookmarkManager
import androidx.recyclerview.widget.LinearLayoutManager
import android.content.Intent
import com.coldmint.rust.pro.tool.GlobalMethod
import com.google.android.material.snackbar.Snackbar
import android.provider.MediaStore
import android.provider.DocumentsContract
import android.content.ContentUris
import android.content.Context
import android.database.Cursor
import android.net.Uri
import android.os.*
import android.view.*
import android.widget.*
import androidx.core.view.isVisible
2022-07-18 23:59:32 +00:00
import androidx.lifecycle.ViewModelProvider
2022-04-04 14:03:10 +00:00
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.WhichButton
import com.afollestad.materialdialogs.actions.setActionButtonEnabled
import com.afollestad.materialdialogs.input.getInputField
import com.afollestad.materialdialogs.input.input
import com.afollestad.materialdialogs.list.listItems
import com.coldmint.rust.core.tool.FileOperator
import com.coldmint.rust.pro.adapters.FileAdapter
import com.coldmint.rust.pro.databinding.ActivityFileBinding
import com.coldmint.rust.pro.interfaces.BookmarkListener
2022-07-18 23:59:32 +00:00
import com.coldmint.rust.pro.viewmodel.FileManagerViewModel
2022-04-04 14:03:10 +00:00
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2022-07-19 14:32:02 +00:00
import me.zhanghai.android.fastscroll.FastScrollerBuilder
2022-04-04 14:03:10 +00:00
import java.io.File
import java.lang.Exception
import java.util.*
import java.util.concurrent.Executors
import kotlin.collections.ArrayList
class FileManagerActivity : BaseActivity<ActivityFileBinding>() {
2022-07-18 23:59:32 +00:00
// private var directs = Environment.getExternalStorageDirectory()
// private var mRoot = directs
// var filePath = ""
//
// //哈希表映射(名称,路径)
// val bookmarkMap = HashMap<String, String>()
// val executorService = Executors.newSingleThreadExecutor()
//
// //type可为默认default选择文件夹selectDirectents选择文件selectFile
// var mStartType: String? = "default"
// private var mFileAdapter: FileAdapter? = null
// private var mProcessFiles = false
// private val bookmarkManager: BookmarkManager by lazy { BookmarkManager(this) }
// private var additionalData: String? = null
// private fun initView() {
// title = getString(R.string.file_manager)
// setReturnButton()
// viewBinding.fileList.layoutManager = LinearLayoutManager(this@FileManagerActivity)
// val intent = intent
// val bundle = intent.getBundleExtra("data")
// if (bundle == null) {
// showError("无效的请求。")
// finish()
// } else {
// mStartType = bundle.getString("type")
// when (mStartType) {
// "default" -> {
// }
// "selectDirectents" -> {
// setTitle(R.string.select_directents)
// viewBinding.fab.setIconResource(R.drawable.complete)
// viewBinding.fab.postDelayed({
// viewBinding.fab.text = getString(R.string.select_directents)
// viewBinding.fab.extend()
// }, 300)
// }
// "exportFile" -> {
// setTitle(R.string.export_file)
// val additional = bundle.getString("additionalData")
// if (additional == null) {
// showError("请输入 additionalData")
// return
// } else {
// viewBinding.fab.setIconResource(R.drawable.complete)
// viewBinding.fab.postDelayed({
// viewBinding.fab.text = getString(R.string.export_this)
// viewBinding.fab.extend()
// }, 300)
// }
// }
// "selectFile" -> {
// setTitle(R.string.select_file)
// viewBinding.fab.setIconResource(R.drawable.complete)
// viewBinding.fab.hide()
// }
// else -> {
// Toast.makeText(this, "意外的请求", Toast.LENGTH_SHORT).show()
// finish()
// }
// }
// if (bundle.containsKey("path")) {
// directs = File(bundle.getString("path"))
// }
// if (bundle.containsKey("rootpath")) {
// mRoot = File(bundle.getString("rootpath"))
// }
// if (bundle.containsKey("additionalData")) {
// additionalData = bundle.getString("additionalData")
// }
// }
// loadFiles(directs)
// }
//
// private fun tryOpenFile(file: File?) {
// if (file == null) {
// returnDirects()
// } else {
// if (file.isDirectory) {
// loadFiles(file)
// } else {
// when (mStartType) {
// "default" -> {
// when (FileOperator.getFileType(file)) {
// "ini", "txt", "template" -> {
// val bundle = Bundle()
// bundle.putString("path", file.absolutePath)
// bundle.putString("modPath", FileOperator.getSuperDirectory(file))
// val intent =
// Intent(this@FileManagerActivity, EditActivity::class.java)
// intent.putExtra("data", bundle)
// this@FileManagerActivity.startActivity(intent)
// }
// "json" -> {
// val openList = listOf<String>(
// getString(R.string.edit_template), getString(
// R.string.open_action1
// )
// )
// MaterialDialog(this).title(R.string.open_type)
// .listItems(items = openList) { dialog, index, text ->
// when (text) {
// getString(R.string.edit_template) -> {
// editTemplate(file)
// }
// getString(R.string.open_action1) -> {
// editText(file)
// }
// }
// }.show()
//
// }
// "zip", "rwmod", "rar" -> {
// Toast.makeText(
// this@FileManagerActivity,
// "点击了压缩文件。",
// Toast.LENGTH_SHORT
// ).show()
// FileOperator.openFile(this@FileManagerActivity, file)
// }
// else -> {
// val ints = intArrayOf(
// R.string.open_action1,
// R.string.open_action4
// )
// val items = FileAdapter.conversionSymbol(
// this@FileManagerActivity,
// ints
// )
//
// MaterialAlertDialogBuilder(this).setItems(
// items
// ) { dialog, which ->
// when (ints[which]) {
// R.string.open_action1 -> {
// editText(file)
// }
// R.string.open_action4 -> FileOperator.openFile(
// this@FileManagerActivity,
// file
// )
// }
// }.show()
// }
// }
// viewBinding.fab.show()
// filePath = file.absolutePath
// }
// "selectFile" -> {
// viewBinding.fab.show()
// viewBinding.fab.postDelayed({
// filePath = file.absolutePath
// viewBinding.fab.text =
// String.format(getString(R.string.select_file_ok), file.name)
// viewBinding.fab.extend()
// }, 300)
//
// }
// }
// }
// }
// }
//
//
// /**
// * 编辑模板
// * @param file File
// */
// fun editTemplate(file: File) {
// val intent = Intent(this, TemplateMakerActivity::class.java)
// val bundle = Bundle()
// intent.putExtra("data", bundle)
// bundle.putString("path", file.absolutePath)
// bundle.putBoolean("loadTemplate", true)
// bundle.putString("templatePath", additionalData)
// startActivity(intent)
// }
//
// /**
// * 编辑文本
// * @param file File
// */
// fun editText(file: File) {
// val bundle = Bundle()
// bundle.putString("path", file.absolutePath)
// bundle.putString(
// "modPath",
// FileOperator.getSuperDirectory(file)
// )
// val intent = Intent(
// this@FileManagerActivity,
// EditActivity::class.java
// )
// intent.putExtra("data", bundle)
// this@FileManagerActivity.startActivity(intent)
// }
//
// //加载文件
// fun loadFiles(file: File) {
// executorService.submit {
// if (!file.exists()) {
// runOnUiThread {
// viewBinding.fileList.isVisible = false
// viewBinding.progressBar.isVisible = false
// viewBinding.fileError.isVisible = true
// viewBinding.fileError.setText(R.string.unable_to_open_this_directory)
// viewBinding.fab.hide()
// }
// return@submit
// }
//
// if (file.isDirectory) {
// val files = file.listFiles()
// directs = file
// val fileArrayList: ArrayList<File?> = ArrayList(listOf(*files))
// if (file.absolutePath != mRoot.absolutePath) {
// fileArrayList.add(0, null)
// }
// val finalFileAdapter: FileAdapter =
// if (mFileAdapter == null) {
// mFileAdapter = FileAdapter(this@FileManagerActivity, fileArrayList)
// mFileAdapter!!
// } else {
// mFileAdapter?.setNewDataList(fileArrayList)
// mFileAdapter!!
// }
// finalFileAdapter.setSortType(FileAdapter.SortType.FileName)
// finalFileAdapter.setItemEvent { i, fileItemBinding, viewHolder, itemFile ->
// fileItemBinding.root.setOnClickListener {
// tryOpenFile(itemFile)
// }
// fileItemBinding.more.setOnClickListener {
// if (itemFile == null) {
// return@setOnClickListener
// }
// val popupMenu =
// PopupMenu(this@FileManagerActivity, fileItemBinding.more)
// val cutBoardMenu =
// popupMenu.menu.addSubMenu(R.string.cut_board_operation)
// val fileMenu = popupMenu.menu.addSubMenu(R.string.file_operation)
// val bookmarksMenu =
// popupMenu.menu.addSubMenu(R.string.bookmarks_operation)
// cutBoardMenu.add(R.string.copy_file_name)
// cutBoardMenu.add(R.string.copy_file_path)
// fileMenu.add(R.string.copy)
// fileMenu.add(R.string.cut_off)
// fileMenu.add(R.string.mod_action9)
// fileMenu.add(R.string.delete_title)
// if (bookmarkManager.contains(file)) {
// bookmarksMenu.add(R.string.remove_bookmark)
// } else {
// bookmarksMenu.add(R.string.add_bookmark)
// }
// bookmarksMenu.add(R.string.bookmark_manager)
// addJumpBookMenu(bookmarksMenu)
// popupMenu.setOnMenuItemClickListener { item ->
// val title = item.title
// if (title == getText(R.string.copy_file_name)) {
// val name = itemFile.name
// GlobalMethod.copyText(
// this@FileManagerActivity,
// name,
// viewBinding.fab
// )
// } else if (title == getText(R.string.copy_file_path)) {
// val path = itemFile.absolutePath
// GlobalMethod.copyText(
// this@FileManagerActivity,
// path,
// viewBinding.fab
// )
// } else if (title == getText(R.string.delete_title)) {
// executorService.submit {
// FileOperator.delete_files(itemFile)
// runOnUiThread {
// loadFiles(directs)
// }
// }
// } else if (title == getText(R.string.copy)) {
// finalFileAdapter.setSelectPath(itemFile.absolutePath, true)
// } else if (title == getText(R.string.cut_off)) {
// finalFileAdapter.setSelectPath(itemFile.absolutePath, false)
// } else if (title == getText(R.string.mod_action9)) {
// val oldName = itemFile.name
// MaterialDialog(this@FileManagerActivity).show {
// title(R.string.mod_action9)
// input(
// maxLength = 255,
// waitForPositiveButton = false, prefill = oldName
// ) { dialog, text ->
// if (text.length in 1..255) {
// dialog.setActionButtonEnabled(
// WhichButton.POSITIVE,
// true
// )
// }
// }.positiveButton(R.string.dialog_ok, null) { dialog ->
// val newName = dialog.getInputField().text.toString()
// if (!newName.isEmpty() || newName != oldName) {
// val reNameFile = File("$directs/$newName")
// itemFile.renameTo(reNameFile)
// loadFiles(directs)
// }
// }.negativeButton(R.string.dialog_close)
// }
// } else if (title == getString(R.string.remove_bookmark)) {
// val removeBookmark =
// bookmarkManager.removeBookmark(itemFile.absolutePath)
// if (removeBookmark) {
// Snackbar.make(
// viewBinding.fab,
// R.string.remove_bookmark_success,
// Snackbar.LENGTH_SHORT
// ).setAction(R.string.symbol10) {
// bookmarkManager.addBookmark(
// itemFile.absolutePath,
// FileOperator.getPrefixName(file)
// )
// }
// .show()
// } else {
// Snackbar.make(
// viewBinding.fab,
// R.string.remove_bookmark_fail,
// Snackbar.LENGTH_SHORT
// ).show()
// }
// } else if (title == getString(R.string.add_bookmark)) {
// val addBookmark = bookmarkManager.addBookmark(
// itemFile.absolutePath,
// FileOperator.getPrefixName(file)
// )
// if (addBookmark) {
// Snackbar.make(
// viewBinding.fab,
// R.string.add_bookmark_success,
// Snackbar.LENGTH_SHORT
// ).show()
// } else {
// Snackbar.make(
// viewBinding.fab,
// R.string.add_bookmark_fail,
// Snackbar.LENGTH_SHORT
// ).show()
// }
// } else if (title == getString(R.string.bookmark_manager)) {
// bookmarkManager.save()
// startActivity(
// Intent(
// this@FileManagerActivity,
// BookmarkManagerActivity::class.java
// )
// )
// } else {
// loadBook(title)
// }
// false
// }
// popupMenu.show()
// }
// }
// runOnUiThread {
// viewBinding.fileList.adapter = finalFileAdapter
// viewBinding.fileList.isVisible = true
// viewBinding.fileError.isVisible = false
// viewBinding.progressBar.isVisible = false
// }
// }
// }
// }
//
//
// /**
// * 添加书签菜单
// */
// fun addJumpBookMenu(menu: Menu) {
// val bookmarkContent: SubMenu? = if (bookmarkManager.size > 0) {
// menu.addSubMenu(R.string.jump_a_bookmark)
// } else {
// null
// }
// bookmarkMap.clear()
// bookmarkManager.fromList(object : BookmarkListener {
// override fun find(path: String, name: String) {
// bookmarkMap[name] = path
// bookmarkContent!!.add(name)
// }
//
// })
// }
//
// /**
// * 点击书签项目
// */
// fun loadBook(menuTitle: CharSequence) {
// if (bookmarkMap.containsKey(menuTitle)) {
// val path = bookmarkMap[menuTitle]
// if (path != null) {
// val rootPath = mRoot.absolutePath
// if (path.startsWith(rootPath)) {
// val newFile = File(path)
// if (newFile.exists()) {
// if (newFile.isDirectory) {
// loadFiles(newFile)
// } else {
// tryOpenFile(newFile)
// }
// } else {
// Snackbar.make(
// viewBinding.fab,
// R.string.bookmark_jump_failed,
// Snackbar.LENGTH_SHORT
// ).show()
// }
// } else {
// Snackbar.make(
// viewBinding.fab,
// R.string.cannot_be_accessed_this_directory,
// Snackbar.LENGTH_SHORT
// ).show()
// }
// }
//
// }
// }
//
//
// override fun onPause() {
// bookmarkManager.save()
// super.onPause()
// }
//
// override fun onResume() {
// bookmarkManager.load()
// super.onResume()
// }
//
//
// /**
// * 解析文件路径
// *
// * @param context 上下文环境
// * @param intent 意图
// * @return 成功返回文件路径失败返回null
// */
// private fun parseFilePath(context: Context, intent: Intent?): String? {
// return try {
// if (intent != null) {
// val uri = intent.data
// var chooseFilePath: String? = null
// if ("file".equals(uri!!.scheme, ignoreCase = true)) { //使用第三方应用打开
// chooseFilePath = uri.path
// Toast.makeText(context, chooseFilePath, Toast.LENGTH_SHORT).show()
// return chooseFilePath
// }
// chooseFilePath = if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { //4.4以后
// getPath(context, uri)
// } else { //4.4以下下系统调用方法
// getRealPathFromURI(context, uri)
// }
// return chooseFilePath
// }
// null
// } catch (e: Exception) {
// Snackbar.make(viewBinding.fab, R.string.parse_file_exception, Snackbar.LENGTH_SHORT)
// .show()
// null
// }
// }
//
// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
// super.onActivityResult(requestCode, resultCode, data)
// if (resultCode == RESULT_OK) {
// if (mStartType == "selectFile" && requestCode == 1) {
// val path = FileOperator.parsePicturePath(this@FileManagerActivity, data)
// if (path != null) {
// val intent = Intent()
// intent.putExtra("File", path)
// setResult(RESULT_OK, intent)
// bookmarkManager.save()
// finish()
// }
// } else if (mStartType == "selectFile" && requestCode == 2) {
// val path = parseFilePath(this@FileManagerActivity, data)
// if (path != null) {
// val intent = Intent()
// intent.putExtra("File", path)
// setResult(RESULT_OK, intent)
// bookmarkManager.save()
// finish()
// }
// } else if (requestCode == 3) {
// //新建源文件
// loadFiles(directs)
// } else if (requestCode == 4) {
// val file = File(data!!.getStringExtra("File"))
// val copyResult =
// FileOperator.copyFile(file, File(directs.toString() + "/" + file.name))
// if (!copyResult) {
// Snackbar.make(
// viewBinding.fab,
// getText(R.string.copy_file_error),
// Snackbar.LENGTH_SHORT
// ).show()
// } else {
// loadFiles(directs)
// }
// }
// }
// }
//
// override fun onOptionsItemSelected(item: MenuItem): Boolean {
// val id = item.itemId
// when (id) {
// android.R.id.home -> {
// bookmarkManager.save()
// finish()
// return true
// }
// R.id.reloadFile -> {
// loadFiles(directs)
// return true
// }
// R.id.photo_album -> {
// this@FileManagerActivity.startActivityForResult(
// Intent(
// Intent.ACTION_PICK,
// MediaStore.Images.Media.EXTERNAL_CONTENT_URI
// ), 1
// )
// return true
// }
// R.id.system_file_manager -> {
// val intent = Intent(Intent.ACTION_GET_CONTENT)
// intent.type = "*/*"
// intent.addCategory(Intent.CATEGORY_OPENABLE)
// this@FileManagerActivity.startActivityForResult(intent, 2)
// return true
// }
// R.id.creteFolder -> {
// createFolderAction()
// return true
// }
// }
// loadBook(item.title)
// return super.onOptionsItemSelected(item)
// }
//
// override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
// return if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_DOWN) {
// if (directs.absolutePath == mRoot.absolutePath) {
// bookmarkManager.save()
// finish()
// true
// } else {
// returnDirects()
// false
// }
// } else super.onKeyDown(keyCode, event)
// }
//
// override fun onCreateOptionsMenu(menu: Menu): Boolean {
// val inflater = menuInflater
// inflater.inflate(R.menu.menu_files, menu)
// if (mStartType != "selectFile") {
// menu.removeItem(R.id.selectFile)
// }
// addJumpBookMenu(menu)
// return true
// }
//
// //加载上级文件夹
// fun returnDirects() {
// val file = File(FileOperator.getSuperDirectory(directs, mRoot))
// directs = file
// loadFiles(file)
// }
//
// fun initAction() {
// viewBinding.fab.setOnClickListener {
// val intent = Intent()
// when (mStartType) {
// "exportFile" -> {
// val oldFile = File(additionalData)
// val result = FileOperator.copyFile(
// oldFile,
// File(directs.absolutePath + "/" + oldFile.name)
// )
// if (result) {
// setResult(RESULT_OK)
// }
// finish()
// }
// "selectDirectents" -> {
// intent.putExtra("Directents", directs.absolutePath)
// setResult(RESULT_OK, intent)
// bookmarkManager.save()
// finish()
// }
// "selectFile" -> {
// intent.putExtra("File", filePath)
// setResult(RESULT_OK, intent)
// bookmarkManager.save()
// finish()
// }
// "default" -> {
// val popupMenu = PopupMenu(this@FileManagerActivity, viewBinding.fab)
// if (mFileAdapter != null) {
// val selectPath = mFileAdapter!!.selectPath
// if (selectPath != null && mProcessFiles == false) {
// if (mFileAdapter!!.isCopyFile) {
// popupMenu.menu.add(R.string.copy_to_this)
// } else {
// popupMenu.menu.add(R.string.cut_to_this)
// }
// }
// }
// popupMenu.menu.add(R.string.create_unit)
// popupMenu.menu.add(R.string.create_folder)
// popupMenu.menu.add(R.string.select_file)
// popupMenu.setOnMenuItemClickListener { item ->
// val title = item.title
// val handler = Handler(Looper.getMainLooper())
// when (title) {
// getText(R.string.create_unit) -> {
// val intent =
// Intent(this@FileManagerActivity, CreateUnitActivity::class.java)
// val bundle = Bundle()
// bundle.putString("modPath", directs.absolutePath)
// bundle.putString("createPath", directs.absolutePath)
// intent.putExtra("data", bundle)
// startActivityForResult(intent, 3)
// }
// getText(R.string.select_file) -> {
// val bundle = Bundle()
// val intent =
// Intent(
// this@FileManagerActivity,
// FileManagerActivity::class.java
// )
// bundle.putString("type", "selectFile")
// //bundle.putString("path", modClass.getModFile().getAbsolutePath());
// intent.putExtra("data", bundle)
// startActivityForResult(intent, 4)
// }
// getText(R.string.create_folder) -> {
// createFolderAction()
// }
// getText(R.string.copy_to_this) -> {
// Thread {
// mProcessFiles = true
// val oldFile = File(mFileAdapter!!.selectPath)
// val newFile = File(directs.absolutePath + "/" + oldFile.name)
// if (FileOperator.copyFiles(oldFile, newFile)) {
// handler.post {
// loadFiles(directs)
// mFileAdapter!!.cleanSelectPath()
// mProcessFiles = false
// }
// } else {
// handler.post {
// Toast.makeText(
// this@FileManagerActivity,
// getText(R.string.copy_failed),
// Toast.LENGTH_SHORT
// ).show()
// mProcessFiles = false
// }
// }
// }.start()
// }
// getText(R.string.cut_to_this) -> {
// Thread {
// mProcessFiles = true
// val oldFile = File(mFileAdapter!!.selectPath)
// val newFile = File(directs.absolutePath + "/" + oldFile.name)
// if (FileOperator.removeFiles(oldFile, newFile)) {
// handler.post {
// loadFiles(directs)
// mFileAdapter!!.cleanSelectPath()
// mProcessFiles = false
// }
// } else {
// handler.post {
// Toast.makeText(
// this@FileManagerActivity,
// getText(R.string.cut_failed),
// Toast.LENGTH_SHORT
// ).show()
// mProcessFiles = false
// }
// }
// }.start()
// }
// }
// false
// }
// popupMenu.show()
// }
// }
// }
// }
//
// /**
// * 创建文件夹活动
// */
// private fun createFolderAction() {
// MaterialDialog(this).show {
// title(R.string.create_folder)
// input(
// maxLength = 255,
// waitForPositiveButton = false
// ) { dialog, text ->
// if (text.length in 1..255) {
// dialog.setActionButtonEnabled(WhichButton.POSITIVE, true)
// }
// }.positiveButton(R.string.dialog_ok, null) { dialog ->
// val string = dialog.getInputField().text.toString()
// val file = File("$directs/$string")
// if (file.exists()) {
// Toast.makeText(
// this@FileManagerActivity,
// R.string.folder_error,
// Toast.LENGTH_SHORT
// ).show()
// } else {
// file.mkdirs()
// loadFiles(directs)
// }
// }.negativeButton(R.string.dialog_close)
// }
// }
//
//
// /**
// * 获取uri的绝对路径
// *
// * @param context 上下文环境
// * @param contentUri uri
// * @return 文件路径
// */
// private fun getRealPathFromURI(context: Context, contentUri: Uri?): String? {
// var res: String? = null
// val proj = arrayOf(MediaStore.Images.Media.DATA)
// val cursor = context.contentResolver.query(contentUri!!, proj, null, null, null)
// if (null != cursor && cursor.moveToFirst()) {
// val column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
// res = cursor.getString(column_index)
// cursor.close()
// }
// return res
// }
//
// private fun getPath(context: Context, uri: Uri?): String? {
// val isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
//
// // DocumentProvider
// if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
// // ExternalStorageProvider
// if (isExternalStorageDocument(uri)) {
// val docId = DocumentsContract.getDocumentId(uri)
// val split = docId.split(":").toTypedArray()
// val type = split[0]
// if ("primary".equals(type, ignoreCase = true)) {
// return Environment.getExternalStorageDirectory().toString() + "/" + split[1]
// }
// } else if (isDownloadsDocument(uri)) {
// val id = DocumentsContract.getDocumentId(uri)
// val contentUri = ContentUris.withAppendedId(
// Uri.parse("content://downloads/public_downloads"),
// java.lang.Long.valueOf(id)
// )
// return getDataColumn(context, contentUri, null, null)
// } else if (isMediaDocument(uri)) {
// val docId = DocumentsContract.getDocumentId(uri)
// val split = docId.split(":").toTypedArray()
// val type = split[0]
// var contentUri: Uri? = null
// if ("image" == type) {
// contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI
// } else if ("video" == type) {
// contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI
// } else if ("audio" == type) {
// contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
// }
// val selection = "_id=?"
// val selectionArgs = arrayOf(split[1])
// return getDataColumn(context, contentUri, selection, selectionArgs)
// }
// } else if ("content".equals(uri!!.scheme, ignoreCase = true)) {
// return getDataColumn(context, uri, null, null)
// } else if ("file".equals(uri.scheme, ignoreCase = true)) {
// uri.path
// }
// return null
// }
//
// private fun isMediaDocument(uri: Uri?): Boolean {
// return "com.android.providers.media.documents" == uri!!.authority
// }
//
// private fun isExternalStorageDocument(uri: Uri?): Boolean {
// return "com.android.externalstorage.documents" == uri!!.authority
// }
//
// private fun isDownloadsDocument(uri: Uri?): Boolean {
// return "com.android.providers.downloads.documents" == uri!!.authority
// }
//
// private fun getDataColumn(
// context: Context,
// uri: Uri?,
// selection: String?,
// selectionArgs: Array<String>?
// ): String? {
// var cursor: Cursor? = null
// val column = "_data"
// val projection = arrayOf(column)
// try {
// cursor = context.contentResolver.query(
// uri!!, projection, selection, selectionArgs,
// null
// )
// if (cursor != null && cursor.moveToFirst()) {
// val column_index = cursor.getColumnIndexOrThrow(column)
// return cursor.getString(column_index)
// }
// } finally {
// cursor?.close()
// }
// return null
// }
//
// override fun getViewBindingObject(): ActivityFileBinding {
// return ActivityFileBinding.inflate(layoutInflater)
// }
//
// override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
// if (canUseView) {
// initView()
// initAction()
// }
// }
2022-07-19 14:32:02 +00:00
private lateinit var menuBinding: MenuBinding
2022-07-18 23:59:32 +00:00
private val viewModel: FileManagerViewModel by lazy {
ViewModelProvider(this).get(FileManagerViewModel::class.java)
}
2022-04-04 14:03:10 +00:00
2022-07-18 23:59:32 +00:00
private var adapter: FileAdapter? = null
2022-04-04 14:03:10 +00:00
2022-07-18 23:59:32 +00:00
override fun whenCreateActivity(savedInstanceState: Bundle?, canUseView: Boolean) {
if (canUseView) {
setReturnButton()
viewBinding.recyclerView.layoutManager = LinearLayoutManager(this@FileManagerActivity)
loadTitle()
loadObserve()
2022-07-19 14:32:02 +00:00
FastScrollerBuilder(viewBinding.recyclerView).useMd2Style()
.setPopupTextProvider(adapter).build()
viewBinding.swipeRefreshLayout.setOnRefreshListener {
viewModel.loadFiles(viewModel.getCurrentPath())
viewBinding.swipeRefreshLayout.isRefreshing = false
}
2022-07-18 23:59:32 +00:00
viewModel.loadFiles()
2022-04-04 14:03:10 +00:00
} else {
2022-07-18 23:59:32 +00:00
val bundle = intent.getBundleExtra("data")
if (bundle == null) {
showError("无效的请求。")
finish()
return
2022-04-04 14:03:10 +00:00
}
if (bundle.containsKey("path")) {
2022-07-18 23:59:32 +00:00
viewModel.currentPathLiveData.value = bundle.getString("path")
2022-04-04 14:03:10 +00:00
}
if (bundle.containsKey("rootpath")) {
2022-07-18 23:59:32 +00:00
viewModel.setRootPath(bundle.getString("rootpath"))
2022-04-04 14:03:10 +00:00
}
}
}
2022-07-19 14:32:02 +00:00
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuBinding = MenuBinding.inflate(menu, menuInflater)
return true
}
2022-04-04 14:03:10 +00:00
/**
2022-07-18 23:59:32 +00:00
* 加载观察者
2022-04-04 14:03:10 +00:00
*/
2022-07-18 23:59:32 +00:00
fun loadObserve() {
viewModel.loadStateLiveData.observe(this) {
viewBinding.recyclerView.isVisible = !it
viewBinding.swipeRefreshLayout.isVisible = !it
viewBinding.fileError.isVisible = it
viewBinding.progressBar.isVisible = it
}
viewModel.fileListLiveData.observe(this) {
if (adapter == null) {
//创建实例(设置适配器)
adapter = FileAdapter(this, it)
adapter?.setItemEvent { i, fileItemBinding, viewHolder, file ->
2022-04-04 14:03:10 +00:00
fileItemBinding.root.setOnClickListener {
2022-07-18 23:59:32 +00:00
if (file == null) {
viewModel.returnDirects()
2022-04-04 14:03:10 +00:00
} else {
2022-07-18 23:59:32 +00:00
if (file.isDirectory) {
viewModel.currentPathLiveData.value = file.absolutePath
2022-04-04 14:03:10 +00:00
} else {
}
}
}
}
2022-07-18 23:59:32 +00:00
viewBinding.recyclerView.adapter = adapter
} else {
adapter?.setNewDataList(it)
2022-04-04 14:03:10 +00:00
}
}
2022-07-19 14:32:02 +00:00
viewModel.currentPathLiveData.observe(this) {
2022-07-18 23:59:32 +00:00
viewModel.loadFiles(it)
2022-04-04 14:03:10 +00:00
}
}
/**
2022-07-18 23:59:32 +00:00
* 加载页面标题
2022-04-04 14:03:10 +00:00
*/
2022-07-18 23:59:32 +00:00
fun loadTitle() {
title = when (viewModel.startTypeData) {
FileManagerViewModel.StartType.DEFAULT -> {
getString(R.string.file_manager)
2022-04-04 14:03:10 +00:00
}
2022-07-18 23:59:32 +00:00
else -> {
getString(R.string.file_manager)
2022-04-04 14:03:10 +00:00
}
}
}
override fun getViewBindingObject(): ActivityFileBinding {
return ActivityFileBinding.inflate(layoutInflater)
}
2022-07-19 14:32:02 +00:00
class MenuBinding private constructor(
val menu: Menu,
val reloadFileItem: MenuItem,
val photoAlbumItem: MenuItem,
val systemFileManagerItem: MenuItem
) {
companion object {
//填充
fun inflate(menu: Menu, inflater: MenuInflater): MenuBinding {
inflater.inflate(R.menu.menu_files, menu)
return MenuBinding(
menu,
menu.findItem(R.id.reloadFile),
menu.findItem(R.id.photo_album),
menu.findItem(R.id.system_file_manager)
)
}
}
}
2022-04-04 14:03:10 +00:00
}