Commit 64faa5bc authored by wanglei's avatar wanglei

...

parent a132ef93
import java.text.SimpleDateFormat
import java.util.Locale
plugins { plugins {
alias(libs.plugins.androidApplication) alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsKotlinAndroid) alias(libs.plugins.jetbrainsKotlinAndroid)
...@@ -11,10 +14,17 @@ android { ...@@ -11,10 +14,17 @@ android {
applicationId = "com.base.pdfviewerscannerwhite" applicationId = "com.base.pdfviewerscannerwhite"
minSdk = 24 minSdk = 24
targetSdk = 34 targetSdk = 34
versionCode = 1 versionCode = 2
versionName = "1.0" versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
fun Long.toFormatTime3(): String {
return SimpleDateFormat("yyyy-MM-dd HH-mm-ss", Locale.ENGLISH).format(this)
}
setProperty("archivesBaseName", "pdf-v${System.currentTimeMillis().toFormatTime3()}")
// ndk { // ndk {
// abiFilters.add("arm64-v8a") // abiFilters.add("arm64-v8a")
// // 取消注释以下行以添加更多 ABI 支持 // // 取消注释以下行以添加更多 ABI 支持
......
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
android:theme="@style/Theme.PDFViewerScannerWhite" android:theme="@style/Theme.PDFViewerScannerWhite"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
tools:targetApi="34"> tools:targetApi="34">
<activity
android:name=".ui.main.MainActivity2"
android:exported="false"
android:launchMode="singleTask" />
<meta-data <meta-data
android:name="com.google.android.gms.version" android:name="com.google.android.gms.version"
......
...@@ -11,6 +11,7 @@ data class DocumentBean( ...@@ -11,6 +11,7 @@ data class DocumentBean(
var uiType: Int = 0//0首页模式 1合并选择模式 2拆分模式 3解锁加锁模式 4搜索模式 var uiType: Int = 0//0首页模式 1合并选择模式 2拆分模式 3解锁加锁模式 4搜索模式
var isSelect: Boolean = false var isSelect: Boolean = false
var state: Int = -1//0正常状态 1 锁定 var state: Int = -1//0正常状态 1 锁定
var password: String = ""
companion object { companion object {
const val TYPE_PDF = "type_pdf" const val TYPE_PDF = "type_pdf"
......
...@@ -8,10 +8,13 @@ import com.base.pdfviewerscannerwhite.bean.ConstObject.DO_SAVE_PDF ...@@ -8,10 +8,13 @@ import com.base.pdfviewerscannerwhite.bean.ConstObject.DO_SAVE_PDF
import com.base.pdfviewerscannerwhite.bean.ConstObject.DO_SPLIT_PDF import com.base.pdfviewerscannerwhite.bean.ConstObject.DO_SPLIT_PDF
import com.base.pdfviewerscannerwhite.databinding.ActivityPdfLoadingBinding import com.base.pdfviewerscannerwhite.databinding.ActivityPdfLoadingBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File
import kotlin.random.Random import kotlin.random.Random
class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() { class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() {
...@@ -20,6 +23,7 @@ class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() { ...@@ -20,6 +23,7 @@ class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() {
private var doWhat = "" private var doWhat = ""
private var srcPath: String = "" private var srcPath: String = ""
private var newPath: String = "" private var newPath: String = ""
private var pwd: String? = null
private var splitIndex: List<Int> = listOf() private var splitIndex: List<Int> = listOf()
private lateinit var pdfPresenter: PdfPresenter private lateinit var pdfPresenter: PdfPresenter
...@@ -30,16 +34,26 @@ class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() { ...@@ -30,16 +34,26 @@ class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() {
private var isFinishBoolean: Boolean = false private var isFinishBoolean: Boolean = false
private var progressFinishAction: (() -> Unit)? = null private var progressFinishAction: (() -> Unit)? = null
var resultFile: File? = null
override fun initView() { override fun initView() {
pdfPresenter = PdfPresenter(this) pdfPresenter = PdfPresenter(this)
initSpPa() initSpPa()
pdfPresenter.password = pwd
when (doWhat) { when (doWhat) {
DO_SPLIT_PDF -> { DO_SPLIT_PDF -> {
progressFinishAction = { progressFinishAction = {
if (resultFile != null) {
startActivity(Intent(this, PdfActivity::class.java).apply {
putExtra("path", resultFile?.absolutePath ?: "")
})
} else {
toast("split pdf failed")
}
finish() finish()
} }
pdfPresenter.splitPdf(srcPath, newPath, splitIndex, finishAction = { pdfPresenter.splitPdf(srcPath, newPath, splitIndex, finishAction = {
resultFile = it
isFinishBoolean = true isFinishBoolean = true
}) })
} }
...@@ -90,8 +104,10 @@ class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() { ...@@ -90,8 +104,10 @@ class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() {
private fun initSpPa() { private fun initSpPa() {
doWhat = intent?.extras?.getString("doWhat", "") ?: "" doWhat = intent?.extras?.getString("doWhat", "") ?: ""
srcPath = intent?.extras?.getString("srcPath", "") ?: "" srcPath = intent?.extras?.getString("srcPath", "") ?: ""
pwd = intent.extras?.getString("pwd")
newPath = intent?.extras?.getString("newPath", "") ?: "" newPath = intent?.extras?.getString("newPath", "") ?: ""
splitIndex = intent.extras?.getString("splitIndex")?.split(",")?.map { it.toInt() } ?: listOf() splitIndex = intent.extras?.getString("splitIndex")?.split(",")?.map { it.toInt() } ?: listOf()
LogEx.logDebug(TAG, "initSpPa doWhat=$doWhat srcPath=$srcPath pwd=$pwd newPath=$newPath splitIndex=$splitIndex")
} }
companion object { companion object {
......
...@@ -2,14 +2,22 @@ package com.base.pdfviewerscannerwhite.ui.document.pdf ...@@ -2,14 +2,22 @@ package com.base.pdfviewerscannerwhite.ui.document.pdf
import android.content.Intent import android.content.Intent
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper
import com.base.pdfviewerscannerwhite.bean.ConstObject.DO_MERGE_PDF import com.base.pdfviewerscannerwhite.bean.ConstObject.DO_MERGE_PDF
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.ActivityPdfMergeBinding import com.base.pdfviewerscannerwhite.databinding.ActivityPdfMergeBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog
import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfPwdDialog
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime2 import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime2
import com.base.pdfviewerscannerwhite.utils.LogEx import com.base.pdfviewerscannerwhite.utils.LogEx
import kotlinx.coroutines.cancel
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import java.util.concurrent.ArrayBlockingQueue
import java.util.concurrent.BlockingQueue
class PdfMergeActivity : BaseActivity<ActivityPdfMergeBinding>() { class PdfMergeActivity : BaseActivity<ActivityPdfMergeBinding>() {
...@@ -38,15 +46,63 @@ class PdfMergeActivity : BaseActivity<ActivityPdfMergeBinding>() { ...@@ -38,15 +46,63 @@ class PdfMergeActivity : BaseActivity<ActivityPdfMergeBinding>() {
finish() finish()
} }
binding.tvBtnNext.setOnClickListener { binding.tvBtnNext.setOnClickListener {
verificationPasswordDialogs {
showDocumentRenameDialog(name = "Merge_${System.currentTimeMillis().toFormatTime2()}", okAction = { name ->
startActivity(Intent(this, PdfLoadingActivity::class.java).apply {
putExtra("doWhat", DO_MERGE_PDF)
putExtra("newPath", pdfPresenter.createNewPdfPath(name))
})
showDocumentRenameDialog(name = "Merge_${System.currentTimeMillis().toFormatTime2()}", okAction = { name ->
startActivity(Intent(this, PdfLoadingActivity::class.java).apply {
putExtra("doWhat", DO_MERGE_PDF)
putExtra("newPath", pdfPresenter.createNewPdfPath(name))
}) })
}
}
}
private fun verificationPasswordDialogs(callBack: (isContinue: Boolean) -> Unit) {
val queue: BlockingQueue<DocumentBean> = ArrayBlockingQueue(1)
}) val pwdItemList = mergePdfList.filter { it.state == 1 }
if (pwdItemList.isNotEmpty()) {
LogEx.logDebug(TAG, "verificationPasswordDialogs1")
val verifiedList = arrayListOf<DocumentBean>()
val first = pwdItemList[0]
queue.put(first)
mergePdfList.removeAt(0)
var isCancel: Boolean = false
LogEx.logDebug(TAG, "verificationPasswordDialogs2")
lifecycleScope.launch() {
while (isActive) {
val item: DocumentBean = queue.take()
LogEx.logDebug(TAG, "verificationPasswordDialogs3")
showPdfPwdDialog(item.state, item.path, isCheckPwd = true, verificationAction = { pwd ->
item.password = pwd
verifiedList.add(item)
if (pwdItemList.isNotEmpty()) {
val next = mergePdfList[0]
queue.put(next)
} else {
cancel()
}
}, cancelAction = {
isCancel = true
cancel()
})
}
}
if (isCancel) {
callBack.invoke(false)
return
} else {
verifiedList.forEach { verifiedItem ->
mergePdfList.find { it.path == verifiedItem.path }?.password = verifiedItem.password
}
}
mergePdfList.forEach {
LogEx.logDebug(TAG, "密码=" + it.password)
}
} }
callBack.invoke(true)
} }
private fun initAdapter() { private fun initAdapter() {
......
...@@ -36,6 +36,11 @@ class PdfMergeAdapter( ...@@ -36,6 +36,11 @@ class PdfMergeAdapter(
val file = File(item.path) val file = File(item.path)
binding.tvName.text = file.name binding.tvName.text = file.name
binding.tvInfo.text = file.lastModified().toFormatTime4() + " " + file.length().toFormatSize() binding.tvInfo.text = file.lastModified().toFormatTime4() + " " + file.length().toFormatSize()
if (item.state==0){
binding.iv.setImageResource(R.mipmap.h_pdfiocn)
}else{
binding.iv.setImageResource(R.mipmap.suoding)
}
binding.flClose.setOnClickListener { binding.flClose.setOnClickListener {
remove(item) remove(item)
......
...@@ -13,6 +13,8 @@ import com.base.pdfviewerscannerwhite.utils.LogEx ...@@ -13,6 +13,8 @@ import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.UriUtils.readFileToByteArray import com.base.pdfviewerscannerwhite.utils.UriUtils.readFileToByteArray
import com.tom_roush.pdfbox.multipdf.PDFMergerUtility import com.tom_roush.pdfbox.multipdf.PDFMergerUtility
import com.tom_roush.pdfbox.pdmodel.PDDocument import com.tom_roush.pdfbox.pdmodel.PDDocument
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
...@@ -42,8 +44,6 @@ class PdfPresenter( ...@@ -42,8 +44,6 @@ class PdfPresenter(
} }
fun iniPdfPage(filePath: String, uri: String? = null) { fun iniPdfPage(filePath: String, uri: String? = null) {
val list = arrayListOf<PdfPageBean>() val list = arrayListOf<PdfPageBean>()
val number = PdfBoxUtils.getNumberOfPages(filePath, password, uri) val number = PdfBoxUtils.getNumberOfPages(filePath, password, uri)
...@@ -55,13 +55,16 @@ class PdfPresenter( ...@@ -55,13 +55,16 @@ class PdfPresenter(
fun splitPdf( fun splitPdf(
srcPath: String, newPath: String, splitIndex: List<Int>, srcPath: String,
newPath: String,
splitIndex: List<Int>,
finishAction: (newFile: File?) -> Unit finishAction: (newFile: File?) -> Unit
) = Thread { ) = Thread {
try { try {
// 加载现有 PDF 文档 // 加载现有 PDF 文档
val sourceDocument = PDDocument.load(File(srcPath), password) val sourceDocument = PDDocument.load(File(srcPath), password)
LogEx.logDebug(TAG, "sourceDocument open")
// 创建新的 PDF 文档 // 创建新的 PDF 文档
val newDocument = PDDocument() val newDocument = PDDocument()
...@@ -76,7 +79,7 @@ class PdfPresenter( ...@@ -76,7 +79,7 @@ class PdfPresenter(
newDocument.close() newDocument.close()
sourceDocument.close() sourceDocument.close()
} catch (e: Exception) { } catch (e: Exception) {
println("Error occurred while splitting PDF.") LogEx.logDebug(TAG, "splitPdf error")
finishAction.invoke(null) finishAction.invoke(null)
return@Thread return@Thread
} }
...@@ -132,7 +135,17 @@ class PdfPresenter( ...@@ -132,7 +135,17 @@ class PdfPresenter(
mergerUtility.destinationFileName = mergePath mergerUtility.destinationFileName = mergePath
PdfMergeActivity.mergePdfList.forEach { documentBean -> PdfMergeActivity.mergePdfList.forEach { documentBean ->
mergerUtility.addSource(File(documentBean.path)) if (documentBean.state == 0) {
mergerUtility.addSource(File(documentBean.path))
} else {
LogEx.logDebug(TAG, "documentBean.password=${documentBean.password}")
val pdfDocument = PDDocument.load(File(documentBean.path), documentBean.password)
val byteArrayOutputStream = ByteArrayOutputStream()
pdfDocument.save(byteArrayOutputStream)
pdfDocument.close()
val inputStream = ByteArrayInputStream(byteArrayOutputStream.toByteArray())
mergerUtility.addSource(inputStream)
}
} }
mergerUtility.mergeDocuments(null) mergerUtility.mergeDocuments(null)
mergePdfList.clear() mergePdfList.clear()
......
...@@ -3,6 +3,7 @@ package com.base.pdfviewerscannerwhite.ui.document.pdf ...@@ -3,6 +3,7 @@ package com.base.pdfviewerscannerwhite.ui.document.pdf
import android.content.Intent import android.content.Intent
import androidx.activity.addCallback import androidx.activity.addCallback
import com.base.pdfviewerscannerwhite.R import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.bean.PdfPageBean import com.base.pdfviewerscannerwhite.bean.PdfPageBean
import com.base.pdfviewerscannerwhite.databinding.ActivityPdfSplitBinding import com.base.pdfviewerscannerwhite.databinding.ActivityPdfSplitBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
...@@ -13,6 +14,7 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView { ...@@ -13,6 +14,7 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView {
private lateinit var pdfPresenter: PdfPresenter private lateinit var pdfPresenter: PdfPresenter
private lateinit var pdfPagerAdapter: PdfPagerAdapter private lateinit var pdfPagerAdapter: PdfPagerAdapter
private var path: String = "" private var path: String = ""
private var pwd: String? = ""
override val binding: ActivityPdfSplitBinding by lazy { override val binding: ActivityPdfSplitBinding by lazy {
ActivityPdfSplitBinding.inflate(layoutInflater) ActivityPdfSplitBinding.inflate(layoutInflater)
...@@ -21,6 +23,8 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView { ...@@ -21,6 +23,8 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView {
override fun initView() { override fun initView() {
pdfPresenter = PdfPresenter(this, this) pdfPresenter = PdfPresenter(this, this)
path = intent.extras?.getString("path", "") ?: "" path = intent.extras?.getString("path", "") ?: ""
pwd = intent.extras?.getString("pwd", "") ?: ""
pdfPresenter.password = pwd
initAdapter() initAdapter()
...@@ -43,7 +47,9 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView { ...@@ -43,7 +47,9 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView {
val splitIndex = pdfPagerAdapter.items.filter { it.isSelect }.map { it.pageIndex } val splitIndex = pdfPagerAdapter.items.filter { it.isSelect }.map { it.pageIndex }
showDocumentRenameDialog { newName -> showDocumentRenameDialog { newName ->
startActivity(Intent(this, PdfLoadingActivity::class.java).apply { startActivity(Intent(this, PdfLoadingActivity::class.java).apply {
putExtra("doWhat", ConstObject.DO_SPLIT_PDF)
putExtra("srcPath", path) putExtra("srcPath", path)
putExtra("pwd", pwd)
putExtra("newPath", pdfPresenter.createNewPdfPath(newName)) putExtra("newPath", pdfPresenter.createNewPdfPath(newName))
putExtra("splitIndex", splitIndex.joinToString(separator = ",")) putExtra("splitIndex", splitIndex.joinToString(separator = ","))
}) })
...@@ -53,7 +59,8 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView { ...@@ -53,7 +59,8 @@ class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView {
} }
private fun initAdapter() { private fun initAdapter() {
pdfPagerAdapter = PdfPagerAdapter(path, null,R.layout.item_pdf_pager_split) pdfPagerAdapter = PdfPagerAdapter(path, null, R.layout.item_pdf_pager_split)
pdfPagerAdapter.mPassword = pwd
pdfPagerAdapter.selectAction = { enable, allSelect -> pdfPagerAdapter.selectAction = { enable, allSelect ->
binding.tvBtnSplit.isEnabled = enable binding.tvBtnSplit.isEnabled = enable
binding.ivSelector.isSelected = allSelect binding.ivSelector.isSelected = allSelect
......
package com.base.pdfviewerscannerwhite.ui.main
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.angcyo.tablayout.DslTabIndicator
import com.angcyo.tablayout.delegate2.ViewPager2Delegate
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.FragmentBookmarkBinding
import com.base.pdfviewerscannerwhite.helper.BaseFragment
class BookmarkFragment : BaseFragment<FragmentBookmarkBinding>() {
override val binding: FragmentBookmarkBinding by lazy {
FragmentBookmarkBinding.inflate(layoutInflater)
}
private val pdfPage: DocumentPageFragment by lazy {
DocumentPageFragment(DocumentBean.TYPE_PDF)
}
private val wordPage: DocumentPageFragment by lazy {
DocumentPageFragment(DocumentBean.TYPE_WORD)
}
private val excelPage: DocumentPageFragment by lazy {
DocumentPageFragment()
}
private val pptPage: DocumentPageFragment by lazy {
DocumentPageFragment()
}
private val fragments by lazy {
mutableListOf(pdfPage, wordPage, excelPage, pptPage)
}
override fun setView() {
initPageViewer()
initTabLayout()
}
private fun initPageViewer() {
binding.viewPager2.run {
isUserInputEnabled = true
adapter = object : FragmentStateAdapter(this@BookmarkFragment) {
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
}
binding.viewPager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
if (position == 3 && positionOffset > 0) {
binding.viewPager2.setCurrentItem(position, false)
}
}
override fun onPageSelected(position: Int) {
}
})
}
private fun initTabLayout() {
val colorPdf = ContextCompat.getColor(requireContext(), R.color.color_f02f2b)
val colorWord = ContextCompat.getColor(requireContext(), R.color.color_0592ee)
val colorExcel = ContextCompat.getColor(requireContext(), R.color.color_149b55)
val colorPpt = ContextCompat.getColor(requireContext(), R.color.color_ffa127)
binding.tabLayoutDocument.apply {
tabIndicator.indicatorWidth =
this.resources.getDimensionPixelOffset(R.dimen.dp_50)
tabIndicator.indicatorHeight =
this.resources.getDimensionPixelOffset(R.dimen.dp_4)
tabIndicator.indicatorStyle =
DslTabIndicator.INDICATOR_STYLE_BOTTOM
configTabLayoutConfig {
onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser ->
val toIndex = selectIndexList.first()
when (toIndex) {
0 -> {
tabSelectColor = colorPdf
tabIndicator.indicatorColor = colorPdf
binding.viewPager2.currentItem = 0
}
1 -> {
tabSelectColor = colorWord
tabIndicator.indicatorColor = colorWord
binding.viewPager2.currentItem = 1
}
2 -> {
tabSelectColor = colorExcel
tabIndicator.indicatorColor = colorExcel
binding.viewPager2.currentItem = 2
}
3 -> {
tabSelectColor = colorPpt
tabIndicator.indicatorColor = colorPpt
binding.viewPager2.currentItem = 3
}
}
dslSelector.updateStyle()
}
}
}
ViewPager2Delegate.install(binding.viewPager2, binding.tabLayoutDocument)
}
}
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.main
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_EXCEL
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfviewerscannerwhite.databinding.FragmentDocumentPageBinding
import com.base.pdfviewerscannerwhite.helper.BaseFragment
import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter
import com.base.pdfviewerscannerwhite.ui.document.excel.ExcelActivity
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfActivity
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSelectActivity
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfSplitActivity
import com.base.pdfviewerscannerwhite.ui.document.ppt.PptActivity
import com.base.pdfviewerscannerwhite.ui.document.word.WordActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentHomeMoreDialog
import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfHomeMoreDialog
import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfPwdDialog
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission
import java.io.File
import java.util.Locale
class DocumentPageFragment() : BaseFragment<FragmentDocumentPageBinding>(), DocumentView {
private val TAG = "DocumentFragment"
var type = TYPE_PDF
private var documentList: ArrayList<DocumentBean> = arrayListOf()
lateinit var adapter: DocumentAdapter
lateinit var documentPresenter: DocumentPresenter
constructor(type: String) : this() {
this.type = type
}
override val binding: FragmentDocumentPageBinding by lazy {
FragmentDocumentPageBinding.inflate(layoutInflater)
}
override fun setView() {
documentPresenter = DocumentPresenter(requireContext(), this, type, lifecycleScope)
initAdapter()
}
override fun onResume() {
super.onResume()
initData()
}
fun initData() {
if (requireContext().checkStorePermission()) {
documentPresenter.initData()
}
}
override fun refreshDocumentRv(documentList: List<DocumentBean>) {
binding.llEmpty.isVisible = documentList.isEmpty()
this.documentList.clear()
this.documentList.addAll(documentList)
adapter.submitList(documentList)
}
private fun initAdapter() {
adapter = DocumentAdapter()
adapter.bookmarkAction = { addRemove, path ->
documentPresenter.saveBookmarkChange(addRemove, path)
}
adapter.itemClick = { item ->
requireActivity().jumpDocument(item)
}
adapter.moreAction = { item ->
documentMoreAction.invoke(item)
}
binding.rv.adapter = adapter
}
var documentMoreAction: (item: DocumentBean) -> Unit = { item ->
val mainActivity = (requireActivity() as MainActivity)
if (item.type == TYPE_PDF) {
requireContext().showPdfHomeMoreDialog(
item, adapter, this, mainActivity
)
}
if (item.type == TYPE_WORD || item.type == TYPE_EXCEL || item.type == TYPE_PPT) {
requireContext().showDocumentHomeMoreDialog(item, this, mainActivity)
}
}
override fun splitPdf(path: String, pwd: String?) {
startActivity(Intent(requireContext(), PdfSplitActivity::class.java).apply {
putExtra("path", path)
putExtra("pwd", pwd)
})
}
override fun mergePdf(path: String) {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", ConstObject.DO_MERGE_PDF)
})
}
override fun deleteDocument(item: DocumentBean) {
val flag = documentList.removeIf { it.path == item.path }
LogEx.logDebug(TAG, "deleteDocument $item.path flag=$flag")
adapter.submitList(documentList)
binding.llEmpty.isVisible = adapter.items.isEmpty()
}
fun setRecentList() {
if (isVisible) {
val recentList = documentList.filter {
(System.currentTimeMillis() - File(it.path).lastModified()) < 300L * 24 * 60 * 60 * 1000
}
binding.llEmpty.isVisible = recentList.isEmpty()
adapter.submitList(recentList)
}
}
fun setAllList() {
if (isVisible) {
adapter.submitList(documentList)
binding.llEmpty.isVisible = documentList.isEmpty()
}
}
fun setBookmarkList() {
if (isVisible) {
val bookmarkList = documentList.filter { it.isBookmarked }
binding.llEmpty.isVisible = bookmarkList.isEmpty()
adapter.submitList(bookmarkList)
}
}
@SuppressLint("NotifyDataSetChanged")
fun changeSelectUi(select: Boolean) {
if (isVisible) {
adapter.items.forEach {
if (select) {
it.uiType = 1
} else {
it.isSelect = false
it.uiType = 0
}
}
adapter.notifyDataSetChanged()
}
}
@SuppressLint("NotifyDataSetChanged")
fun changItemSelect(select: Boolean) {
adapter.items.forEach {
it.isSelect = select
}
adapter.notifyDataSetChanged()
}
fun getSelectItems(): List<DocumentBean> {
return adapter.items.filter { it.isSelect }
}
fun removeList(list: List<DocumentBean>) {
list.forEach {
adapter.remove(it)
}
}
fun getSearchItems(search: String): List<DocumentBean> {
if (isVisible) {
return adapter.items.filter { File(it.path).name.lowercase(Locale.ENGLISH).contains(search.lowercase(Locale.ENGLISH)) }
}
return listOf()
}
@SuppressLint("NotifyDataSetChanged")
fun changeHomeUI() {
if (isVisible) {
adapter.items.map { it.uiType == 0 }
adapter.notifyDataSetChanged()
}
}
companion object {
fun Activity.jumpDocument(item: DocumentBean) {
if (item.type == TYPE_PDF) {
if (item.state == 0) {
startActivity(Intent(this, PdfActivity::class.java).apply {
putExtra("path", item.path)
})
}
if (item.state == 1) {
showPdfPwdDialog(
state = item.state,
path = item.path,
isCheckPwd = true,
verificationAction = { pwd ->
startActivity(Intent(this, PdfActivity::class.java).apply {
putExtra("path", item.path)
putExtra("pwd", pwd)
})
})
}
}
if (item.type == TYPE_WORD) {
WordActivity.wordDocumentBean = item
WordActivity.launchDocViewer(this, 3, item.path, -1, 100)
}
if (item.type == TYPE_EXCEL) {
ExcelActivity.excelDocumentBean = item
ExcelActivity.launchDocViewer(this, 3, item.path, -1, 100)
}
if (item.type == TYPE_PPT) {
PptActivity.pptDocumentBean = item
PptActivity.launchDocViewer(this, 3, item.path, -1, 100)
}
}
}
}
\ No newline at end of file
...@@ -7,7 +7,7 @@ interface DocumentView { ...@@ -7,7 +7,7 @@ interface DocumentView {
fun refreshDocumentRv(documentList: List<DocumentBean>) = Unit fun refreshDocumentRv(documentList: List<DocumentBean>) = Unit
fun splitPdf(path: String) = Unit fun splitPdf(path: String, pwd: String? = null) = Unit
fun deleteDocument(item: DocumentBean) = Unit fun deleteDocument(item: DocumentBean) = Unit
fun mergePdf(path: String) = Unit fun mergePdf(path: String) = Unit
......
...@@ -16,10 +16,9 @@ import com.base.pdfviewerscannerwhite.BuildConfig ...@@ -16,10 +16,9 @@ import com.base.pdfviewerscannerwhite.BuildConfig
import com.base.pdfviewerscannerwhite.R import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.ActivityMainBinding import com.base.pdfviewerscannerwhite.databinding.ActivityMainBinding
import com.base.pdfviewerscannerwhite.databinding.ItemDocumentBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter
import com.base.pdfviewerscannerwhite.ui.main.DocumentFragment.Companion.jumpDocument import com.base.pdfviewerscannerwhite.ui.main.DocumentPageFragment.Companion.jumpDocument
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDeleteDialog import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDeleteDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showStoragePermission import com.base.pdfviewerscannerwhite.ui.view.DialogView.showStoragePermission
...@@ -32,7 +31,6 @@ import com.base.pdfviewerscannerwhite.utils.LogEx ...@@ -32,7 +31,6 @@ import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission
import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast
import com.base.pdfviewerscannerwhite.utils.updateMediaStore import com.base.pdfviewerscannerwhite.utils.updateMediaStore
import com.cherry.lib.doc.office.fc.ss.usermodel.charts.AxisPosition
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
...@@ -43,17 +41,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -43,17 +41,17 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
override val binding: ActivityMainBinding by lazy { override val binding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater) ActivityMainBinding.inflate(layoutInflater)
} }
private val pdfFragment: DocumentFragment by lazy { private val pdfFragment: DocumentPageFragment by lazy {
DocumentFragment(DocumentBean.TYPE_PDF) DocumentPageFragment(DocumentBean.TYPE_PDF)
} }
private val wordFragment: DocumentFragment by lazy { private val wordFragment: DocumentPageFragment by lazy {
DocumentFragment(DocumentBean.TYPE_WORD) DocumentPageFragment(DocumentBean.TYPE_WORD)
} }
private val excelFragment: DocumentFragment by lazy { private val excelFragment: DocumentPageFragment by lazy {
DocumentFragment(DocumentBean.TYPE_EXCEL) DocumentPageFragment(DocumentBean.TYPE_EXCEL)
} }
private val pptFragment: DocumentFragment by lazy { private val pptFragment: DocumentPageFragment by lazy {
DocumentFragment(DocumentBean.TYPE_PPT) DocumentPageFragment(DocumentBean.TYPE_PPT)
} }
private val toolFragment: ToolFragment by lazy { private val toolFragment: ToolFragment by lazy {
ToolFragment() ToolFragment()
...@@ -110,8 +108,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -110,8 +108,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
searchAdapter = DocumentAdapter() searchAdapter = DocumentAdapter()
binding.rvSearch.adapter = searchAdapter binding.rvSearch.adapter = searchAdapter
searchAdapter.moreAction = { item -> searchAdapter.moreAction = { item ->
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).documentMoreAction.invoke(item) (currentFragment as DocumentPageFragment).documentMoreAction.invoke(item)
} }
} }
searchAdapter.itemClick = { searchAdapter.itemClick = {
...@@ -236,8 +234,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -236,8 +234,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
} }
binding.llDelete.setOnClickListener { binding.llDelete.setOnClickListener {
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
val fragment = (currentFragment as DocumentFragment) val fragment = (currentFragment as DocumentPageFragment)
showDeleteDialog { showDeleteDialog {
val list = fragment.getSelectItems() val list = fragment.getSelectItems()
mainPresenter.deleteList(list) mainPresenter.deleteList(list)
...@@ -273,8 +271,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -273,8 +271,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
private fun searchDocument() { private fun searchDocument() {
if (binding.editSearch.text.isNotEmpty()) { if (binding.editSearch.text.isNotEmpty()) {
val search = binding.editSearch.text.toString() val search = binding.editSearch.text.toString()
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
val item = (currentFragment as DocumentFragment).getSearchItems(search) val item = (currentFragment as DocumentPageFragment).getSearchItems(search)
if (item.isNotEmpty()) { if (item.isNotEmpty()) {
item.map { it.uiType = 4 } item.map { it.uiType = 4 }
searchAdapter.submitList(item) searchAdapter.submitList(item)
...@@ -287,8 +285,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -287,8 +285,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
private fun shareDocument() { private fun shareDocument() {
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
val documentFragment = (currentFragment as DocumentFragment) val documentFragment = (currentFragment as DocumentPageFragment)
val items = documentFragment.getSelectItems() val items = documentFragment.getSelectItems()
if (items.isNotEmpty()) { if (items.isNotEmpty()) {
shareMutDocuments(documentFragment.type, items.map { it.uri } as ArrayList<Uri>) shareMutDocuments(documentFragment.type, items.map { it.uri } as ArrayList<Uri>)
...@@ -298,8 +296,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -298,8 +296,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
} }
private fun changePageSelect(select: Boolean) { private fun changePageSelect(select: Boolean) {
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).changItemSelect(select) (currentFragment as DocumentPageFragment).changItemSelect(select)
} }
} }
...@@ -393,8 +391,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -393,8 +391,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.llTool.visibility = View.VISIBLE binding.llTool.visibility = View.VISIBLE
binding.ivXuanze.visibility = View.VISIBLE binding.ivXuanze.visibility = View.VISIBLE
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).changeSelectUi(false) (currentFragment as DocumentPageFragment).changeSelectUi(false)
} }
} }
...@@ -412,8 +410,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -412,8 +410,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
changeTabSelect(binding.llDocument) changeTabSelect(binding.llDocument)
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).setAllList() (currentFragment as DocumentPageFragment).setAllList()
} }
} }
...@@ -431,8 +429,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -431,8 +429,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
changeTabSelect(binding.llRecent) changeTabSelect(binding.llRecent)
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).setRecentList() (currentFragment as DocumentPageFragment).setRecentList()
} }
} }
...@@ -447,8 +445,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -447,8 +445,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.ivScan.visibility = View.VISIBLE binding.ivScan.visibility = View.VISIBLE
binding.ivScan.visibility = View.VISIBLE binding.ivScan.visibility = View.VISIBLE
changeTabSelect(binding.llBookmark) changeTabSelect(binding.llBookmark)
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).setBookmarkList() (currentFragment as DocumentPageFragment).setBookmarkList()
} }
} }
...@@ -491,8 +489,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -491,8 +489,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.viewPager2.isUserInputEnabled = false binding.viewPager2.isUserInputEnabled = false
binding.vTabLayoutPlace.visibility = View.VISIBLE binding.vTabLayoutPlace.visibility = View.VISIBLE
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).changeSelectUi(true) (currentFragment as DocumentPageFragment).changeSelectUi(true)
} }
} }
...@@ -528,8 +526,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -528,8 +526,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.ivPaixu.visibility = View.VISIBLE binding.ivPaixu.visibility = View.VISIBLE
binding.ivXuanze.visibility = View.VISIBLE binding.ivXuanze.visibility = View.VISIBLE
if (currentFragment is DocumentFragment) { if (currentFragment is DocumentPageFragment) {
(currentFragment as DocumentFragment).changeHomeUI() (currentFragment as DocumentPageFragment).changeHomeUI()
} }
} }
......
package com.base.pdfviewerscannerwhite.ui.main
import android.view.View
import androidx.core.view.isNotEmpty
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.databinding.ActivityMain2Binding
import com.base.pdfviewerscannerwhite.helper.BaseActivity
class MainActivity2 : BaseActivity<ActivityMain2Binding>() {
override val binding: ActivityMain2Binding by lazy {
ActivityMain2Binding.inflate(layoutInflater)
}
private val documentFragment: DocumentFragment by lazy {
DocumentFragment()
}
private val recentFragment: RecentFragment by lazy {
RecentFragment()
}
private val bookmarkFragment: BookmarkFragment by lazy {
BookmarkFragment()
}
private val toolFragment: ToolFragment by lazy {
ToolFragment()
}
private var currentFragment: Fragment = documentFragment
override fun initView() {
}
var isDocumentAdd: Boolean = false
var isRecentAdd: Boolean = false
var isBookmarkAdd: Boolean = false
var isToolAdd: Boolean = false
override fun initListener() {
super.initListener()
binding.llDocument.setOnClickListener {
changeTabSelect(it)
supportFragmentManager.beginTransaction().apply {
if (!isDocumentAdd) {
add(R.id.fl_container, documentFragment)
}
hide(bookmarkFragment)
hide(toolFragment)
hide(recentFragment)
show(documentFragment)
commit()
}
currentFragment = documentFragment
isDocumentAdd = true
}
binding.llDocument.callOnClick()
binding.llRecent.setOnClickListener {
changeTabSelect(it)
supportFragmentManager.beginTransaction().apply {
if (!isRecentAdd) {
add(R.id.fl_container, recentFragment)
}
hide(documentFragment)
hide(bookmarkFragment)
hide(toolFragment)
show(recentFragment)
commit()
}
currentFragment = recentFragment
isRecentAdd = true
}
binding.llBookmark.setOnClickListener {
changeTabSelect(it)
supportFragmentManager.beginTransaction().apply {
if (!isBookmarkAdd) {
add(R.id.fl_container, bookmarkFragment)
}
hide(documentFragment)
hide(recentFragment)
hide(toolFragment)
show(bookmarkFragment)
commit()
}
currentFragment = bookmarkFragment
isBookmarkAdd = true
}
binding.llTool.setOnClickListener {
changeTabSelect(it)
supportFragmentManager.beginTransaction().apply {
if (!isToolAdd) {
add(R.id.fl_container, toolFragment)
}
hide(documentFragment)
hide(recentFragment)
hide(bookmarkFragment)
show(toolFragment)
commit()
}
currentFragment = toolFragment
isToolAdd = true
}
}
private fun changeTabSelect(selectView: View) {
binding.llDocument.isSelected = selectView == binding.llDocument
binding.llRecent.isSelected = selectView == binding.llRecent
binding.llBookmark.isSelected = selectView == binding.llBookmark
binding.llTool.isSelected = selectView == binding.llTool
}
}
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.main
import android.os.Bundle
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.angcyo.tablayout.DslTabIndicator
import com.angcyo.tablayout.delegate2.ViewPager2Delegate
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.FragmentRecentBinding
import com.base.pdfviewerscannerwhite.helper.BaseFragment
class RecentFragment : BaseFragment<FragmentRecentBinding>() {
override val binding: FragmentRecentBinding by lazy {
FragmentRecentBinding.inflate(layoutInflater)
}
private val pdfPage: DocumentPageFragment by lazy {
DocumentPageFragment(DocumentBean.TYPE_PDF)
}
private val wordPage: DocumentPageFragment by lazy {
DocumentPageFragment(DocumentBean.TYPE_WORD)
}
private val excelPage: DocumentPageFragment by lazy {
DocumentPageFragment()
}
private val pptPage: DocumentPageFragment by lazy {
DocumentPageFragment()
}
private val fragments by lazy {
mutableListOf(pdfPage, wordPage, excelPage, pptPage)
}
override fun setView() {
initPageViewer()
initTabLayout()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
private fun initPageViewer() {
binding.viewPager2.run {
isUserInputEnabled = true
adapter = object : FragmentStateAdapter(this@RecentFragment) {
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
}
binding.viewPager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels)
if (position == 3 && positionOffset > 0) {
binding.viewPager2.setCurrentItem(position, false)
}
}
override fun onPageSelected(position: Int) {
}
})
}
private fun initTabLayout() {
val colorPdf = ContextCompat.getColor(requireContext(), R.color.color_f02f2b)
val colorWord = ContextCompat.getColor(requireContext(), R.color.color_0592ee)
val colorExcel = ContextCompat.getColor(requireContext(), R.color.color_149b55)
val colorPpt = ContextCompat.getColor(requireContext(), R.color.color_ffa127)
binding.tabLayoutDocument.apply {
tabIndicator.indicatorWidth =
this.resources.getDimensionPixelOffset(R.dimen.dp_50)
tabIndicator.indicatorHeight =
this.resources.getDimensionPixelOffset(R.dimen.dp_4)
tabIndicator.indicatorStyle =
DslTabIndicator.INDICATOR_STYLE_BOTTOM
configTabLayoutConfig {
onSelectIndexChange = { fromIndex, selectIndexList, reselect, fromUser ->
val toIndex = selectIndexList.first()
when (toIndex) {
0 -> {
tabSelectColor = colorPdf
tabIndicator.indicatorColor = colorPdf
binding.viewPager2.currentItem = 0
}
1 -> {
tabSelectColor = colorWord
tabIndicator.indicatorColor = colorWord
binding.viewPager2.currentItem = 1
}
2 -> {
tabSelectColor = colorExcel
tabIndicator.indicatorColor = colorExcel
binding.viewPager2.currentItem = 2
}
3 -> {
tabSelectColor = colorPpt
tabIndicator.indicatorColor = colorPpt
binding.viewPager2.currentItem = 3
}
}
dslSelector.updateStyle()
}
}
}
ViewPager2Delegate.install(binding.viewPager2, binding.tabLayoutDocument)
}
companion object {
}
}
\ No newline at end of file
...@@ -11,6 +11,7 @@ import com.base.pdfviewerscannerwhite.bean.ConstObject.ifAgreePrivacy ...@@ -11,6 +11,7 @@ import com.base.pdfviewerscannerwhite.bean.ConstObject.ifAgreePrivacy
import com.base.pdfviewerscannerwhite.databinding.ActivitySplashBinding import com.base.pdfviewerscannerwhite.databinding.ActivitySplashBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.main.MainActivity import com.base.pdfviewerscannerwhite.ui.main.MainActivity
import com.base.pdfviewerscannerwhite.ui.main.MainActivity2
import com.base.pdfviewerscannerwhite.utils.BarUtils import com.base.pdfviewerscannerwhite.utils.BarUtils
import com.base.pdfviewerscannerwhite.utils.LogEx import com.base.pdfviewerscannerwhite.utils.LogEx
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -112,7 +113,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView { ...@@ -112,7 +113,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView {
LogEx.logDebug(TAG, "jumpNext") LogEx.logDebug(TAG, "jumpNext")
binding.progressBar.progress = 100 binding.progressBar.progress = 100
binding.root.postDelayed({ binding.root.postDelayed({
startActivity(Intent(this, MainActivity::class.java)) startActivity(Intent(this, MainActivity2::class.java))
finish() finish()
}, 200) }, 200)
} }
......
...@@ -20,8 +20,7 @@ import com.base.pdfviewerscannerwhite.databinding.DialogDocumentMoreBinding ...@@ -20,8 +20,7 @@ import com.base.pdfviewerscannerwhite.databinding.DialogDocumentMoreBinding
import com.base.pdfviewerscannerwhite.databinding.DialogDocumentRenameBinding import com.base.pdfviewerscannerwhite.databinding.DialogDocumentRenameBinding
import com.base.pdfviewerscannerwhite.databinding.DialogPageNumberBinding import com.base.pdfviewerscannerwhite.databinding.DialogPageNumberBinding
import com.base.pdfviewerscannerwhite.databinding.DialogStoragePermissionBinding import com.base.pdfviewerscannerwhite.databinding.DialogStoragePermissionBinding
import com.base.pdfviewerscannerwhite.ui.main.DocumentFragment import com.base.pdfviewerscannerwhite.ui.main.DocumentPageFragment
import com.base.pdfviewerscannerwhite.ui.main.DocumentView
import com.base.pdfviewerscannerwhite.ui.main.MainActivity import com.base.pdfviewerscannerwhite.ui.main.MainActivity
import com.base.pdfviewerscannerwhite.utils.ActivityLauncher import com.base.pdfviewerscannerwhite.utils.ActivityLauncher
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.documentShare import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.documentShare
...@@ -102,7 +101,7 @@ object DialogView { ...@@ -102,7 +101,7 @@ object DialogView {
@SuppressLint("SetTextI18n", "NotifyDataSetChanged") @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
fun Context.showDocumentHomeMoreDialog( fun Context.showDocumentHomeMoreDialog(
item: DocumentBean, item: DocumentBean,
documentFragment: DocumentFragment, documentFragment: DocumentPageFragment,
mainActivity: MainActivity, mainActivity: MainActivity,
): BottomSheetDialog { ): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
......
...@@ -18,7 +18,7 @@ import com.base.pdfviewerscannerwhite.databinding.DialogPdfPasswordBinding ...@@ -18,7 +18,7 @@ import com.base.pdfviewerscannerwhite.databinding.DialogPdfPasswordBinding
import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter import com.base.pdfviewerscannerwhite.ui.adapter.DocumentAdapter
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfBoxUtils
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfView import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfView
import com.base.pdfviewerscannerwhite.ui.main.DocumentFragment import com.base.pdfviewerscannerwhite.ui.main.DocumentPageFragment
import com.base.pdfviewerscannerwhite.ui.main.MainActivity import com.base.pdfviewerscannerwhite.ui.main.MainActivity
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDeleteDialog import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDeleteDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentDetail import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentDetail
...@@ -40,7 +40,7 @@ object PdfDialog { ...@@ -40,7 +40,7 @@ object PdfDialog {
fun Context.showPdfHomeMoreDialog( fun Context.showPdfHomeMoreDialog(
item: DocumentBean, item: DocumentBean,
adapter: DocumentAdapter, adapter: DocumentAdapter,
documentFragment: DocumentFragment, documentFragment: DocumentPageFragment,
mainActivity: MainActivity mainActivity: MainActivity
): BottomSheetDialog { ): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
...@@ -86,7 +86,14 @@ object PdfDialog { ...@@ -86,7 +86,14 @@ object PdfDialog {
} }
binding.llSplit.setOnClickListener { binding.llSplit.setOnClickListener {
dialog.dismiss() dialog.dismiss()
documentFragment.splitPdf(item.path) if (item.state == 1) {
showPdfPwdDialog(
state = item.state, path = item.path, firstDialog = dialog, isCheckPwd = true, verificationAction = {
documentFragment.splitPdf(item.path, it)
})
} else {
documentFragment.splitPdf(item.path)
}
} }
binding.llMerge.setOnClickListener { binding.llMerge.setOnClickListener {
dialog.dismiss() dialog.dismiss()
...@@ -97,7 +104,7 @@ object PdfDialog { ...@@ -97,7 +104,7 @@ object PdfDialog {
showDeleteDialog { showDeleteDialog {
runCatching { runCatching {
val flag = File(item.path).delete() val flag = File(item.path).delete()
if (flag){ if (flag) {
documentFragment.deleteDocument(item) documentFragment.deleteDocument(item)
mainActivity.deleteDocument(item) mainActivity.deleteDocument(item)
} }
...@@ -123,7 +130,8 @@ object PdfDialog { ...@@ -123,7 +130,8 @@ object PdfDialog {
binding.llLock.setOnClickListener { binding.llLock.setOnClickListener {
showPdfPwdDialog(state = item.state, path = item.path, firstDialog = dialog, encryptionAction = { showPdfPwdDialog(state = item.state, path = item.path, firstDialog = dialog, encryptionAction = {
dialog.dismiss() dialog.dismiss()
mainActivity?.refreshSearchRv() documentFragment.adapter.notifyDataSetChanged()
mainActivity.refreshSearchRv()
}) })
} }
dialog.setOnDismissListener { dialog.setOnDismissListener {
...@@ -188,6 +196,7 @@ object PdfDialog { ...@@ -188,6 +196,7 @@ object PdfDialog {
isCheckPwd: Boolean = false, isCheckPwd: Boolean = false,
verificationAction: ((pwd: String) -> Unit)? = null, verificationAction: ((pwd: String) -> Unit)? = null,
encryptionAction: (() -> Unit)? = null, encryptionAction: (() -> Unit)? = null,
cancelAction: (() -> Unit)? = null,
) { ) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPdfPasswordBinding.inflate(LayoutInflater.from(this)) val binding = DialogPdfPasswordBinding.inflate(LayoutInflater.from(this))
...@@ -229,6 +238,7 @@ object PdfDialog { ...@@ -229,6 +238,7 @@ object PdfDialog {
binding.tvCancel.setOnClickListener { binding.tvCancel.setOnClickListener {
dialog.dismiss() dialog.dismiss()
cancelAction?.invoke()
} }
binding.tvConfirm.setOnClickListener { binding.tvConfirm.setOnClickListener {
...@@ -259,5 +269,6 @@ object PdfDialog { ...@@ -259,5 +269,6 @@ object PdfDialog {
} }
} }
} }
} }
\ No newline at end of file
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
android:id="@+id/cl_top" android:id="@+id/cl_top"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<FrameLayout <FrameLayout
...@@ -118,6 +119,7 @@ ...@@ -118,6 +119,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:orientation="vertical" android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/ll_bottom" app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintTop_toBottomOf="@id/cl_top"> app:layout_constraintTop_toBottomOf="@id/cl_top">
...@@ -229,6 +231,13 @@ ...@@ -229,6 +231,13 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/ll_bottom" android:id="@+id/ll_bottom"
android:layout_width="match_parent" android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.MainActivity2">
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:layout_marginBottom="50dp"
android:src="@mipmap/saoyisao"
app:layout_constraintBottom_toTopOf="@id/ll_bottom"
app:layout_constraintEnd_toEndOf="parent"
tools:ignore="ContentDescription" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="64dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout
android:id="@+id/ll_document"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:background="@drawable/ripple_normal"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:splitMotionEvents="true"
app:layout_constraintEnd_toStartOf="@id/ll_recent"
app:layout_constraintStart_toStartOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="9dp"
android:src="@drawable/bg_selector_document"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2.5dp"
android:text="document"
android:textColor="@color/color_tab_selector"
android:textSize="11sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_recent"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:background="@drawable/ripple_normal"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@id/ll_bookmark"
app:layout_constraintStart_toEndOf="@id/ll_document">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="9dp"
android:src="@drawable/bg_selector_recent"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2.5dp"
android:text="Recent"
android:textColor="@color/color_tab_selector"
android:textSize="11sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_bookmark"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:background="@drawable/ripple_normal"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:splitMotionEvents="false"
app:layout_constraintEnd_toStartOf="@id/ll_tool"
app:layout_constraintStart_toEndOf="@id/ll_recent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="9dp"
android:src="@drawable/bg_selector_bookmark"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2.5dp"
android:text="Bookmark"
android:textColor="@color/color_tab_selector"
android:textSize="11sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_tool"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:background="@drawable/ripple_normal"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:splitMotionEvents="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ll_bookmark">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="9dp"
android:src="@drawable/bg_selector_tool"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2.5dp"
android:text="Tool"
android:textColor="@color/color_tab_selector"
android:textSize="11sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_delete"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:background="@drawable/ripple_normal"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:splitMotionEvents="false"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@id/ll_share"
app:layout_constraintStart_toStartOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="9dp"
android:src="@mipmap/x_delete"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2.5dp"
android:text="Delete"
android:textColor="#333333"
android:textSize="11sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginHorizontal="5dp"
android:layout_weight="1"
android:background="@drawable/ripple_normal"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
android:splitMotionEvents="false"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ll_delete">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="9dp"
android:src="@mipmap/x_share"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="2.5dp"
android:text="Share"
android:textColor="#333333"
android:textSize="11sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.RecentFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<EditText
android:id="@+id/edit_search"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_f8f9fe_10"
android:hint="Enter the file name to search for"
android:imeOptions="actionDone"
android:paddingHorizontal="18dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#B8B9BD"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_search"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="Autofill,HardcodedText,RtlSymmetry,TextFields" />
<TextView
android:id="@+id/tv_tittle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="Bookmark"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<ImageView
android:id="@+id/iv_paixu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/h_paixu"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_xuanze"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_xuanze"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/h_xuanze"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/h_sousuo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_all_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg_selector_select"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/iv_search"
app:layout_constraintStart_toStartOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/ll_main_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<!-- 外层FrameLayout设置背景用来限定水波纹大小-->
<FrameLayout
android:id="@+id/cl_tabLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#00000000">
<com.angcyo.tablayout.DslTabLayout
android:id="@+id/tabLayout_document"
android:layout_width="match_parent"
android:layout_height="50dp"
app:tab_badge_gravity="center"
app:tab_badge_offset_x="20dp"
app:tab_draw_indicator="true"
app:tab_enable_text_color="true"
app:tab_indicator_drawable="@drawable/indicator_bottom_line"
app:tab_indicator_height="3dp"
app:tab_item_is_equ_width="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:text="PDF"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:paddingVertical="5dp"
android:text="Word"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:text="Excel"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:text="PPT"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</com.angcyo.tablayout.DslTabLayout>
<View
android:id="@+id/v_tabLayout_place"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</FrameLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.DocumentPageFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_document" />
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="60dp"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables,UselessParent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/empty"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="Empty"
android:textColor="#B1B4B9"
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.RecentFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_top"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintTop_toTopOf="parent">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<EditText
android:id="@+id/edit_search"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_f8f9fe_10"
android:hint="Enter the file name to search for"
android:imeOptions="actionDone"
android:paddingHorizontal="18dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#B8B9BD"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_search"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="Autofill,HardcodedText,RtlSymmetry,TextFields" />
<TextView
android:id="@+id/tv_tittle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="Recent"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<ImageView
android:id="@+id/iv_xuanze"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/h_xuanze"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/h_sousuo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_all_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg_selector_select"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@id/iv_search"
app:layout_constraintStart_toStartOf="@id/iv_search"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/ll_main_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<!-- 外层FrameLayout设置背景用来限定水波纹大小-->
<FrameLayout
android:id="@+id/cl_tabLayout"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#00000000">
<com.angcyo.tablayout.DslTabLayout
android:id="@+id/tabLayout_document"
android:layout_width="match_parent"
android:layout_height="50dp"
app:tab_badge_gravity="center"
app:tab_badge_offset_x="20dp"
app:tab_draw_indicator="true"
app:tab_enable_text_color="true"
app:tab_indicator_drawable="@drawable/indicator_bottom_line"
app:tab_indicator_height="3dp"
app:tab_item_is_equ_width="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:text="PDF"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:paddingVertical="5dp"
android:text="Word"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:text="Excel"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ripple_select"
android:clipChildren="false"
android:clipToPadding="false"
android:gravity="center"
android:text="PPT"
android:textSize="16sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</com.angcyo.tablayout.DslTabLayout>
<View
android:id="@+id/v_tabLayout_place"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
</FrameLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment