Commit b32d8bd5 authored by wanglei's avatar wanglei

...处理

parent a4c385ca
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
}
android {
......
......@@ -8,7 +8,7 @@ data class DocumentBean(
var type: String = "",
var isBookmarked: Boolean = false,
) {
var uiType: Int = 0//0首页模式 1合并选择模式 2拆分模式 3解锁加锁模式 4搜索模式
var uiType: Int = 0//0浏览模式 1合并选择模式 2拆分模式 3解锁加锁模式 4搜索模式
var isSelect: Boolean = false
var state: Int = -1//0正常状态 1 锁定
var password: String = ""
......
package com.base.pdfoneread.ui.document
import android.annotation.SuppressLint
import android.graphics.Color
import android.view.View
import androidx.activity.addCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.base.pdfoneread.R
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_ALL
......@@ -15,6 +20,7 @@ import com.base.pdfoneread.utils.BarUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class DocumentActivity : BaseActivity<ActivityDocumentBinding>() {
var type: String = ""
......@@ -23,6 +29,7 @@ class DocumentActivity : BaseActivity<ActivityDocumentBinding>() {
ActivityDocumentBinding.inflate(layoutInflater)
}
private var adapter: DocumentAdapter? = null
private lateinit var viewModel: DocumentViewModel
override fun initView() {
......@@ -30,7 +37,28 @@ class DocumentActivity : BaseActivity<ActivityDocumentBinding>() {
BarUtils.setStatusBarColor(this, Color.WHITE)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
viewModel = ViewModelProvider(this)[DocumentViewModel::class.java]
viewModel.handleActivityGmsScanResult = { imageUri, pdfUri ->
}
type = intent.extras?.getString("type") ?: ""
changeTittle()
initAdapter()
}
@SuppressLint("SetTextI18n")
private fun initAdapter() {
adapter = DocumentAdapter(this)
adapter?.selectAction = { size ->
binding.tvTittle.text = "$size Selected"
binding.ivAllSelector.isSelected = size == adapter?.items?.size
}
binding.rv.adapter = adapter
}
private fun changeTittle() {
when (type) {
TYPE_ALL -> {
binding.tvTittle.text = getString(R.string.all_files)
......@@ -52,41 +80,104 @@ class DocumentActivity : BaseActivity<ActivityDocumentBinding>() {
binding.tvTittle.text = getString(R.string.ppt_files)
}
}
adapter = DocumentAdapter(this)
binding.rv.adapter = adapter
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
if (binding.flSelector.isVisible) {
changeSelectUI(false)
} else {
finishToMain()
}
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.ivScan.setOnClickListener {
viewModel.starGmsScan(this)
}
binding.flSelect.setOnClickListener {
changeSelectUI(true)
}
binding.flSelector.setOnClickListener {
binding.ivAllSelector.isSelected = !binding.ivAllSelector.isSelected
changeRvItemSelect(binding.ivAllSelector.isSelected)
}
binding.llDelete.setOnClickListener {
}
binding.llShare.setOnClickListener {
}
binding.flPaixu.setOnClickListener {
}
binding.flSearch.setOnClickListener {
}
binding.swipeRefreshLayout.setOnRefreshListener {
initData()
}
initPreData()
}
@SuppressLint("NotifyDataSetChanged")
private fun changeSelectUI(isSelect: Boolean) {
if (isSelect) {
binding.llTool.visibility = View.GONE
binding.ivScan.visibility = View.GONE
binding.flSelector.visibility = View.VISIBLE
binding.cardTool.visibility = View.VISIBLE
binding.tvTittle.text = getString(R.string._0_selected)
adapter?.items?.forEach { it.uiType = 1 }
} else {
binding.llTool.visibility = View.VISIBLE
binding.ivScan.visibility = View.VISIBLE
binding.flSelector.visibility = View.GONE
binding.cardTool.visibility = View.GONE
changeTittle()
adapter?.items?.forEach { it.uiType = 0 }
}
adapter?.notifyDataSetChanged()
}
@SuppressLint("NotifyDataSetChanged")
fun changeRvItemSelect(isSelect: Boolean) {
adapter?.items?.forEach { it.isSelect = isSelect }
adapter?.notifyDataSetChanged()
}
private fun initPreData() {
when (type) {
TYPE_ALL -> {
adapter?.submitList(getGlobalAllList())
}
val list = when (type) {
TYPE_PDF -> {
adapter?.submitList(GlobalPdfList)
GlobalPdfList
}
TYPE_WORD -> {
adapter?.submitList(GlobalWordList)
GlobalWordList
}
TYPE_EXCEL -> {
adapter?.submitList(GlobalExcelList)
GlobalExcelList
}
TYPE_PPT -> {
adapter?.submitList(GlobalPptList)
GlobalPptList
}
else -> getGlobalAllList()
}
if (list.isEmpty()) {
binding.swipeRefreshLayout.isRefreshing = true
initData()
} else {
binding.llEmpty.visibility = View.GONE
adapter?.submitList(list)
}
initData()
}
......@@ -102,10 +193,13 @@ class DocumentActivity : BaseActivity<ActivityDocumentBinding>() {
}
launch(Dispatchers.Main) {
if (list.isEmpty()) {
binding.llEmpty.visibility = View.VISIBLE
adapter?.submitList(listOf())
} else {
binding.llEmpty.visibility = View.GONE
adapter?.submitList(list)
}
binding.swipeRefreshLayout.isRefreshing = false
}
}
......
......@@ -30,7 +30,8 @@ class DocumentAdapter(
inner class DocumentViewHolder(view: View) : ViewHolder(view)
var moreAction: ((item: DocumentBean) -> Unit)? = null
var itemClickAction: ((item: DocumentBean) -> Unit)? = null
var itemClick: ((item: DocumentBean) -> Unit)? = null
var selectAction: ((size: Int) -> Unit)? = null
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: DocumentViewHolder, position: Int, item: DocumentBean?) {
......@@ -47,7 +48,7 @@ class DocumentAdapter(
if (item.state == 0) {
binding.ivIcon.setImageResource(R.mipmap.rv_pdf)
} else {
// binding.ivIcon.setImageResource(R.mipmap.rv_pdf_lock)
binding.ivIcon.setImageResource(R.mipmap.pdf_s)
}
}
......@@ -66,17 +67,78 @@ class DocumentAdapter(
val file = File(item.path)
binding.tvName.text = file.name
binding.tvInfo.text = file.lastModified().toFormatTime5() + " " + file.length().toFormatSize()
//DocumentPdfAdapter
when (item.uiType) {
0 -> {
binding.flSelect.visibility = View.GONE
binding.flBookmark.visibility = View.VISIBLE
binding.flMore.visibility = View.VISIBLE
if (item.isBookmarked) {
binding.ivBookmark.setImageResource(R.mipmap.r_star_s)
} else {
binding.ivBookmark.setImageResource(R.mipmap.star)
}
binding.flBookmark.setOnClickListener {
item.isBookmarked = !item.isBookmarked
saveBookmarkChange(item.isBookmarked, item.path)
notifyItemChanged(position, "aaaa")
}
binding.flMore.setOnClickListener {
moreAction?.invoke(item)
}
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
}
1 -> {
binding.flSelect.visibility = View.VISIBLE
binding.flBookmark.visibility = View.GONE
binding.flMore.visibility = View.GONE
binding.ivSelector.isSelected = item.isSelect
binding.flSelect.setOnClickListener {
item.isSelect = !item.isSelect
notifyItemChanged(position, "aaa")
selectAction?.invoke(items.filter { it.isSelect }.size)
}
}
2 -> {//拆分选择
binding.flBookmark.visibility = View.GONE
binding.flMore.visibility = View.INVISIBLE
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
}
3 -> {//解锁模式选择
binding.flBookmark.visibility = View.GONE
binding.flMore.visibility = View.INVISIBLE
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
}
4 -> {//搜索选择
binding.flBookmark.visibility = View.GONE
binding.flMore.setOnClickListener {
moreAction?.invoke(item)
}
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
}
binding.flMore.setOnClickListener {
moreAction?.invoke(item)
}
binding.root.setOnClickListener {
itemClickAction?.invoke(item)
}
}
}
override fun getItemViewType(position: Int, list: List<DocumentBean>): Int {
val item = list[position]
return if (item.isAd) 1 else 0
......
......@@ -28,6 +28,7 @@ import java.io.File
import java.io.FileOutputStream
import java.io.IOException
/**
* 全局数据数据
*/
......@@ -310,7 +311,6 @@ fun getPptDocument(context: Context): MutableList<DocumentBean> {
return new
}
fun recentFilter(recentList: List<String>, documentBean: DocumentBean) {
val findLastTime = recentList.filter { it.contains(documentBean.path) }.map {
it.split("_/_")[1].toLong()
......
package com.base.pdfoneread.ui.document
import android.app.Activity
import android.content.IntentSender
import android.net.Uri
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import com.google.mlkit.vision.documentscanner.GmsDocumentScannerOptions
import com.google.mlkit.vision.documentscanner.GmsDocumentScanning
import com.google.mlkit.vision.documentscanner.GmsDocumentScanningResult
class DocumentViewModel : ViewModel() {
private var scannerLauncher: ActivityResultLauncher<IntentSenderRequest>? = null
var handleActivityGmsScanResult: ((imageUri: Uri?, pdfUri: Uri?) -> Unit)? = null
private var scannerLauncherRegister: Boolean = false
fun initScannerLauncher(appCompatActivity: AppCompatActivity) {
scannerLauncher =
appCompatActivity.registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { activityResult ->
val resultCode = activityResult.resultCode
val result = GmsDocumentScanningResult.fromActivityResultIntent(activityResult.data)
// appCompatActivity.toast("回调1")
if (resultCode == Activity.RESULT_OK && result != null) {
val pages = result.pages
// appCompatActivity.toast("回调2 ${pages?.size}")
var imageUri = Uri.EMPTY
if (!pages.isNullOrEmpty()) {
// appCompatActivity.toast("回调3")
imageUri = pages[0].imageUri
}
val pdfUri = result.pdf?.uri ?: Uri.EMPTY
handleActivityGmsScanResult?.invoke(imageUri, pdfUri)
} else {
handleActivityGmsScanResult?.invoke(null, null)
}
}
scannerLauncherRegister = true
}
fun starGmsScan(activity: Activity) {
runCatching {
if (scannerLauncher == null && !scannerLauncherRegister) return
val options =
GmsDocumentScannerOptions.Builder()
.setScannerMode(GmsDocumentScannerOptions.SCANNER_MODE_BASE)
.setResultFormats(GmsDocumentScannerOptions.RESULT_FORMAT_PDF)
.setGalleryImportAllowed(true)
options.setScannerMode(GmsDocumentScannerOptions.SCANNER_MODE_FULL)
val pageLimit = 1
options.setPageLimit(pageLimit)
GmsDocumentScanning.getClient(options.build())
.getStartScanIntent(activity)
.addOnSuccessListener { intentSender: IntentSender ->
scannerLauncher?.launch(IntentSenderRequest.Builder(intentSender).build())
}
.addOnFailureListener { e: Exception ->
}
}
}
}
\ No newline at end of file
......@@ -32,6 +32,8 @@ class HomeAdapter() : BaseQuickAdapter<HomeUIBean, HomeAdapter.HomeUIBeanViewHol
if (item.fileNumber != -1) {
binding.tvFileNumber.visibility = View.VISIBLE
binding.tvFileNumber.text = "${item.fileNumber} files"
} else {
binding.tvFileNumber.text = ""
}
binding.root.setOnClickListener {
itemClick?.invoke(item)
......@@ -45,6 +47,8 @@ class HomeAdapter() : BaseQuickAdapter<HomeUIBean, HomeAdapter.HomeUIBeanViewHol
if (item.fileNumber != -1) {
binding.tvFileNumber.visibility = View.VISIBLE
binding.tvFileNumber.text = "${item.fileNumber} files"
}else{
binding.tvFileNumber.text = ""
}
binding.root.setOnClickListener {
itemClick?.invoke(item)
......
......@@ -10,7 +10,10 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import com.base.pdfoneread.R
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_ALL
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_EXCEL
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfoneread.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfoneread.databinding.FragmentHomeBinding
import com.base.pdfoneread.bean.HomeUIBean
import com.base.pdfoneread.bean.HomeUIBean.Companion.KEY_ALL
......@@ -88,15 +91,36 @@ class HomeFragment() : Fragment() {
putExtra("type", TYPE_PDF)
})
}
KEY_WORD -> {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("type", TYPE_WORD)
})
}
KEY_EXCEL -> {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("type", TYPE_EXCEL)
})
}
KEY_PPT -> {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("type", TYPE_PPT)
})
}
}
}
binding.swipeRefreshLayout.setOnRefreshListener {
refreshData()
}
refreshData()
}
fun refreshData() {
kotlin.runCatching {
......
......@@ -5,7 +5,12 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.base.pdfoneread.R
import androidx.lifecycle.lifecycleScope
import com.base.pdfoneread.databinding.FragmentRecentBinding
import com.base.pdfoneread.ui.document.DocumentAdapter
import com.base.pdfoneread.ui.document.getGlobalAllList
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class RecentFragment() : Fragment() {
......@@ -14,15 +19,30 @@ class RecentFragment() : Fragment() {
super.onCreate(savedInstanceState)
}
private lateinit var binding: FragmentRecentBinding
private var adapter: DocumentAdapter? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_recent, container, false)
): View {
binding = FragmentRecentBinding.inflate(inflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
adapter = DocumentAdapter(requireActivity())
initPreData()
}
private fun initPreData() = lifecycleScope.launch(Dispatchers.Main) {
adapter?.submitList(getGlobalAllList())
}
companion object {
}
}
\ No newline at end of file
......@@ -52,6 +52,7 @@
tools:text="All files" />
<LinearLayout
android:id="@+id/ll_tool"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
......@@ -101,6 +102,25 @@
</LinearLayout>
<FrameLayout
android:id="@+id/fl_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:padding="15dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/fl_fanhui"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/fl_fanhui">
<ImageView
android:id="@+id/iv_all_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selector_document"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
......@@ -123,4 +143,116 @@
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/card"
app:layout_constraintVertical_bias="0.45"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/no_empty"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:text="@string/no_files_yet"
android:textColor="#010101"
android:textSize="20sp" />
</LinearLayout>
<ImageView
android:id="@+id/iv_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:layout_marginBottom="120dp"
android:src="@mipmap/pdf_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
tools:ignore="ContentDescription" />
<androidx.cardview.widget.CardView
android:id="@+id/card_tool"
android:layout_width="0dp"
android:layout_height="80dp"
android:layout_marginHorizontal="30dp"
android:layout_marginBottom="50dp"
app:cardCornerRadius="25dp"
app:cardElevation="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<LinearLayout
android:id="@+id/ll_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:layout_marginStart="50dp"
android:layout_marginTop="5dp"
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/pdf_delete"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:text="@string/delete"
android:textColor="@color/black"
android:textSize="15sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginTop="5dp"
android:layout_marginEnd="50dp"
android:orientation="vertical"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/pdf_share"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:text="@string/share"
android:textColor="@color/black"
android:textSize="15sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -5,4 +5,44 @@
android:layout_height="match_parent"
tools:context=".ui.main.RecentFragment">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/item_document" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/no_empty"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:text="@string/no_files_yet"
android:textColor="#010101"
android:textSize="20sp" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
......@@ -56,6 +56,7 @@
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_bookmark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/r_star_s"
......@@ -76,6 +77,7 @@
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/icon_more"
......@@ -94,6 +96,7 @@
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selector_document"
......
......@@ -20,5 +20,9 @@
<string name="permission_required">Permission Required</string>
<string name="allow">Allow</string>
<string name="allow_access_to_manage_all_files">Allow access to manage all files</string>
<string name="no_files_yet">No files yet</string>
<string name="_0_selected">0 Selected</string>
<string name="share">Share</string>
<string name="delete">Delete</string>
</resources>
\ No newline at end of file
......@@ -2,4 +2,7 @@
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
id("com.google.gms.google-services") version "4.4.1" apply false
id("com.google.firebase.crashlytics") version "3.0.2" apply false
}
\ 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