添加喜欢列表

This commit is contained in:
ocean 2025-09-24 15:18:35 +08:00
parent 298585b602
commit e8594793cd
5 changed files with 111 additions and 21 deletions

View File

@ -2,6 +2,7 @@ package com.all.pdfreader.pro.app.ui.dialog
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -13,7 +14,9 @@ import com.all.pdfreader.pro.app.model.PrintResult
import com.all.pdfreader.pro.app.model.RenameType
import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity
import com.all.pdfreader.pro.app.ui.act.SplitPdfActivity
import com.all.pdfreader.pro.app.ui.fragment.FavoriteFrag
import com.all.pdfreader.pro.app.ui.fragment.HomeFrag
import com.all.pdfreader.pro.app.ui.fragment.RecentlyFrag
import com.all.pdfreader.pro.app.util.AppUtils.dpToPx
import com.all.pdfreader.pro.app.util.AppUtils.printPdfFile
import com.all.pdfreader.pro.app.util.AppUtils.setClickWithAnimation
@ -73,12 +76,16 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment()
}
private fun initUi() {
if (tag == HomeFrag().tag) {
binding.removeRecentBtn.visibility = View.GONE
} else {
if (pdfDocument.lastOpenedTime > 0) {
when (tag) {
HomeFrag.FRAG_TAG -> {
binding.removeRecentBtn.visibility = View.GONE
}
RecentlyFrag.FRAG_TAG -> {
binding.removeRecentBtn.visibility = View.VISIBLE
} else {
}
FavoriteFrag.FRAG_TAG -> {
binding.removeRecentBtn.visibility = View.GONE
}
}
@ -108,8 +115,7 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment()
}
binding.renameFileBtn.setOnClickListener {
RenameDialogFragment(RenameType.FILE).show(
parentFragmentManager,
"ListMoreDialogFragment"
parentFragmentManager, "ListMoreDialogFragment"
)
dismiss()
}
@ -135,9 +141,7 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment()
when (result) {
PrintResult.DeviceNotSupported -> {
Toast.makeText(
context,
R.string.device_does_not_support_printing,
Toast.LENGTH_LONG
context, R.string.device_does_not_support_printing, Toast.LENGTH_LONG
).show()
}
@ -153,9 +157,7 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment()
PrintResult.PasswordRequired -> {
Toast.makeText(
context,
R.string.pdf_cant_print_password_protected,
Toast.LENGTH_LONG
context, R.string.pdf_cant_print_password_protected, Toast.LENGTH_LONG
).show()
}

View File

@ -5,10 +5,26 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import com.all.pdfreader.pro.app.databinding.FragmentFavoriteBinding
import com.all.pdfreader.pro.app.room.repository.PdfRepository
import com.all.pdfreader.pro.app.ui.act.PdfViewActivity
import com.all.pdfreader.pro.app.ui.adapter.PdfAdapter
import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment
import kotlinx.coroutines.launch
class FavoriteFrag : BaseFrag() {
override val TAG: String = "FavoriteFrag"
companion object {
const val FRAG_TAG = "FavoriteFrag"
}
class FavoriteFrag : Fragment() {
private lateinit var binding: FragmentFavoriteBinding
private lateinit var adapter: PdfAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
@ -20,9 +36,41 @@ class FavoriteFrag : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initView()
observeDocuments()
}
private fun initView() {
adapter = PdfAdapter(pdfList = mutableListOf(), onItemClick = { pdf ->
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent)
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
})
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
binding.recyclerView.adapter = adapter
// 下拉刷新示例
binding.swipeRefreshLayout.setOnRefreshListener {
observeDocuments {
binding.swipeRefreshLayout.isRefreshing = false
}
}
}
private fun observeDocuments(onComplete: () -> Unit = {}) {
lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
PdfRepository.getInstance().getFavoriteDocuments().collect { list ->
if (list.isNotEmpty()) {
adapter.updateData(list)
onComplete()
binding.noFilesLayout.visibility = View.GONE
} else {
binding.noFilesLayout.visibility = View.VISIBLE
}
}
}
}
}
}

View File

@ -21,6 +21,11 @@ import kotlinx.coroutines.launch
class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
override val TAG: String = "HomeFrag"
companion object {
const val FRAG_TAG = "HomeFrag"
}
private lateinit var binding: FragmentHomeBinding
private lateinit var adapter: PdfAdapter
override fun onCreateView(
@ -41,7 +46,7 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent)
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, TAG)
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
})
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())

View File

@ -17,6 +17,11 @@ import kotlinx.coroutines.launch
class RecentlyFrag : BaseFrag() {
override val TAG: String = "RecentlyFrag"
companion object {
const val FRAG_TAG = "RecentlyFrag"
}
private lateinit var binding: FragmentRecentlyBinding
private lateinit var adapter: PdfAdapter
@ -38,7 +43,7 @@ class RecentlyFrag : BaseFrag() {
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent)
}, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, TAG)
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
})
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
@ -63,7 +68,6 @@ class RecentlyFrag : BaseFrag() {
} else {
binding.noFilesLayout.visibility = View.VISIBLE
}
logDebug("更新adapter数据")
}
}
}

View File

@ -10,9 +10,40 @@
android:layout_width="match_parent"
android:layout_height="0dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/favorite"/>
<LinearLayout
android:id="@+id/noFilesLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/img_no_files_yet" />
<TextView
style="@style/TextViewFont_PopMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_files_yet"
android:textColor="#B6BFCC"
android:textSize="20sp" />
</LinearLayout>
<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/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="40dp" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>