Commit 3b181bc5 authored by wanglei's avatar wanglei

...启动页

parent 0dd1906a
package com.base.pdfoneread.bean
import android.net.Uri
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_DOC
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_DOCX
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_PDF
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_PPT
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_PPTX
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_XLS
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_XLSX
data class DocumentBean(
var path: String = "",
......
......@@ -18,6 +18,7 @@ import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfoneread.databinding.ActivityDocumentBinding
import com.base.pdfoneread.ui.BaseActivity
import com.base.pdfoneread.ui.pdf.PdfActivity
import com.base.pdfoneread.ui.views.DialogCallBack
import com.base.pdfoneread.ui.views.DocumentDialog.showDeleteDialog
import com.base.pdfoneread.ui.views.DocumentDialog.showDocumentHomeMoreDialog
......@@ -68,12 +69,12 @@ class DocumentActivity : BaseActivity<ActivityDocumentBinding>(), DialogCallBack
binding.ivAllSelector.isSelected = size == adapter?.items?.size
}
adapter?.itemClick = { item: DocumentBean ->
if (item.type == TYPE_PDF) {
showPdfHomeMoreDialog(item, this)
PdfActivity.jumpPdfActivity(this, item)
} else {
showDocumentHomeMoreDialog(item, this)
}
}
}
adapter?.moreAction = { item: DocumentBean ->
if (item.type == TYPE_PDF) {
......
......@@ -357,6 +357,16 @@ fun getDocumentType(mediaBean: MediaBean): String {
}
}
fun getTypeByMimeType(mimeType: String): String {
return when (mimeType) {
MIME_TYPE_PDF -> TYPE_PDF
MIME_TYPE_DOC, MIME_TYPE_DOCX -> TYPE_WORD
MIME_TYPE_XLS, MIME_TYPE_XLSX -> TYPE_EXCEL
MIME_TYPE_PPT, MIME_TYPE_PPTX -> TYPE_PPT
else -> ""
}
}
fun saveBookmarkChange(addRemove: Boolean, path: String) {
if (addRemove) {
SpStringUtils.addSpString(BOOKMARK_KEY, path)
......
......@@ -133,7 +133,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
}
@SuppressLint("SetTextI18n")
private fun changeHomeUI() {
fun changeHomeUI() {
disSelectTab()
binding.ivHome.isSelected = true
binding.tvHome.isSelected = true
......
......@@ -5,14 +5,21 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.base.pdfoneread.bean.DocumentBean
import com.base.pdfoneread.databinding.FragmentPermissionBinding
import com.base.pdfoneread.ui.document.getDocumentType
import com.base.pdfoneread.ui.document.getTypeByMimeType
import com.base.pdfoneread.ui.pdf.PdfActivity
import com.base.pdfoneread.utils.LogEx
import com.base.pdfoneread.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfoneread.utils.PermissionUtils.requestStoragePermission
import com.base.pdfoneread.utils.SafUtils.jumpOpenDocumentThenPersistable
import com.base.pdfoneread.utils.ToastUtils.toast
import com.base.pdfoneread.utils.UriUtils.getMimeTypeBySafUri
class PermissionFragment : Fragment() {
private val TAG = "PermissionFragment"
private lateinit var binding: FragmentPermissionBinding
override fun onCreate(savedInstanceState: Bundle?) {
......@@ -33,15 +40,31 @@ class PermissionFragment : Fragment() {
binding.tvSet.setOnClickListener {
val activity = requireActivity() as MainActivity?
activity ?: return@setOnClickListener
requireContext().requestStoragePermission(activity.launcher) {}
requireContext().requestStoragePermission(activity.launcher) {
activity.changeHomeUI()
}
}
binding.tvFileGo.setOnClickListener {
val activity = requireActivity() as MainActivity?
activity ?: return@setOnClickListener
requireContext().jumpOpenDocumentThenPersistable(activity.launcher) { uri ->
requireContext().toast("uri=$uri")
LogEx.logDebug(TAG, "uri=$uri")
activity.changeHomeUI()
uri?.let {
val mimeType = getMimeTypeBySafUri(requireContext(), it)
val documentBean = DocumentBean(uri = it, type = getTypeByMimeType(mimeType)).apply {
state = requireContext().checkPdfEncryption(uri = it.toString())
}
LogEx.logDebug(TAG, "documentBean state=${documentBean.state} mimeType=$mimeType")
PdfActivity.jumpPdfActivity(activity, documentBean)
}
}
}
binding.flClose.setOnClickListener {
val activity = requireActivity() as MainActivity?
activity?.changeHomeUI()
}
}
companion object {
......
package com.base.pdfoneread.ui.main
import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.base.pdfoneread.R
import com.base.pdfoneread.bean.DocumentBean
import com.base.pdfoneread.databinding.FragmentSettingBinding
import com.base.pdfoneread.ui.document.getTypeByMimeType
import com.base.pdfoneread.ui.pdf.PdfActivity
import com.base.pdfoneread.utils.LogEx
import com.base.pdfoneread.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfoneread.utils.SafUtils.jumpOpenDocumentThenPersistable
import com.base.pdfoneread.utils.UriUtils.getMimeTypeBySafUri
class SettingFragment : Fragment() {
private val TAG = "SettingFragment"
private lateinit var binding: FragmentSettingBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
......@@ -17,9 +27,33 @@ class SettingFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_setting, container, false)
): View {
binding = FragmentSettingBinding.inflate(layoutInflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val activity = requireActivity() as MainActivity?
activity ?: return
binding.llFileManager.setOnClickListener {
requireContext().jumpOpenDocumentThenPersistable(activity.launcher) { uri: Uri? ->
LogEx.logDebug(TAG, "uri=$uri")
activity.changeHomeUI()
uri?.let {
val mimeType = getMimeTypeBySafUri(requireContext(), it)
val documentBean = DocumentBean(uri = it, type = getTypeByMimeType(mimeType)).apply {
state = requireContext().checkPdfEncryption(uri = it.toString())
}
LogEx.logDebug(TAG, "documentBean state=${documentBean.state} mimeType=$mimeType")
PdfActivity.jumpPdfActivity(activity, documentBean)
}
}
}
}
companion object {
......
......@@ -46,7 +46,6 @@ import com.base.pdfoneread.utils.LogEx
import com.base.pdfoneread.utils.SpStringUtils
import com.base.pdfoneread.utils.SpStringUtils.LAST_VIEW_KEY
import com.base.pdfoneread.utils.ToastUtils.toast
import com.google.android.material.internal.ViewUtils.hideKeyboard
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
......@@ -640,7 +639,7 @@ class PdfActivity : BaseActivity<ActivityPdfBinding>() {
if (item.state == 0) {
activity.startActivity(Intent(activity, PdfActivity::class.java).apply {
putExtra("path", item.path)
putExtra("uri", item.uri)
putExtra("uri", item.uri.toString())
})
}
if (item.state == 1) {
......
......@@ -108,6 +108,9 @@ class MyStartActivity : BaseActivity<ActivityMyStartBinding>() {
})
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
}
private var jump: AtomicBoolean = AtomicBoolean(false)
fun jumpNext() {
......@@ -121,7 +124,7 @@ class MyStartActivity : BaseActivity<ActivityMyStartBinding>() {
} else {
startActivity(Intent(this, MainActivity::class.java))
}
finish()
}, 100)
}
......
package com.base.pdfoneread.utils
import android.content.Intent
import android.net.Uri
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultCaller
......@@ -46,18 +47,17 @@ class ActivityLauncher(activityResultCaller: ActivityResultCaller) {
//region saf
// private var safResultCallback: ActivityResultCallback<Uri?>? = null
// private val safLauncher =
// activityResultCaller.registerForActivityResult(
// ActivityResultContracts.OpenDocument(),
// ) { uri ->
// safResultCallback?.onActivityResult(uri)
// }
//
// fun launch(array: Array<String>, safResultCallback: ActivityResultCallback<Uri?>?) {
// this.safResultCallback = safResultCallback
// safLauncher.launch(array)
// }
private var safResultCallback: ActivityResultCallback<Uri?>? = null
private val safLauncher = activityResultCaller.registerForActivityResult(
ActivityResultContracts.OpenDocument(),
) { uri ->
safResultCallback?.onActivityResult(uri)
}
fun launchSaf(array: Array<String>, safResultCallback: ActivityResultCallback<Uri?>?) {
this.safResultCallback = safResultCallback
safLauncher.launch(array)
}
//end region
......
package com.base.pdfoneread.utils
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.DocumentsContract
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_DOC
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_DOCX
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_PDF
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_PPT
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_PPTX
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_XLS
import com.base.pdfoneread.bean.ConstObject.MIME_TYPE_XLSX
object SafUtils {
......@@ -20,18 +24,19 @@ object SafUtils {
launcher: ActivityLauncher,
callBack: (uri: Uri?) -> Unit
) {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
val downloadsUri = Uri.parse("content://com.android.providers.downloads.documents/tree/downloads")
// 可以设置一个初始URI,当文件选择器加载时会显示这个URI指向的文件夹
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, downloadsUri)
}
launcher.launch(intent) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val treeUri = result.data?.data
treeUri?.let { persistableUri(it) }
callBack.invoke(treeUri)
}
val uris = arrayOf(
MIME_TYPE_PDF, // PDF
MIME_TYPE_DOC,
MIME_TYPE_DOCX,
MIME_TYPE_XLS,
MIME_TYPE_XLSX,
MIME_TYPE_PPT,
MIME_TYPE_PPTX,
)
launcher.launchSaf(uris) { uri ->
uri?.let { persistableUri(it) }
callBack.invoke(uri)
}
}
......
......@@ -26,4 +26,12 @@ object UriUtils {
}
}
}
/**
* 根据saf返回的uri获取MimeType
*/
fun getMimeTypeBySafUri(context: Context, uri: Uri): String {
val mimeType = context.contentResolver.getType(uri) ?: "unKnow"
return mimeType
}
}
\ No newline at end of file
......@@ -8,6 +8,7 @@
tools:context=".ui.main.SettingFragment">
<LinearLayout
android:id="@+id/ll_file_manager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
......
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