Commit 581efd02 authored by wanglei's avatar wanglei

...

parent 7c95d62f
...@@ -34,6 +34,15 @@ object ConstObject { ...@@ -34,6 +34,15 @@ object ConstObject {
field = value field = value
AppPreferences.getInstance().put("ifAgreePrivacy", value, true) AppPreferences.getInstance().put("ifAgreePrivacy", value, true)
} }
var haveSaveDemo=false
get() {
return AppPreferences.getInstance().getBoolean("haveSaveDemo", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("haveSaveDemo", value, true)
}
// //
// var searchEngineSp = GOOGLE // var searchEngineSp = GOOGLE
// get() { // get() {
......
...@@ -52,16 +52,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -52,16 +52,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
if (item == null) return if (item == null) return
val binding = ItemDocumentBinding.bind(holder.itemView) val binding = ItemDocumentBinding.bind(holder.itemView)
if (item.type == TYPE_PDF) { if (item.type == TYPE_PDF) {
if (item.state == -1) { checkPwd(item, binding.iv)
checkPwd(item, binding.iv)
} else {
var res = R.mipmap.h_pdfiocn
when (item.state) {
0 -> res = R.mipmap.h_pdfiocn
1 -> res = R.mipmap.suoding
}
binding.iv.setImageResource(res)
}
} }
if (item.type == TYPE_WORD) { if (item.type == TYPE_WORD) {
binding.iv.setImageResource(R.mipmap.h_wordfiocn) binding.iv.setImageResource(R.mipmap.h_wordfiocn)
...@@ -80,7 +71,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -80,7 +71,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
} }
when (item.uiType) { when (item.uiType) {
0 -> { 0 -> {//首页
binding.flSelect.visibility = View.GONE binding.flSelect.visibility = View.GONE
binding.flMore.visibility = View.VISIBLE binding.flMore.visibility = View.VISIBLE
binding.flBookmark.visibility = View.VISIBLE binding.flBookmark.visibility = View.VISIBLE
...@@ -108,7 +99,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -108,7 +99,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
} }
} }
1 -> { 1 -> {//合并选择
binding.flMore.visibility = View.INVISIBLE binding.flMore.visibility = View.INVISIBLE
binding.flBookmark.visibility = View.INVISIBLE binding.flBookmark.visibility = View.INVISIBLE
binding.flSelect.visibility = View.VISIBLE binding.flSelect.visibility = View.VISIBLE
...@@ -125,7 +116,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -125,7 +116,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
} }
} }
2 -> { 2 -> {//拆分选择
binding.flBookmark.visibility = View.GONE binding.flBookmark.visibility = View.GONE
binding.flMore.visibility = View.INVISIBLE binding.flMore.visibility = View.INVISIBLE
binding.root.setOnClickListener { binding.root.setOnClickListener {
...@@ -133,7 +124,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -133,7 +124,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
} }
} }
3 -> { 3 -> {//解锁模式选择
binding.flBookmark.visibility = View.GONE binding.flBookmark.visibility = View.GONE
binding.flMore.visibility = View.INVISIBLE binding.flMore.visibility = View.INVISIBLE
binding.root.setOnClickListener { binding.root.setOnClickListener {
...@@ -141,7 +132,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -141,7 +132,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
} }
} }
4 -> { 4 -> {//搜索选择
binding.flBookmark.visibility = View.GONE binding.flBookmark.visibility = View.GONE
binding.flMore.setOnClickListener { binding.flMore.setOnClickListener {
moreAction?.invoke(item) moreAction?.invoke(item)
......
...@@ -15,7 +15,7 @@ import com.base.pdfviewerscannerwhite.helper.BaseActivity ...@@ -15,7 +15,7 @@ import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter
import com.base.pdfviewerscannerwhite.ui.main.DocumentPresenter import com.base.pdfviewerscannerwhite.ui.main.DocumentPresenter
import com.base.pdfviewerscannerwhite.ui.main.DocumentView import com.base.pdfviewerscannerwhite.ui.main.DocumentView
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showPdfPwdDialog import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfPwdDialog
import com.base.pdfviewerscannerwhite.utils.LogEx import com.base.pdfviewerscannerwhite.utils.LogEx
class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>(), DocumentView { class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>(), DocumentView {
...@@ -120,7 +120,7 @@ class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>(), DocumentView ...@@ -120,7 +120,7 @@ class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>(), DocumentView
binding.rv.adapter = adapter binding.rv.adapter = adapter
} }
override fun refreshDocumentRv(documentList: List<DocumentBean>, isRefresh: Boolean) { override fun refreshDocumentRv(documentList: List<DocumentBean>) {
binding.progressBar.visibility = View.GONE binding.progressBar.visibility = View.GONE
if (doWhat == DO_MERGE_PDF) { if (doWhat == DO_MERGE_PDF) {
LogEx.logDebug(TAG, "refreshDocumentRv 1") LogEx.logDebug(TAG, "refreshDocumentRv 1")
......
...@@ -3,9 +3,8 @@ package com.base.pdfviewerscannerwhite.ui.main ...@@ -3,9 +3,8 @@ package com.base.pdfviewerscannerwhite.ui.main
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.app.Dialog import android.app.Dialog
import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.core.content.ContentProviderCompat.requireContext import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.pdfviewerscannerwhite.bean.ConstObject import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
...@@ -23,19 +22,18 @@ import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSplitActivity ...@@ -23,19 +22,18 @@ import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSplitActivity
import com.base.pdfviewerscannerwhite.ui.document.ppt.PptActivity import com.base.pdfviewerscannerwhite.ui.document.ppt.PptActivity
import com.base.pdfviewerscannerwhite.ui.document.word.WordActivity import com.base.pdfviewerscannerwhite.ui.document.word.WordActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentHomeMoreDialog import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentHomeMoreDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfHomeMoreDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showPdfHomeMoreDialog import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfPwdDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showPdfPwdDialog
import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission
import java.io.File import java.io.File
import java.util.Locale
class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView { class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView {
var type = TYPE_PDF var type = TYPE_PDF
private var documentList: ArrayList<DocumentBean> = arrayListOf() private var documentList: ArrayList<DocumentBean> = arrayListOf()
private lateinit var adapter: DocumentAdapter lateinit var adapter: DocumentAdapter
private lateinit var documentPresenter: DocumentPresenter lateinit var documentPresenter: DocumentPresenter
private var firstDialog: Dialog? = null
constructor(type: String) : this() { constructor(type: String) : this() {
this.type = type this.type = type
...@@ -53,11 +51,22 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView ...@@ -53,11 +51,22 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if (requireContext().checkStorePermission() && adapter.items.isEmpty()) { initData()
}
fun initData() {
if (requireContext().checkStorePermission()) {
documentPresenter.initData() documentPresenter.initData()
} }
} }
override fun refreshDocumentRv(documentList: List<DocumentBean>) {
binding.llEmpty.isVisible = documentList.isEmpty()
this.documentList.clear()
this.documentList.addAll(documentList)
adapter.submitList(documentList)
}
private fun initAdapter() { private fun initAdapter() {
adapter = DocumentAdapter() adapter = DocumentAdapter()
adapter.bookmarkAction = { addRemove, path -> adapter.bookmarkAction = { addRemove, path ->
...@@ -73,23 +82,15 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView ...@@ -73,23 +82,15 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView
} }
var documentMoreAction: (item: DocumentBean) -> Unit = { item -> var documentMoreAction: (item: DocumentBean) -> Unit = { item ->
val mainActivity = (requireActivity() as MainActivity)
if (item.type == TYPE_PDF) { if (item.type == TYPE_PDF) {
requireContext().showPdfHomeMoreDialog(this, item, adapter, dismissAction = { firstDialog = null }) requireContext().showPdfHomeMoreDialog(
item, adapter, this, mainActivity
)
} }
if (item.type == TYPE_WORD || item.type == TYPE_EXCEL || item.type == TYPE_PPT) {
firstDialog = requireContext().showDocumentHomeMoreDialog(item, this)
}
}
override fun refreshDocumentRv(documentList: List<DocumentBean>, isRefresh: Boolean) { if (item.type == TYPE_WORD || item.type == TYPE_EXCEL || item.type == TYPE_PPT) {
if (isRefresh) { requireContext().showDocumentHomeMoreDialog(item, this, mainActivity)
this.documentList.clear()
}
this.documentList.addAll(documentList)
if (adapter.items.isEmpty()) {
adapter.submitList(documentList)
} else {
adapter.addAll(documentList)
} }
} }
...@@ -118,6 +119,7 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView ...@@ -118,6 +119,7 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView
val recentList = documentList.filter { val recentList = documentList.filter {
(System.currentTimeMillis() - File(it.path).lastModified()) < 300L * 24 * 60 * 60 * 1000 (System.currentTimeMillis() - File(it.path).lastModified()) < 300L * 24 * 60 * 60 * 1000
} }
binding.llEmpty.isVisible = recentList.isEmpty()
adapter.submitList(recentList) adapter.submitList(recentList)
} }
...@@ -132,17 +134,12 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView ...@@ -132,17 +134,12 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView
fun setBookmarkList() { fun setBookmarkList() {
if (isVisible) { if (isVisible) {
val bookmarkList = documentList.filter { it.isBookmarked } val bookmarkList = documentList.filter { it.isBookmarked }
binding.llEmpty.isVisible = bookmarkList.isEmpty()
adapter.submitList(bookmarkList) adapter.submitList(bookmarkList)
} }
} }
override fun dialogRename(item: DocumentBean) {
val file = File(item.path)
requireContext().showDocumentRenameDialog(file.name, firstDialog) { newName ->
documentPresenter.renameDocumentBean(file, newName)
}
}
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
fun changeSelectUi(select: Boolean) { fun changeSelectUi(select: Boolean) {
...@@ -179,11 +176,19 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView ...@@ -179,11 +176,19 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>(), DocumentView
fun getSearchItems(search: String): List<DocumentBean> { fun getSearchItems(search: String): List<DocumentBean> {
if (isVisible) { if (isVisible) {
return adapter.items.filter { File(it.path).name.contains(search) } return adapter.items.filter { File(it.path).name.lowercase(Locale.ENGLISH).contains(search.lowercase(Locale.ENGLISH)) }
} }
return listOf() return listOf()
} }
@SuppressLint("NotifyDataSetChanged")
fun changeHomeUI() {
if (isVisible) {
adapter.items.map { it.uiType == 0 }
adapter.notifyDataSetChanged()
}
}
companion object { companion object {
fun Activity.jumpDocument(item: DocumentBean) { fun Activity.jumpDocument(item: DocumentBean) {
......
...@@ -3,6 +3,7 @@ package com.base.pdfviewerscannerwhite.ui.main ...@@ -3,6 +3,7 @@ package com.base.pdfviewerscannerwhite.ui.main
import android.content.Context import android.content.Context
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
import com.base.pdfviewerscannerwhite.bean.ConstObject import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.bean.ConstObject.haveSaveDemo
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils
import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoDocx import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoDocx
...@@ -10,8 +11,10 @@ import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoPdf ...@@ -10,8 +11,10 @@ import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoPdf
import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoPptx import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoPptx
import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoXlsx import com.base.pdfviewerscannerwhite.utils.AssetUtils.getDemoXlsx
import com.base.pdfviewerscannerwhite.utils.AssetUtils.saveAssetsFile import com.base.pdfviewerscannerwhite.utils.AssetUtils.saveAssetsFile
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.SpStringUtils import com.base.pdfviewerscannerwhite.utils.SpStringUtils
import com.base.pdfviewerscannerwhite.utils.getMediaFile import com.base.pdfviewerscannerwhite.utils.getMediaFile
import com.base.pdfviewerscannerwhite.utils.upDateDemoStore
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
...@@ -22,29 +25,35 @@ class DocumentPresenter( ...@@ -22,29 +25,35 @@ class DocumentPresenter(
val type: String, val type: String,
val lifecycleScope: LifecycleCoroutineScope val lifecycleScope: LifecycleCoroutineScope
) { ) {
private val TAG = "DocumentPresenter"
private fun getDocumentBeanList(): List<DocumentBean> { private fun getDocumentBeanList(): List<DocumentBean> {
LogEx.logDebug(TAG, "getDocumentBeanList")
context.saveAssetsFile() context.upDateDemoStore()
if (!haveSaveDemo) {
context.saveAssetsFile()
haveSaveDemo = true
}
var selectionArgs = arrayOf(ConstObject.MIME_TYPE_PDF) var selectionArgs = arrayOf(ConstObject.MIME_TYPE_PDF)
val demoDocumentBean = DocumentBean() val demoDocumentBean = DocumentBean()
val demoFile = File(context.filesDir, "demo")
if (type == DocumentBean.TYPE_PDF) { if (type == DocumentBean.TYPE_PDF) {
selectionArgs = arrayOf(ConstObject.MIME_TYPE_PDF) selectionArgs = arrayOf(ConstObject.MIME_TYPE_PDF)
demoDocumentBean.path = context.getDemoPdf() demoDocumentBean.path = demoFile.listFiles()?.find { it.name.contains(".pdf") }?.absolutePath ?: ""
} }
if (type == DocumentBean.TYPE_WORD) { if (type == DocumentBean.TYPE_WORD) {
selectionArgs = arrayOf(ConstObject.MIME_TYPE_DOC, ConstObject.MIME_TYPE_DOCX) selectionArgs = arrayOf(ConstObject.MIME_TYPE_DOC, ConstObject.MIME_TYPE_DOCX)
demoDocumentBean.path = context.getDemoDocx() demoDocumentBean.path = demoFile.listFiles()?.find { it.name.contains(".docx") }?.absolutePath ?: ""
} }
if (type == DocumentBean.TYPE_EXCEL) { if (type == DocumentBean.TYPE_EXCEL) {
selectionArgs = arrayOf(ConstObject.MIME_TYPE_XLS, ConstObject.MIME_TYPE_XLSX) selectionArgs = arrayOf(ConstObject.MIME_TYPE_XLS, ConstObject.MIME_TYPE_XLSX)
demoDocumentBean.path = context.getDemoXlsx() demoDocumentBean.path = demoFile.listFiles()?.find { it.name.contains(".xlsx") }?.absolutePath ?: ""
} }
if (type == DocumentBean.TYPE_PPT) { if (type == DocumentBean.TYPE_PPT) {
selectionArgs = arrayOf(ConstObject.MIME_TYPE_PPT, ConstObject.MIME_TYPE_PPTX) selectionArgs = arrayOf(ConstObject.MIME_TYPE_PPT, ConstObject.MIME_TYPE_PPTX)
demoDocumentBean.path = context.getDemoPptx() demoDocumentBean.path = demoFile.listFiles()?.find { it.name.contains(".pptx") }?.absolutePath ?: ""
} }
demoDocumentBean.type = type demoDocumentBean.type = type
...@@ -55,7 +64,9 @@ class DocumentPresenter( ...@@ -55,7 +64,9 @@ class DocumentPresenter(
DocumentBean(it.path, uri = it.uri, type = type, isBookmarked = bookmarkList.contains(it.path)) DocumentBean(it.path, uri = it.uri, type = type, isBookmarked = bookmarkList.contains(it.path))
} }
val new = documentList.toMutableList() val new = documentList.toMutableList()
new.add(0, demoDocumentBean) if (File(demoDocumentBean.path).exists()) {
new.add(0, demoDocumentBean)
}
return new return new
} }
...@@ -63,7 +74,7 @@ class DocumentPresenter( ...@@ -63,7 +74,7 @@ class DocumentPresenter(
val documentList = getDocumentBeanList() val documentList = getDocumentBeanList()
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
documentView.refreshDocumentRv(documentList, true) documentView.refreshDocumentRv(documentList)
} }
} }
...@@ -75,7 +86,7 @@ class DocumentPresenter( ...@@ -75,7 +86,7 @@ class DocumentPresenter(
} }
val list = documentList.filter { it.state == 0 } val list = documentList.filter { it.state == 0 }
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
documentView.refreshDocumentRv(list, true) documentView.refreshDocumentRv(list)
} }
} }
...@@ -86,7 +97,7 @@ class DocumentPresenter( ...@@ -86,7 +97,7 @@ class DocumentPresenter(
} }
val list = documentList.filter { it.state == 1 } val list = documentList.filter { it.state == 1 }
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
documentView.refreshDocumentRv(list, true) documentView.refreshDocumentRv(list)
} }
} }
...@@ -99,15 +110,23 @@ class DocumentPresenter( ...@@ -99,15 +110,23 @@ class DocumentPresenter(
} }
} }
fun renameDocumentBean(file: File, newName: String) = lifecycleScope.launch(Dispatchers.IO) { fun renameDocumentBean(
file: File, newName: String,
callBack: ((newPath: String) -> Unit)? = null
) = lifecycleScope.launch(Dispatchers.IO) {
runCatching { var newPath = ""
try {
val nameFile = File(file.parentFile, newName) val nameFile = File(file.parentFile, newName)
file.renameTo(nameFile) val result = file.renameTo(nameFile)
if (result) {
newPath = nameFile.absolutePath
}
} catch (e: Exception) {
} }
val documentList = getDocumentBeanList()
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
documentView.refreshDocumentRv(documentList, true) callBack?.invoke(newPath)
} }
} }
......
package com.base.pdfviewerscannerwhite.ui.main package com.base.pdfviewerscannerwhite.ui.main
import android.app.Dialog
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
interface DocumentView { interface DocumentView {
fun dialogRename(item: DocumentBean) = Unit fun refreshDocumentRv(documentList: List<DocumentBean>) = Unit
fun refreshDocumentRv(documentList: List<DocumentBean>, isRefresh: Boolean) = Unit
fun splitPdf(path: String) = Unit fun splitPdf(path: String) = Unit
......
...@@ -16,6 +16,7 @@ import com.base.pdfviewerscannerwhite.BuildConfig ...@@ -16,6 +16,7 @@ import com.base.pdfviewerscannerwhite.BuildConfig
import com.base.pdfviewerscannerwhite.R import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.ActivityMainBinding import com.base.pdfviewerscannerwhite.databinding.ActivityMainBinding
import com.base.pdfviewerscannerwhite.databinding.ItemDocumentBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter
import com.base.pdfviewerscannerwhite.ui.main.DocumentFragment.Companion.jumpDocument import com.base.pdfviewerscannerwhite.ui.main.DocumentFragment.Companion.jumpDocument
...@@ -31,7 +32,6 @@ import com.base.pdfviewerscannerwhite.utils.LogEx ...@@ -31,7 +32,6 @@ import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission
import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast
import com.base.pdfviewerscannerwhite.utils.updateMediaStore import com.base.pdfviewerscannerwhite.utils.updateMediaStore
import com.cherry.lib.doc.office.fc.ss.usermodel.charts.AxisPosition
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
...@@ -275,10 +275,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -275,10 +275,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentFragment) {
val item = (currentFragment as DocumentFragment).getSearchItems(search) val item = (currentFragment as DocumentFragment).getSearchItems(search)
if (item.isNotEmpty()) { if (item.isNotEmpty()) {
val arrayList = arrayListOf<DocumentBean>() item.map { it.uiType = 4 }
arrayList.addAll(item) searchAdapter.submitList(item)
arrayList.map { it.uiType = 4 }
searchAdapter.submitList(arrayList)
} else { } else {
binding.llEmpty.visibility = View.VISIBLE binding.llEmpty.visibility = View.VISIBLE
} }
...@@ -352,6 +350,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -352,6 +350,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
} }
} }
@SuppressLint("NotifyDataSetChanged")
override fun refreshSearchRv() {
searchAdapter.notifyDataSetChanged()
}
override fun deleteDocument(item: DocumentBean) {
LogEx.logDebug(TAG, "deleteDocument $item")
searchAdapter.remove(item)
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
...@@ -516,6 +524,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -516,6 +524,10 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.tvTittle.visibility = View.VISIBLE binding.tvTittle.visibility = View.VISIBLE
binding.ivPaixu.visibility = View.VISIBLE binding.ivPaixu.visibility = View.VISIBLE
binding.ivXuanze.visibility = View.VISIBLE binding.ivXuanze.visibility = View.VISIBLE
if (currentFragment is DocumentFragment) {
(currentFragment as DocumentFragment).changeHomeUI()
}
} }
companion object { companion object {
......
package com.base.pdfviewerscannerwhite.ui.main package com.base.pdfviewerscannerwhite.ui.main
import android.net.Uri import android.net.Uri
import com.base.pdfviewerscannerwhite.bean.DocumentBean
interface MainView { interface MainView {
fun handleActivityGmsScanResult(imageUri: Uri, pdfUri: Uri) fun handleActivityGmsScanResult(imageUri: Uri, pdfUri: Uri)
fun refreshSearchRv()
fun deleteDocument(item: DocumentBean)
} }
\ No newline at end of file
...@@ -12,7 +12,7 @@ import com.base.pdfviewerscannerwhite.helper.BaseFragment ...@@ -12,7 +12,7 @@ import com.base.pdfviewerscannerwhite.helper.BaseFragment
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfActivity import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfActivity
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSelectActivity import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSelectActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showPdfPwdDialog import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfPwdDialog
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
......
package com.base.pdfviewerscannerwhite.ui.view
import android.annotation.SuppressLint
import android.app.Activity
import android.app.Dialog
import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import androidx.core.content.FileProvider
import androidx.core.widget.addTextChangedListener
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.DialogPdfHomeMoreBinding
import com.base.pdfviewerscannerwhite.databinding.DialogPdfMoreBinding
import com.base.pdfviewerscannerwhite.databinding.DialogPdfPasswordBinding
import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfView
import com.base.pdfviewerscannerwhite.ui.main.DocumentFragment
import com.base.pdfviewerscannerwhite.ui.main.MainActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDeleteDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentDetail
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showJumpPageNumberDialog
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.File
object PdfDialog {
//pdf首页弹窗
@SuppressLint("SetTextI18n", "NotifyDataSetChanged")
fun Context.showPdfHomeMoreDialog(
item: DocumentBean,
adapter: DocumentAdapter,
documentFragment: DocumentFragment,
mainActivity: MainActivity
): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPdfHomeMoreBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
val file = File(item.path)
binding.tvName.text = file.name
binding.tvInfo.text = file.lastModified().toFormatTime() + " " + file.length().toFormatSize()
if (item.isBookmarked) {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_s)
} else {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_n)
}
binding.ivBookmark.setOnClickListener {
item.isBookmarked = !item.isBookmarked
adapter.notifyDataSetChanged()
if (item.isBookmarked) {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_s)
} else {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_n)
}
}
binding.llRename.setOnClickListener {
showDocumentRenameDialog(file.name) { newName ->
dialog.dismiss()
documentFragment.documentPresenter.renameDocumentBean(file, newName) { newPath ->
if (newPath.isNotEmpty()) {
item.path = newPath
documentFragment.adapter.notifyDataSetChanged()
mainActivity.refreshSearchRv()
}
}
}
}
binding.llSplit.setOnClickListener {
dialog.dismiss()
documentFragment.splitPdf(item.path)
}
binding.llMerge.setOnClickListener {
dialog.dismiss()
documentFragment.mergePdf(item.path)
}
binding.llDelete.setOnClickListener {
dialog.dismiss()
showDeleteDialog {
runCatching {
File(item.path).delete()
}
documentFragment.deleteDocument(item)
}
}
binding.llDetail.setOnClickListener {
showDocumentDetail(item.path)
}
binding.llShare.setOnClickListener {
val intent = IntentShareUtils.sharePdfIntent(item.uri)
runCatching {
startActivity(intent)
}
}
if (item.state == 1) {
binding.tvLock.text = "Unlock PDF"
}
if (item.state == 0) {
binding.tvLock.text = "Lock PDF"
}
binding.llLock.setOnClickListener {
showPdfPwdDialog(state = item.state, path = item.path, firstDialog = dialog, encryptionAction = {
dialog.dismiss()
mainActivity?.refreshSearchRv()
})
}
dialog.setOnDismissListener {
}
return dialog
}
fun Activity.showPdfMoreDialog(
pdfView: PdfView,
pageNumber: Int,
pafPath: String,
) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPdfMoreBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
binding.llJump.setOnClickListener {
showJumpPageNumberDialog(pageNumber) { pageIndex ->
dialog.dismiss()
pdfView.jumpPage(pageIndex)
}
}
binding.llSplit.setOnClickListener {
dialog.dismiss()
pdfView.jumpSplit()
}
binding.llDetail.setOnClickListener {
showDocumentDetail(pafPath)
}
binding.llShare.setOnClickListener {
dialog.dismiss()
val pkg = this.packageName
LogEx.logDebug("showPdfMoreDialog", "pkg=$pkg")
val uri = FileProvider.getUriForFile(
this, this.packageName + ".provider", File(pafPath)
)
startActivity(Intent.createChooser(IntentShareUtils.sharePdfIntent(uri), "Share PDF"))
}
binding.llPrint.setOnClickListener {
val uri = FileProvider.getUriForFile(
this, this.packageName + ".provider", File(pafPath)
)
startActivity(Intent.createChooser(IntentShareUtils.sharePdfPrintIntent(uri), "Print PDF"))
}
}
@SuppressLint("SetTextI18n")
fun Context.showPdfPwdDialog(
state: Int,
path: String = "",
uri: String? = null,
firstDialog: Dialog? = null,
isCheckPwd: Boolean = false,
verificationAction: ((pwd: String) -> Unit)? = null,
encryptionAction: (() -> Unit)? = null,
) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPdfPasswordBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
val window = dialog.window
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
if (!isCheckPwd) {
if (state == 1) {
binding.tvTittle.text = "Delete Password"
binding.tvTip.text = "Delete password, the file is not password protected"
}
if (state == 0) {
binding.tvTittle.text = "Set Password"
binding.tvTip.text = "Set password protection pdf"
}
} else {
binding.tvTittle.text = "Input Password"
val file = File(path)
binding.tvTip.text = "${file.name} password protected"
binding.tvInputTip.visibility = View.VISIBLE
}
binding.edit.requestFocus()
binding.edit.addTextChangedListener {
binding.tvConfirm.isEnabled = it.toString().isNotEmpty()
binding.tvErrorTip.visibility = View.GONE
}
binding.tvCancel.setOnClickListener {
dialog.dismiss()
}
binding.tvConfirm.setOnClickListener {
val pwd = binding.edit.text.toString()
if (!isCheckPwd) {
dialog.dismiss()
firstDialog?.dismiss()
if (state == 0) {
PdfBoxUtils.setPassword(path, pwd, pwd)
toast("Success Encryption")
encryptionAction?.invoke()
}
if (state == 1) {
PdfBoxUtils.clearPassword(path, pwd)
toast("clear Encryption")
encryptionAction?.invoke()
}
} else {
val result = PdfBoxUtils.checkPwd(path, pwd, uri)
if (!result) {
binding.tvErrorTip.visibility = View.VISIBLE
return@setOnClickListener
}
dialog.dismiss()
firstDialog?.dismiss()
verificationAction?.invoke(pwd)
}
}
}
}
\ No newline at end of file
...@@ -74,6 +74,7 @@ object AssetUtils { ...@@ -74,6 +74,7 @@ object AssetUtils {
"DEMO.xlsx", "DEMO.xlsx",
"DEMO.pptx" "DEMO.pptx"
).forEach { ).forEach {
val file = File(demoFile, it) val file = File(demoFile, it)
if (file.exists() && file.length() != 0L) { if (file.exists() && file.length() != 0L) {
return return
......
...@@ -45,6 +45,13 @@ fun Context.updateMediaStore( ...@@ -45,6 +45,13 @@ fun Context.updateMediaStore(
) { path: String?, uri: Uri? -> } ) { path: String?, uri: Uri? -> }
} }
fun Context.upDateDemoStore() {
val demoFile = File(filesDir, "demo")
MediaScannerConnection.scanFile(
this, arrayOf(demoFile.absolutePath) , null
) { path: String?, uri: Uri? -> }
}
//图片视频音频不用这个查 //图片视频音频不用这个查
fun Context.getMediaFile(selectionArgs: Array<String>? = null): ArrayList<MediaBean> { fun Context.getMediaFile(selectionArgs: Array<String>? = null): ArrayList<MediaBean> {
......
...@@ -14,5 +14,32 @@ ...@@ -14,5 +14,32 @@
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_document" /> tools:listitem="@layout/item_document" />
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="60dp"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables,UselessParent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/empty"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="Empty"
android:textColor="#B1B4B9"
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout> </FrameLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment