Commit 6c31c182 authored by wanglei's avatar wanglei

...

parent cc472e48
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:logo="@mipmap/logo" android:logo="@mipmap/logo"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.PdfReaderAllPdfReader" android:theme="@style/Theme.PdfReaderAllPdfReader"
...@@ -97,6 +98,16 @@ ...@@ -97,6 +98,16 @@
android:exported="false" android:exported="false"
android:launchMode="singleTop" android:launchMode="singleTop"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfLoadingActivity"
android:exported="false"
android:launchMode="singleTop"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfMergeActivity"
android:exported="false"
android:launchMode="singleTop"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
......
...@@ -6,7 +6,9 @@ import androidx.fragment.app.Fragment ...@@ -6,7 +6,9 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.base.pdfreaderallpdfreader.R import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.ads.AdmobHelper import com.base.pdfreaderallpdfreader.ads.AdmobHelper
import com.base.pdfreaderallpdfreader.ads.admob.AdmobNativeUtils import com.base.pdfreaderallpdfreader.ads.admob.AdmobNativeUtils
...@@ -27,6 +29,7 @@ import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity ...@@ -27,6 +29,7 @@ import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.ppt.PptActivity import com.base.pdfreaderallpdfreader.ui.ppt.PptActivity
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.word.WordActivity import com.base.pdfreaderallpdfreader.ui.word.WordActivity
import com.base.pdfreaderallpdfreader.utils.updateMediaStore
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
...@@ -65,6 +68,30 @@ class DocumentFragment() : Fragment() { ...@@ -65,6 +68,30 @@ class DocumentFragment() : Fragment() {
requireContext().showDocumentHomeMoreDialog(item, this) requireContext().showDocumentHomeMoreDialog(item, this)
} }
binding.rv.adapter = adapter binding.rv.adapter = adapter
binding.rv.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
// LogEx.logDebug(TAG, "scrollY=$scrollY oldScrollY=$oldScrollY")
// 检查当前滚动位置
val firstVisibleItem: Int =
(binding.rv.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
if (firstVisibleItem > 3) {
binding.ivTop.isVisible = true
}
if (firstVisibleItem == 0) {
binding.ivTop.isVisible = false
}
}
binding.ivTop.setOnClickListener {
binding.rv.scrollToPosition(0)
binding.ivTop.isVisible = false
}
binding.swipeRefreshLayout.setOnRefreshListener {
initData()
}
} }
override fun onResume() { override fun onResume() {
...@@ -83,6 +110,9 @@ class DocumentFragment() : Fragment() { ...@@ -83,6 +110,9 @@ class DocumentFragment() : Fragment() {
binding.swipeRefreshLayout.isRefreshing = true binding.swipeRefreshLayout.isRefreshing = true
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
requireContext().updateMediaStore()
val list: List<DocumentBean> val list: List<DocumentBean>
when (type) { when (type) {
TYPE_PDF -> { TYPE_PDF -> {
......
...@@ -3,6 +3,7 @@ package com.base.pdfreaderallpdfreader.ui.main ...@@ -3,6 +3,7 @@ package com.base.pdfreaderallpdfreader.ui.main
import android.content.Context import android.content.Context
import android.media.MediaScannerConnection import android.media.MediaScannerConnection
import android.net.Uri import android.net.Uri
import android.os.Environment
import com.base.pdfreaderallpdfreader.bean.ConstObject import com.base.pdfreaderallpdfreader.bean.ConstObject
import com.base.pdfreaderallpdfreader.bean.ConstObject.MIME_TYPE_DOC import com.base.pdfreaderallpdfreader.bean.ConstObject.MIME_TYPE_DOC
import com.base.pdfreaderallpdfreader.bean.ConstObject.MIME_TYPE_DOCX import com.base.pdfreaderallpdfreader.bean.ConstObject.MIME_TYPE_DOCX
...@@ -17,6 +18,7 @@ import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF ...@@ -17,6 +18,7 @@ import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PPT import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_WORD import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfreaderallpdfreader.bean.MediaBean import com.base.pdfreaderallpdfreader.bean.MediaBean
import com.base.pdfreaderallpdfreader.helper.MyApplication.Companion.context
import com.base.pdfreaderallpdfreader.utils.AssetUtils.readByteArrayFromAsset import com.base.pdfreaderallpdfreader.utils.AssetUtils.readByteArrayFromAsset
import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfreaderallpdfreader.utils.SpStringUtils import com.base.pdfreaderallpdfreader.utils.SpStringUtils
...@@ -33,6 +35,13 @@ fun Context.upDateDemoStore() { ...@@ -33,6 +35,13 @@ fun Context.upDateDemoStore() {
) { path: String?, uri: Uri? -> } ) { path: String?, uri: Uri? -> }
} }
fun getDocumentAppDir(): File {
val appDir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), context.packageName)
if (!appDir.exists())
appDir.exists()
return appDir
}
fun Context.saveAssetsFile() { fun Context.saveAssetsFile() {
val demoFile = File(filesDir, "demo") val demoFile = File(filesDir, "demo")
demoFile.mkdirs() demoFile.mkdirs()
...@@ -252,7 +261,7 @@ fun Context.pdfCheck(pdfDocumentBean: DocumentBean) { ...@@ -252,7 +261,7 @@ fun Context.pdfCheck(pdfDocumentBean: DocumentBean) {
fun getDocumentType(mediaBean: MediaBean): String { fun getDocumentType(mediaBean: MediaBean): String {
return if (mediaBean.path.endsWith(".pdf")) { return if (mediaBean.path.endsWith(".pdf")) {
MIME_TYPE_PDF TYPE_PDF
} else if (mediaBean.path.endsWith(".doc") || mediaBean.path.endsWith(".docx")) { } else if (mediaBean.path.endsWith(".doc") || mediaBean.path.endsWith(".docx")) {
TYPE_WORD TYPE_WORD
} else if (mediaBean.path.endsWith(".xls") || mediaBean.path.endsWith(".xlsx")) { } else if (mediaBean.path.endsWith(".xls") || mediaBean.path.endsWith(".xlsx")) {
...@@ -260,7 +269,7 @@ fun getDocumentType(mediaBean: MediaBean): String { ...@@ -260,7 +269,7 @@ fun getDocumentType(mediaBean: MediaBean): String {
} else if (mediaBean.path.endsWith(".ppt") || mediaBean.path.endsWith(".pptx")) { } else if (mediaBean.path.endsWith(".ppt") || mediaBean.path.endsWith(".pptx")) {
TYPE_PPT TYPE_PPT
} else { } else {
TYPE_PPT TYPE_PDF
} }
} }
......
...@@ -23,17 +23,23 @@ import com.base.pdfreaderallpdfreader.ui.language.LanguageActivity ...@@ -23,17 +23,23 @@ import com.base.pdfreaderallpdfreader.ui.language.LanguageActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.search.SearchActivity import com.base.pdfreaderallpdfreader.ui.search.SearchActivity
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission
import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog
import com.base.pdfreaderallpdfreader.ui.view.PwdDialog.showPdfPwdDialog import com.base.pdfreaderallpdfreader.ui.view.PwdDialog.showPdfPwdDialog
import com.base.pdfreaderallpdfreader.ui.view.RateDialog.showRateDialog import com.base.pdfreaderallpdfreader.ui.view.RateDialog.showRateDialog
import com.base.pdfreaderallpdfreader.utils.BarUtils import com.base.pdfreaderallpdfreader.utils.BarUtils
import com.base.pdfreaderallpdfreader.utils.LogEx
import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.ShortcutUtils.addDeskShortCut
import com.base.pdfreaderallpdfreader.utils.updateMediaStore
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File
class MainActivity : BaseActivity<ActivityMainBinding>() { class MainActivity : BaseActivity<ActivityMainBinding>() {
private val TAG = "MainActivity"
override val binding: ActivityMainBinding by lazy { override val binding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater) ActivityMainBinding.inflate(layoutInflater)
} }
...@@ -47,6 +53,23 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -47,6 +53,23 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
mainViewModel.initScannerLauncher(this) mainViewModel.initScannerLauncher(this)
mainViewModel.handleActivityGmsScanResult = { imageUri, pdfUri -> mainViewModel.handleActivityGmsScanResult = { imageUri, pdfUri ->
LogEx.logDebug(TAG, "pdfUri=$pdfUri")
val file = File(pdfUri.toString().replace("file://", ""))
if (file.exists()) {
showDocumentRenameDialog(file.name,
okAction = {
val child = if (it.endsWith(".pdf")) it else "$it.pdf"
val newFile = File(getDocumentAppDir(), child)
mainViewModel.copyFile(file, newFile)
this.updateMediaStore()
},
dismissAction = {
})
} else {
}
} }
BarUtils.setStatusBarLightMode(this, true) BarUtils.setStatusBarLightMode(this, true)
...@@ -63,6 +86,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -63,6 +86,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
showStoragePermission(launcher) showStoragePermission(launcher)
} }
addDeskShortCut()
} }
override fun onResume() { override fun onResume() {
...@@ -91,20 +115,32 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -91,20 +115,32 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
startActivity(Intent(this, LanguageActivity::class.java)) startActivity(Intent(this, LanguageActivity::class.java))
} }
binding.includeMain.includeContentMain.ivScan.setOnClickListener { binding.includeMain.includeContentMain.ivScan.setOnClickListener {
starAdGmsScan() if (checkStorePermission()) {
starAdGmsScan()
} else {
showStoragePermission(launcher)
}
} }
binding.includeMain.ivSearch.setOnClickListener { binding.includeMain.ivSearch.setOnClickListener {
startActivity(Intent(this, SearchActivity::class.java)) if (checkStorePermission()) {
startActivity(Intent(this, SearchActivity::class.java))
} else {
showStoragePermission(launcher)
}
} }
binding.llFileManager.setOnClickListener { binding.llFileManager.setOnClickListener {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) if (checkStorePermission()) {
intent.addCategory(Intent.CATEGORY_OPENABLE) val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.setType("application/pdf") intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION intent.setType("application/pdf")
intent.flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION
launcher.launch(intent) {
val uri = it.data?.data ?: Uri.EMPTY launcher.launch(intent) {
jumpUriPdf(uri) val uri = it.data?.data ?: Uri.EMPTY
jumpUriPdf(uri)
}
} else {
showStoragePermission(launcher)
} }
} }
binding.llRate.setOnClickListener { binding.llRate.setOnClickListener {
...@@ -120,6 +156,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -120,6 +156,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
binding.llFeedback.setOnClickListener { binding.llFeedback.setOnClickListener {
startActivity(Intent(this, FeedbackActivity::class.java)) startActivity(Intent(this, FeedbackActivity::class.java))
} }
binding.llShare.setOnClickListener {
}
} }
......
...@@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModel ...@@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModel
import com.google.mlkit.vision.documentscanner.GmsDocumentScannerOptions import com.google.mlkit.vision.documentscanner.GmsDocumentScannerOptions
import com.google.mlkit.vision.documentscanner.GmsDocumentScanning import com.google.mlkit.vision.documentscanner.GmsDocumentScanning
import com.google.mlkit.vision.documentscanner.GmsDocumentScanningResult import com.google.mlkit.vision.documentscanner.GmsDocumentScanningResult
import java.io.File
class MainViewModel : ViewModel() { class MainViewModel : ViewModel() {
...@@ -68,4 +69,11 @@ class MainViewModel : ViewModel() { ...@@ -68,4 +69,11 @@ class MainViewModel : ViewModel() {
} }
} }
} }
fun copyFile(file: File, newFile: File) {
runCatching {
file.copyTo(newFile, true)
}
}
} }
\ No newline at end of file
...@@ -13,10 +13,13 @@ import com.base.pdfreaderallpdfreader.bean.ConstObject.DO_LOCK_PDF ...@@ -13,10 +13,13 @@ import com.base.pdfreaderallpdfreader.bean.ConstObject.DO_LOCK_PDF
import com.base.pdfreaderallpdfreader.bean.ConstObject.DO_SPLIT_PDF import com.base.pdfreaderallpdfreader.bean.ConstObject.DO_SPLIT_PDF
import com.base.pdfreaderallpdfreader.databinding.FragmentHomeBinding import com.base.pdfreaderallpdfreader.databinding.FragmentHomeBinding
import com.base.pdfreaderallpdfreader.ui.document.DocumentActivity import com.base.pdfreaderallpdfreader.ui.document.DocumentActivity
import com.base.pdfreaderallpdfreader.ui.main.MainActivity
import com.base.pdfreaderallpdfreader.ui.main.getPdfFastSize import com.base.pdfreaderallpdfreader.ui.main.getPdfFastSize
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfSelectActivity import com.base.pdfreaderallpdfreader.ui.pdf.PdfSelectActivity
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.requestStoragePermission
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
...@@ -46,48 +49,86 @@ class HomeFragment : Fragment() { ...@@ -46,48 +49,86 @@ class HomeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val launcher = (requireActivity() as MainActivity).launcher
binding.clPdfReader.setOnClickListener { binding.clPdfReader.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java)) if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java))
}
} }
binding.llEditPdf.setOnClickListener { binding.llEditPdf.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("initTab", 1) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 1)
})
}
} }
binding.llMergePdf.setOnClickListener { binding.llMergePdf.setOnClickListener {
PdfActivity.jumpMerge(requireActivity()) if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
PdfActivity.jumpMerge(requireActivity())
}
} }
binding.llSplitPdf.setOnClickListener { binding.llSplitPdf.setOnClickListener {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("doWhat", DO_SPLIT_PDF) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_SPLIT_PDF)
})
}
} }
binding.llLockPdf.setOnClickListener { binding.llLockPdf.setOnClickListener {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("doWhat", DO_LOCK_PDF) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_LOCK_PDF)
})
}
} }
binding.llWord.setOnClickListener { binding.llWord.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("initTab", 2) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 2)
})
}
} }
binding.llExcel.setOnClickListener { binding.llExcel.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("initTab", 3) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 3)
})
}
} }
binding.llPpt.setOnClickListener { binding.llPpt.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("initTab", 4) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 4)
})
}
} }
binding.llOther.setOnClickListener { binding.llOther.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply { if (!requireContext().checkStorePermission()) {
putExtra("initTab", 0) requireContext().showStoragePermission(launcher)
}) } else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 0)
})
}
} }
......
...@@ -8,15 +8,24 @@ import androidx.core.view.updatePadding ...@@ -8,15 +8,24 @@ import androidx.core.view.updatePadding
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.pdfreaderallpdfreader.base.BaseActivity import com.base.pdfreaderallpdfreader.base.BaseActivity
import com.base.pdfreaderallpdfreader.bean.DocumentBean
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfreaderallpdfreader.databinding.ActivitySearchBinding import com.base.pdfreaderallpdfreader.databinding.ActivitySearchBinding
import com.base.pdfreaderallpdfreader.databinding.ItemTabDocumentBinding import com.base.pdfreaderallpdfreader.databinding.ItemTabDocumentBinding
import com.base.pdfreaderallpdfreader.ui.document.DocumentFragment.Companion.jumpOtherDocument
import com.base.pdfreaderallpdfreader.ui.main.DocumentAdapter import com.base.pdfreaderallpdfreader.ui.main.DocumentAdapter
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.view.DocumentHomeMoreCallBack
import com.base.pdfreaderallpdfreader.utils.BarUtils import com.base.pdfreaderallpdfreader.utils.BarUtils
import com.base.pdfreaderallpdfreader.utils.LogEx
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File
class SearchActivity : BaseActivity<ActivitySearchBinding>() { class SearchActivity : BaseActivity<ActivitySearchBinding>(), DocumentHomeMoreCallBack {
private val TAG = "SearchActivity"
private lateinit var searchViewModel: SearchViewModel private lateinit var searchViewModel: SearchViewModel
private var adapter: DocumentAdapter? = null private var adapter: DocumentAdapter? = null
...@@ -32,6 +41,16 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -32,6 +41,16 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
adapter = DocumentAdapter() adapter = DocumentAdapter()
binding.rv.adapter = adapter binding.rv.adapter = adapter
adapter?.moreAction = { item: DocumentBean ->
showDocumentHomeMoreDialog(item, null, this)
}
adapter?.itemClickAction = { item: DocumentBean ->
if (item.type == TYPE_PDF) {
PdfActivity.jumpPdfActivity(this, item)
} else {
jumpOtherDocument(item)
}
}
arrayOf("All", "PDF", "Word", "Excel", "PPT").forEach { tab -> arrayOf("All", "PDF", "Word", "Excel", "PPT").forEach { tab ->
val tabBinding = ItemTabDocumentBinding.inflate(layoutInflater) val tabBinding = ItemTabDocumentBinding.inflate(layoutInflater)
...@@ -53,6 +72,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -53,6 +72,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
binding.edit.setOnEditorActionListener { v, actionId, event -> binding.edit.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE) { if (actionId == EditorInfo.IME_ACTION_DONE) {
LogEx.logDebug(TAG, "actionDone")
if (binding.edit.text.isNotEmpty()) { if (binding.edit.text.isNotEmpty()) {
searchDocument() searchDocument()
} }
...@@ -75,6 +95,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -75,6 +95,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
} }
private fun searchDocument() { private fun searchDocument() {
LogEx.logDebug(TAG, "searchDocument")
val search = binding.edit.text.toString() val search = binding.edit.text.toString()
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
val result = searchViewModel.getSearchDocument(this@SearchActivity, search) val result = searchViewModel.getSearchDocument(this@SearchActivity, search)
...@@ -98,4 +119,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() { ...@@ -98,4 +119,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
var SEARCH_MODE_PPT = "search_mode_ppt" var SEARCH_MODE_PPT = "search_mode_ppt"
} }
override fun renameDocumentBean(file: File, newName: String) {
try {
val newFile = File(file.parentFile, newName)
val result = file.renameTo(newFile)
if (result) {
searchDocument()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun deleteDocument(item: DocumentBean) {
val flag = File(item.path).delete()
if (flag) {
adapter?.remove(item)
}
}
} }
\ No newline at end of file
...@@ -45,10 +45,6 @@ class SearchViewModel : ViewModel() { ...@@ -45,10 +45,6 @@ class SearchViewModel : ViewModel() {
else -> typeList = all else -> typeList = all
} }
typeList.filter { return typeList.filter { File(it.path).name.lowercase(Locale.ENGLISH).contains(search.lowercase(Locale.ENGLISH)) }
File(it.path).name.lowercase(Locale.ENGLISH)
.contains(search.lowercase(Locale.ENGLISH))
}
return typeList
} }
} }
\ No newline at end of file
...@@ -31,13 +31,26 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior ...@@ -31,13 +31,26 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.File import java.io.File
interface DocumentHomeMoreCallBack {
fun renameDocumentBean(file: File, newName: String) {
}
fun deleteDocument(item: DocumentBean) {
}
}
object DocumentDialog { object DocumentDialog {
@SuppressLint("SetTextI18n", "NotifyDataSetChanged") @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
fun Context.showDocumentHomeMoreDialog( fun Context.showDocumentHomeMoreDialog(
item: DocumentBean, item: DocumentBean,
documentFragment: DocumentFragment documentFragment: DocumentFragment? = null,
documentHomeMoreCallBack: DocumentHomeMoreCallBack? = null
): BottomSheetDialog { ): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogDocumentHomeMoreBinding.inflate(LayoutInflater.from(this)) val binding = DialogDocumentHomeMoreBinding.inflate(LayoutInflater.from(this))
...@@ -75,7 +88,8 @@ object DocumentDialog { ...@@ -75,7 +88,8 @@ object DocumentDialog {
binding.llRename.setOnClickListener { binding.llRename.setOnClickListener {
showDocumentRenameDialog(file.name, okAction = { newName -> showDocumentRenameDialog(file.name, okAction = { newName ->
dialog.dismiss() dialog.dismiss()
documentFragment.renameDocumentBean(file, newName) documentFragment?.renameDocumentBean(file, newName)
documentHomeMoreCallBack?.renameDocumentBean(file, newName)
}) })
} }
binding.llDetail.setOnClickListener { binding.llDetail.setOnClickListener {
...@@ -87,7 +101,8 @@ object DocumentDialog { ...@@ -87,7 +101,8 @@ object DocumentDialog {
binding.llDelete.setOnClickListener { binding.llDelete.setOnClickListener {
dialog.dismiss() dialog.dismiss()
showDeleteDialog { showDeleteDialog {
documentFragment.deleteDocument(item) documentFragment?.deleteDocument(item)
documentHomeMoreCallBack?.deleteDocument(item)
} }
} }
return dialog return dialog
......
...@@ -16,6 +16,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog ...@@ -16,6 +16,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
object MainDialog { object MainDialog {
fun Context.showStoragePermission( fun Context.showStoragePermission(
launcher: ActivityLauncher, launcher: ActivityLauncher,
launcherAction: ((flag: Boolean) -> Unit)? = null, launcherAction: ((flag: Boolean) -> Unit)? = null,
......
...@@ -23,6 +23,7 @@ import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentDetail ...@@ -23,6 +23,7 @@ import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentDetail
import com.base.pdfreaderallpdfreader.utils.IntentShareUtils import com.base.pdfreaderallpdfreader.utils.IntentShareUtils
import com.base.pdfreaderallpdfreader.utils.LogEx import com.base.pdfreaderallpdfreader.utils.LogEx
import com.base.pdfreaderallpdfreader.utils.NumberRangeFilter import com.base.pdfreaderallpdfreader.utils.NumberRangeFilter
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.SpStringUtils import com.base.pdfreaderallpdfreader.utils.SpStringUtils
import com.base.pdfreaderallpdfreader.utils.SpStringUtils.BOOKMARK_KEY import com.base.pdfreaderallpdfreader.utils.SpStringUtils.BOOKMARK_KEY
import com.base.pdfreaderallpdfreader.utils.ToastUtils.toast import com.base.pdfreaderallpdfreader.utils.ToastUtils.toast
......
package com.base.pdfreaderallpdfreader.utils
import android.content.Context
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Build
import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.bean.ConstObject
import com.base.pdfreaderallpdfreader.ui.splash.SplashActivity
object ShortcutUtils {
fun Context.addDeskShortCut() {
//获取ShortcutManager对象
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
val shortcutManager: ShortcutManager = getSystemService(ShortcutManager::class.java) as ShortcutManager
val shortcut1 = ShortcutInfo.Builder(this, "11111")
.setShortLabel("Scan Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.pdf_scan_short))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_SCAN_PDF)
})
.build()
val shortcut2 = ShortcutInfo.Builder(this, "22222")
.setShortLabel("Split Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.pdf_split_short))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_SPLIT_PDF)
})
.build()
val shortcut3 = ShortcutInfo.Builder(this, "33333")
.setShortLabel("Merge Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.pdf_merge_short))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_MERGE_PDF)
})
.build()
//setDynamicShortcuts()方法来设置快捷方式
shortcutManager.setDynamicShortcuts(listOf(shortcut1, shortcut2, shortcut3))
}
}
}
\ No newline at end of file
...@@ -69,7 +69,9 @@ ...@@ -69,7 +69,9 @@
android:textColor="#B1B3B9" android:textColor="#B1B3B9"
android:textSize="13sp" /> android:textSize="13sp" />
<!-- 文件管理-->
<LinearLayout <LinearLayout
android:id="@+id/ll_file_manager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginVertical="10dp" android:layout_marginVertical="10dp"
...@@ -119,12 +121,14 @@ ...@@ -119,12 +121,14 @@
</LinearLayout> </LinearLayout>
<!-- 多语言 -->
<LinearLayout <LinearLayout
android:id="@+id/ll_file_manager" android:id="@+id/ll_language"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginVertical="10dp" android:layout_marginVertical="10dp"
android:orientation="horizontal"> android:orientation="horizontal"
android:visibility="gone">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -135,7 +139,6 @@ ...@@ -135,7 +139,6 @@
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<LinearLayout <LinearLayout
android:id="@+id/ll_language"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
...@@ -171,7 +174,6 @@ ...@@ -171,7 +174,6 @@
</LinearLayout> </LinearLayout>
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
...@@ -181,6 +183,7 @@ ...@@ -181,6 +183,7 @@
android:textColor="#B1B3B9" android:textColor="#B1B3B9"
android:textSize="13sp" /> android:textSize="13sp" />
<!-- 评价 -->
<LinearLayout <LinearLayout
android:id="@+id/ll_rate" android:id="@+id/ll_rate"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -223,11 +226,14 @@ ...@@ -223,11 +226,14 @@
</LinearLayout> </LinearLayout>
<!-- 分享 -->
<LinearLayout <LinearLayout
android:id="@+id/ll_share"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginVertical="10dp" android:layout_marginVertical="10dp"
android:orientation="horizontal"> android:orientation="horizontal"
android:visibility="gone">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
...@@ -265,6 +271,7 @@ ...@@ -265,6 +271,7 @@
</LinearLayout> </LinearLayout>
<!-- 隐私政策 -->
<LinearLayout <LinearLayout
android:id="@+id/ll_privacy" android:id="@+id/ll_privacy"
android:layout_width="match_parent" android:layout_width="match_parent"
...@@ -307,6 +314,7 @@ ...@@ -307,6 +314,7 @@
</LinearLayout> </LinearLayout>
<!-- 反馈 -->
<LinearLayout <LinearLayout
android:id="@+id/ll_feedback" android:id="@+id/ll_feedback"
android:layout_width="match_parent" android:layout_width="match_parent"
......
...@@ -21,13 +21,28 @@ ...@@ -21,13 +21,28 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView <FrameLayout
android:id="@+id/rv"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:layout_marginVertical="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" <androidx.recyclerview.widget.RecyclerView
tools:listitem="@layout/item_document" /> android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginVertical="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_document" />
<ImageView
android:id="@+id/iv_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginBottom="100dp"
android:src="@mipmap/pdf_top"
android:visibility="gone" />
</FrameLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout> </LinearLayout>
......
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">Pdf Reader All Pdf Reader</string> <string name="app_name">PDF Reader &amp; Editor</string>
<string name="facebook_app_id" tools:ignore="MissingTranslation">567688245803774</string> <string name="facebook_app_id" tools:ignore="MissingTranslation">567688245803774</string>
......
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