添加多选模式界面。

This commit is contained in:
ocean 2025-09-28 14:39:48 +08:00
parent 2c495a2d50
commit c7af68a8ee
31 changed files with 711 additions and 112 deletions

View File

@ -0,0 +1,5 @@
package com.all.pdfreader.pro.app.model
enum class FragmentType {
HOME, RECENTLY, FAVORITE
}

View File

@ -33,5 +33,6 @@ data class PdfDocumentEntity(
val metadataModificationDate: Long? = null, // PDF修改时间 val metadataModificationDate: Long? = null, // PDF修改时间
val password: String? = null,// PDF密码加密存储 val password: String? = null,// PDF密码加密存储
val isPassword: Boolean = false//是否存在密码 val isPassword: Boolean = false,//是否存在密码
var isSelected: Boolean = false
) : Parcelable ) : Parcelable

View File

@ -11,6 +11,8 @@ import com.all.pdfreader.pro.app.PRApp
import com.all.pdfreader.pro.app.R import com.all.pdfreader.pro.app.R
import com.all.pdfreader.pro.app.databinding.ActivityMainBinding import com.all.pdfreader.pro.app.databinding.ActivityMainBinding
import com.all.pdfreader.pro.app.model.FileActionEvent import com.all.pdfreader.pro.app.model.FileActionEvent
import com.all.pdfreader.pro.app.model.FragmentType
import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity
import com.all.pdfreader.pro.app.ui.dialog.PermissionDialogFragment import com.all.pdfreader.pro.app.ui.dialog.PermissionDialogFragment
import com.all.pdfreader.pro.app.ui.dialog.ProgressDialogFragment import com.all.pdfreader.pro.app.ui.dialog.ProgressDialogFragment
import com.all.pdfreader.pro.app.ui.dialog.SortDialogFragment import com.all.pdfreader.pro.app.ui.dialog.SortDialogFragment
@ -27,25 +29,23 @@ import com.gyf.immersionbar.ImmersionBar
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback, class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback,
PermissionDialogFragment.CloseCallback { PermissionDialogFragment.CloseCallback, HomeFrag.OnItemLongClickListener,
RecentlyFrag.OnItemLongClickListener, FavoriteFrag.OnItemLongClickListener {
override val TAG: String = "MainActivity" override val TAG: String = "MainActivity"
private lateinit var binding: ActivityMainBinding private lateinit var binding: ActivityMainBinding
private val pdfRepository = getRepository() private val pdfRepository = getRepository()
private lateinit var pdfScanner: PdfScanner private lateinit var pdfScanner: PdfScanner
private val homeFragment = HomeFrag() private val homeFragment = HomeFrag()
private val recentlyFragment = RecentlyFrag() private val recentlyFragment = RecentlyFrag()
private val favoriteFragment = FavoriteFrag() private val favoriteFragment = FavoriteFrag()
private val toolsFragment = ToolsFrag() private val toolsFragment = ToolsFrag()
private var activeFragment: Fragment = homeFragment private var activeFragment: Fragment = homeFragment
private val fragmentTag = "ACTIVE_FRAGMENT" private val fragmentTag = "ACTIVE_FRAGMENT"
private val viewModel by lazy { ViewModelProvider(this)[PdfViewModel::class.java] } private val viewModel by lazy { ViewModelProvider(this)[PdfViewModel::class.java] }
private var progressDialog: ProgressDialogFragment? = null private var progressDialog: ProgressDialogFragment? = null
private var fragmentType = FragmentType.HOME
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -67,6 +67,7 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
supportFragmentManager.beginTransaction().hide(homeFragment).hide(recentlyFragment) supportFragmentManager.beginTransaction().hide(homeFragment).hide(recentlyFragment)
.hide(favoriteFragment).hide(toolsFragment).show(activeFragment).commit() .hide(favoriteFragment).hide(toolsFragment).show(activeFragment).commit()
} }
updateMultiSelectUi(false, fragmentType)
} }
private fun initObserve() { private fun initObserve() {
@ -170,6 +171,35 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
(activeFragment as? SortableFragment)?.onSortTypeChanged(it) (activeFragment as? SortableFragment)?.onSortTypeChanged(it)
}).show(supportFragmentManager, TAG) }).show(supportFragmentManager, TAG)
} }
binding.multiSelectBackBtn.setOnClickListener {
homeFragment.exitMultiSelectMode()
favoriteFragment.exitMultiSelectMode()
recentlyFragment.exitMultiSelectMode()
updateMultiSelectUi(false, fragmentType)
}
binding.multiSelectAllBtn.setOnClickListener {
homeFragment.adapter.toggleSelectAll()
val isAllSelected = homeFragment.adapter.isAllSelected()
if (isAllSelected) {
binding.multiSelectAllIv.setBackgroundResource(R.drawable.dr_circular_sel_on_bg) // 已全选图标
} else {
binding.multiSelectAllIv.setBackgroundResource(R.drawable.dr_circular_sel_off_bg) // 未全选图标
}
updateSelectNumber(homeFragment.adapter.getSelectedItems().size)
}
binding.multiSelectDeleteBtn.setOnClickListener {
val selectedItems = homeFragment.adapter.getSelectedItems()
logDebug("selectedItems->${selectedItems.size}")
}
binding.multiSelectMergeBtn.setOnClickListener {
logDebug("合并")
}
binding.multiSelectRemoveBtn.setOnClickListener {
logDebug("移除最新阅读")
}
binding.multiSelectUnFavoriteBtn.setOnClickListener {
logDebug("移除收藏")
}
} }
private fun switchFragment(target: Fragment) { private fun switchFragment(target: Fragment) {
@ -229,25 +259,6 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
binding.toolsIv.setImageResource(R.drawable.icon_tools_sel_on) binding.toolsIv.setImageResource(R.drawable.icon_tools_sel_on)
} }
} }
// binding.homeIv.alpha = 0.5f
// binding.recentlyIv.alpha = 0.5f
// binding.favoriteIv.alpha = 0.5f
// binding.toolsIv.alpha = 0.5f
// val targetIcon = when (fragment) {
// is HomeFrag -> binding.homeIv
// is RecentlyFrag -> binding.recentlyIv
// is FavoriteFrag -> binding.favoriteIv
// is ToolsFrag -> binding.toolsIv
// else -> null
// }
// targetIcon?.apply {
// alpha = 1f
// animate().scaleX(1.2f).scaleY(1.2f).setDuration(150).withEndAction {
// animate().scaleX(1f).scaleY(1f).setDuration(150).start()
// }.start()
// }
} }
@ -283,21 +294,6 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
} else { } else {
logDebug("❌ 权限不足,跳过扫描") logDebug("❌ 权限不足,跳过扫描")
} }
// // 智能扫描策略
// if (pdfScanner.shouldScan()) {
// logDebug("🔄 需要扫描PDF文件 (首次启动或超过24小时)")
// if (StoragePermissionHelper.hasBasicStoragePermission(this)) {
// lifecycleScope.launch {
// pdfScanner.scanAndLoadPdfFiles()
// }
// } else {
// logDebug("❌ 权限不足,跳过扫描")
// }
// } else {
// val hoursAgo = pdfScanner.getHoursSinceLastScan()
// logDebug("⏭️ 跳过扫描,上次扫描在${hoursAgo}小时前")
// }
} }
// 授权后续操作 // 授权后续操作
@ -337,4 +333,79 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
onClose() onClose()
} }
} }
override fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType) {
fragmentType = type
updateMultiSelectUi(true, fragmentType)
updateSelectNumber(homeFragment.adapter.getSelectedItems().size)
}
private fun updateMultiSelectUi(b: Boolean, type: FragmentType) {
if (b) {
binding.apply {
multiSelectTopLayout.visibility = View.VISIBLE
multiSelectBottomLayout.visibility = View.VISIBLE
navigationLayout.visibility = View.GONE
topLayout.visibility = View.GONE
}
when (type) {
FragmentType.HOME -> {
binding.multiSelectRemoveBtn.visibility = View.GONE
binding.multiSelectUnFavoriteBtn.visibility = View.GONE
}
FragmentType.RECENTLY -> {
binding.multiSelectRemoveBtn.visibility = View.VISIBLE
binding.multiSelectUnFavoriteBtn.visibility = View.GONE
}
FragmentType.FAVORITE -> {
binding.multiSelectRemoveBtn.visibility = View.GONE
binding.multiSelectUnFavoriteBtn.visibility = View.VISIBLE
}
}
} else {
binding.apply {
multiSelectTopLayout.visibility = View.GONE
multiSelectBottomLayout.visibility = View.GONE
navigationLayout.visibility = View.VISIBLE
topLayout.visibility = View.VISIBLE
}
}
}
fun updateSelectNumber(number: Int) {
binding.multiSelectNumberTv.text = getString(R.string.selected_page, number)
if (number >= 1) {
binding.multiSelectDeleteIv.setImageResource(R.drawable.icon_delete_sel_on)
binding.multiSelectDeleteTv.setTextColor(getColor(R.color.black))
binding.multiSelectDeleteBtn.isClickable = true
binding.multiSelectRemoveIv.setImageResource(R.drawable.icon_remove_sel_on)
binding.multiSelectRemoveTv.setTextColor(getColor(R.color.black))
binding.multiSelectRemoveBtn.isClickable = true
binding.multiSelectUnFavoriteIv.setImageResource(R.drawable.icon_un_favorite_sel_on)
binding.multiSelectUnFavoriteTv.setTextColor(getColor(R.color.black))
binding.multiSelectUnFavoriteBtn.isClickable = true
} else {
binding.multiSelectDeleteIv.setImageResource(R.drawable.icon_delete_sel_off)
binding.multiSelectDeleteTv.setTextColor(getColor(R.color.icon_sel_off_color))
binding.multiSelectDeleteBtn.isClickable = false
binding.multiSelectRemoveIv.setImageResource(R.drawable.icon_remove_sel_off)
binding.multiSelectRemoveTv.setTextColor(getColor(R.color.icon_sel_off_color))
binding.multiSelectRemoveBtn.isClickable = false
binding.multiSelectUnFavoriteIv.setImageResource(R.drawable.icon_un_favorite_sel_off)
binding.multiSelectUnFavoriteTv.setTextColor(getColor(R.color.icon_sel_off_color))
binding.multiSelectUnFavoriteBtn.isClickable = false
}
if (number >= 2) {
binding.multiSelectMergeIv.setImageResource(R.drawable.icon_merge_sel_on)
binding.multiSelectMergeTv.setTextColor(getColor(R.color.black))
binding.multiSelectMergeBtn.isClickable = true
} else {
binding.multiSelectMergeIv.setImageResource(R.drawable.icon_merge_sel_off)
binding.multiSelectMergeTv.setTextColor(getColor(R.color.icon_sel_off_color))
binding.multiSelectMergeBtn.isClickable = false
}
}
} }

View File

@ -7,6 +7,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.all.pdfreader.pro.app.databinding.AdapterPdfItemBinding import com.all.pdfreader.pro.app.databinding.AdapterPdfItemBinding
import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity
import com.all.pdfreader.pro.app.ui.act.MainActivity
import com.all.pdfreader.pro.app.util.AppUtils.dpToPx import com.all.pdfreader.pro.app.util.AppUtils.dpToPx
import com.all.pdfreader.pro.app.util.FileUtils.toFormatFileSize import com.all.pdfreader.pro.app.util.FileUtils.toFormatFileSize
import com.all.pdfreader.pro.app.util.FileUtils.toSlashDate import com.all.pdfreader.pro.app.util.FileUtils.toSlashDate
@ -17,8 +18,11 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners
class PdfAdapter( class PdfAdapter(
private var pdfList: MutableList<PdfDocumentEntity>, private var pdfList: MutableList<PdfDocumentEntity>,
private val onItemClick: (PdfDocumentEntity) -> Unit, private val onItemClick: (PdfDocumentEntity) -> Unit,
private val onMoreClick: (PdfDocumentEntity) -> Unit private val onMoreClick: (PdfDocumentEntity) -> Unit,
private val onLongClick: (PdfDocumentEntity) -> Unit,
private val onSelectModelItemClick: (Int) -> Unit = {}
) : RecyclerView.Adapter<PdfAdapter.PdfViewHolder>() { ) : RecyclerView.Adapter<PdfAdapter.PdfViewHolder>() {
private var isMultiSelectMode = false
inner class PdfViewHolder(val binding: AdapterPdfItemBinding) : inner class PdfViewHolder(val binding: AdapterPdfItemBinding) :
RecyclerView.ViewHolder(binding.root) RecyclerView.ViewHolder(binding.root)
@ -29,7 +33,7 @@ class PdfAdapter(
return PdfViewHolder(binding) return PdfViewHolder(binding)
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
override fun onBindViewHolder(holder: PdfViewHolder, position: Int) { override fun onBindViewHolder(holder: PdfViewHolder, position: Int) {
val item = pdfList[position] val item = pdfList[position]
holder.binding.tvFileName.text = item.fileName holder.binding.tvFileName.text = item.fileName
@ -50,13 +54,40 @@ class PdfAdapter(
} else { } else {
holder.binding.collectState.visibility = View.GONE holder.binding.collectState.visibility = View.GONE
} }
if (isMultiSelectMode) {
holder.binding.checkBtn.visibility = View.VISIBLE
holder.binding.moreBtn.visibility = View.GONE
} else {
holder.binding.checkBtn.visibility = View.GONE
holder.binding.moreBtn.visibility = View.VISIBLE
}
holder.binding.checkbox.isChecked = item.isSelected
holder.binding.root.setOnClickListener { holder.binding.root.setOnClickListener {
onItemClick(item) if (isMultiSelectMode) {
item.isSelected = !item.isSelected
notifyItemChanged(position)
onSelectModelItemClick(getSelectedItems().size)
} else {
onItemClick(item)
}
} }
holder.binding.moreBtn.setOnClickListener { holder.binding.moreBtn.setOnClickListener {
onMoreClick(item) onMoreClick(item)
} }
holder.binding.root.setOnLongClickListener {
if (!isMultiSelectMode) {
isMultiSelectMode = true
item.isSelected = !item.isSelected
notifyDataSetChanged()
onLongClick(item)
}
true
}
holder.binding.checkBtn.setOnClickListener {
toggleSelection(item, holder.bindingAdapterPosition)
}
} }
override fun getItemCount(): Int = pdfList.size override fun getItemCount(): Int = pdfList.size
@ -67,4 +98,47 @@ class PdfAdapter(
pdfList.addAll(newList) pdfList.addAll(newList)
notifyDataSetChanged() notifyDataSetChanged()
} }
private fun toggleSelection(item: PdfDocumentEntity, position: Int) {
item.isSelected = !item.isSelected
notifyItemChanged(position)
}
// 退出多选模式
@SuppressLint("NotifyDataSetChanged")
fun exitMultiSelectMode() {
isMultiSelectMode = false
pdfList.forEach { it.isSelected = false }
notifyDataSetChanged()
}
@SuppressLint("NotifyDataSetChanged")
fun toggleSelectAll() {
val allSelected = pdfList.all { it.isSelected }
if (allSelected) deselectAll() else selectAll()
}
// 全选
fun selectAll() {
pdfList.forEach { it.isSelected = true }
notifyDataSetChanged()
}
// 取消全选
fun deselectAll() {
pdfList.forEach { it.isSelected = false }
notifyDataSetChanged()
}
// 判断是否全选
fun isAllSelected(): Boolean = pdfList.isNotEmpty() && pdfList.all { it.isSelected }
// 获取已选中的 item
fun getSelectedItems(): List<PdfDocumentEntity> {
return pdfList.filter { it.isSelected }
}
fun getIsMultiSelectMode(): Boolean{
return isMultiSelectMode
}
} }

View File

@ -1,16 +1,19 @@
package com.all.pdfreader.pro.app.ui.fragment package com.all.pdfreader.pro.app.ui.fragment
import android.content.Context
import android.os.Bundle import android.os.Bundle
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.fragment.app.Fragment
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.all.pdfreader.pro.app.databinding.FragmentFavoriteBinding import com.all.pdfreader.pro.app.databinding.FragmentFavoriteBinding
import com.all.pdfreader.pro.app.model.FragmentType
import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity
import com.all.pdfreader.pro.app.room.repository.PdfRepository import com.all.pdfreader.pro.app.room.repository.PdfRepository
import com.all.pdfreader.pro.app.ui.act.MainActivity
import com.all.pdfreader.pro.app.ui.act.PdfViewActivity 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.adapter.PdfAdapter
import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment
@ -24,7 +27,13 @@ class FavoriteFrag : BaseFrag() {
} }
private lateinit var binding: FragmentFavoriteBinding private lateinit var binding: FragmentFavoriteBinding
private lateinit var adapter: PdfAdapter lateinit var adapter: PdfAdapter
private var onItemLongClickListener: OnItemLongClickListener? = null
interface OnItemLongClickListener {
fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
@ -40,11 +49,17 @@ class FavoriteFrag : BaseFrag() {
} }
private fun initView() { private fun initView() {
adapter = PdfAdapter(pdfList = mutableListOf(),onItemClick = { pdf -> adapter = PdfAdapter(pdfList = mutableListOf(), onItemClick = { pdf ->
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath) val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent) startActivity(intent)
}, onMoreClick = { pdf -> }, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG) ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
}, onLongClick = { pdf ->
onItemLongClickListener?.onItemLongClicked(pdf, FragmentType.FAVORITE)
updateSwipeRefreshState()
(requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size)
}, onSelectModelItemClick = { number ->
(requireActivity() as? MainActivity)?.updateSelectNumber(number)
}) })
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
@ -58,6 +73,15 @@ class FavoriteFrag : BaseFrag() {
} }
} }
fun updateSwipeRefreshState() {
binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode()
}
fun exitMultiSelectMode() {
adapter.exitMultiSelectMode()
updateSwipeRefreshState()
}
private fun observeDocuments(onComplete: () -> Unit = {}) { private fun observeDocuments(onComplete: () -> Unit = {}) {
lifecycleScope.launch { lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
@ -73,4 +97,11 @@ class FavoriteFrag : BaseFrag() {
} }
} }
} }
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnItemLongClickListener) {
onItemLongClickListener = context
}
}
} }

View File

@ -1,5 +1,6 @@
package com.all.pdfreader.pro.app.ui.fragment package com.all.pdfreader.pro.app.ui.fragment
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -9,6 +10,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.all.pdfreader.pro.app.databinding.FragmentHomeBinding import com.all.pdfreader.pro.app.databinding.FragmentHomeBinding
import com.all.pdfreader.pro.app.model.FragmentType
import com.all.pdfreader.pro.app.model.SortConfig import com.all.pdfreader.pro.app.model.SortConfig
import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity
import com.all.pdfreader.pro.app.room.repository.PdfRepository import com.all.pdfreader.pro.app.room.repository.PdfRepository
@ -27,7 +29,13 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
} }
private lateinit var binding: FragmentHomeBinding private lateinit var binding: FragmentHomeBinding
private lateinit var adapter: PdfAdapter lateinit var adapter: PdfAdapter
private var onItemLongClickListener: OnItemLongClickListener? = null
interface OnItemLongClickListener {
fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View { ): View {
@ -47,6 +55,12 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
startActivity(intent) startActivity(intent)
}, onMoreClick = { pdf -> }, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG) ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
}, onLongClick = { pdf ->
onItemLongClickListener?.onItemLongClicked(pdf, FragmentType.HOME)
updateSwipeRefreshState()
(requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size)
}, onSelectModelItemClick = { number ->
(requireActivity() as? MainActivity)?.updateSelectNumber(number)
}) })
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
@ -63,6 +77,15 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
} }
} }
fun updateSwipeRefreshState() {
binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode()
}
fun exitMultiSelectMode() {
adapter.exitMultiSelectMode()
binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode()
}
override fun onSortTypeChanged(sortType: String) { override fun onSortTypeChanged(sortType: String) {
// 排序类型改变时重新加载数据 // 排序类型改变时重新加载数据
observeDocuments() observeDocuments()
@ -90,4 +113,11 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
return sortConfig.applySort(documents) return sortConfig.applySort(documents)
} }
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnItemLongClickListener) {
onItemLongClickListener = context
}
}
} }

View File

@ -1,5 +1,6 @@
package com.all.pdfreader.pro.app.ui.fragment package com.all.pdfreader.pro.app.ui.fragment
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@ -9,7 +10,10 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import com.all.pdfreader.pro.app.databinding.FragmentRecentlyBinding import com.all.pdfreader.pro.app.databinding.FragmentRecentlyBinding
import com.all.pdfreader.pro.app.model.FragmentType
import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity
import com.all.pdfreader.pro.app.room.repository.PdfRepository import com.all.pdfreader.pro.app.room.repository.PdfRepository
import com.all.pdfreader.pro.app.ui.act.MainActivity
import com.all.pdfreader.pro.app.ui.act.PdfViewActivity 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.adapter.PdfAdapter
import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment
@ -23,7 +27,12 @@ class RecentlyFrag : BaseFrag() {
} }
private lateinit var binding: FragmentRecentlyBinding private lateinit var binding: FragmentRecentlyBinding
private lateinit var adapter: PdfAdapter lateinit var adapter: PdfAdapter
private var onItemLongClickListener: OnItemLongClickListener? = null
interface OnItemLongClickListener {
fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType)
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
@ -39,11 +48,17 @@ class RecentlyFrag : BaseFrag() {
} }
private fun initView() { private fun initView() {
adapter = PdfAdapter(pdfList = mutableListOf(),onItemClick = { pdf -> adapter = PdfAdapter(pdfList = mutableListOf(), onItemClick = { pdf ->
val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath) val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath)
startActivity(intent) startActivity(intent)
}, onMoreClick = { pdf -> }, onMoreClick = { pdf ->
ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG) ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG)
}, onLongClick = { pdf ->
onItemLongClickListener?.onItemLongClicked(pdf, FragmentType.RECENTLY)
updateSwipeRefreshState()
(requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size)
}, onSelectModelItemClick = { number ->
(requireActivity() as? MainActivity)?.updateSelectNumber(number)
}) })
binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.layoutManager = LinearLayoutManager(requireContext())
@ -57,6 +72,15 @@ class RecentlyFrag : BaseFrag() {
} }
} }
fun updateSwipeRefreshState() {
binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode()
}
fun exitMultiSelectMode() {
adapter.exitMultiSelectMode()
updateSwipeRefreshState()
}
private fun observeDocuments(onComplete: () -> Unit = {}) { private fun observeDocuments(onComplete: () -> Unit = {}) {
lifecycleScope.launch { lifecycleScope.launch {
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
@ -72,4 +96,11 @@ class RecentlyFrag : BaseFrag() {
} }
} }
} }
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnItemLongClickListener) {
onItemLongClickListener = context
}
}
} }

View File

@ -1,5 +1,13 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" <?xml version="1.0" encoding="utf-8"?>
android:shape="rectangle"> <ripple xmlns:android="http://schemas.android.com/apk/res/android"
<solid android:color="#F0F0F0"/> android:color="#0D000000"> <!-- 系统默认点击高亮颜色 -->
<corners android:radius="12dp"/>
</shape> <!-- 背景内容 -->
<item>
<shape android:shape="rectangle">
<solid android:color="#F0F0F0" />
<corners android:radius="12dp" />
</shape>
</item>
</ripple>

View File

@ -1,20 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<!-- 按下状态 --> <!-- 按钮背景 -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#80E6E6E6"/> <!-- 按下颜色:深一点 -->
<corners android:radius="24dp"/>
</shape>
</item>
<!-- 默认状态 -->
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="#E6E6E6"/> <!-- 默认颜色 --> <solid android:color="@color/grey" />
<corners android:radius="24dp"/> <corners android:radius="12dp" />
</shape> </shape>
</item> </item>
</selector> </ripple>

View File

@ -1,20 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<!-- 按下状态 --> <!-- 按钮背景 -->
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#C42F1C"/> <!-- 按下颜色:深一点 -->
<corners android:radius="24dp"/>
</shape>
</item>
<!-- 默认状态 -->
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<solid android:color="#E43521"/> <!-- 默认颜色 --> <solid android:color="#E43521"/>
<corners android:radius="24dp"/> <corners android:radius="12dp"/>
</shape> </shape>
</item> </item>
</selector> </ripple>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#0D000000">
<!--id/mask用来限制水波纹形状不加ID则是设置背景内容 -->
<item android:id="@android:id/mask">
<shape android:shape="oval">
<solid android:color="#FFFFFFFF"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#0D000000">
<!--id/mask用来限制水波纹形状不加ID则是设置背景内容 -->
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#FFFFFFFF" />
</shape>
</item>
</ripple>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#0D000000"> <!-- 系统默认点击高亮颜色 -->
<!-- 背景内容 -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
<corners android:radius="12dp"/>
</shape>
</item>
</ripple>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 按下状态 -->
<item android:state_pressed="true">
<shape android:shape="oval">
<solid android:color="#0D000000" /> <!-- 按下颜色:深一点 -->
</shape>
</item>
<!-- 默认状态 -->
<item>
<shape android:shape="oval">
<solid android:color="#00000000" /> <!-- 默认颜色 -->
</shape>
</item>
</selector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/icon_sel_off_color"
android:fillType="evenOdd"
android:pathData="M20.5,6C20.7761,6 21,6.2239 21,6.5L21,7.5C21,7.7761 20.7761,8 20.5,8L19,8L19,20.5C19,20.7761 18.7761,21 18.5,21L5.5,21C5.2239,21 5,20.7761 5,20.5L5,8L3.5,8C3.2239,8 3,7.7761 3,7.5L3,6.5C3,6.2239 3.2239,6 3.5,6L20.5,6ZM17,8L7,8L7,18.5C7,18.7761 7.2239,19 7.5,19L16.5,19C16.7761,19 17,18.7761 17,18.5L17,8ZM10.5,9C10.7761,9 11,9.2239 11,9.5L11,17.5C11,17.7761 10.7761,18 10.5,18L9.5,18C9.2239,18 9,17.7761 9,17.5L9,9.5C9,9.2239 9.2239,9 9.5,9L10.5,9ZM14.5,9C14.7761,9 15,9.2239 15,9.5L15,17.5C15,17.7761 14.7761,18 14.5,18L13.5,18C13.2239,18 13,17.7761 13,17.5L13,9.5C13,9.2239 13.2239,9 13.5,9L14.5,9ZM16.5,3C16.7761,3 17,3.2239 17,3.5L17,4.5C17,4.7761 16.7761,5 16.5,5L7.5,5C7.2239,5 7,4.7761 7,4.5L7,3.5C7,3.2239 7.2239,3 7.5,3L16.5,3Z"
android:strokeWidth="1.0"
android:strokeColor="#00000000" />
</vector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#000000"
android:fillType="evenOdd"
android:pathData="M20.5,6C20.7761,6 21,6.2239 21,6.5L21,7.5C21,7.7761 20.7761,8 20.5,8L19,8L19,20.5C19,20.7761 18.7761,21 18.5,21L5.5,21C5.2239,21 5,20.7761 5,20.5L5,8L3.5,8C3.2239,8 3,7.7761 3,7.5L3,6.5C3,6.2239 3.2239,6 3.5,6L20.5,6ZM17,8L7,8L7,18.5C7,18.7761 7.2239,19 7.5,19L16.5,19C16.7761,19 17,18.7761 17,18.5L17,8ZM10.5,9C10.7761,9 11,9.2239 11,9.5L11,17.5C11,17.7761 10.7761,18 10.5,18L9.5,18C9.2239,18 9,17.7761 9,17.5L9,9.5C9,9.2239 9.2239,9 9.5,9L10.5,9ZM14.5,9C14.7761,9 15,9.2239 15,9.5L15,17.5C15,17.7761 14.7761,18 14.5,18L13.5,18C13.2239,18 13,17.7761 13,17.5L13,9.5C13,9.2239 13.2239,9 13.5,9L14.5,9ZM16.5,3C16.7761,3 17,3.2239 17,3.5L17,4.5C17,4.7761 16.7761,5 16.5,5L7.5,5C7.2239,5 7,4.7761 7,4.5L7,3.5C7,3.2239 7.2239,3 7.5,3L16.5,3Z"
android:strokeWidth="1.0"
android:strokeColor="#00000000" />
</vector>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M5,4L15,4A0.5,0.5 0,0 1,15.5 4.5L15.5,14.5A0.5,0.5 0,0 1,15 15L5,15A0.5,0.5 0,0 1,4.5 14.5L4.5,4.5A0.5,0.5 0,0 1,5 4z"
android:strokeWidth="2.0"
android:strokeColor="#cccccc" />
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M10,9L20,9A0.5,0.5 0,0 1,20.5 9.5L20.5,19.5A0.5,0.5 0,0 1,20 20L10,20A0.5,0.5 0,0 1,9.5 19.5L9.5,9.5A0.5,0.5 0,0 1,10 9z"
android:strokeWidth="2.0"
android:strokeColor="#cccccc" />
</vector>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M5,4L15,4A0.5,0.5 0,0 1,15.5 4.5L15.5,14.5A0.5,0.5 0,0 1,15 15L5,15A0.5,0.5 0,0 1,4.5 14.5L4.5,4.5A0.5,0.5 0,0 1,5 4z"
android:strokeWidth="2.0"
android:strokeColor="#000000" />
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M10,9L20,9A0.5,0.5 0,0 1,20.5 9.5L20.5,19.5A0.5,0.5 0,0 1,20 20L10,20A0.5,0.5 0,0 1,9.5 19.5L9.5,9.5A0.5,0.5 0,0 1,10 9z"
android:strokeWidth="2.0"
android:strokeColor="#000000" />
</vector>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M12,12m-9,0a9,9 0,1 1,18 0a9,9 0,1 1,-18 0"
android:strokeWidth="2.0"
android:strokeColor="@color/icon_sel_off_color" />
<path
android:fillColor="@color/icon_sel_off_color"
android:fillType="evenOdd"
android:pathData="M7.5,11L16.5,11A0.5,0.5 0,0 1,17 11.5L17,12.5A0.5,0.5 0,0 1,16.5 13L7.5,13A0.5,0.5 0,0 1,7 12.5L7,11.5A0.5,0.5 0,0 1,7.5 11z"
android:strokeWidth="1.0"
android:strokeColor="#00000000" />
</vector>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#00000000"
android:fillType="evenOdd"
android:pathData="M12,12m-9,0a9,9 0,1 1,18 0a9,9 0,1 1,-18 0"
android:strokeWidth="2.0"
android:strokeColor="#000000" />
<path
android:fillColor="#000000"
android:fillType="evenOdd"
android:pathData="M7.5,11L16.5,11A0.5,0.5 0,0 1,17 11.5L17,12.5A0.5,0.5 0,0 1,16.5 13L7.5,13A0.5,0.5 0,0 1,7 12.5L7,11.5A0.5,0.5 0,0 1,7.5 11z"
android:strokeWidth="1.0"
android:strokeColor="#00000000" />
</vector>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@color/icon_sel_off_color"
android:fillType="evenOdd"
android:pathData="M21.1733,5.654C21.6986,6.5291 22,7.5694 22,8.6948C22,12.5217 18.7494,15.6557 13.7907,20.3133L13.45,20.6332L12,22L10.55,20.6436C9.7597,19.8999 9.0105,19.1953 8.3086,18.5211L9.7533,17.0756C10.2895,17.5883 10.856,18.1215 11.4497,18.6785L11.9,19.1008L12,19.2044L12.1,19.1008C16.86,14.6381 20,11.6872 20,8.6948C20,8.1317 19.8891,7.6068 19.6873,7.141L21.1733,5.654ZM19.7782,1.3934L21.1924,2.8076L19.8494,4.1499C19.8497,4.1501 19.8501,4.1504 19.8504,4.1507L18.3916,5.6087L4.2218,19.7782L2.8076,18.364L5.4981,15.6739C3.2954,13.2503 2,11.1106 2,8.6948C2,5.5057 4.42,3 7.5,3C9.24,3 10.91,3.8387 12,5.164C13.09,3.8387 14.76,3 16.5,3C17.0116,3 17.5049,3.0691 17.972,3.199L19.7782,1.3934ZM7.5,5.0708C5.5,5.0708 4,6.624 4,8.6948C4,10.4507 5.0811,12.1923 6.9363,14.2334L16.0747,5.0966C14.7573,5.2557 13.5347,6.1366 13.0133,7.3317L12.94,7.5144L11.07,7.5144C10.54,6.0959 9.04,5.0708 7.5,5.0708Z"
android:strokeWidth="1.0"
android:strokeColor="#00000000"
tools:ignore="VectorPath" />
</vector>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#000000"
android:fillType="evenOdd"
android:pathData="M21.1733,5.654C21.6986,6.5291 22,7.5694 22,8.6948C22,12.5217 18.7494,15.6557 13.7907,20.3133L13.45,20.6332L12,22L10.55,20.6436C9.7597,19.8999 9.0105,19.1953 8.3086,18.5211L9.7533,17.0756C10.2895,17.5883 10.856,18.1215 11.4497,18.6785L11.9,19.1008L12,19.2044L12.1,19.1008C16.86,14.6381 20,11.6872 20,8.6948C20,8.1317 19.8891,7.6068 19.6873,7.141L21.1733,5.654ZM19.7782,1.3934L21.1924,2.8076L19.8494,4.1499C19.8497,4.1501 19.8501,4.1504 19.8504,4.1507L18.3916,5.6087L4.2218,19.7782L2.8076,18.364L5.4981,15.6739C3.2954,13.2503 2,11.1106 2,8.6948C2,5.5057 4.42,3 7.5,3C9.24,3 10.91,3.8387 12,5.164C13.09,3.8387 14.76,3 16.5,3C17.0116,3 17.5049,3.0691 17.972,3.199L19.7782,1.3934ZM7.5,5.0708C5.5,5.0708 4,6.624 4,8.6948C4,10.4507 5.0811,12.1923 6.9363,14.2334L16.0747,5.0966C14.7573,5.2557 13.5347,6.1366 13.0133,7.3317L12.94,7.5144L11.07,7.5144C10.54,6.0959 9.04,5.0708 7.5,5.0708Z"
android:strokeWidth="1.0"
android:strokeColor="#00000000"
tools:ignore="VectorPath" />
</vector>

View File

@ -19,9 +19,10 @@
<LinearLayout <LinearLayout
android:id="@+id/sidebarBtn" android:id="@+id/sidebarBtn"
android:layout_width="40dp" android:layout_width="44dp"
android:layout_height="40dp" android:layout_height="44dp"
android:layout_marginStart="8dp" android:layout_marginStart="6dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -35,8 +36,8 @@
style="@style/TextViewFont_PopMedium" style="@style/TextViewFont_PopMedium"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="6dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="6dp"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/app_name" android:text="@string/app_name"
android:textColor="@color/black" android:textColor="@color/black"
@ -50,8 +51,9 @@
<LinearLayout <LinearLayout
android:id="@+id/searchBtn" android:id="@+id/searchBtn"
android:layout_width="40dp" android:layout_width="44dp"
android:layout_height="40dp" android:layout_height="44dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -62,9 +64,10 @@
<LinearLayout <LinearLayout
android:id="@+id/sortingBtn" android:id="@+id/sortingBtn"
android:layout_width="40dp" android:layout_width="44dp"
android:layout_height="40dp" android:layout_height="44dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="6dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -76,6 +79,60 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/multiSelectTopLayout"
android:layout_width="match_parent"
android:layout_height="56dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="visible">
<LinearLayout
android:id="@+id/multiSelectBackBtn"
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_marginStart="6dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/back_black" />
</LinearLayout>
<TextView
android:id="@+id/multiSelectNumberTv"
style="@style/TextViewFont_PopMedium"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginEnd="6dp"
android:layout_weight="1"
android:text="@string/selected_page"
android:textColor="@color/black"
android:textSize="18sp" />
<LinearLayout
android:id="@+id/multiSelectAllBtn"
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_marginEnd="6dp"
android:gravity="center">
<ImageView
android:id="@+id/multiSelectAllIv"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="@drawable/dr_circular_sel_off_bg"
android:padding="2dp"
android:src="@drawable/gou_white" />
</LinearLayout>
</LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
@ -168,9 +225,10 @@
android:background="@color/line_color" /> android:background="@color/line_color" />
<LinearLayout <LinearLayout
android:id="@+id/navigationLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="64dp" android:layout_height="64dp"
android:background="@color/white"
android:orientation="horizontal"> android:orientation="horizontal">
<LinearLayout <LinearLayout
@ -178,6 +236,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -202,6 +261,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -226,6 +286,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -250,6 +311,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -271,6 +333,116 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/multiSelectBottomLayout"
android:layout_width="match_parent"
android:layout_height="64dp"
android:background="@color/white"
android:orientation="horizontal"
android:visibility="visible">
<LinearLayout
android:id="@+id/multiSelectDeleteBtn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/multiSelectDeleteIv"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/icon_delete_sel_on" />
<TextView
android:id="@+id/multiSelectDeleteTv"
style="@style/TextViewFont_PopMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delete"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/multiSelectRemoveBtn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/multiSelectRemoveIv"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/icon_remove_sel_on" />
<TextView
android:id="@+id/multiSelectRemoveTv"
style="@style/TextViewFont_PopMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/remove"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/multiSelectUnFavoriteBtn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/multiSelectUnFavoriteIv"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/icon_un_favorite_sel_on" />
<TextView
android:id="@+id/multiSelectUnFavoriteTv"
style="@style/TextViewFont_PopMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/un_favorite"
android:textColor="@color/black"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/multiSelectMergeBtn"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/multiSelectMergeIv"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/icon_merge_sel_off" />
<TextView
android:id="@+id/multiSelectMergeTv"
style="@style/TextViewFont_PopMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/merge"
android:textColor="@color/icon_sel_off_color"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -22,6 +22,7 @@
<LinearLayout <LinearLayout
android:id="@+id/backBtn" android:id="@+id/backBtn"
android:layout_width="40dp" android:layout_width="40dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"

View File

@ -75,6 +75,7 @@
android:layout_height="40dp" android:layout_height="40dp"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView

View File

@ -29,6 +29,7 @@
android:layout_height="40dp" android:layout_height="40dp"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -57,6 +58,7 @@
android:layout_height="40dp" android:layout_height="40dp"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -105,6 +107,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -130,6 +133,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -155,6 +159,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -200,6 +205,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">

View File

@ -23,6 +23,7 @@
android:layout_width="40dp" android:layout_width="40dp"
android:layout_height="40dp" android:layout_height="40dp"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:layout_marginEnd="8dp" android:layout_marginEnd="8dp"
android:gravity="center"> android:gravity="center">
@ -107,10 +108,10 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="32dp" android:layout_height="32dp"
android:gravity="center_vertical"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView <TextView
@ -131,6 +132,7 @@
android:id="@+id/clearHistory" android:id="@+id/clearHistory"
android:layout_width="32dp" android:layout_width="32dp"
android:layout_height="32dp" android:layout_height="32dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView

View File

@ -7,7 +7,7 @@
android:layout_marginTop="6dp" android:layout_marginTop="6dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="6dp" android:layout_marginBottom="6dp"
android:background="@drawable/dr_rounded_corner_12_bg_white" android:background="@drawable/dr_item_click_btn_bg"
android:orientation="vertical" android:orientation="vertical"
tools:ignore="RtlSymmetry"> tools:ignore="RtlSymmetry">
@ -122,6 +122,7 @@
android:id="@+id/moreBtn" android:id="@+id/moreBtn"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -129,6 +130,23 @@
android:layout_height="24dp" android:layout_height="24dp"
android:src="@drawable/more" /> android:src="@drawable/more" />
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/checkBtn"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center">
<CheckBox
android:id="@id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="false"
android:duplicateParentState="true"
android:focusable="false" />
</LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -105,6 +105,7 @@
android:id="@+id/collectBtn" android:id="@+id/collectBtn"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_oval_transparent"
android:gravity="center"> android:gravity="center">
<ImageView <ImageView
@ -152,6 +153,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -175,6 +177,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -198,6 +201,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -221,6 +225,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center" android:gravity="center"
android:orientation="vertical"> android:orientation="vertical">
@ -258,6 +263,7 @@
android:id="@+id/duplicateFileBtn" android:id="@+id/duplicateFileBtn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
@ -279,6 +285,7 @@
android:id="@+id/splitBtn" android:id="@+id/splitBtn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
@ -301,6 +308,7 @@
android:id="@+id/setPasswordBtn" android:id="@+id/setPasswordBtn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
@ -324,6 +332,7 @@
android:id="@+id/removeRecentBtn" android:id="@+id/removeRecentBtn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">
@ -346,6 +355,7 @@
android:id="@+id/deleteFileBtn" android:id="@+id/deleteFileBtn"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@drawable/dr_click_effect_rectangle_transparent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:orientation="horizontal"> android:orientation="horizontal">

View File

@ -9,6 +9,7 @@
<color name="black_80">#CC222222</color> <color name="black_80">#CC222222</color>
<color name="black_60">#99222222</color> <color name="black_60">#99222222</color>
<color name="white">#FFFFFFFF</color> <color name="white">#FFFFFFFF</color>
<color name="transparent">#00000000</color>
<color name="grey">#E6E6E6</color> <color name="grey">#E6E6E6</color>
<color name="bg_color">#F9F9F9</color> <color name="bg_color">#F9F9F9</color>
<color name="line_color">#E0E0E0</color> <color name="line_color">#E0E0E0</color>

View File

@ -3,6 +3,7 @@
<string name="home">Home</string> <string name="home">Home</string>
<string name="recently">Recently</string> <string name="recently">Recently</string>
<string name="favorite">Favorite</string> <string name="favorite">Favorite</string>
<string name="un_favorite">Unfavorite</string>
<string name="tools">Tools</string> <string name="tools">Tools</string>
<string name="splash_desc">Professional PDF Document Reader</string> <string name="splash_desc">Professional PDF Document Reader</string>
<string name="permission_required">Permission Required</string> <string name="permission_required">Permission Required</string>
@ -124,6 +125,7 @@
<string name="split_pdf">Split PDF</string> <string name="split_pdf">Split PDF</string>
<string name="split">Split</string> <string name="split">Split</string>
<string name="merge_pdf">Merge PDF</string> <string name="merge_pdf">Merge PDF</string>
<string name="merge">Merge</string>
<string name="selected_page">%1$d Selected</string> <string name="selected_page">%1$d Selected</string>
<string name="loading">Loading</string> <string name="loading">Loading</string>
<string name="continue_now">Continue Now</string> <string name="continue_now">Continue Now</string>