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 783c597..e5a2572 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 @@ -2,7 +2,6 @@ package com.all.pdfreader.pro.app.ui.act import android.os.Build import android.os.Bundle -import android.os.Environment import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.Fragment @@ -13,6 +12,7 @@ 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.model.PdfPickerSource 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 @@ -25,7 +25,6 @@ import com.all.pdfreader.pro.app.ui.fragment.ToolsFrag import com.all.pdfreader.pro.app.util.AppUtils.setClickWithAnimation import com.all.pdfreader.pro.app.util.AppUtils.setOnSingleClickListener import com.all.pdfreader.pro.app.util.PdfScanner -import com.all.pdfreader.pro.app.util.PdfUtils import com.all.pdfreader.pro.app.util.StoragePermissionHelper import com.all.pdfreader.pro.app.viewmodel.PdfViewModel import com.all.pdfreader.pro.app.viewmodel.observeEvent @@ -187,7 +186,7 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback } binding.searchBtn.setClickWithAnimation { - startActivity(SearchActivity.createIntent(this)) + startActivity(SearchActivity.createIntent(this, PdfPickerSource.NONE)) } binding.sortingBtn.setClickWithAnimation { diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt index 01c1b6a..7dba9e4 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt @@ -6,6 +6,7 @@ import android.os.Build import android.os.Bundle import android.os.Parcelable import android.view.View +import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.all.pdfreader.pro.app.R @@ -112,10 +113,6 @@ class PdfPickerActivity : BaseActivity() { onSelectModelItemClick = { if (source == PdfPickerSource.MERGE) { val selectedItems = adapter.getSelectedItems() - if (selectedItems.isNotEmpty()) { - val filePaths = selectedItems.map { it.filePath } - logDebug("${filePaths.size}") - } updateViewAndState(selectedItems.size) } }, @@ -164,10 +161,43 @@ class PdfPickerActivity : BaseActivity() { } } + private val searchLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + if (source == PdfPickerSource.MERGE) { + val selectedPath = + result.data?.getStringExtra(SearchActivity.EXTRA_SELECTED_PATH) + val currentList = adapter.getCurrentList().toMutableList() + val selectedItemIndex = currentList.indexOfFirst { it.filePath == selectedPath } + if (selectedItemIndex != -1) { + // 找到选中项 + val selectedItem = currentList[selectedItemIndex] + selectedItem.isSelected = true + // 移动到第一位 + currentList.removeAt(selectedItemIndex) + currentList.add(0, selectedItem) + + adapter.updateData(currentList) + } + val selectedItems = adapter.getSelectedItems() + updateViewAndState(selectedItems.size) + } else { + // 只有非多选的情况才关闭 + // 这里主要是为了只有通过这边进入搜索界面后,在搜索界面点击了item后finish前面这个act + finish() + } + } + } + + private fun openSearch() { + val intent = SearchActivity.createIntent(this, source) + searchLauncher.launch(intent) + } + private fun setupClick() { binding.backBtn.setOnSingleClickListener { finish() } binding.searchBtn.setClickWithAnimation { - + openSearch() } binding.continueNowBtn.setOnSingleClickListener { val selectedItems = adapter.getSelectedItems() diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt index 42bec52..d104d91 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt @@ -3,6 +3,7 @@ package com.all.pdfreader.pro.app.ui.act import android.content.Context import android.content.Intent import android.content.SharedPreferences +import android.os.Build import android.os.Bundle import android.text.Editable import android.text.TextWatcher @@ -14,9 +15,11 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.all.pdfreader.pro.app.R import com.all.pdfreader.pro.app.databinding.ActivitySearchPdfBinding +import com.all.pdfreader.pro.app.model.PdfPickerSource import com.all.pdfreader.pro.app.ui.adapter.SearchPdfAdapter import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment -import com.all.pdfreader.pro.app.ui.dialog.PermissionDialogFragment +import com.all.pdfreader.pro.app.ui.dialog.PdfRemovePasswordDialog +import com.all.pdfreader.pro.app.ui.dialog.PdfSetPasswordDialog import com.all.pdfreader.pro.app.ui.dialog.PromptDialogFragment import com.all.pdfreader.pro.app.util.AppUtils.showKeyboard import com.gyf.immersionbar.ImmersionBar @@ -25,7 +28,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import org.json.JSONArray -import kotlin.math.log +import java.io.Serializable class SearchActivity : BaseActivity() { override val TAG: String = "SearchActivity" @@ -34,9 +37,13 @@ class SearchActivity : BaseActivity() { const val FRAG_TAG = "SearchActivity" private const val PREF_SEARCH_HISTORY = "pref_search_history" private const val KEY_HISTORY_LIST = "key_history_list_json" + private const val EXTRA_SOURCE = "extra_source" + const val EXTRA_SELECTED_PATH = "extra_selected_path" - fun createIntent(context: Context): Intent { - return Intent(context, SearchActivity::class.java) + fun createIntent(context: Context, source: PdfPickerSource): Intent { + return Intent(context, SearchActivity::class.java).apply { + putExtra(EXTRA_SOURCE, source) + } } } @@ -47,6 +54,7 @@ class SearchActivity : BaseActivity() { private val searchHistory: MutableList = mutableListOf() private lateinit var sp: SharedPreferences + private lateinit var source: PdfPickerSource // 来源 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -54,7 +62,7 @@ class SearchActivity : BaseActivity() { setContentView(binding.root) ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(true) .navigationBarColor(R.color.bg_color).init() - + source = getSerializableOrDefault(EXTRA_SOURCE, PdfPickerSource.NONE) sp = getSharedPreferences(PREF_SEARCH_HISTORY, MODE_PRIVATE) loadHistory() @@ -88,7 +96,13 @@ class SearchActivity : BaseActivity() { delay(150) pdfRepository.searchDocuments(query).collectLatest { list -> if (list.isNotEmpty()) { - adapter.updateData(list) { + // 再根据来源过滤 + val displayList = when (source) { + PdfPickerSource.LOCK -> list.filter { !it.isPassword }//只展示没有被加密的 + PdfPickerSource.UNLOCK -> list.filter { it.isPassword }//只展示已经被加密的 + else -> list + } + adapter.updateData(displayList) { adapter.highlightItems(query.trim()) } binding.noFilesLayout.visibility = View.GONE @@ -125,10 +139,53 @@ class SearchActivity : BaseActivity() { private fun initView() { binding.searchEdit.showKeyboard() adapter = SearchPdfAdapter(onItemClick = { pdf -> - val intent = PdfViewActivity.createIntent(this, pdf.filePath) - startActivity(intent) - val query = binding.searchEdit.text.toString() - if (query.isNotEmpty()) saveHistory(query) + when (source) { + PdfPickerSource.NONE -> { + val intent = PdfViewActivity.createIntent(this, pdf.filePath) + startActivity(intent) + finish() + val query = binding.searchEdit.text.toString() + if (query.isNotEmpty()) saveHistory(query) + } + + PdfPickerSource.MERGE -> { + val data = Intent().apply { putExtra(EXTRA_SELECTED_PATH, pdf.filePath) } + setResult(RESULT_OK, data) + finish() + } + + PdfPickerSource.SPLIT -> { + val intent = SplitPdfActivity.createIntent(this, pdf.filePath) + startActivity(intent) + setResult(RESULT_OK)//通知选择界面关闭 + finish() + } + + PdfPickerSource.LOCK -> { + PdfSetPasswordDialog(onOkClick = { password -> + val intent = PdfResultActivity.createIntentLock( + this, pdf.filePath, password, PdfPickerSource.LOCK + ) + startActivity(intent) + setResult(RESULT_OK)//通知选择界面关闭 + finish() + }).show(supportFragmentManager, "PdfSetPasswordDialog") + } + + PdfPickerSource.UNLOCK -> { + PdfRemovePasswordDialog(pdf.filePath, onOkClick = { password -> + val intent = PdfResultActivity.createIntentLock( + this, pdf.filePath, password, PdfPickerSource.UNLOCK + ) + startActivity(intent) + setResult(RESULT_OK) + finish() + }).show(supportFragmentManager, "PdfRemovePasswordDialog") + } + + PdfPickerSource.TO_IMAGES -> {} + PdfPickerSource.TO_LONG_IMAGE -> {} + } }, onMoreClick = { pdf -> ListMoreDialogFragment(pdf.filePath).show(supportFragmentManager, FRAG_TAG) }) @@ -170,9 +227,7 @@ class SearchActivity : BaseActivity() { searchHistory.forEach { keyword -> val tagView = inflater.inflate( - R.layout.item_history_tag, - binding.historyFlexLayout, - false + R.layout.item_history_tag, binding.historyFlexLayout, false ) as TextView tagView.text = keyword tagView.setOnClickListener { @@ -183,4 +238,15 @@ class SearchActivity : BaseActivity() { binding.historyFlexLayout.addView(tagView) } } + + private inline fun getSerializableOrDefault( + key: String, default: T + ): T { + val result: T? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + intent.getSerializableExtra(key, T::class.java) + } else { + @Suppress("DEPRECATION") intent.getSerializableExtra(key) as? T + } + return result ?: default + } } 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 a50de3b..7f9a73f 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 @@ -114,6 +114,10 @@ class PdfAdapter( notifyDataSetChanged() } + fun getCurrentList(): List { + return pdfList + } + private fun toggleSelection(item: PdfDocumentEntity, position: Int) { item.isSelected = !item.isSelected notifyItemChanged(position)