Commit 7d86163d authored by wanglei's avatar wanglei

初始化

parent 73230eef
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)
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
} }
android { android {
...@@ -15,6 +21,12 @@ android { ...@@ -15,6 +21,12 @@ android {
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()}")
} }
buildTypes { buildTypes {
...@@ -60,6 +72,12 @@ dependencies { ...@@ -60,6 +72,12 @@ dependencies {
implementation("com.tom-roush:pdfbox-android:2.0.27.0") implementation("com.tom-roush:pdfbox-android:2.0.27.0")
api(project(":pdflibrary")) api(project(":pdflibrary"))
//Word库
//PPT库
//Excel库
api(project(":library"))
//广告 //广告
implementation("com.google.android.gms:play-services-ads:23.1.0") implementation("com.google.android.gms:play-services-ads:23.1.0")
implementation("com.google.ads.mediation:applovin:12.4.3.0") implementation("com.google.ads.mediation:applovin:12.4.3.0")
......
...@@ -36,6 +36,49 @@ ...@@ -36,6 +36,49 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.appprocess.AppProcessActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.appprocess.AppProcessLoadingActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.cleanjunk.CleaningActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.permission.PermissionActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.result.ResultActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.cleanjunk.ScanJunkActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.set.SetLanguageActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity <activity
android:name=".ui.pdf.PdfActivity" android:name=".ui.pdf.PdfActivity"
android:exported="false" android:exported="false"
...@@ -44,26 +87,71 @@ ...@@ -44,26 +87,71 @@
tools:ignore="DiscouragedApi,LockedOrientationActivity"> tools:ignore="DiscouragedApi,LockedOrientationActivity">
</activity> </activity>
<activity
android:name=".ui.pdf.PdfLoadingActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfSelectActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfSplitActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfMergeActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.ppt.PptActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.document.word.WordActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.document.excel.ExcelActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<service
android:name=".fcm.MessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<!-- <service--> <receiver
<!-- android:name=".fcm.MessagingService"--> android:name=".fcm.FcmReceiver"
<!-- android:exported="false">--> android:exported="true"
<!-- <intent-filter>--> android:permission="com.google.android.c2dm.permission.SEND">
<!-- <action android:name="com.google.firebase.MESSAGING_EVENT" />--> <intent-filter>
<!-- </intent-filter>--> <action android:name="com.google.firebase.MESSAGING_EVENT" />
<!-- </service>--> <action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- <receiver--> <category android:name="com.ttesst.gododo.redause" />
<!-- android:name=".fcm.FcmReceiver"--> </intent-filter>
<!-- android:exported="true"--> </receiver>
<!-- android:permission="com.google.android.c2dm.permission.SEND">-->
<!-- <intent-filter>-->
<!-- <action android:name="com.google.firebase.MESSAGING_EVENT" />-->
<!-- <action android:name="com.google.android.c2dm.intent.RECEIVE" />-->
<!-- <category android:name="com.ttesst.gododo.redause" />-->
<!-- </intent-filter>-->
<!-- </receiver>-->
<meta-data <meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID" android:name="com.google.android.gms.ads.APPLICATION_ID"
......
...@@ -40,6 +40,13 @@ object ConstObject { ...@@ -40,6 +40,13 @@ object ConstObject {
const val FUNCTION_SCAM_JUNK = "function_scam_junk" const val FUNCTION_SCAM_JUNK = "function_scam_junk"
const val FUNCTION_APP_PROCESS = "function_app_process" const val FUNCTION_APP_PROCESS = "function_app_process"
const val DO_SPLIT_PDF = "do_split_pdf"
const val DO_SAVE_PDF = "do_save_pdf"
const val DO_MERGE_PDF = "do_merge_pdf"
const val DO_LOCK_PDF = "do_lock_pdf"
const val DO_UNLOCK_PDF = "do_unlock_pdf"
var ifAgreePrivacy = false var ifAgreePrivacy = false
get() { get() {
return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field) return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field)
...@@ -115,4 +122,12 @@ object ConstObject { ...@@ -115,4 +122,12 @@ object ConstObject {
field = value field = value
AppPreferences.getInstance().put("topic_number", value, true) AppPreferences.getInstance().put("topic_number", value, true)
} }
var haveGuideGesture = false
get() {
return AppPreferences.getInstance().getBoolean("haveGuideGesture", field)
}
set(value) {
field = value
AppPreferences.getInstance().put("haveGuideGesture", value, true)
}
} }
\ No newline at end of file
...@@ -16,7 +16,12 @@ import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_PPT ...@@ -16,7 +16,12 @@ import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_WORD import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfreader2.databinding.FragmentDocumentBinding import com.base.pdfreader2.databinding.FragmentDocumentBinding
import com.base.pdfreader2.helper.BaseFragment import com.base.pdfreader2.helper.BaseFragment
import com.base.pdfreader2.ui.document.excel.ExcelActivity
import com.base.pdfreader2.ui.document.word.WordActivity
import com.base.pdfreader2.ui.pdf.PdfActivity import com.base.pdfreader2.ui.pdf.PdfActivity
import com.base.pdfreader2.ui.pdf.PdfSelectActivity
import com.base.pdfreader2.ui.pdf.PdfSplitActivity
import com.base.pdfreader2.ui.ppt.PptActivity
import com.base.pdfreader2.ui.view.DocumentDialog.showDocumentHomeMoreDialog import com.base.pdfreader2.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreader2.ui.view.PdfDialog.showPdfHomeMoreDialog import com.base.pdfreader2.ui.view.PdfDialog.showPdfHomeMoreDialog
import com.base.pdfreader2.ui.view.PwdDialog.showPdfPwdDialog import com.base.pdfreader2.ui.view.PwdDialog.showPdfPwdDialog
...@@ -164,16 +169,16 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() { ...@@ -164,16 +169,16 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() {
} }
fun splitPdf(path: String, pwd: String?) { fun splitPdf(path: String, pwd: String?) {
// startActivity(Intent(requireContext(), PdfSplitActivity::class.java).apply { startActivity(Intent(requireContext(), PdfSplitActivity::class.java).apply {
// putExtra("path", path) putExtra("path", path)
// putExtra("pwd", pwd) putExtra("pwd", pwd)
// }) })
} }
fun mergePdf(path: String) { fun mergePdf(path: String) {
// startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply { startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
// putExtra("doWhat", ConstObject.DO_MERGE_PDF) putExtra("doWhat", ConstObject.DO_MERGE_PDF)
// }) })
} }
fun removeItem(item: DocumentBean) { fun removeItem(item: DocumentBean) {
...@@ -212,16 +217,16 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() { ...@@ -212,16 +217,16 @@ class DocumentFragment() : BaseFragment<FragmentDocumentBinding>() {
} }
} }
if (item.type == DocumentBean.TYPE_WORD) { if (item.type == DocumentBean.TYPE_WORD) {
// WordActivity.wordDocumentBean = item WordActivity.wordDocumentBean = item
// WordActivity.launchDocViewer(this, 3, item.path, -1, 100) WordActivity.launchDocViewer(this, 3, item.path, -1, 100)
} }
if (item.type == DocumentBean.TYPE_EXCEL) { if (item.type == DocumentBean.TYPE_EXCEL) {
// ExcelActivity.excelDocumentBean = item ExcelActivity.excelDocumentBean = item
// ExcelActivity.launchDocViewer(this, 3, item.path, -1, 100) ExcelActivity.launchDocViewer(this, 3, item.path, -1, 100)
} }
if (item.type == DocumentBean.TYPE_PPT) { if (item.type == DocumentBean.TYPE_PPT) {
// PptActivity.pptDocumentBean = item PptActivity.pptDocumentBean = item
// PptActivity.launchDocViewer(this, 3, item.path, -1, 100) PptActivity.launchDocViewer(this, 3, item.path, -1, 100)
} }
} }
} }
......
package com.base.pdfreader2.ui.main package com.base.pdfreader2.ui.main
import android.content.Context import android.content.Context
import android.view.View
import android.widget.ProgressBar
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.pdfreader2.bean.ConstObject import com.base.pdfreader2.bean.ConstObject
import com.base.pdfreader2.bean.ConstObject.UI_SORT_FINAL_MODIFIED import com.base.pdfreader2.bean.ConstObject.UI_SORT_FINAL_MODIFIED
import com.base.pdfreader2.bean.ConstObject.UI_SORT_NAME_A_Z import com.base.pdfreader2.bean.ConstObject.UI_SORT_NAME_A_Z
...@@ -91,6 +94,48 @@ class DocumentPresenter( ...@@ -91,6 +94,48 @@ class DocumentPresenter(
return list.filter { it.isBookmarked } return list.filter { it.isBookmarked }
} }
fun getAllPdfDataRefresh(lifecycleCoroutineScope: LifecycleCoroutineScope, adapter: DocumentAdapter, progressBar: ProgressBar) {
lifecycleCoroutineScope.launch(Dispatchers.IO) {
val list = getPdfData()
list.map { it.uiType == 1 }
launch(Dispatchers.Main) {
adapter.submitList(list)
progressBar.visibility = View.GONE
}
}
}
fun getUnLockData(lifecycleCoroutineScope: LifecycleCoroutineScope, adapter: DocumentAdapter, progressBar: ProgressBar) {
lifecycleCoroutineScope.launch(Dispatchers.IO) {
val documentList = getPdfData()
documentList.forEach {
it.state = context.checkPdfEncryption(it.path)
it.uiType = 3
}
val list = documentList.filter { it.state == 0 }
launch(Dispatchers.Main) {
adapter.submitList(list)
progressBar.visibility = View.GONE
}
}
}
fun getLockData(lifecycleCoroutineScope: LifecycleCoroutineScope, adapter: DocumentAdapter, progressBar: ProgressBar) {
lifecycleCoroutineScope.launch(Dispatchers.IO) {
val documentList = getPdfData()
documentList.forEach {
it.state = context.checkPdfEncryption(it.path)
it.uiType = 3
}
val list = documentList.filter { it.state == 1 }
launch(Dispatchers.Main) {
adapter.submitList(list)
progressBar.visibility = View.GONE
}
}
}
private fun getPdfData(): MutableList<DocumentBean> { private fun getPdfData(): MutableList<DocumentBean> {
val demoDocumentBean = DocumentBean() val demoDocumentBean = DocumentBean()
demoDocumentBean.type = TYPE_PDF demoDocumentBean.type = TYPE_PDF
......
package com.base.pdfreader2.ui.pdf
import android.content.Intent
import androidx.lifecycle.lifecycleScope
import com.artifex.mupdfdemo.MuPDFCore
import com.base.pdfreader2.ads.AdmobHelper
import com.base.pdfreader2.ads.admob.AdmobInterstitialUtils
import com.base.pdfreader2.bean.ConstObject.DO_MERGE_PDF
import com.base.pdfreader2.bean.ConstObject.DO_SAVE_PDF
import com.base.pdfreader2.bean.ConstObject.DO_SPLIT_PDF
import com.base.pdfreader2.databinding.ActivityPdfLoadingBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.utils.LogEx
import com.base.pdfreader2.utils.ToastUtils.toast
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import java.io.File
import kotlin.random.Random
class PdfLoadingActivity : BaseActivity<ActivityPdfLoadingBinding>() {
private val TAG = "PdfLoadingActivity"
private var doWhat = ""
private var srcPath: String = ""
private var newPath: String = ""
private var pwd: String? = null
private var splitIndex: List<Int> = listOf()
private lateinit var pdfPresenter: PdfPresenter
override val binding: ActivityPdfLoadingBinding by lazy {
ActivityPdfLoadingBinding.inflate(layoutInflater)
}
private var isFinishBoolean: Boolean = false
private var progressFinishAction: (() -> Unit)? = null
var resultFile: File? = null
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.pdfLoadingLanguage) {
MyApplication.pdfLoadingLanguage = it
}
}
fun progressFinishAd(next: () -> Unit) {
if (AdmobHelper.canCommonShowAd()) {
AdmobInterstitialUtils.showInterstitialAd(this) {
next.invoke()
}
} else {
next.invoke()
}
}
override fun initView() {
pdfPresenter = PdfPresenter(this)
initSpPa()
pdfPresenter.password = pwd
when (doWhat) {
DO_SPLIT_PDF -> {
progressFinishAction = {
progressFinishAd {
if (resultFile != null) {
startActivity(Intent(this, PdfActivity::class.java).apply {
putExtra("path", resultFile?.absolutePath ?: "")
})
} else {
toast("split pdf failed")
}
finish()
}
}
pdfPresenter.splitPdf(srcPath, newPath, splitIndex, finishAction = {
resultFile = it
isFinishBoolean = true
})
}
DO_SAVE_PDF -> {
muPDFCore?.save()
muPDFCore = null
progressFinishAction = {
progressFinishAd {
startActivity(Intent(this, PdfActivity::class.java).apply {
putExtra("path", srcPath)
})
finish()
}
}
lifecycleScope.launch {
delay(Random.nextLong(1500, 2500))
isFinishBoolean = true
}
}
DO_MERGE_PDF -> {
progressFinishAction = {
progressFinishAd {
startActivity(Intent(this, PdfActivity::class.java).apply {
putExtra("path", newPath)
})
finish()
}
}
pdfPresenter.mergePdf(newPath) {
isFinishBoolean = true
}
}
}
startProgress()
}
private fun startProgress() = lifecycleScope.launch(Dispatchers.Main) {
while (isActive) {
if (isFinishBoolean) {
binding.progressBar.progress = 100
delay(200)
break
} else {
binding.progressBar.progress += 2
}
delay(500)
}
progressFinishAction?.invoke()
}
private fun initSpPa() {
doWhat = intent?.extras?.getString("doWhat", "") ?: ""
srcPath = intent?.extras?.getString("srcPath", "") ?: ""
pwd = intent.extras?.getString("pwd")
newPath = intent?.extras?.getString("newPath", "") ?: ""
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 {
var muPDFCore: MuPDFCore? = null
}
override fun onDestroy() {
super.onDestroy()
muPDFCore?.onDestroy()
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.pdf
import android.content.Intent
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper
import com.base.pdfreader2.bean.ConstObject.DO_MERGE_PDF
import com.base.pdfreader2.bean.DocumentBean
import com.base.pdfreader2.databinding.ActivityPdfMergeBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.ui.view.NameDialog.showDocumentRenameDialog
import com.base.pdfreader2.ui.view.PwdDialog.showPdfPwdDialog
import com.base.pdfreader2.utils.KotlinExt.toFormatTime2
import com.base.pdfreader2.utils.LogEx
import kotlinx.coroutines.Dispatchers
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>() {
private val TAG = "PdfMergeActivity"
override val binding: ActivityPdfMergeBinding by lazy {
ActivityPdfMergeBinding.inflate(layoutInflater)
}
private lateinit var pdfPresenter: PdfPresenter
private lateinit var adapter: PdfMergeAdapter
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.pdfMergeLanguage) {
MyApplication.pdfMergeLanguage = it
}
}
override fun initView() {
pdfPresenter = PdfPresenter(this)
initAdapter()
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finish()
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.tvAdd.setOnClickListener {
finish()
}
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))
})
})
}
}
}
private fun verificationPasswordDialogs(callBack: () -> Unit) {
val queue: BlockingQueue<DocumentBean> = ArrayBlockingQueue(1)
val pwdItemList = mergePdfList.filter { it.state == 1 }.toMutableList()
if (pwdItemList.isNotEmpty()) {
LogEx.logDebug(TAG, "verificationPasswordDialogs1")
val verifiedList = arrayListOf<DocumentBean>()
val first = pwdItemList[0]
queue.put(first)
pwdItemList.removeAt(0)
LogEx.logDebug(TAG, "verificationPasswordDialogs2")
lifecycleScope.launch(Dispatchers.IO) {
while (isActive) {
val item: DocumentBean = queue.take()
LogEx.logDebug(TAG, "pwdItem =${item.path}")
if (item.path == "Cancel") {
break
}
launch(Dispatchers.Main) {
showPdfPwdDialog(item.state, item.path, isCheckPwd = true, verificationAction = { pwd ->
item.pwd = pwd
verifiedList.add(item)
if (pwdItemList.isNotEmpty()) {
val next = pwdItemList[0]
queue.put(next)
pwdItemList.removeAt(0)
} else {
queue.put(DocumentBean(path = "Cancel"))
}
}, cancelAction = {
cancel()
})
}
}
LogEx.logDebug(TAG, "verificationPasswordDialogs3 ${verifiedList.size}")
verifiedList.forEach { verifiedItem ->
mergePdfList.find { it.path == verifiedItem.path }?.pwd = verifiedItem.pwd
}
mergePdfList.forEach {
LogEx.logDebug(TAG, "密码=" + it.pwd)
}
launch(Dispatchers.Main) {
callBack.invoke()
}
}
} else {
callBack.invoke()
}
}
private fun initAdapter() {
val callBack = PdfMergeItemTouchHelperCallBack()
val itemTouchHelper = ItemTouchHelper(callBack)
itemTouchHelper.attachToRecyclerView(binding.rv)
adapter = PdfMergeAdapter(itemTouchHelper, callBack)
adapter.removeAction = {
mergePdfList.remove(it)
binding.tvBtnNext.isEnabled = mergePdfList.size >= 2
}
binding.rv.adapter = adapter
callBack.changeListOrder = { olderPosition, newPosition ->
val bean = mergePdfList[olderPosition]
mergePdfList.remove(bean)
mergePdfList.add(newPosition, bean)
mergePdfList.forEach {
LogEx.logDebug(TAG, "mergePdfList ${it.path}")
}
adapter.items.forEach {
LogEx.logDebug(TAG, "items ${it.path}")
}
// adapter.items = mergePdfList
}
mergePdfList.let { adapter.submitList(it) }
binding.tvBtnNext.isEnabled = mergePdfList.size >= 2
}
companion object {
val mergePdfList: ArrayList<DocumentBean> = arrayListOf()
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.pdf
import android.annotation.SuppressLint
import android.content.Context
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.base.pdfreader2.R
import com.base.pdfreader2.bean.DocumentBean
import com.base.pdfreader2.databinding.ItemPdfMergeBinding
import com.base.pdfreader2.utils.KotlinExt.toFormatSize
import com.base.pdfreader2.utils.KotlinExt.toFormatTime4
import com.base.pdfreader2.utils.LogEx
import com.base.pdfreader2.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
import java.io.File
class PdfMergeAdapter(
val itemTouchHelper: ItemTouchHelper,
val callBack: PdfMergeItemTouchHelperCallBack
) : BaseQuickAdapter<DocumentBean, PdfMergeAdapter.PdfMergeViewHolder>() {
private val TAG = "PdfMergeAdapter"
var removeAction: ((item: DocumentBean) -> Unit)? = null
inner class PdfMergeViewHolder(view: View) : RecyclerView.ViewHolder(view)
@SuppressLint("SetTextI18n", "ClickableViewAccessibility")
override fun onBindViewHolder(holder: PdfMergeViewHolder, position: Int, item: DocumentBean?) {
if (item == null) return
val binding = ItemPdfMergeBinding.bind(holder.itemView)
val file = File(item.path)
binding.tvName.text = file.name
binding.tvInfo.text = file.lastModified().toFormatTime4() + " " + file.length().toFormatSize()
if (item.state == 0) {
binding.iv.setImageResource(R.mipmap.pdficon)
} else {
binding.iv.setImageResource(R.mipmap.souding)
}
binding.flClose.setOnClickListener {
remove(item)
removeAction?.invoke(item)
}
binding.ivMove.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
if (event?.action == MotionEvent.ACTION_DOWN) {
callBack.enableLongPress = true
LogEx.logDebug(TAG, "ACTION_DOWN ${System.currentTimeMillis()}")
// 长按时启动拖动
itemTouchHelper.startDrag(holder)
return true
}
return false
}
})
}
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): PdfMergeViewHolder {
return PdfMergeViewHolder(R.layout.item_pdf_merge.inflate(parent))
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.pdf
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.base.pdfreader2.utils.LogEx
class PdfMergeItemTouchHelperCallBack : ItemTouchHelper.Callback() {
var changeListOrder: ((olderPosition: Int, newPosition: Int) -> Unit)? = null
var enableLongPress: Boolean = false
private val TAG = "PdfMergeItemTouchHelperCallBack"
override fun getMovementFlags(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder): Int {
//支持上下左右拖动
// ACTION_STATE_IDLE item默认滑动方向
return makeMovementFlags(
ItemTouchHelper.UP or ItemTouchHelper.DOWN or ItemTouchHelper.START or ItemTouchHelper.END,
ItemTouchHelper.ACTION_STATE_IDLE
)
// 禁用默认的拖动和滑动
// return makeMovementFlags(0, 0);
}
/**
* 拖拽结束后(手指抬起)会回调的方法
*/
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
//更新item holder对应位置
recyclerView.adapter?.notifyItemMoved(
viewHolder.adapterPosition,
target.adapterPosition
)
changeListOrder?.invoke(viewHolder.layoutPosition, target.layoutPosition)
enableLongPress = false
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) = Unit
override fun isLongPressDragEnabled(): Boolean {
LogEx.logDebug(TAG, "isLongPressDragEnabled $enableLongPress ${System.currentTimeMillis()}")
return enableLongPress
}
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
if (actionState == ItemTouchHelper.ACTION_STATE_IDLE) {
// 当没有动作时,取消拖动状态
viewHolder?.itemView?.setPressed(false)
} else if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
// 当滑动时,设置拖动状态
viewHolder?.itemView?.setPressed(true)
}
}
}
\ No newline at end of file
...@@ -8,7 +8,9 @@ import com.artifex.mupdfdemo.OutlineActivityData ...@@ -8,7 +8,9 @@ import com.artifex.mupdfdemo.OutlineActivityData
import com.base.pdfreader2.R import com.base.pdfreader2.R
import com.base.pdfreader2.bean.ConstObject.MIME_TYPE_PDF import com.base.pdfreader2.bean.ConstObject.MIME_TYPE_PDF
import com.base.pdfreader2.bean.PdfPageBean import com.base.pdfreader2.bean.PdfPageBean
import com.base.pdfreader2.ui.pdf.PdfMergeActivity.Companion.mergePdfList
import com.base.pdfreader2.utils.LogEx import com.base.pdfreader2.utils.LogEx
import com.base.pdfreader2.utils.PdfBoxUtils
import com.base.pdfreader2.utils.PdfBoxUtils.getNumberOfPages import com.base.pdfreader2.utils.PdfBoxUtils.getNumberOfPages
import com.base.pdfreader2.utils.UriUtils.readFileToByteArray import com.base.pdfreader2.utils.UriUtils.readFileToByteArray
import com.tom_roush.pdfbox.multipdf.PDFMergerUtility import com.tom_roush.pdfbox.multipdf.PDFMergerUtility
...@@ -135,60 +137,60 @@ class PdfPresenter( ...@@ -135,60 +137,60 @@ class PdfPresenter(
fun mergePdf(mergePath: String, finishAction: (success: Boolean) -> Unit) = Thread { fun mergePdf(mergePath: String, finishAction: (success: Boolean) -> Unit) = Thread {
// var isSuccess: Boolean = false var isSuccess: Boolean = false
// try { try {
// val mergerUtility = PDFMergerUtility() val mergerUtility = PDFMergerUtility()
// mergerUtility.destinationFileName = mergePath mergerUtility.destinationFileName = mergePath
//
// //解密 //解密
// PdfMergeActivity.mergePdfList.filter { it.state == 1 }.forEach { PdfMergeActivity.mergePdfList.filter { it.state == 1 }.forEach {
// PdfBoxUtils.clearPassword(it.path, it.password) PdfBoxUtils.clearPassword(it.path, it.pwd)
// } }
//
// LogEx.logDebug(TAG, "mergePdf ${mergePdfList.size}") LogEx.logDebug(TAG, "mergePdf ${mergePdfList.size}")
// PdfMergeActivity.mergePdfList.forEach { documentBean -> PdfMergeActivity.mergePdfList.forEach { documentBean ->
// LogEx.logDebug(TAG, "mergePdf item= ${documentBean.path} ${documentBean.state}") LogEx.logDebug(TAG, "mergePdf item= ${documentBean.path} ${documentBean.state}")
//
// //带密码 mergerUtility.addSource(inputStream) 不行 //带密码 mergerUtility.addSource(inputStream) 不行
// mergerUtility.addSource(File(documentBean.path)) mergerUtility.addSource(File(documentBean.path))
//
//// if (documentBean.state == 0) { // if (documentBean.state == 0) {
//// mergerUtility.addSource(File(documentBean.path)) // mergerUtility.addSource(File(documentBean.path))
//// } else { // } else {
//// LogEx.logDebug(TAG, "mergePdf password=${documentBean.password}") // LogEx.logDebug(TAG, "mergePdf password=${documentBean.password}")
//// try { // try {
//// val pdfDocument = PDDocument.load(File(documentBean.path), documentBean.password) // val pdfDocument = PDDocument.load(File(documentBean.path), documentBean.password)
//// LogEx.logDebug(TAG, "mergePdf pdfDocument ${pdfDocument.numberOfPages}") // LogEx.logDebug(TAG, "mergePdf pdfDocument ${pdfDocument.numberOfPages}")
//// val byteArrayOutputStream = ByteArrayOutputStream() // val byteArrayOutputStream = ByteArrayOutputStream()
//// pdfDocument.save(byteArrayOutputStream) // pdfDocument.save(byteArrayOutputStream)
//// LogEx.logDebug(TAG, "mergePdf byteArrayOutputStream ${byteArrayOutputStream.size()}") // LogEx.logDebug(TAG, "mergePdf byteArrayOutputStream ${byteArrayOutputStream.size()}")
//// pdfDocument.close() // pdfDocument.close()
//// val inputStream = ByteArrayInputStream(byteArrayOutputStream.toByteArray()) // val inputStream = ByteArrayInputStream(byteArrayOutputStream.toByteArray())
//// LogEx.logDebug(TAG, "mergePdf inputStream") // LogEx.logDebug(TAG, "mergePdf inputStream")
//// mergerUtility.addSource(inputStream) // mergerUtility.addSource(inputStream)
//// } catch (e: Exception) { // } catch (e: Exception) {
//// LogEx.logDebug(TAG, "mergePdf Exception ${e.printStackTrace()}") // LogEx.logDebug(TAG, "mergePdf Exception ${e.printStackTrace()}")
//// } // }
//// LogEx.logDebug(TAG, "mergePdf inputStream") // LogEx.logDebug(TAG, "mergePdf inputStream")
//// } // }
// } }
// mergerUtility.mergeDocuments(null) mergerUtility.mergeDocuments(null)
//
// //重新加密 //重新加密
// PdfMergeActivity.mergePdfList.filter { it.state == 1 }.forEach { PdfMergeActivity.mergePdfList.filter { it.state == 1 }.forEach {
// val flag = PdfBoxUtils.setPassword(it.path, it.password, it.password) val flag = PdfBoxUtils.setPassword(it.path, it.pwd, it.pwd)
// LogEx.logDebug(TAG, "重新加密 flag=$flag ${it.path} ${it.password}") LogEx.logDebug(TAG, "重新加密 flag=$flag ${it.path} ${it.pwd}")
// } }
//
// mergePdfList.clear() mergePdfList.clear()
// LogEx.logDebug(TAG, "mergePdf finish") LogEx.logDebug(TAG, "mergePdf finish")
// isSuccess = true isSuccess = true
// } catch (e: Exception) { } catch (e: Exception) {
//
// } }
//
//
// finishAction.invoke(isSuccess) finishAction.invoke(isSuccess)
}.start() }.start()
} }
\ No newline at end of file
package com.base.pdfreader2.ui.pdf
import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
import androidx.activity.addCallback
import androidx.lifecycle.lifecycleScope
import com.base.pdfreader2.R
import com.base.pdfreader2.ads.AdmobHelper
import com.base.pdfreader2.ads.admob.AdmobInterstitialUtils
import com.base.pdfreader2.bean.ConstObject.DO_LOCK_PDF
import com.base.pdfreader2.bean.ConstObject.DO_MERGE_PDF
import com.base.pdfreader2.bean.ConstObject.DO_SPLIT_PDF
import com.base.pdfreader2.bean.ConstObject.DO_UNLOCK_PDF
import com.base.pdfreader2.databinding.ActivityPdfSelectBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.ui.main.DocumentAdapter
import com.base.pdfreader2.ui.main.DocumentPresenter
import com.base.pdfreader2.ui.view.PwdDialog.showPdfPwdDialog
import com.base.pdfreader2.utils.LogEx
class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>() {
private val TAG = "PdfSelectActivity"
private lateinit var documentPresenter: DocumentPresenter
private lateinit var adapter: DocumentAdapter
private var doWhat: String = ""
override val binding: ActivityPdfSelectBinding by lazy {
ActivityPdfSelectBinding.inflate(layoutInflater)
}
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.pdfSelectLanguage) {
MyApplication.pdfSelectLanguage = it
}
}
override fun initView() {
doWhat = intent.extras?.getString("doWhat", "") ?: ""
documentPresenter = DocumentPresenter(this)
initAdapter()
when (doWhat) {
DO_SPLIT_PDF -> {
binding.tvBtnNext.visibility = View.GONE
binding.tvSelectTip.text = getString(R.string.select_a_project)
documentPresenter.getAllPdfDataRefresh(lifecycleScope, adapter,binding.progressBar)
}
DO_MERGE_PDF -> {
binding.tvSelectTip.text = getString(R.string.select_a_project)
documentPresenter.getAllPdfDataRefresh(lifecycleScope, adapter, binding.progressBar)
}
DO_LOCK_PDF -> {
binding.tvBtnNext.visibility = View.GONE
binding.tvSelectTip.text = getString(R.string.select_a_project)
documentPresenter.getUnLockData(lifecycleScope, adapter,binding.progressBar)
}
DO_UNLOCK_PDF -> {
binding.tvBtnNext.visibility = View.GONE
binding.tvSelectTip.text = getString(R.string.select_a_project)
documentPresenter.getLockData(lifecycleScope, adapter,binding.progressBar)
}
}
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finishToMain()
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.tvBtnNext.setOnClickListener {
if (doWhat == DO_MERGE_PDF) {
val selectList = adapter.items.filter { it.isSelect }
PdfMergeActivity.mergePdfList.clear()
PdfMergeActivity.mergePdfList.addAll(selectList)
startActivity(Intent(this, PdfMergeActivity::class.java))
}
}
}
@SuppressLint("StringFormatMatches")
private fun initAdapter() {
adapter = DocumentAdapter()
adapter.itemClick = {
if (doWhat == DO_SPLIT_PDF) {
if (it.state == 0) {
startActivity(Intent(this, PdfSplitActivity::class.java).apply {
putExtra("path", it.path)
})
} else {
showPdfPwdDialog(
state = it.state,
path = it.path,
isCheckPwd = true,
verificationAction = { pwd ->
startActivity(Intent(this, PdfSplitActivity::class.java).apply {
putExtra("path", it.path)
putExtra("pwd", pwd)
})
})
}
}
if (doWhat == DO_LOCK_PDF) {
showPdfPwdDialog(state = it.state, path = it.path, encryptionAction = {
if (AdmobHelper.canCommonShowAd()) {
AdmobInterstitialUtils.showInterstitialAd(this) { flag ->
adapter.remove(it)
}
} else {
adapter.remove(it)
}
})
}
if (doWhat == DO_UNLOCK_PDF) {
showPdfPwdDialog(state = it.state, path = it.path, encryptionAction = {
if (AdmobHelper.canCommonShowAd()) {
AdmobInterstitialUtils.showInterstitialAd(this) { flag ->
adapter.remove(it)
}
} else {
adapter.remove(it)
}
})
}
}
adapter.selectAction = {
LogEx.logDebug(TAG, "selectAction $it")
if (it == 0) {
binding.tvSelectTip.visibility = View.INVISIBLE
binding.tvBtnNext.isEnabled = false
} else {
binding.tvBtnNext.isEnabled = true
binding.tvSelectTip.visibility = View.VISIBLE
binding.tvSelectTip.text = getString(R.string.items_has_been_selected, it)
}
}
binding.rv.adapter = adapter
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.pdf
import android.content.Intent
import androidx.activity.addCallback
import com.base.pdfreader2.R
import com.base.pdfreader2.bean.ConstObject
import com.base.pdfreader2.bean.PdfPageBean
import com.base.pdfreader2.databinding.ActivityPdfSplitBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.ui.view.NameDialog.showDocumentRenameDialog
class PdfSplitActivity : BaseActivity<ActivityPdfSplitBinding>(), PdfView {
private lateinit var pdfPresenter: PdfPresenter
private lateinit var pdfPagerAdapter: PdfPagerAdapter
private var path: String = ""
private var pwd: String? = ""
override val binding: ActivityPdfSplitBinding by lazy {
ActivityPdfSplitBinding.inflate(layoutInflater)
}
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.pdfSplitLanguage) {
MyApplication.pdfSplitLanguage = it
}
}
override fun initView() {
pdfPresenter = PdfPresenter(this, this)
path = intent.extras?.getString("path", "") ?: ""
pwd = intent.extras?.getString("pwd", "") ?: ""
pdfPresenter.password = pwd
initAdapter()
pdfPresenter.iniPdfPage(path)
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
finishToMain()
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.ivSelector.setOnClickListener {
binding.ivSelector.isSelected = !binding.ivSelector.isSelected
pdfPagerAdapter.toggleSelect(binding.ivSelector.isSelected)
}
binding.tvBtnSplit.setOnClickListener {
val splitIndex = pdfPagerAdapter.items.filter { it.isSelect }.map { it.pageIndex }
showDocumentRenameDialog(okAction = { newName ->
startActivity(Intent(this, PdfLoadingActivity::class.java).apply {
putExtra("doWhat", ConstObject.DO_SPLIT_PDF)
putExtra("srcPath", path)
putExtra("pwd", pwd)
putExtra("newPath", pdfPresenter.createNewPdfPath(newName))
putExtra("splitIndex", splitIndex.joinToString(separator = ","))
})
finish()
})
}
}
private fun initAdapter() {
pdfPagerAdapter = PdfPagerAdapter(path, null, R.layout.item_pdf_pager_split)
pdfPagerAdapter.mPassword = pwd
pdfPagerAdapter.selectAction = { enable, allSelect ->
binding.tvBtnSplit.isEnabled = enable
binding.ivSelector.isSelected = allSelect
}
binding.rv.adapter = pdfPagerAdapter
}
override fun initPdfPageRv(items: List<PdfPageBean>) {
pdfPagerAdapter.submitList(items)
}
}
\ No newline at end of file
...@@ -9,4 +9,6 @@ interface PdfView { ...@@ -9,4 +9,6 @@ interface PdfView {
fun jumpPage(pageIndex: Int) = Unit fun jumpPage(pageIndex: Int) = Unit
fun jumpSplit() = Unit fun jumpSplit() = Unit
} }
\ No newline at end of file
package com.base.pdfreader2.ui.ppt
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.content.pm.ActivityInfo
import android.view.View
import android.view.animation.Animation
import android.view.animation.TranslateAnimation
import androidx.activity.addCallback
import androidx.core.view.isVisible
import com.base.pdfreader2.R
import com.base.pdfreader2.ads.AdmobHelper
import com.base.pdfreader2.ads.admob.AdmobInterstitialUtils
import com.base.pdfreader2.ads.admob.AdmobNativeUtils
import com.base.pdfreader2.bean.DocumentBean
import com.base.pdfreader2.databinding.ActivityPptBinding
import com.base.pdfreader2.helper.BaseActivity
import com.base.pdfreader2.helper.MyApplication
import com.base.pdfreader2.ui.view.DocumentDialog.showDocumentMore
import com.base.pdfreader2.utils.LogEx
import com.base.pdfreader2.utils.SpStringUtils
import com.cherry.lib.doc.bean.DocEngine
import com.cherry.lib.doc.office.pg.control.PGControl
import com.cherry.lib.doc.util.Constant
class PptActivity : BaseActivity<ActivityPptBinding>() {
private val TAG = "com.base.pdfreader2.ui.ppt.PptActivity"
override val binding: ActivityPptBinding by lazy {
ActivityPptBinding.inflate(layoutInflater)
}
companion object {
var pptDocumentBean: DocumentBean = DocumentBean()
fun launchDocViewer(
activity: Activity,
docSourceType: Int,
path: String?,
fileType: Int? = null,
engine: Int? = null
) {
val intent = Intent(activity, PptActivity::class.java)
intent.putExtra(Constant.INTENT_SOURCE_KEY, docSourceType)
intent.putExtra(Constant.INTENT_DATA_KEY, path)
intent.putExtra(Constant.INTENT_TYPE_KEY, fileType)
intent.putExtra(Constant.INTENT_ENGINE_KEY, engine)
activity.startActivity(intent)
}
}
override fun onResume() {
super.onResume()
updateAppLanguage(MyApplication.pptLanguage) {
MyApplication.pptLanguage = it
}
}
private var totalPageNumber = 0
@SuppressLint("SetTextI18n")
override fun initView() {
initSpData(intent)
binding.mDocView.getPageNumberAction = { current, total ->
if (!binding.tvPageCount.isVisible) {
binding.tvPageCount.isVisible = true
}
totalPageNumber = total
binding.tvPageCount.text = "$current/$total"
}
binding.mDocView.singleTapAction = {
LogEx.logDebug(TAG, "actionDownCallBack")
if (isShowTopLayout) {
LogEx.logDebug(TAG, "hide")
hideTopLayout()
} else {
showTopLayout()
LogEx.logDebug(TAG, "show")
}
}
AdmobNativeUtils.showNativeAd(this, binding.flAd, R.layout.layout_admob_document_in)
}
override fun onDestroy() {
super.onDestroy()
binding.mDocView.onDestroy()
AdmobNativeUtils.onDestroy()
}
override fun initListener() {
super.initListener()
onBackPressedDispatcher.addCallback {
if (AdmobHelper.isShowCloseDocumentInter()) {
AdmobInterstitialUtils.showInterstitialAd(this@PptActivity) {
if (it) {
AdmobHelper.lastCloseDocumentShowAd = System.currentTimeMillis()
}
binding.root.postDelayed({ finishToMain() }, 500)
}
} else {
binding.root.postDelayed({ finishToMain() }, 500)
}
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
binding.ivXuanzhuan.setOnClickListener {
switchOrientation()
}
binding.ivMore.setOnClickListener {
showDocumentMore(pptDocumentBean, totalPageNumber - 1) { pageIndex ->
((binding.mDocView.iOffice?.control?.appControl as PGControl)
.pgView.pgPrintMode.listView.showPDFPageForIndex(pageIndex))
}
}
}
private fun switchOrientation() {
requestedOrientation = if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
} else {
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
}
private var docSourceType = 0
private var fileType = -1
private var engine: Int = DocEngine.INTERNAL.value
private var pathOrUri: String? = null// 文件地址
private fun initSpData(intent: Intent?) {
pathOrUri = intent?.getStringExtra(Constant.INTENT_DATA_KEY)
docSourceType = intent?.getIntExtra(Constant.INTENT_SOURCE_KEY, 0) ?: 0
fileType = intent?.getIntExtra(Constant.INTENT_TYPE_KEY, -1) ?: -1
engine = intent?.getIntExtra(Constant.INTENT_ENGINE_KEY, DocEngine.INTERNAL.value) ?: DocEngine.INTERNAL.value
binding.mDocView.openDoc(this, pathOrUri, docSourceType, fileType, false)
LogEx.logDebug(TAG, "initData-docUrl = $pathOrUri")
LogEx.logDebug(TAG, "initData-docSourceType = $docSourceType")
LogEx.logDebug(TAG, "initData-fileType = $fileType")
SpStringUtils.addSpString(SpStringUtils.LAST_VIEW_KEY, (pathOrUri ?: "") + "_/_" + System.currentTimeMillis())
}
private fun showTopLayout() {
if (!isShowTopLayout) {
isShowTopLayout = true
val topAnim: Animation = TranslateAnimation(0f, 0f, -binding.vAnimatorTop.height.toFloat(), 0f)
topAnim.setDuration(200)
topAnim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {
binding.vAnimatorTop.visibility = View.VISIBLE
}
override fun onAnimationRepeat(animation: Animation) {}
override fun onAnimationEnd(animation: Animation) {
}
})
binding.vAnimatorTop.startAnimation(topAnim)
}
}
private var isShowTopLayout = true
private fun hideTopLayout() {
if (isShowTopLayout) {
isShowTopLayout = false
val topAnim: Animation = TranslateAnimation(0f, 0f, 0f, -binding.vAnimatorTop.height.toFloat())
topAnim.setDuration(200)
topAnim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {}
override fun onAnimationRepeat(animation: Animation) {}
override fun onAnimationEnd(animation: Animation) {
binding.vAnimatorTop.visibility = View.GONE
}
})
binding.vAnimatorTop.startAnimation(topAnim)
}
}
}
\ No newline at end of file
package com.base.pdfreader2.ui.view package com.base.pdfreader2.ui.view
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.WindowManager
import androidx.core.widget.addTextChangedListener
import com.base.pdfreader2.R import com.base.pdfreader2.R
import com.base.pdfreader2.bean.DocumentBean import com.base.pdfreader2.bean.DocumentBean
import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_EXCEL import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_EXCEL
...@@ -11,6 +14,8 @@ import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_PPT ...@@ -11,6 +14,8 @@ import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_WORD import com.base.pdfreader2.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfreader2.databinding.DialogDocumentDetailBinding import com.base.pdfreader2.databinding.DialogDocumentDetailBinding
import com.base.pdfreader2.databinding.DialogDocumentHomeMoreBinding import com.base.pdfreader2.databinding.DialogDocumentHomeMoreBinding
import com.base.pdfreader2.databinding.DialogDocumentMoreBinding
import com.base.pdfreader2.databinding.DialogPageNumberBinding
import com.base.pdfreader2.ui.main.DocumentFragment import com.base.pdfreader2.ui.main.DocumentFragment
import com.base.pdfreader2.ui.main.DocumentPresenter import com.base.pdfreader2.ui.main.DocumentPresenter
import com.base.pdfreader2.ui.view.DialogView.showDeleteDialog import com.base.pdfreader2.ui.view.DialogView.showDeleteDialog
...@@ -19,8 +24,10 @@ import com.base.pdfreader2.utils.IntentShareUtils.documentShare ...@@ -19,8 +24,10 @@ import com.base.pdfreader2.utils.IntentShareUtils.documentShare
import com.base.pdfreader2.utils.KotlinExt.toFormatSize import com.base.pdfreader2.utils.KotlinExt.toFormatSize
import com.base.pdfreader2.utils.KotlinExt.toFormatTime3 import com.base.pdfreader2.utils.KotlinExt.toFormatTime3
import com.base.pdfreader2.utils.KotlinExt.toFormatTime4 import com.base.pdfreader2.utils.KotlinExt.toFormatTime4
import com.base.pdfreader2.utils.NumberRangeFilter
import com.base.pdfreader2.utils.SpStringUtils import com.base.pdfreader2.utils.SpStringUtils
import com.base.pdfreader2.utils.SpStringUtils.LAST_VIEW_KEY import com.base.pdfreader2.utils.SpStringUtils.LAST_VIEW_KEY
import com.base.pdfreader2.utils.ToastUtils.toast
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.File import java.io.File
...@@ -119,4 +126,90 @@ object DocumentDialog { ...@@ -119,4 +126,90 @@ object DocumentDialog {
} }
} }
fun Activity.showDocumentMore(
documentBean: DocumentBean,
pageNumber: Int = 0,
jumpAction: ((pageIndex: Int) -> Unit)? = null
) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogDocumentMoreBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
if (documentBean.type == TYPE_EXCEL) {
binding.llJump.visibility = View.GONE
}
if (documentBean.isBookmarked) {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_s)
} else {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_n)
}
binding.ivBookmark.setOnClickListener {
binding.ivBookmark.isSelected = !binding.ivBookmark.isSelected
if (binding.ivBookmark.isSelected) {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_s)
SpStringUtils.addSpString(SpStringUtils.BOOKMARK_KEY, documentBean.path)
} else {
binding.ivBookmark.setImageResource(R.mipmap.h_soucang_n)
SpStringUtils.deleteSpString(SpStringUtils.BOOKMARK_KEY, documentBean.path)
}
}
binding.llDetail.setOnClickListener {
showDocumentDetail(documentBean.path)
}
binding.llShare.setOnClickListener {
documentShare(documentBean)
}
binding.llJump.setOnClickListener {
showJumpPageNumberDialog(pageNumber) { pageIndex ->
dialog.dismiss()
jumpAction?.invoke(pageIndex)
}
}
}
fun Context.showJumpPageNumberDialog(pageNumber: Int, okAction: ((pageIndex: Int) -> Unit)?) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPageNumberBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(false)
val window = dialog.window
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
dialog.show()
val parentView = binding.root.parent as View
val behavior = BottomSheetBehavior.from(parentView)
//展开
behavior.state = BottomSheetBehavior.STATE_EXPANDED
binding.edit.filters = arrayOf(NumberRangeFilter(1, pageNumber + 1))
binding.edit.hint = "1 - ${pageNumber + 1}"
binding.edit.addTextChangedListener {
binding.tvOk.isEnabled = !it.isNullOrEmpty()
}
binding.edit.requestFocus()
binding.tvOk.setOnClickListener {
val number = binding.edit.text.toString()
if (number.isEmpty()) {
toast("number can't be empty!")
return@setOnClickListener
}
dialog.dismiss()
okAction?.invoke(number.toInt() - 1)
}
}
} }
\ No newline at end of file
This diff is collapsed.
package com.base.pdfreader2.utils
import android.text.InputFilter
import android.text.Spanned
class NumberRangeFilter(private val min: Int, private val max: Int) : InputFilter {
override fun filter(source: CharSequence, start: Int, end: Int, dest: Spanned, dstart: Int, dend: Int): CharSequence? {
try {
val input = dest.subSequence(0, dstart).toString() + source.toString() + dest.subSequence(dend, dest.length)
val numericValue = input.toIntOrNull()
if (numericValue != null && numericValue in min..max) {
return null // 允许输入
}
} catch (nfe: NumberFormatException) {
// 如果输入不是数字,则忽略
}
return "" // 拒绝输入
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00B5DC" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00B8DE" />
<corners android:radius="25dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#1A00B8DE" />
<corners android:radius="14dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:topLeftRadius="15dp" android:bottomRightRadius="15dp"/>
<solid android:color="#BFE8F3"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="10dp"
android:topRightRadius="10dp" />
<solid android:color="#FD8700" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/transparent" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 设置背景色 -->
<item android:id="@android:id/background">
<shape>
<solid android:color="#3300B8DE" />
<corners android:radius="2.5dp" />
</shape>
</item>
<!-- 设置进度条颜色 -->
<!-- <item android:id="@android:id/progress">-->
<!-- <scale android:scaleWidth="100%">-->
<!-- <clip>-->
<!-- <shape>-->
<!-- <corners android:radius="2.5dp" />-->
<!-- <solid android:color="#00B8DE" />-->
<!-- </shape>-->
<!-- </clip>-->
<!-- </scale>-->
<!-- </item>-->
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" /> <item android:drawable="@mipmap/qdyebg" />
<item <!-- <item-->
android:gravity="top|center_horizontal" <!-- android:gravity="top|center_horizontal"-->
android:top="220dp"> <!-- android:top="220dp">-->
<bitmap android:src="@mipmap/qdyebg" /> <!-- <bitmap android:src="" />-->
</item> <!-- </item>-->
</layer-list> </layer-list>
\ 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.document.excel.ExcelActivity">
<ViewAnimator
android:id="@+id/v_animator_top"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
app:layout_constraintTop_toTopOf="parent">
<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"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="15dp"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_xuanzhuan"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:text="DEMO.xlsx" />
<ImageView
android:id="@+id/iv_xuanzhuan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/hengping"
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_toStartOf="@id/iv_more"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/x_genduo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<EditText
android:id="@+id/edit_search"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_f8f9fe_10"
android:hint="input..."
android:paddingHorizontal="18dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#B8B9BD"
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,TextFields" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ViewAnimator>
<com.cherry.lib.doc.widget.DocView
android:id="@+id/mDocView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:dv_moving_orientation="vertical"
app:dv_show_page_num="false"
app:layout_constraintBottom_toTopOf="@id/fl_ad"
app:layout_constraintTop_toBottomOf="@id/v_animator_top" />
<ViewAnimator
android:id="@+id/v_animator_bottom"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/fl_ad">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="UselessParent">
<FrameLayout
android:id="@+id/fl_pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:layout_marginStart="20dp"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/left"
tools:ignore="ContentDescription" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="20dp"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/right"
tools:ignore="ContentDescription" />
</FrameLayout>
</FrameLayout>
</ViewAnimator>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/zhanweitu2"
tools:ignore="ContentDescription" />
</FrameLayout>
</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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/tu_loading"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.35"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="76dp"
android:text="@string/splitting_pdf_please_wait"
android:textColor="#333333"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="@id/iv"
app:layout_constraintStart_toStartOf="@id/iv"
app:layout_constraintTop_toBottomOf="@id/iv"
tools:ignore="HardcodedText" />
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="0dp"
android:layout_height="16sp"
android:layout_marginHorizontal="56dp"
android:layout_marginTop="19dp"
android:max="100"
android:progressDrawable="@drawable/progress_bg_pdf_loading"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_desc" />
</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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<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"
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:layout_gravity="center"
android:padding="15dp"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:text="@string/merge_pdf"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:text="@string/add"
android:textColor="#00B8DE"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@id/tv_btn_next"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<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_pdf_merge" />
</FrameLayout>
<TextView
android:id="@+id/tv_btn_next"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_marginBottom="24dp"
android:background="@drawable/bg_selector_btn"
android:enabled="false"
android:gravity="center"
android:text="@string/merge"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
</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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<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"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_select_tip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="15dp"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/tv_select_tip"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:text="1 item has been selected" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@id/tv_btn_next"
app:layout_constraintTop_toBottomOf="@id/cl_top">
<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" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
<TextView
android:id="@+id/tv_btn_next"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_marginBottom="24dp"
android:background="@drawable/bg_selector_btn"
android:enabled="false"
android:gravity="center"
android:text="@string/next"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<FrameLayout
android:id="@+id/fl_fanhui"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
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>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:text="@string/split_pdf"
android:textColor="@color/black"
android:textSize="19sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<ImageView
android:id="@+id/iv_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="34dp"
android:src="@drawable/bg_selector_select"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3"
tools:listitem="@layout/item_pdf_pager_split" />
<TextView
android:id="@+id/tv_btn_split"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="35dp"
android:background="@drawable/bg_selector_btn"
android:enabled="false"
android:gravity="center"
android:text="@string/split"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
\ 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.document.ppt.PptActivity">
<ViewAnimator
android:id="@+id/v_animator_top"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
app:layout_constraintTop_toTopOf="parent">
<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"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="15dp"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_xuanzhuan"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:text="DEMO.ppt" />
<ImageView
android:id="@+id/iv_xuanzhuan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/hengping"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/iv_more"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/x_genduo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ViewAnimator>
<com.cherry.lib.doc.widget.DocView
android:id="@+id/mDocView"
android:layout_width="match_parent"
android:layout_height="0dp"
app:dv_engine="internal"
app:dv_moving_orientation="vertical"
app:dv_page_pb_color="@color/yellow"
app:dv_page_pb_height="2dp"
app:dv_show_page_num="true"
app:layout_constraintBottom_toTopOf="@id/fl_ad"
app:layout_constraintTop_toBottomOf="@id/v_animator_top" />
<TextView
android:id="@+id/tv_pageCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginTop="28dp"
android:background="@drawable/bg_54585b_5"
android:includeFontPadding="false"
android:paddingHorizontal="2dp"
android:paddingVertical="2dp"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_animator_top"
tools:text="1/3" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/zhanweitu2"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -163,11 +163,13 @@ ...@@ -163,11 +163,13 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="18dp" android:layout_marginHorizontal="18dp"
android:layout_marginTop="18dp"> android:layout_marginTop="18dp"
tools:ignore="UselessParent">
<include layout="@layout/layout_admob_app_exit" /> <include layout="@layout/layout_admob_app_exit" />
</FrameLayout> </FrameLayout>
</FrameLayout> </FrameLayout>
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="25dp" android:layout_marginStart="25dp"
android:layout_marginTop="82dp" android:layout_marginTop="82dp"
android:src="@mipmap/qdylogo" android:src="@mipmap/moren_logo"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
android:layout_width="151dp" android:layout_width="151dp"
android:layout_height="15dp" android:layout_height="15dp"
android:indeterminate="true" android:indeterminate="true"
android:indeterminateTint="#00B8DE" android:indeterminateTint="#DE202A"
android:indeterminateTintMode="src_atop" /> android:indeterminateTintMode="src_atop" />
</FrameLayout> </FrameLayout>
......
<?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.document.ppt.PptActivity">
<ViewAnimator
android:id="@+id/v_animator_top"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
app:layout_constraintTop_toTopOf="parent">
<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"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/tv_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="15dp"
android:src="@mipmap/fanhui_b"
tools:ignore="ContentDescription" />
</FrameLayout>
<TextView
android:id="@+id/tv_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="19sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/iv_xuanzhuan"
app:layout_constraintStart_toEndOf="@id/fl_fanhui"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText"
tools:text="DEMO.xlsx" />
<ImageView
android:id="@+id/iv_xuanzhuan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/hengping"
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_toStartOf="@id/iv_more"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:src="@mipmap/x_genduo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<EditText
android:id="@+id/edit_search"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="5dp"
android:layout_marginEnd="20dp"
android:background="@drawable/bg_f8f9fe_10"
android:hint="input..."
android:paddingHorizontal="18dp"
android:singleLine="true"
android:textColor="@color/black"
android:textColorHint="#B8B9BD"
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,TextFields" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ViewAnimator>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/fl_ad"
app:layout_constraintTop_toBottomOf="@id/v_animator_top">
<com.cherry.lib.doc.widget.DocView
android:id="@+id/mDocView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:dv_engine="internal"
app:dv_moving_orientation="vertical"
app:dv_page_pb_color="@color/yellow"
app:dv_page_pb_height="2dp"
app:dv_show_page_num="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_animator_top" />
<com.base.pdfreader2.ui.view.VerticalSeekBar
android:id="@+id/vertical_seekbar"
android:layout_width="30dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:layout_marginEnd="10dp"
android:background="@color/transparent"
app:vsb_bar_background="@color/transparent"
app:vsb_bar_background_gradient_end="@color/transparent"
app:vsb_bar_background_gradient_start="@color/transparent"
app:vsb_bar_progress="@drawable/bg_transparent"
app:vsb_show_thumb="true" />
</FrameLayout>
<TextView
android:id="@+id/tv_pageCount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginTop="28dp"
android:background="@drawable/bg_54585b_5"
android:includeFontPadding="false"
android:paddingHorizontal="2dp"
android:paddingVertical="2dp"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/v_animator_top"
tools:text="1/3" />
<ViewAnimator
android:id="@+id/v_animator_bottom"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_50"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/fl_ad">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="UselessParent">
<FrameLayout
android:id="@+id/fl_pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|start"
android:layout_marginStart="20dp"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/left"
tools:ignore="ContentDescription" />
</FrameLayout>
<FrameLayout
android:id="@+id/fl_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="20dp"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/right"
tools:ignore="ContentDescription" />
</FrameLayout>
</FrameLayout>
</ViewAnimator>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/zhanweitu2"
tools:ignore="ContentDescription" />
</FrameLayout>
</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="wrap_content"
android:background="@drawable/bg_f1f1f1_tlr25"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl"
android:layout_width="match_parent"
android:layout_height="65dp"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="@string/more"
android:textColor="#333333"
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_bookmark"
android:layout_width="24dp"
android:layout_height="32dp"
android:layout_marginEnd="27dp"
android:src="@mipmap/h_soucang_n"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl">
<LinearLayout
android:id="@+id/ll_jump"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/jump"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/jump_to_the_specified_page"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_detail"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/particulars"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/detail"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginBottom="20dp"
android:background="?android:selectableItemBackground"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="13dp"
android:src="@mipmap/share"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginHorizontal="13dp"
android:layout_weight="1"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="@string/share"
android:textColor="#333333"
android:textSize="16sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="20dp"
android:src="@mipmap/jianotou"
tools:ignore="ContentDescription" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<?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="wrap_content"
android:background="@drawable/bg_f3f3f3_tlr25"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fl"
android:layout_width="match_parent"
android:layout_height="65dp"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:includeFontPadding="false"
android:text="@string/page_number"
android:textColor="#333333"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/fl"
app:layout_constraintVertical_bias="0.0"
tools:layout_editor_absoluteX="35dp">
<EditText
android:maxLength="1"
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="32dp"
android:background="@drawable/bg_stoke_bababa_10"
android:ellipsize="end"
android:gravity="center_vertical"
android:hint="1 - 10"
android:inputType="number"
android:paddingHorizontal="20dp"
android:singleLine="true"
android:textColor="#333333"
android:textColorHint="#C0C0C0"
android:textSize="18sp"
tools:ignore="Autofill,HardcodedText,LabelFor,TextFields" />
<TextView
android:id="@+id/tv_ok"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_gravity="center_horizontal"
android:layout_marginStart="14dp"
android:layout_marginTop="26dp"
android:layout_marginBottom="20dp"
android:background="@drawable/bg_selector_btn"
android:enabled="false"
android:gravity="center"
android:text="@string/ok"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</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="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true">
<ImageView
android:id="@+id/iv_move"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:src="@mipmap/icon_move"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginVertical="15dp"
android:layout_marginStart="15dp"
android:src="@mipmap/pdficon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/iv_move"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<FrameLayout
android:id="@+id/fl_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:padding="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/guanbi"
tools:ignore="ContentDescription" />
</FrameLayout>
<LinearLayout
android:id="@+id/ll"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/fl_close"
app:layout_constraintStart_toEndOf="@id/iv"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:text="DEMO.pdf"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:includeFontPadding="false"
android:textColor="#999999"
android:textSize="14sp"
tools:text="2024-09-10 590.23 KB" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -2,4 +2,5 @@ ...@@ -2,4 +2,5 @@
<resources> <resources>
<dimen name="dp_200">200dp</dimen> <dimen name="dp_200">200dp</dimen>
<dimen name="dp_146">146dp</dimen> <dimen name="dp_146">146dp</dimen>
<dimen name="dp_50">50dp</dimen>
</resources> </resources>
\ No newline at end of file
<resources> <resources>
<string name="app_name">pdf reader 2</string> <string name="app_name">PDF Reader &amp; Image to Pdf</string>
<string name="facebook_app_id">1111111111</string> <string name="facebook_app_id">1111111111</string>
<string name="next">Next</string> <string name="next">Next</string>
......
...@@ -3,4 +3,7 @@ plugins { ...@@ -3,4 +3,7 @@ plugins {
alias(libs.plugins.androidApplication) apply false alias(libs.plugins.androidApplication) apply false
alias(libs.plugins.jetbrainsKotlinAndroid) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false
alias(libs.plugins.androidLibrary) apply false alias(libs.plugins.androidLibrary) apply false
id("com.google.gms.google-services") version "4.4.1" apply false
id("com.google.firebase.crashlytics") version "3.0.2" apply false
} }
\ No newline at end of file
...@@ -28,4 +28,4 @@ dependencyResolutionManagement { ...@@ -28,4 +28,4 @@ dependencyResolutionManagement {
rootProject.name = "pdf reader 2" rootProject.name = "pdf reader 2"
include(":app") include(":app")
include(":pdflibrary") include(":pdflibrary")
include(":library")
\ 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