添加多选模式界面。
This commit is contained in:
parent
2c495a2d50
commit
c7af68a8ee
@ -0,0 +1,5 @@
|
||||
package com.all.pdfreader.pro.app.model
|
||||
|
||||
enum class FragmentType {
|
||||
HOME, RECENTLY, FAVORITE
|
||||
}
|
||||
@ -33,5 +33,6 @@ data class PdfDocumentEntity(
|
||||
val metadataModificationDate: Long? = null, // PDF修改时间
|
||||
|
||||
val password: String? = null,// PDF密码(加密存储)
|
||||
val isPassword: Boolean = false//是否存在密码
|
||||
val isPassword: Boolean = false,//是否存在密码
|
||||
var isSelected: Boolean = false
|
||||
) : Parcelable
|
||||
@ -11,6 +11,8 @@ import com.all.pdfreader.pro.app.PRApp
|
||||
import com.all.pdfreader.pro.app.R
|
||||
import com.all.pdfreader.pro.app.databinding.ActivityMainBinding
|
||||
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.ProgressDialogFragment
|
||||
import com.all.pdfreader.pro.app.ui.dialog.SortDialogFragment
|
||||
@ -27,25 +29,23 @@ import com.gyf.immersionbar.ImmersionBar
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback,
|
||||
PermissionDialogFragment.CloseCallback {
|
||||
PermissionDialogFragment.CloseCallback, HomeFrag.OnItemLongClickListener,
|
||||
RecentlyFrag.OnItemLongClickListener, FavoriteFrag.OnItemLongClickListener {
|
||||
|
||||
override val TAG: String = "MainActivity"
|
||||
|
||||
private lateinit var binding: ActivityMainBinding
|
||||
private val pdfRepository = getRepository()
|
||||
private lateinit var pdfScanner: PdfScanner
|
||||
|
||||
private val homeFragment = HomeFrag()
|
||||
private val recentlyFragment = RecentlyFrag()
|
||||
private val favoriteFragment = FavoriteFrag()
|
||||
private val toolsFragment = ToolsFrag()
|
||||
|
||||
private var activeFragment: Fragment = homeFragment
|
||||
private val fragmentTag = "ACTIVE_FRAGMENT"
|
||||
|
||||
private val viewModel by lazy { ViewModelProvider(this)[PdfViewModel::class.java] }
|
||||
|
||||
private var progressDialog: ProgressDialogFragment? = null
|
||||
private var fragmentType = FragmentType.HOME
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@ -67,6 +67,7 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
|
||||
supportFragmentManager.beginTransaction().hide(homeFragment).hide(recentlyFragment)
|
||||
.hide(favoriteFragment).hide(toolsFragment).show(activeFragment).commit()
|
||||
}
|
||||
updateMultiSelectUi(false, fragmentType)
|
||||
}
|
||||
|
||||
private fun initObserve() {
|
||||
@ -170,6 +171,35 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
|
||||
(activeFragment as? SortableFragment)?.onSortTypeChanged(it)
|
||||
}).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) {
|
||||
@ -229,25 +259,6 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
|
||||
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 {
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.all.pdfreader.pro.app.databinding.AdapterPdfItemBinding
|
||||
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.FileUtils.toFormatFileSize
|
||||
import com.all.pdfreader.pro.app.util.FileUtils.toSlashDate
|
||||
@ -17,8 +18,11 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners
|
||||
class PdfAdapter(
|
||||
private var pdfList: MutableList<PdfDocumentEntity>,
|
||||
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>() {
|
||||
private var isMultiSelectMode = false
|
||||
|
||||
inner class PdfViewHolder(val binding: AdapterPdfItemBinding) :
|
||||
RecyclerView.ViewHolder(binding.root)
|
||||
@ -29,7 +33,7 @@ class PdfAdapter(
|
||||
return PdfViewHolder(binding)
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
@SuppressLint("SetTextI18n", "NotifyDataSetChanged")
|
||||
override fun onBindViewHolder(holder: PdfViewHolder, position: Int) {
|
||||
val item = pdfList[position]
|
||||
holder.binding.tvFileName.text = item.fileName
|
||||
@ -50,13 +54,40 @@ class PdfAdapter(
|
||||
} else {
|
||||
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 {
|
||||
if (isMultiSelectMode) {
|
||||
item.isSelected = !item.isSelected
|
||||
notifyItemChanged(position)
|
||||
onSelectModelItemClick(getSelectedItems().size)
|
||||
} else {
|
||||
onItemClick(item)
|
||||
}
|
||||
}
|
||||
holder.binding.moreBtn.setOnClickListener {
|
||||
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
|
||||
@ -67,4 +98,47 @@ class PdfAdapter(
|
||||
pdfList.addAll(newList)
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,16 +1,19 @@
|
||||
package com.all.pdfreader.pro.app.ui.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
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.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.ui.act.MainActivity
|
||||
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
|
||||
@ -24,7 +27,13 @@ class FavoriteFrag : BaseFrag() {
|
||||
}
|
||||
|
||||
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(
|
||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||
@ -45,6 +54,12 @@ class FavoriteFrag : BaseFrag() {
|
||||
startActivity(intent)
|
||||
}, onMoreClick = { pdf ->
|
||||
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())
|
||||
@ -58,6 +73,15 @@ class FavoriteFrag : BaseFrag() {
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSwipeRefreshState() {
|
||||
binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode()
|
||||
}
|
||||
|
||||
fun exitMultiSelectMode() {
|
||||
adapter.exitMultiSelectMode()
|
||||
updateSwipeRefreshState()
|
||||
}
|
||||
|
||||
private fun observeDocuments(onComplete: () -> Unit = {}) {
|
||||
lifecycleScope.launch {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package com.all.pdfreader.pro.app.ui.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@ -9,6 +10,7 @@ import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
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.room.entity.PdfDocumentEntity
|
||||
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 adapter: PdfAdapter
|
||||
lateinit var adapter: PdfAdapter
|
||||
private var onItemLongClickListener: OnItemLongClickListener? = null
|
||||
|
||||
interface OnItemLongClickListener {
|
||||
fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||
): View {
|
||||
@ -47,6 +55,12 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
|
||||
startActivity(intent)
|
||||
}, onMoreClick = { pdf ->
|
||||
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())
|
||||
@ -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) {
|
||||
// 排序类型改变时重新加载数据
|
||||
observeDocuments()
|
||||
@ -90,4 +113,11 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment {
|
||||
return sortConfig.applySort(documents)
|
||||
}
|
||||
|
||||
override fun onAttach(context: Context) {
|
||||
super.onAttach(context)
|
||||
if (context is OnItemLongClickListener) {
|
||||
onItemLongClickListener = context
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package com.all.pdfreader.pro.app.ui.fragment
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@ -9,7 +10,10 @@ import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
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.ui.act.MainActivity
|
||||
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
|
||||
@ -23,7 +27,12 @@ class RecentlyFrag : BaseFrag() {
|
||||
}
|
||||
|
||||
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(
|
||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||
@ -44,6 +53,12 @@ class RecentlyFrag : BaseFrag() {
|
||||
startActivity(intent)
|
||||
}, onMoreClick = { pdf ->
|
||||
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())
|
||||
@ -57,6 +72,15 @@ class RecentlyFrag : BaseFrag() {
|
||||
}
|
||||
}
|
||||
|
||||
fun updateSwipeRefreshState() {
|
||||
binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode()
|
||||
}
|
||||
|
||||
fun exitMultiSelectMode() {
|
||||
adapter.exitMultiSelectMode()
|
||||
updateSwipeRefreshState()
|
||||
}
|
||||
|
||||
private fun observeDocuments(onComplete: () -> Unit = {}) {
|
||||
lifecycleScope.launch {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,13 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<?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="#F0F0F0" />
|
||||
<corners android:radius="12dp" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
</ripple>
|
||||
|
||||
@ -1,20 +1,13 @@
|
||||
<?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>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="#E6E6E6"/> <!-- 默认颜色 -->
|
||||
<corners android:radius="24dp"/>
|
||||
<solid android:color="@color/grey" />
|
||||
<corners android:radius="12dp" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
</selector>
|
||||
</ripple>
|
||||
|
||||
@ -1,20 +1,13 @@
|
||||
<?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>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="#E43521"/> <!-- 默认颜色 -->
|
||||
<corners android:radius="24dp"/>
|
||||
<solid android:color="#E43521"/>
|
||||
<corners android:radius="12dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
</selector>
|
||||
</ripple>
|
||||
|
||||
@ -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>
|
||||
@ -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>
|
||||
13
app/src/main/res/drawable/dr_item_click_btn_bg.xml
Normal file
13
app/src/main/res/drawable/dr_item_click_btn_bg.xml
Normal 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>
|
||||
@ -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>
|
||||
13
app/src/main/res/drawable/icon_delete_sel_off.xml
Normal file
13
app/src/main/res/drawable/icon_delete_sel_off.xml
Normal 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>
|
||||
13
app/src/main/res/drawable/icon_delete_sel_on.xml
Normal file
13
app/src/main/res/drawable/icon_delete_sel_on.xml
Normal 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>
|
||||
19
app/src/main/res/drawable/icon_merge_sel_off.xml
Normal file
19
app/src/main/res/drawable/icon_merge_sel_off.xml
Normal 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>
|
||||
19
app/src/main/res/drawable/icon_merge_sel_on.xml
Normal file
19
app/src/main/res/drawable/icon_merge_sel_on.xml
Normal 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>
|
||||
19
app/src/main/res/drawable/icon_remove_sel_off.xml
Normal file
19
app/src/main/res/drawable/icon_remove_sel_off.xml
Normal 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>
|
||||
19
app/src/main/res/drawable/icon_remove_sel_on.xml
Normal file
19
app/src/main/res/drawable/icon_remove_sel_on.xml
Normal 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>
|
||||
15
app/src/main/res/drawable/icon_un_favorite_sel_off.xml
Normal file
15
app/src/main/res/drawable/icon_un_favorite_sel_off.xml
Normal 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>
|
||||
15
app/src/main/res/drawable/icon_un_favorite_sel_on.xml
Normal file
15
app/src/main/res/drawable/icon_un_favorite_sel_on.xml
Normal 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>
|
||||
@ -19,9 +19,10 @@
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/sidebarBtn"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_width="44dp"
|
||||
android:layout_height="44dp"
|
||||
android:layout_marginStart="6dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -35,8 +36,8 @@
|
||||
style="@style/TextViewFont_PopMedium"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginStart="6dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/app_name"
|
||||
android:textColor="@color/black"
|
||||
@ -50,8 +51,9 @@
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/searchBtn"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_width="44dp"
|
||||
android:layout_height="44dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -62,9 +64,10 @@
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/sortingBtn"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_width="44dp"
|
||||
android:layout_height="44dp"
|
||||
android:layout_marginEnd="6dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -76,6 +79,60 @@
|
||||
</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
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
@ -168,9 +225,10 @@
|
||||
android:background="@color/line_color" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/navigationLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@color/white"
|
||||
android:layout_height="64dp"
|
||||
android:background="@color/white"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<LinearLayout
|
||||
@ -178,6 +236,7 @@
|
||||
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">
|
||||
|
||||
@ -202,6 +261,7 @@
|
||||
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">
|
||||
|
||||
@ -226,6 +286,7 @@
|
||||
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">
|
||||
|
||||
@ -250,6 +311,7 @@
|
||||
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">
|
||||
|
||||
@ -271,6 +333,116 @@
|
||||
|
||||
</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>
|
||||
@ -22,6 +22,7 @@
|
||||
<LinearLayout
|
||||
android:id="@+id/backBtn"
|
||||
android:layout_width="40dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
|
||||
@ -75,6 +75,7 @@
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -57,6 +58,7 @@
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -105,6 +107,7 @@
|
||||
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">
|
||||
|
||||
@ -130,6 +133,7 @@
|
||||
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">
|
||||
|
||||
@ -155,6 +159,7 @@
|
||||
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">
|
||||
|
||||
@ -200,6 +205,7 @@
|
||||
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">
|
||||
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:gravity="center">
|
||||
|
||||
@ -107,10 +108,10 @@
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="32dp"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
@ -131,6 +132,7 @@
|
||||
android:id="@+id/clearHistory"
|
||||
android:layout_width="32dp"
|
||||
android:layout_height="32dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
android:layout_marginTop="6dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="6dp"
|
||||
android:background="@drawable/dr_rounded_corner_12_bg_white"
|
||||
android:background="@drawable/dr_item_click_btn_bg"
|
||||
android:orientation="vertical"
|
||||
tools:ignore="RtlSymmetry">
|
||||
|
||||
@ -122,6 +122,7 @@
|
||||
android:id="@+id/moreBtn"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -129,6 +130,23 @@
|
||||
android:layout_height="24dp"
|
||||
android:src="@drawable/more" />
|
||||
</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>
|
||||
|
||||
|
||||
|
||||
@ -105,6 +105,7 @@
|
||||
android:id="@+id/collectBtn"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_oval_transparent"
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
@ -152,6 +153,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
@ -175,6 +177,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
@ -198,6 +201,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
@ -221,6 +225,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
@ -258,6 +263,7 @@
|
||||
android:id="@+id/duplicateFileBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
@ -279,6 +285,7 @@
|
||||
android:id="@+id/splitBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
@ -301,6 +308,7 @@
|
||||
android:id="@+id/setPasswordBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
@ -324,6 +332,7 @@
|
||||
android:id="@+id/removeRecentBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
@ -346,6 +355,7 @@
|
||||
android:id="@+id/deleteFileBtn"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:background="@drawable/dr_click_effect_rectangle_transparent"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal">
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
<color name="black_80">#CC222222</color>
|
||||
<color name="black_60">#99222222</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="transparent">#00000000</color>
|
||||
<color name="grey">#E6E6E6</color>
|
||||
<color name="bg_color">#F9F9F9</color>
|
||||
<color name="line_color">#E0E0E0</color>
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
<string name="home">Home</string>
|
||||
<string name="recently">Recently</string>
|
||||
<string name="favorite">Favorite</string>
|
||||
<string name="un_favorite">Unfavorite</string>
|
||||
<string name="tools">Tools</string>
|
||||
<string name="splash_desc">Professional PDF Document Reader</string>
|
||||
<string name="permission_required">Permission Required</string>
|
||||
@ -124,6 +125,7 @@
|
||||
<string name="split_pdf">Split PDF</string>
|
||||
<string name="split">Split</string>
|
||||
<string name="merge_pdf">Merge PDF</string>
|
||||
<string name="merge">Merge</string>
|
||||
<string name="selected_page">%1$d Selected</string>
|
||||
<string name="loading">Loading</string>
|
||||
<string name="continue_now">Continue Now</string>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user