Commit 3b181bc5 authored by wanglei's avatar wanglei

...启动页

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