diff --git a/app/src/main/java/com/all/pdfreader/pro/app/model/SortConfig.kt b/app/src/main/java/com/all/pdfreader/pro/app/model/SortConfig.kt index 04882d3..4e4a028 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/model/SortConfig.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/model/SortConfig.kt @@ -43,4 +43,21 @@ data class SortConfig( } } } + + fun applySortFavorite(documents: List): List { + return when (field) { + SortField.NAME -> when (direction) { + SortDirection.ASC -> documents.sortedBy { it.fileName.lowercase() } + SortDirection.DESC -> documents.sortedByDescending { it.fileName.lowercase() } + } + SortField.DATE -> when (direction) { + SortDirection.ASC -> documents.sortedBy { it.addedToFavoriteTime } + SortDirection.DESC -> documents.sortedByDescending { it.addedToFavoriteTime } + } + SortField.SIZE -> when (direction) { + SortDirection.ASC -> documents.sortedBy { it.fileSize } + SortDirection.DESC -> documents.sortedByDescending { it.fileSize } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/all/pdfreader/pro/app/sp/AppStore.kt b/app/src/main/java/com/all/pdfreader/pro/app/sp/AppStore.kt index 55fb973..1e19282 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/sp/AppStore.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/sp/AppStore.kt @@ -20,6 +20,10 @@ class AppStore(context: Context) { key = DOCUMENT_SORT_TYPE, defaultValue = SortConfig.default().toPreferenceString() ) + var favoriteSortType: String by store.string( + key = DOCUMENT_FAVORITE_SORT_TYPE, defaultValue = SortConfig.default().toPreferenceString() + ) + // 是否开启护眼遮罩 var isEyeCareMode: Boolean by store.boolean( key = IS_EYE_CARE_MODE, defaultValue = false @@ -44,6 +48,7 @@ class AppStore(context: Context) { private const val FILE_NAME = "prp_sp_name" private const val PERMISSIONS_DIALOG_PROMPT = "permissions_dialog_prompt" private const val DOCUMENT_SORT_TYPE = "document_sort_type" + private const val DOCUMENT_FAVORITE_SORT_TYPE = "document_favorite_sort_type" private const val IS_EYE_CARE_MODE = "is_eye_care_mode" private const val IS_VERTICAL = "is_vertical" private const val IS_PAGE_FLING = "is_page_fling" diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt index 05aec09..4882006 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt @@ -14,6 +14,8 @@ 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.model.PdfPickerSource +import com.all.pdfreader.pro.app.model.SortConfig +import com.all.pdfreader.pro.app.model.SortField 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 @@ -58,7 +60,7 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback setContentView(binding.root) setupDoubleBackExit() initObserve() - ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(true) + ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(false) .navigationBarColor(R.color.white).init() setupFragments() @@ -191,24 +193,42 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback startActivity(SearchActivity.createIntent(this, PdfPickerSource.NONE)) } - binding.sortingBtn.setClickWithAnimation { - SortDialogFragment(onOkClick = { it -> - // 通知当前fragment更新排序 - (activeFragment as? SortableFragment)?.onSortTypeChanged(it) - }).show(supportFragmentManager, TAG) - } binding.multiSelectBackBtn.setOnSingleClickListener { exitAllMultiSelect() } - binding.multiSelectAllBtn.setOnSingleClickListener { - 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) // 未全选图标 + binding.multiSelectBtn.setOnClickListener { + when (activeFragment) { + is HomeFrag -> { + (activeFragment as HomeFrag).setupMultiSelect() + } + + is RecentlyFrag -> { + (activeFragment as RecentlyFrag).setupMultiSelect() + } + + is FavoriteFrag -> { + (activeFragment as FavoriteFrag).setupMultiSelect() + } } - updateSelectNumber(homeFragment.adapter.getSelectedItems().size) + } + binding.multiSelectAllBtn.setOnSingleClickListener { + when (activeFragment) { + is HomeFrag -> { + homeFragment.adapter.toggleSelectAll() + updateSelectNumber(homeFragment.adapter.getSelectedItems().size) + } + + is RecentlyFrag -> { + recentlyFragment.adapter.toggleSelectAll() + updateSelectNumber(recentlyFragment.adapter.getSelectedItems().size) + } + + is FavoriteFrag -> { + favoriteFragment.adapter.toggleSelectAll() + updateSelectNumber(favoriteFragment.adapter.getSelectedItems().size) + } + } + } binding.multiSelectDeleteBtn.setOnSingleClickListener { val selectedItems = homeFragment.adapter.getSelectedItems() @@ -271,10 +291,6 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback updateSelectedNav(target) } - interface SortableFragment { - fun onSortTypeChanged(sortType: String) - } - private fun updateSelectedNav(fragment: Fragment) { if (fragment is ToolsFrag) {//工具界面不展示权限 binding.pnLayout.visibility = View.GONE @@ -283,12 +299,8 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback binding.pnLayout.visibility = View.VISIBLE } } - if (fragment is HomeFrag) { - if (StoragePermissionHelper.hasBasicStoragePermission(this)) { - binding.topButtonLayout.visibility = View.VISIBLE - } else { - binding.topButtonLayout.visibility = View.GONE - } + if (StoragePermissionHelper.hasBasicStoragePermission(this)) { + binding.topButtonLayout.visibility = View.VISIBLE } else { binding.topButtonLayout.visibility = View.GONE } @@ -298,6 +310,11 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback binding.recentlyIv.setImageResource(R.drawable.icon_recently_sel_off) binding.favoriteIv.setImageResource(R.drawable.collect) binding.toolsIv.setImageResource(R.drawable.icon_tools_sel_off) + + binding.homeTv.setTextColor(getColor(R.color.icon_on)) + binding.recentlyTv.setTextColor(getColor(R.color.icon_off)) + binding.favoriteTv.setTextColor(getColor(R.color.icon_off)) + binding.toolsTv.setTextColor(getColor(R.color.icon_off)) } is RecentlyFrag -> { @@ -305,6 +322,11 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback binding.recentlyIv.setImageResource(R.drawable.icon_recently_sel_on) binding.favoriteIv.setImageResource(R.drawable.collect) binding.toolsIv.setImageResource(R.drawable.icon_tools_sel_off) + + binding.homeTv.setTextColor(getColor(R.color.icon_off)) + binding.recentlyTv.setTextColor(getColor(R.color.icon_on)) + binding.favoriteTv.setTextColor(getColor(R.color.icon_off)) + binding.toolsTv.setTextColor(getColor(R.color.icon_off)) } is FavoriteFrag -> { @@ -312,6 +334,11 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback binding.recentlyIv.setImageResource(R.drawable.icon_recently_sel_off) binding.favoriteIv.setImageResource(R.drawable.collected) binding.toolsIv.setImageResource(R.drawable.icon_tools_sel_off) + + binding.homeTv.setTextColor(getColor(R.color.icon_off)) + binding.recentlyTv.setTextColor(getColor(R.color.icon_off)) + binding.favoriteTv.setTextColor(getColor(R.color.icon_on)) + binding.toolsTv.setTextColor(getColor(R.color.icon_off)) } is ToolsFrag -> { @@ -319,6 +346,11 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback binding.recentlyIv.setImageResource(R.drawable.icon_recently_sel_off) binding.favoriteIv.setImageResource(R.drawable.collect) binding.toolsIv.setImageResource(R.drawable.icon_tools_sel_on) + + binding.homeTv.setTextColor(getColor(R.color.icon_off)) + binding.recentlyTv.setTextColor(getColor(R.color.icon_off)) + binding.favoriteTv.setTextColor(getColor(R.color.icon_off)) + binding.toolsTv.setTextColor(getColor(R.color.icon_on)) } } } @@ -403,7 +435,7 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback } } - override fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType) { + override fun onItemLongClicked(type: FragmentType) { fragmentType = type updateMultiSelectUi(true, fragmentType) updateSelectNumber(homeFragment.adapter.getSelectedItems().size) @@ -496,6 +528,4 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback } }) } - - } diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfAdapter.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfAdapter.kt index fdc04cd..7c3e60e 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfAdapter.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfAdapter.kt @@ -9,6 +9,7 @@ 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 import com.all.pdfreader.pro.app.util.FileUtils.toFormatFileSize import com.all.pdfreader.pro.app.util.FileUtils.toSlashDate import com.bumptech.glide.Glide @@ -69,7 +70,7 @@ class PdfAdapter( holder.binding.deleteBtn.visibility = if (showDeleteButton) View.VISIBLE else View.GONE } holder.binding.checkbox.isChecked = item.isSelected - + holder.binding.fileTv.text = FileUtils.getParentFolderName(item.filePath) holder.binding.root.setOnClickListener { if (isMultiSelectMode) { item.isSelected = !item.isSelected @@ -156,4 +157,9 @@ class PdfAdapter( fun getIsMultiSelectMode(): Boolean { return isMultiSelectMode } + + fun setIsMultiSelectMode(b: Boolean) { + isMultiSelectMode = b + notifyDataSetChanged() + } } diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/SortDialogFragment.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/SortDialogFragment.kt index 8809c10..df0ba53 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/SortDialogFragment.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/SortDialogFragment.kt @@ -1,21 +1,27 @@ package com.all.pdfreader.pro.app.ui.dialog +import android.annotation.SuppressLint +import android.media.Image import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.fragment.app.Fragment import com.all.pdfreader.pro.app.R -import com.all.pdfreader.pro.app.databinding.DialogPermissionBinding import com.all.pdfreader.pro.app.databinding.DialogSortBinding import com.all.pdfreader.pro.app.model.SortConfig import com.all.pdfreader.pro.app.model.SortDirection import com.all.pdfreader.pro.app.model.SortField -import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity import com.all.pdfreader.pro.app.sp.AppStore -import com.all.pdfreader.pro.app.ui.act.MainActivity.SortableFragment +import com.all.pdfreader.pro.app.ui.fragment.FavoriteFrag +import com.all.pdfreader.pro.app.ui.fragment.HomeFrag import com.google.android.material.bottomsheet.BottomSheetDialogFragment class SortDialogFragment( + private val fragment: Fragment, private val onOkClick: (String) -> Unit ) : BottomSheetDialogFragment() { @@ -46,72 +52,41 @@ class SortDialogFragment( super.onViewCreated(view, savedInstanceState) val appStore = AppStore(requireActivity()) isCancelable = false - sortConfig = SortConfig.fromPreferenceString(appStore.documentSortType) + when(fragment){ + is HomeFrag->{ + sortConfig = SortConfig.fromPreferenceString(appStore.documentSortType) + } + is FavoriteFrag->{ + sortConfig = SortConfig.fromPreferenceString(appStore.favoriteSortType) + } + } + updateUi(sortConfig) selectedField = sortConfig.field selectedDirection = sortConfig.direction - setAllAlphaUnselected() - when (sortConfig.field) { - SortField.DATE -> { - setViewsAlpha(1f, binding.createdDateIv, binding.createdDateTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.createdDateGou) - } - - SortField.NAME -> { - setViewsAlpha(1f, binding.fileNameIv, binding.fileNameTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.fileNameGou) - } - - SortField.SIZE -> { - setViewsAlpha(1f, binding.fileSizeIv, binding.fileSizeTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.fileSizeGou) - } - } - when (sortConfig.direction) { - SortDirection.ASC -> { - setViewsAlpha(1f, binding.ascendingIv, binding.ascendingTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.ascendingGou) - } - - SortDirection.DESC -> { - setViewsAlpha(1f, binding.descendingIv, binding.descendingTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.descendingGou) - } - } - binding.createdDateBtn.setOnClickListener { - setAllAlphaTop() - setViewsAlpha(1f, binding.createdDateIv, binding.createdDateTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.createdDateGou) selectedField = SortField.DATE + updateUi(SortConfig(selectedField,selectedDirection)) } binding.fileNameBtn.setOnClickListener { - setAllAlphaTop() - setViewsAlpha(1f, binding.fileNameIv, binding.fileNameTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.fileNameGou) selectedField = SortField.NAME + updateUi(SortConfig(selectedField,selectedDirection)) } binding.fileSizeBtn.setOnClickListener { - setAllAlphaTop() - setViewsAlpha(1f, binding.fileSizeIv, binding.fileSizeTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.fileSizeGou) selectedField = SortField.SIZE + updateUi(SortConfig(selectedField,selectedDirection)) } binding.ascendingBtn.setOnClickListener { - setAllAlphaBoo() - setViewsAlpha(1f, binding.ascendingIv, binding.ascendingTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.ascendingGou) selectedDirection = SortDirection.ASC + updateUi(SortConfig(selectedField,selectedDirection)) } binding.descendingBtn.setOnClickListener { - setAllAlphaBoo() - setViewsAlpha(1f, binding.descendingIv, binding.descendingTv) - setViewsGoneIsVISIBLE(View.VISIBLE, binding.descendingGou) selectedDirection = SortDirection.DESC + updateUi(SortConfig(selectedField,selectedDirection)) } binding.cancelBtn.setOnClickListener { @@ -121,74 +96,80 @@ class SortDialogFragment( val newConfig = SortConfig( field = selectedField, direction = selectedDirection ) - appStore.documentSortType = newConfig.toPreferenceString() - onOkClick(appStore.documentSortType) + onOkClick(newConfig.toPreferenceString()) dismiss() } } - private fun setAllAlphaTop() { - setViewsAlpha( - 0.5f, - binding.createdDateIv, - binding.createdDateTv, - binding.fileNameIv, - binding.fileNameTv, - binding.fileSizeIv, - binding.fileSizeTv, - ) - setViewsGoneIsVISIBLE( - View.GONE, - binding.createdDateGou, - binding.fileNameGou, - binding.fileSizeGou, - ) - } + private fun updateUi(config: SortConfig){ + when (config.field) { + SortField.DATE -> { + binding.createdDateIv.setImageResource(R.drawable.icon_created_date) + binding.createdDateTv.setTextColor(requireActivity().getColor(R.color.icon_on)) - private fun setAllAlphaBoo() { - setViewsAlpha( - 0.5f, - binding.ascendingIv, - binding.ascendingTv, - binding.descendingIv, - binding.descendingTv - ) - setViewsGoneIsVISIBLE( - View.GONE, - binding.ascendingGou, - binding.descendingGou - ) - } + binding.fileNameIv.setImageResource(R.drawable.icon_sort_name_off) + binding.fileNameTv.setTextColor(requireActivity().getColor(R.color.icon_off)) - private fun setAllAlphaUnselected() { - setViewsAlpha( - 0.5f, - binding.createdDateIv, - binding.createdDateTv, - binding.fileNameIv, - binding.fileNameTv, - binding.fileSizeIv, - binding.fileSizeTv, - binding.ascendingIv, - binding.ascendingTv, - binding.descendingIv, - binding.descendingTv - ) - setViewsGoneIsVISIBLE( - View.GONE, - binding.createdDateGou, - binding.fileNameGou, - binding.fileSizeGou, - binding.ascendingGou, - binding.descendingGou - ) - } + binding.fileSizeIv.setImageResource(R.drawable.icon_sort_size_off) + binding.fileSizeTv.setTextColor(requireActivity().getColor(R.color.icon_off)) - private fun setViewsAlpha(alpha: Float, vararg views: View) { - views.forEach { it.alpha = alpha } - } + binding.createdDateGou.visibility = View.VISIBLE + binding.fileNameGou.visibility = View.GONE + binding.fileSizeGou.visibility = View.GONE + } - private fun setViewsGoneIsVISIBLE(int: Int, vararg views: View) { - views.forEach { it.visibility = int } + SortField.NAME -> { + binding.createdDateIv.setImageResource(R.drawable.icon_created_date_off) + binding.createdDateTv.setTextColor(requireActivity().getColor(R.color.icon_off)) + + binding.fileNameIv.setImageResource(R.drawable.icon_sort_name) + binding.fileNameTv.setTextColor(requireActivity().getColor(R.color.icon_on)) + + binding.fileSizeIv.setImageResource(R.drawable.icon_sort_size_off) + binding.fileSizeTv.setTextColor(requireActivity().getColor(R.color.icon_off)) + + binding.createdDateGou.visibility = View.GONE + binding.fileNameGou.visibility = View.VISIBLE + binding.fileSizeGou.visibility = View.GONE + } + + SortField.SIZE -> { + binding.createdDateIv.setImageResource(R.drawable.icon_created_date_off) + binding.createdDateTv.setTextColor(requireActivity().getColor(R.color.icon_off)) + + binding.fileNameIv.setImageResource(R.drawable.icon_sort_name_off) + binding.fileNameTv.setTextColor(requireActivity().getColor(R.color.icon_off)) + + binding.fileSizeIv.setImageResource(R.drawable.icon_sort_size) + binding.fileSizeTv.setTextColor(requireActivity().getColor(R.color.icon_on)) + + binding.createdDateGou.visibility = View.GONE + binding.fileNameGou.visibility = View.GONE + binding.fileSizeGou.visibility = View.VISIBLE + } + } + when (config.direction) { + SortDirection.ASC -> { + binding.ascendingIv.setImageResource(R.drawable.icon_ascending) + binding.ascendingTv.setTextColor(requireActivity().getColor(R.color.icon_on)) + + binding.descendingIv.setImageResource(R.drawable.icon_descending_off) + binding.descendingTv.setTextColor(requireActivity().getColor(R.color.icon_off)) + + binding.ascendingGou.visibility = View.VISIBLE + binding.descendingGou.visibility = View.GONE + } + + SortDirection.DESC -> { + binding.ascendingIv.setImageResource(R.drawable.icon_ascending_off) + binding.ascendingTv.setTextColor(requireActivity().getColor(R.color.icon_off)) + + binding.descendingIv.setImageResource(R.drawable.icon_descending) + binding.descendingTv.setTextColor(requireActivity().getColor(R.color.icon_on)) + + binding.ascendingGou.visibility = View.GONE + binding.descendingGou.visibility = View.VISIBLE + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/FavoriteFrag.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/FavoriteFrag.kt index 13113cf..2214607 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/FavoriteFrag.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/FavoriteFrag.kt @@ -9,17 +9,22 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.LinearLayoutManager +import com.all.pdfreader.pro.app.R import com.all.pdfreader.pro.app.databinding.FragmentFavoriteBinding import com.all.pdfreader.pro.app.model.FragmentType +import com.all.pdfreader.pro.app.model.SortConfig +import com.all.pdfreader.pro.app.model.SortField 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 +import com.all.pdfreader.pro.app.ui.dialog.SortDialogFragment +import com.all.pdfreader.pro.app.util.AppUtils.setOnSingleClickListener import kotlinx.coroutines.launch -class FavoriteFrag : BaseFrag() { +class FavoriteFrag : BaseFrag(){ override val TAG: String = "FavoriteFrag" companion object { @@ -32,7 +37,7 @@ class FavoriteFrag : BaseFrag() { private var onItemLongClickListener: OnItemLongClickListener? = null interface OnItemLongClickListener { - fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType) + fun onItemLongClicked(type: FragmentType) } override fun onCreateView( @@ -46,6 +51,14 @@ class FavoriteFrag : BaseFrag() { super.onViewCreated(view, savedInstanceState) initView() observeDocuments() + updateSortUi(appStore.favoriteSortType) + } + + fun setupMultiSelect() { + onItemLongClickListener?.onItemLongClicked(FragmentType.FAVORITE) + updateSwipeRefreshState() + (requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size) + adapter.setIsMultiSelectMode(true) } private fun initView() { @@ -55,9 +68,7 @@ class FavoriteFrag : BaseFrag() { }, onMoreClick = { pdf -> ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG) }, onLongClick = { pdf -> - onItemLongClickListener?.onItemLongClicked(pdf, FragmentType.FAVORITE) - updateSwipeRefreshState() - (requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size) + setupMultiSelect() }, onSelectModelItemClick = { number -> (requireActivity() as? MainActivity)?.updateSelectNumber(number) }) @@ -71,6 +82,13 @@ class FavoriteFrag : BaseFrag() { binding.swipeRefreshLayout.isRefreshing = false } } + + binding.sortingBtn.setOnSingleClickListener { + SortDialogFragment(FavoriteFrag(), onOkClick = { it -> + updateSortUi(it) + onSortFavoriteTypeChanged(it) + }).show(parentFragmentManager, TAG) + } } fun updateSwipeRefreshState() { @@ -85,8 +103,9 @@ class FavoriteFrag : BaseFrag() { private fun observeDocuments(onComplete: () -> Unit = {}) { lifecycleScope.launch { PdfRepository.getInstance().getFavoriteDocuments().collect { list -> - if (list.isNotEmpty()) { - adapter.updateData(list) + val sortedList = sortDocuments(list) + if (sortedList.isNotEmpty()) { + adapter.updateData(sortedList) onComplete() binding.noFilesLayout.visibility = View.GONE } else { @@ -102,4 +121,32 @@ class FavoriteFrag : BaseFrag() { onItemLongClickListener = context } } + + private fun onSortFavoriteTypeChanged(sortType: String) { + appStore.favoriteSortType = sortType + updateSortUi(sortType) + observeDocuments() + } + + private fun sortDocuments(documents: List): List { + val sortConfig = SortConfig.fromPreferenceString(appStore.favoriteSortType) + return sortConfig.applySortFavorite(documents) + } + + private fun updateSortUi(type: String) { + val config = SortConfig.fromPreferenceString(type) + when (config.field) { + SortField.NAME -> { + binding.sortingTv.text = getString(R.string.sort_by_name) + } + + SortField.DATE -> { + binding.sortingTv.text = getString(R.string.sort_by_last_modified) + } + + SortField.SIZE -> { + binding.sortingTv.text = getString(R.string.sort_by_size) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/HomeFrag.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/HomeFrag.kt index cf1a224..a34f1b4 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/HomeFrag.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/HomeFrag.kt @@ -1,26 +1,29 @@ package com.all.pdfreader.pro.app.ui.fragment import android.content.Context -import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager +import com.all.pdfreader.pro.app.R 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.SortField 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 +import com.all.pdfreader.pro.app.ui.dialog.SortDialogFragment +import com.all.pdfreader.pro.app.util.AppUtils.setOnSingleClickListener import com.all.pdfreader.pro.app.util.PdfScanner import kotlinx.coroutines.launch -class HomeFrag : BaseFrag(), MainActivity.SortableFragment { +class HomeFrag : BaseFrag(){ override val TAG: String = "HomeFrag" companion object { @@ -32,7 +35,7 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment { private var onItemLongClickListener: OnItemLongClickListener? = null interface OnItemLongClickListener { - fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType) + fun onItemLongClicked(type: FragmentType) } override fun onCreateView( @@ -46,23 +49,24 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment { super.onViewCreated(view, savedInstanceState) initView() observeDocuments() + updateSortUi(appStore.documentSortType) + } + + fun setupMultiSelect() { + onItemLongClickListener?.onItemLongClicked(FragmentType.HOME) + updateSwipeRefreshState() + (requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size) + adapter.setIsMultiSelectMode(true) } private fun initView() { adapter = PdfAdapter(pdfList = mutableListOf(), onItemClick = { pdf -> val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath) startActivity(intent) - -// val intent = Intent(context, PdfTextSearchTestActivity::class.java).apply { -// putExtra("pdf_path", pdf.filePath) -// } -// 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) + setupMultiSelect() }, onSelectModelItemClick = { number -> (requireActivity() as? MainActivity)?.updateSelectNumber(number) }) @@ -79,6 +83,13 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment { } } } + + binding.sortingBtn.setOnSingleClickListener { + SortDialogFragment(HomeFrag(), onOkClick = { it -> + updateSortUi(it) + onSortTypeChanged(it) + }).show(parentFragmentManager, TAG) + } } fun updateSwipeRefreshState() { @@ -90,7 +101,9 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment { binding.swipeRefreshLayout.isEnabled = !adapter.getIsMultiSelectMode() } - override fun onSortTypeChanged(sortType: String) { + private fun onSortTypeChanged(sortType: String) { + appStore.documentSortType = sortType + updateSortUi(sortType) // 排序类型改变时重新加载数据 observeDocuments() } @@ -105,7 +118,6 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment { } else { binding.noFilesLayout.visibility = View.VISIBLE } - logDebug("更新adapter数据,排序方式: ${appStore.documentSortType}") } } } @@ -122,4 +134,20 @@ class HomeFrag : BaseFrag(), MainActivity.SortableFragment { } } + private fun updateSortUi(type: String) { + val config = SortConfig.fromPreferenceString(type) + when (config.field) { + SortField.NAME -> { + binding.sortingTv.text = getString(R.string.sort_by_name) + } + + SortField.DATE -> { + binding.sortingTv.text = getString(R.string.sort_by_last_modified) + } + + SortField.SIZE -> { + binding.sortingTv.text = getString(R.string.sort_by_size) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/RecentlyFrag.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/RecentlyFrag.kt index 12fd8ad..1370824 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/RecentlyFrag.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/RecentlyFrag.kt @@ -31,7 +31,7 @@ class RecentlyFrag : BaseFrag() { private var onItemLongClickListener: OnItemLongClickListener? = null interface OnItemLongClickListener { - fun onItemLongClicked(item: PdfDocumentEntity, type: FragmentType) + fun onItemLongClicked(type: FragmentType) } override fun onCreateView( @@ -47,6 +47,13 @@ class RecentlyFrag : BaseFrag() { observeDocuments() } + fun setupMultiSelect() { + onItemLongClickListener?.onItemLongClicked(FragmentType.RECENTLY) + updateSwipeRefreshState() + (requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size) + adapter.setIsMultiSelectMode(true) + } + private fun initView() { adapter = PdfAdapter(pdfList = mutableListOf(), onItemClick = { pdf -> val intent = PdfViewActivity.createIntent(requireContext(), pdf.filePath) @@ -54,9 +61,7 @@ class RecentlyFrag : BaseFrag() { }, onMoreClick = { pdf -> ListMoreDialogFragment(pdf.filePath).show(parentFragmentManager, FRAG_TAG) }, onLongClick = { pdf -> - onItemLongClickListener?.onItemLongClicked(pdf, FragmentType.RECENTLY) - updateSwipeRefreshState() - (requireActivity() as? MainActivity)?.updateSelectNumber(adapter.getSelectedItems().size) + setupMultiSelect() }, onSelectModelItemClick = { number -> (requireActivity() as? MainActivity)?.updateSelectNumber(number) }) diff --git a/app/src/main/java/com/all/pdfreader/pro/app/util/FileUtils.kt b/app/src/main/java/com/all/pdfreader/pro/app/util/FileUtils.kt index 82225ad..05fdbdd 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/util/FileUtils.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/util/FileUtils.kt @@ -597,4 +597,8 @@ object FileUtils { } } + fun getParentFolderName(path: String): String? { + val file = File(path) + return file.parentFile?.name + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/back_white.xml b/app/src/main/res/drawable/back_white.xml new file mode 100644 index 0000000..6d1622e --- /dev/null +++ b/app/src/main/res/drawable/back_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/checkbox_selector.xml b/app/src/main/res/drawable/checkbox_selector.xml new file mode 100644 index 0000000..740ef05 --- /dev/null +++ b/app/src/main/res/drawable/checkbox_selector.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app/src/main/res/drawable/collect.xml b/app/src/main/res/drawable/collect.xml index 67829d7..2c5ccb1 100644 --- a/app/src/main/res/drawable/collect.xml +++ b/app/src/main/res/drawable/collect.xml @@ -4,10 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M12,23C11.878,22.99 11.759,22.956 11.65,22.9C11.2,22.7 0,17 0,8.45C0.003,6.621 0.73,4.867 2.024,3.574C3.317,2.28 5.071,1.553 6.9,1.55C7.859,1.556 8.806,1.758 9.684,2.145C10.561,2.532 11.349,3.096 12,3.8C12.644,3.087 13.431,2.518 14.31,2.13C15.189,1.742 16.139,1.545 17.1,1.55C18.929,1.553 20.683,2.28 21.976,3.574C23.27,4.867 23.997,6.621 24,8.45C24,17 12.8,22.7 12.35,22.9C12.241,22.956 12.122,22.99 12,23ZM6.9,3.1C5.482,3.103 4.123,3.667 3.12,4.67C2.117,5.673 1.553,7.032 1.55,8.45C1.55,15.25 10.15,20.35 12,21.35C13.85,20.35 22.45,15.25 22.45,8.45C22.464,7.296 22.103,6.168 21.423,5.236C20.742,4.304 19.777,3.618 18.674,3.28C17.57,2.942 16.386,2.971 15.3,3.362C14.215,3.753 13.285,4.486 12.65,5.45C12.577,5.555 12.48,5.641 12.367,5.701C12.254,5.76 12.128,5.791 12,5.791C11.872,5.791 11.746,5.76 11.633,5.701C11.52,5.641 11.423,5.555 11.35,5.45C10.859,4.722 10.196,4.127 9.42,3.717C8.643,3.307 7.778,3.095 6.9,3.1Z" + android:fillColor="#A9A4A4"/> diff --git a/app/src/main/res/drawable/collected.xml b/app/src/main/res/drawable/collected.xml index 2acf841..396490a 100644 --- a/app/src/main/res/drawable/collected.xml +++ b/app/src/main/res/drawable/collected.xml @@ -4,10 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M17.11,1.6C16.149,1.592 15.197,1.789 14.318,2.177C13.439,2.565 12.652,3.135 12.01,3.85C11.359,3.146 10.571,2.582 9.694,2.195C8.816,1.808 7.869,1.606 6.91,1.6C5.08,1.603 3.325,2.33 2.03,3.623C0.735,4.916 0.005,6.67 0,8.5C0,17.05 11.21,22.75 11.66,22.95C11.769,23.006 11.888,23.04 12.01,23.05C12.129,23.042 12.245,23.007 12.35,22.95C12.81,22.75 24,17.05 24,8.5C23.997,6.673 23.271,4.921 21.98,3.627C20.688,2.334 18.937,1.605 17.11,1.6Z" + android:fillColor="#E43521"/> diff --git a/app/src/main/res/drawable/dr_collect_state_bg.xml b/app/src/main/res/drawable/dr_collect_state_bg.xml index 293c2b1..23b86d5 100644 --- a/app/src/main/res/drawable/dr_collect_state_bg.xml +++ b/app/src/main/res/drawable/dr_collect_state_bg.xml @@ -2,7 +2,7 @@ + android:topLeftRadius="4dp" + android:bottomRightRadius="4dp" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/dr_item_img_frame.xml b/app/src/main/res/drawable/dr_item_img_frame.xml index cb2fb17..db82cff 100644 --- a/app/src/main/res/drawable/dr_item_img_frame.xml +++ b/app/src/main/res/drawable/dr_item_img_frame.xml @@ -3,5 +3,5 @@ android:shape="rectangle"> - + \ No newline at end of file diff --git a/app/src/main/res/drawable/dr_item_lock_bg.xml b/app/src/main/res/drawable/dr_item_lock_bg.xml index 4369dcf..4bf1018 100644 --- a/app/src/main/res/drawable/dr_item_lock_bg.xml +++ b/app/src/main/res/drawable/dr_item_lock_bg.xml @@ -1,7 +1,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/dr_placeholder_bg.xml b/app/src/main/res/drawable/dr_placeholder_bg.xml index 7498e17..b0cbd2d 100644 --- a/app/src/main/res/drawable/dr_placeholder_bg.xml +++ b/app/src/main/res/drawable/dr_placeholder_bg.xml @@ -2,5 +2,5 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/dr_top_left_radius_white_bg.xml b/app/src/main/res/drawable/dr_top_left_radius_white_bg.xml new file mode 100644 index 0000000..64744d8 --- /dev/null +++ b/app/src/main/res/drawable/dr_top_left_radius_white_bg.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_checkbox_checked.xml b/app/src/main/res/drawable/ic_checkbox_checked.xml new file mode 100644 index 0000000..a7c65df --- /dev/null +++ b/app/src/main/res/drawable/ic_checkbox_checked.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_checkbox_unchecked.xml b/app/src/main/res/drawable/ic_checkbox_unchecked.xml new file mode 100644 index 0000000..c3103d7 --- /dev/null +++ b/app/src/main/res/drawable/ic_checkbox_unchecked.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_arrow_down.xml b/app/src/main/res/drawable/icon_arrow_down.xml new file mode 100644 index 0000000..551dbeb --- /dev/null +++ b/app/src/main/res/drawable/icon_arrow_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_ascending.xml b/app/src/main/res/drawable/icon_ascending.xml index 305196d..7c0c196 100644 --- a/app/src/main/res/drawable/icon_ascending.xml +++ b/app/src/main/res/drawable/icon_ascending.xml @@ -3,22 +3,16 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - + + + + diff --git a/app/src/main/res/drawable/icon_ascending_off.xml b/app/src/main/res/drawable/icon_ascending_off.xml new file mode 100644 index 0000000..a4ce668 --- /dev/null +++ b/app/src/main/res/drawable/icon_ascending_off.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_created_date.xml b/app/src/main/res/drawable/icon_created_date.xml index 1c1ec10..0dd6a46 100644 --- a/app/src/main/res/drawable/icon_created_date.xml +++ b/app/src/main/res/drawable/icon_created_date.xml @@ -3,18 +3,31 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + + + + + + + + + diff --git a/app/src/main/res/drawable/icon_created_date_off.xml b/app/src/main/res/drawable/icon_created_date_off.xml new file mode 100644 index 0000000..adf277b --- /dev/null +++ b/app/src/main/res/drawable/icon_created_date_off.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/icon_descending.xml b/app/src/main/res/drawable/icon_descending.xml index d2b4af2..7424a42 100644 --- a/app/src/main/res/drawable/icon_descending.xml +++ b/app/src/main/res/drawable/icon_descending.xml @@ -3,22 +3,16 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - + + + + diff --git a/app/src/main/res/drawable/icon_descending_off.xml b/app/src/main/res/drawable/icon_descending_off.xml new file mode 100644 index 0000000..8ff568e --- /dev/null +++ b/app/src/main/res/drawable/icon_descending_off.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_file_gray.xml b/app/src/main/res/drawable/icon_file_gray.xml new file mode 100644 index 0000000..14b4d7e --- /dev/null +++ b/app/src/main/res/drawable/icon_file_gray.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_home_sel_off.xml b/app/src/main/res/drawable/icon_home_sel_off.xml index 219f249..0d0ebf3 100644 --- a/app/src/main/res/drawable/icon_home_sel_off.xml +++ b/app/src/main/res/drawable/icon_home_sel_off.xml @@ -4,14 +4,9 @@ android:viewportWidth="24" android:viewportHeight="24"> + android:pathData="M20.2,22.94H3.81C2.873,22.937 1.975,22.563 1.313,21.9C0.652,21.236 0.28,20.337 0.28,19.4V8.19C0.282,7.576 0.442,6.972 0.745,6.438C1.048,5.904 1.484,5.457 2.01,5.14L10.45,1C10.934,0.763 11.466,0.64 12.005,0.64C12.544,0.64 13.076,0.763 13.56,1L21.93,5.11C22.474,5.42 22.926,5.868 23.242,6.409C23.558,6.95 23.726,7.564 23.73,8.19V19.44C23.719,20.37 23.343,21.259 22.683,21.914C22.022,22.569 21.13,22.937 20.2,22.94ZM12,2.4C11.737,2.397 11.477,2.455 11.24,2.57L2.87,6.68C2.627,6.841 2.428,7.059 2.29,7.315C2.152,7.572 2.08,7.859 2.08,8.15V19.4C2.08,19.86 2.262,20.301 2.586,20.627C2.91,20.953 3.35,21.137 3.81,21.14H20.2C20.66,21.137 21.1,20.953 21.424,20.627C21.748,20.301 21.93,19.86 21.93,19.4V8.19C21.929,7.888 21.85,7.591 21.701,7.329C21.552,7.066 21.338,6.846 21.08,6.69L12.77,2.61C12.534,2.48 12.27,2.408 12,2.4Z" + android:fillColor="#A9A4A4"/> + android:pathData="M16.65,18.45H7.4C7.161,18.45 6.932,18.355 6.764,18.186C6.595,18.018 6.5,17.789 6.5,17.55C6.5,17.311 6.595,17.082 6.764,16.914C6.932,16.745 7.161,16.65 7.4,16.65H16.69C16.929,16.65 17.158,16.745 17.326,16.914C17.495,17.082 17.59,17.311 17.59,17.55C17.59,17.789 17.495,18.018 17.326,18.186C17.158,18.355 16.929,18.45 16.69,18.45H16.65Z" + android:fillColor="#A9A4A4"/> diff --git a/app/src/main/res/drawable/icon_home_sel_on.xml b/app/src/main/res/drawable/icon_home_sel_on.xml index f4af84a..a1dc9e7 100644 --- a/app/src/main/res/drawable/icon_home_sel_on.xml +++ b/app/src/main/res/drawable/icon_home_sel_on.xml @@ -3,15 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + diff --git a/app/src/main/res/drawable/icon_lock_item.xml b/app/src/main/res/drawable/icon_lock_item.xml new file mode 100644 index 0000000..4c6130b --- /dev/null +++ b/app/src/main/res/drawable/icon_lock_item.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/icon_multi_select.xml b/app/src/main/res/drawable/icon_multi_select.xml new file mode 100644 index 0000000..64438f2 --- /dev/null +++ b/app/src/main/res/drawable/icon_multi_select.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_recently_sel_off.xml b/app/src/main/res/drawable/icon_recently_sel_off.xml index 3606d30..3dd70c2 100644 --- a/app/src/main/res/drawable/icon_recently_sel_off.xml +++ b/app/src/main/res/drawable/icon_recently_sel_off.xml @@ -3,18 +3,14 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> + + + android:pathData="M12,23.41C9.743,23.41 7.537,22.741 5.661,21.487C3.785,20.233 2.322,18.451 1.459,16.366C0.595,14.281 0.369,11.987 0.809,9.774C1.25,7.561 2.336,5.528 3.932,3.932C5.528,2.336 7.561,1.25 9.774,0.809C11.987,0.369 14.281,0.595 16.366,1.459C18.451,2.322 20.233,3.785 21.487,5.661C22.741,7.537 23.41,9.743 23.41,12C23.407,15.025 22.204,17.926 20.065,20.065C17.926,22.204 15.025,23.407 12,23.41ZM12,2.41C10.099,2.41 8.241,2.974 6.661,4.03C5.081,5.086 3.849,6.586 3.122,8.342C2.394,10.098 2.204,12.031 2.575,13.895C2.945,15.759 3.861,17.471 5.205,18.815C6.549,20.159 8.261,21.075 10.125,21.445C11.989,21.816 13.922,21.626 15.678,20.899C17.434,20.171 18.934,18.939 19.99,17.359C21.046,15.779 21.61,13.921 21.61,12.02C21.611,10.757 21.364,9.505 20.882,8.338C20.399,7.17 19.692,6.109 18.799,5.215C17.907,4.32 16.847,3.611 15.681,3.126C14.514,2.641 13.263,2.391 12,2.39V2.41Z" + android:fillColor="#A9A4A4"/> + android:pathData="M14.63,15.86C14.511,15.861 14.394,15.839 14.284,15.795C14.174,15.75 14.074,15.684 13.99,15.6L11.36,12.97C11.277,12.887 11.212,12.789 11.167,12.681C11.123,12.573 11.1,12.457 11.1,12.34V6.8C11.1,6.561 11.195,6.332 11.364,6.164C11.532,5.995 11.761,5.9 12,5.9C12.239,5.9 12.468,5.995 12.636,6.164C12.805,6.332 12.9,6.561 12.9,6.8V11.96L15.27,14.33C15.394,14.456 15.478,14.617 15.511,14.79C15.545,14.964 15.526,15.144 15.458,15.307C15.389,15.471 15.274,15.61 15.127,15.708C14.98,15.807 14.807,15.859 14.63,15.86Z" + android:fillColor="#A9A4A4"/> + diff --git a/app/src/main/res/drawable/icon_recently_sel_on.xml b/app/src/main/res/drawable/icon_recently_sel_on.xml index 10d240e..7e38460 100644 --- a/app/src/main/res/drawable/icon_recently_sel_on.xml +++ b/app/src/main/res/drawable/icon_recently_sel_on.xml @@ -1,20 +1,9 @@ - - + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + diff --git a/app/src/main/res/drawable/icon_search.xml b/app/src/main/res/drawable/icon_search.xml new file mode 100644 index 0000000..d535e4e --- /dev/null +++ b/app/src/main/res/drawable/icon_search.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/icon_select_all.xml b/app/src/main/res/drawable/icon_select_all.xml new file mode 100644 index 0000000..06a3c47 --- /dev/null +++ b/app/src/main/res/drawable/icon_select_all.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_sidebar.xml b/app/src/main/res/drawable/icon_sidebar.xml new file mode 100644 index 0000000..be0103d --- /dev/null +++ b/app/src/main/res/drawable/icon_sidebar.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_sort_name.xml b/app/src/main/res/drawable/icon_sort_name.xml index bd23612..b0ccf56 100644 --- a/app/src/main/res/drawable/icon_sort_name.xml +++ b/app/src/main/res/drawable/icon_sort_name.xml @@ -3,22 +3,16 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - + + + + diff --git a/app/src/main/res/drawable/icon_sort_name_off.xml b/app/src/main/res/drawable/icon_sort_name_off.xml new file mode 100644 index 0000000..e0fc630 --- /dev/null +++ b/app/src/main/res/drawable/icon_sort_name_off.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/icon_sort_size.xml b/app/src/main/res/drawable/icon_sort_size.xml index dfa8da8..73301e4 100644 --- a/app/src/main/res/drawable/icon_sort_size.xml +++ b/app/src/main/res/drawable/icon_sort_size.xml @@ -3,22 +3,13 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - + + + diff --git a/app/src/main/res/drawable/icon_sort_size_off.xml b/app/src/main/res/drawable/icon_sort_size_off.xml new file mode 100644 index 0000000..6aaadf4 --- /dev/null +++ b/app/src/main/res/drawable/icon_sort_size_off.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_tools_sel_off.xml b/app/src/main/res/drawable/icon_tools_sel_off.xml index d91998f..72938d6 100644 --- a/app/src/main/res/drawable/icon_tools_sel_off.xml +++ b/app/src/main/res/drawable/icon_tools_sel_off.xml @@ -3,32 +3,16 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - - - + + + + diff --git a/app/src/main/res/drawable/icon_tools_sel_on.xml b/app/src/main/res/drawable/icon_tools_sel_on.xml index a9e1008..8b916d9 100644 --- a/app/src/main/res/drawable/icon_tools_sel_on.xml +++ b/app/src/main/res/drawable/icon_tools_sel_on.xml @@ -3,32 +3,13 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - - - - + + + diff --git a/app/src/main/res/drawable/search.xml b/app/src/main/res/drawable/search.xml deleted file mode 100644 index 1aae517..0000000 --- a/app/src/main/res/drawable/search.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/sidebar.xml b/app/src/main/res/drawable/sidebar.xml deleted file mode 100644 index 42630aa..0000000 --- a/app/src/main/res/drawable/sidebar.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7eb4aed..f5b8d1a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,7 +2,7 @@ + android:gravity="center" + android:visibility="visible"> + android:src="@drawable/icon_sidebar" /> @@ -41,7 +41,7 @@ android:layout_marginEnd="6dp" android:layout_weight="1" android:text="@string/app_name" - android:textColor="@color/black" + android:textColor="@color/white" android:textSize="18sp" /> + android:src="@drawable/icon_search" /> + android:src="@drawable/icon_multi_select" /> @@ -99,7 +98,7 @@ + android:src="@drawable/back_white" /> @@ -112,7 +111,7 @@ android:layout_marginEnd="6dp" android:layout_weight="1" android:text="@string/selected_page" - android:textColor="@color/black" + android:textColor="@color/white" android:textSize="18sp" /> + android:src="@drawable/icon_select_all" /> @@ -136,314 +132,323 @@ - - - - - - + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> - + + + + + - - - - - - - - - - - - - - - - - - + android:orientation="horizontal" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:visibility="visible"> + android:src="@drawable/icon_notice" /> - + + + + + + + + + android:layout_height="match_parent" + android:gravity="center"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:id="@+id/multiSelectBottomLayout" + android:layout_width="match_parent" + android:layout_height="64dp" + android:background="@color/white" + android:orientation="horizontal" + android:visibility="visible"> - + - - + - + + - + - - + - + + - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_pdf_picker.xml b/app/src/main/res/layout/activity_pdf_picker.xml index b6513bc..d2cd608 100644 --- a/app/src/main/res/layout/activity_pdf_picker.xml +++ b/app/src/main/res/layout/activity_pdf_picker.xml @@ -56,7 +56,7 @@ + android:src="@drawable/icon_search" /> diff --git a/app/src/main/res/layout/activity_pdf_view.xml b/app/src/main/res/layout/activity_pdf_view.xml index 6b7e245..44e2413 100644 --- a/app/src/main/res/layout/activity_pdf_view.xml +++ b/app/src/main/res/layout/activity_pdf_view.xml @@ -80,7 +80,7 @@ android:id="@+id/searchIv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/search" /> + android:src="@drawable/icon_search" /> + android:src="@drawable/icon_search" /> diff --git a/app/src/main/res/layout/activity_search_pdf.xml b/app/src/main/res/layout/activity_search_pdf.xml index 29a4db4..19c0a6c 100644 --- a/app/src/main/res/layout/activity_search_pdf.xml +++ b/app/src/main/res/layout/activity_search_pdf.xml @@ -63,7 +63,7 @@ android:id="@+id/searchIv" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/search" /> + android:src="@drawable/icon_search" /> + android:layout_width="66dp" + android:layout_height="80dp"> @@ -60,27 +56,27 @@ + android:src="@drawable/icon_lock_item" /> - @@ -108,7 +106,7 @@ android:layout_height="wrap_content" android:text="2月27,2025" android:textColor="@color/black_60" - android:textSize="14sp" /> + android:textSize="12sp" /> + android:textSize="12sp" /> - + + + + + + + + + @@ -139,8 +161,8 @@ @@ -149,6 +171,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" + android:button="@drawable/checkbox_selector" android:clickable="false" android:duplicateParentState="true" android:focusable="false" /> @@ -156,8 +179,8 @@ diff --git a/app/src/main/res/layout/adapter_selected_result_item.xml b/app/src/main/res/layout/adapter_selected_result_item.xml index f8c1d59..0cb4341 100644 --- a/app/src/main/res/layout/adapter_selected_result_item.xml +++ b/app/src/main/res/layout/adapter_selected_result_item.xml @@ -48,7 +48,7 @@ + android:src="@drawable/icon_lock_item" /> diff --git a/app/src/main/res/layout/dialog_sort.xml b/app/src/main/res/layout/dialog_sort.xml index 1a48804..c88bafa 100644 --- a/app/src/main/res/layout/dialog_sort.xml +++ b/app/src/main/res/layout/dialog_sort.xml @@ -40,8 +40,8 @@ android:layout_marginStart="16dp" android:layout_weight="1" android:text="@string/created_date" - style="@style/TextViewFont_PopRegular" - android:textColor="@color/black" + style="@style/TextViewFont_PopMedium" + android:textColor="@color/icon_on" android:textSize="16sp" /> + + + + + + + + + + + + + + - + android:layout_height="match_parent" + android:layout_marginTop="20dp"> #BB6D64 #E43521 #33E43521 - #E8EAEE + #E5E5E5 #A6000000 + #A9A4A4 + #E43521 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f32c1c3..6104b63 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -166,4 +166,7 @@ Press again to exit Please enter the search keyword No more results + Sort by Last modified + Sort by Name + Sort by Size \ No newline at end of file