Commit b74d2ed5 authored by wanglei's avatar wanglei

...

parent 3d1596c7
...@@ -11,15 +11,14 @@ ...@@ -11,15 +11,14 @@
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules" android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/logo"
android:label="@string/app_name" android:label="@string/app_name"
android:requestLegacyExternalStorage="true" android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/logo"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.PDFViewerScannerWhite" android:theme="@style/Theme.PDFViewerScannerWhite"
tools:targetApi="34"> tools:targetApi="34">
<meta-data <meta-data
android:name="com.google.android.gms.version" android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" /> android:value="@integer/google_play_services_version" />
...@@ -32,6 +31,7 @@ ...@@ -32,6 +31,7 @@
android:exported="true" android:exported="true"
android:launchMode="singleTask" android:launchMode="singleTask"
android:screenOrientation="portrait" android:screenOrientation="portrait"
android:theme="@style/splash.theme"
tools:ignore="DiscouragedApi,LockedOrientationActivity"> tools:ignore="DiscouragedApi,LockedOrientationActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
......
package com.base.pdfviewerscannerwhite.bean package com.base.pdfviewerscannerwhite.bean
import com.base.pdfviewerscannerwhite.utils.AppPreferences
object ConstObject { object ConstObject {
...@@ -17,14 +19,14 @@ object ConstObject { ...@@ -17,14 +19,14 @@ object ConstObject {
const val MIME_TYPE_APK = "application/vnd.android.package-archive" const val MIME_TYPE_APK = "application/vnd.android.package-archive"
const val MIME_TYPE_ZIP = "application/zip" const val MIME_TYPE_ZIP = "application/zip"
// var ifAgreePrivacy = false var ifAgreePrivacy = false
// get() { get() {
// return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field) return AppPreferences.getInstance().getBoolean("ifAgreePrivacy", field)
// } }
// set(value) { set(value) {
// field = value field = value
// AppPreferences.getInstance().put("ifAgreePrivacy", value, true) AppPreferences.getInstance().put("ifAgreePrivacy", value, true)
// } }
// //
// var searchEngineSp = GOOGLE // var searchEngineSp = GOOGLE
// get() { // get() {
......
...@@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder ...@@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder
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.bean.DocumentBean.Companion.TYPE_PDF import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfviewerscannerwhite.databinding.ItemDocmentBinding import com.base.pdfviewerscannerwhite.databinding.ItemDocumentBinding
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime
import com.base.pdfviewerscannerwhite.utils.XmlEx.inflate import com.base.pdfviewerscannerwhite.utils.XmlEx.inflate
...@@ -27,7 +27,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -27,7 +27,7 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: DocumentViewHolder, position: Int, item: DocumentBean?) { override fun onBindViewHolder(holder: DocumentViewHolder, position: Int, item: DocumentBean?) {
if (item == null) return if (item == null) return
val binding = ItemDocmentBinding.bind(holder.itemView) val binding = ItemDocumentBinding.bind(holder.itemView)
if (item.type == TYPE_PDF) { if (item.type == TYPE_PDF) {
binding.iv.setImageResource(R.mipmap.h_pdfiocn) binding.iv.setImageResource(R.mipmap.h_pdfiocn)
} }
...@@ -77,6 +77,6 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV ...@@ -77,6 +77,6 @@ class DocumentAdapter : BaseQuickAdapter<DocumentBean, DocumentAdapter.DocumentV
} }
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): DocumentViewHolder { override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): DocumentViewHolder {
return DocumentViewHolder(R.layout.item_docment.inflate(parent)) return DocumentViewHolder(R.layout.item_document.inflate(parent))
} }
} }
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.document.pdf package com.base.pdfviewerscannerwhite.ui.document.pdf
import androidx.recyclerview.widget.ItemTouchHelper
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
class PdfMergeActivity : BaseActivity<ActivityPdfMergeBinding>() { class PdfMergeActivity : BaseActivity<ActivityPdfMergeBinding>() {
override val binding: ActivityPdfMergeBinding by lazy { override val binding: ActivityPdfMergeBinding by lazy {
ActivityPdfMergeBinding.inflate(layoutInflater) ActivityPdfMergeBinding.inflate(layoutInflater)
} }
private lateinit var adapter: PdfMergeAdapter
override fun initView() { override fun initView() {
initAdapter()
} }
private fun initAdapter() {
val callBack = PdfMergeItemTouchHelperCallBack()
val itemTouchHelper = ItemTouchHelper(callBack)
itemTouchHelper.attachToRecyclerView(binding.rv)
adapter = PdfMergeAdapter(callBack)
binding.rv.adapter = adapter
mergePdfList.let { adapter.submitList(it) }
}
companion object {
val mergePdfList: ArrayList<DocumentBean> = arrayListOf()
}
} }
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.document.pdf
import android.annotation.SuppressLint
import android.content.Context
import android.view.GestureDetector
import android.view.GestureDetector.SimpleOnGestureListener
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.bean.DocumentBean
import com.base.pdfviewerscannerwhite.databinding.ItemPdfMergeBinding
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime4
import com.base.pdfviewerscannerwhite.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
import java.io.File
class PdfMergeAdapter(
val callBack: PdfMergeItemTouchHelperCallBack
) : BaseQuickAdapter<DocumentBean, PdfMergeAdapter.PdfMergeViewHolder>() {
private val TAG = "PdfMergeAdapter"
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()
binding.ivMove.setOnLongClickListener {
callBack.enableLongPress = true
true
}
}
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.pdfviewerscannerwhite.ui.document.pdf
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.base.pdfviewerscannerwhite.utils.LogEx
class PdfMergeItemTouchHelperCallBack : ItemTouchHelper.Callback() {
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
)
}
/**
* 拖拽结束后(手指抬起)会回调的方法
*/
override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
//更新item holder对应位置
recyclerView.adapter?.notifyItemMoved(
viewHolder.adapterPosition,
target.adapterPosition
)
enableLongPress = false
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) = Unit
override fun isLongPressDragEnabled(): Boolean {
LogEx.logDebug(TAG, "isLongPressDragEnabled $enableLongPress")
return enableLongPress
}
}
\ No newline at end of file
...@@ -93,10 +93,6 @@ class PdfPresenter( ...@@ -93,10 +93,6 @@ class PdfPresenter(
} }
fun savePdf(context: Context, muPDFCore: MuPDFCore?, srcPath: String, newPath: String) { fun savePdf(context: Context, muPDFCore: MuPDFCore?, srcPath: String, newPath: String) {
//保存的逻辑,
// 1.原本的文件拷贝一份
// 2。然后保存修改到原本的文件,重名命名该文件为新文件
// 3.拷贝的文件在恢复原位置
val tempFile = File(context.filesDir, "temp.pdf") val tempFile = File(context.filesDir, "temp.pdf")
if (!tempFile.exists()) { if (!tempFile.exists()) {
...@@ -107,6 +103,5 @@ class PdfPresenter( ...@@ -107,6 +103,5 @@ class PdfPresenter(
muPDFCore?.save() muPDFCore?.save()
val newFile = File(newPath) val newFile = File(newPath)
} }
} }
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.document.pdf package com.base.pdfviewerscannerwhite.ui.document.pdf
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent
import android.view.View import android.view.View
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.pdfviewerscannerwhite.bean.DocumentBean import com.base.pdfviewerscannerwhite.bean.DocumentBean
...@@ -27,6 +28,16 @@ class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>(), DocumentView ...@@ -27,6 +28,16 @@ class PdfSelectActivity : BaseActivity<ActivityPdfSelectBinding>(), DocumentView
documentPresenter.initData() documentPresenter.initData()
} }
override fun initListener() {
super.initListener()
binding.tvBtnNext.setOnClickListener {
val selectList = adapter.items.filter { it.isSelect }
PdfMergeActivity.mergePdfList.addAll(selectList)
startActivity(Intent(this, PdfMergeActivity::class.java))
}
}
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
private fun initAdapter() { private fun initAdapter() {
adapter = DocumentAdapter() adapter = DocumentAdapter()
......
package com.base.pdfviewerscannerwhite.ui.main package com.base.pdfviewerscannerwhite.ui.main
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.Color
import android.net.Uri import android.net.Uri
import android.os.Build
import android.view.View import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
...@@ -11,6 +15,8 @@ import com.base.pdfviewerscannerwhite.BuildConfig ...@@ -11,6 +15,8 @@ import com.base.pdfviewerscannerwhite.BuildConfig
import com.base.pdfviewerscannerwhite.R import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.databinding.ActivityMainBinding import com.base.pdfviewerscannerwhite.databinding.ActivityMainBinding
import com.base.pdfviewerscannerwhite.helper.BaseActivity import com.base.pdfviewerscannerwhite.helper.BaseActivity
import com.base.pdfviewerscannerwhite.ui.view.RateDialog.showRateDialog
import com.base.pdfviewerscannerwhite.utils.BarUtils
import com.base.pdfviewerscannerwhite.utils.PermissionUtils.requestStorePermission import com.base.pdfviewerscannerwhite.utils.PermissionUtils.requestStorePermission
import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast import com.base.pdfviewerscannerwhite.utils.ToastUtils.toast
...@@ -37,7 +43,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -37,7 +43,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
} }
override fun initView() { override fun initView() {
// startActivity(Intent(this, PdfActivity::class.java))
mainPresenter = MainPresenter(this) mainPresenter = MainPresenter(this)
mainPresenter.initScannerLauncher(this) mainPresenter.initScannerLauncher(this)
...@@ -165,5 +172,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView { ...@@ -165,5 +172,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
} }
} }
override fun onResume() {
super.onResume()
showRateDialog()
}
} }
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.splash package com.base.pdfviewerscannerwhite.ui.splash
import android.Manifest
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.graphics.Color
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope
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.utils.BarUtils
import com.base.pdfviewerscannerwhite.utils.LogEx
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import java.util.concurrent.atomic.AtomicBoolean
@SuppressLint("CustomSplashScreen") @SuppressLint("CustomSplashScreen")
class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView { class SplashActivity : BaseActivity<ActivitySplashBinding>(), SplashView {
private val TAG = "SplashActivity"
private var job: Job? = null
private lateinit var splashPresenter: SplashPresenter
override val binding: ActivitySplashBinding by lazy { override val binding: ActivitySplashBinding by lazy {
ActivitySplashBinding.inflate(layoutInflater) ActivitySplashBinding.inflate(layoutInflater)
} }
override fun initView() { override fun initView() {
showAd() BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
// binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
if (Build.VERSION.SDK_INT >= 33) {
registerForActivityResult(ActivityResultContracts.RequestPermission()) {}.launch(
Manifest.permission.POST_NOTIFICATIONS
)
}
splashPresenter = SplashPresenter(this)
ifAgreePrivacy = true
if (ifAgreePrivacy) {
agreePrivacy()
} else {
}
} }
override fun showAd() { override fun showAd() {
startActivity(Intent(this, MainActivity::class.java)) // jumpNext()
} }
override fun agreePrivacy() { override fun agreePrivacy() {
showAd()
startProgressJob()
splashPresenter.startJumpJob(lifecycleScope)
}
/**
* 跑进度条,进度条不关联跳转逻辑
*/
private fun startProgressJob() {
if (job == null && binding.progressBar.progress != 100) {
job = lifecycleScope.launch(Dispatchers.Main) {
while (isActive) {
binding.progressBar.progress += 2
delay(200)
if (binding.progressBar.progress == 100) {
cancel()
}
}
}
}
}
/**
* 暂停进度条
*/
private fun pauseProgressJob() {
job?.cancel()
job = null
} }
override fun onPause() {
super.onPause()
pauseProgressJob()
splashPresenter.pauseJumpJob()
}
override fun onResume() {
super.onResume()
startProgressJob()
splashPresenter.startJumpJob(lifecycleScope)
}
private var jump: AtomicBoolean = AtomicBoolean(false)
override fun jumpNext() {
if (jump.get()) {
return
}
jump.set(true)
LogEx.logDebug(TAG, "jumpNext")
binding.progressBar.progress = 100
binding.root.postDelayed({
startActivity(Intent(this, MainActivity::class.java))
}, 200)
}
} }
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.splash package com.base.pdfviewerscannerwhite.ui.splash
import androidx.lifecycle.LifecycleCoroutineScope
import com.base.pdfviewerscannerwhite.bean.ConstObject
import com.base.pdfviewerscannerwhite.utils.LogEx
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
class SplashPresenter( class SplashPresenter(
val splashView: SplashView val splashView: SplashView
) { ) {
private val TAG = "SplashPresenter"
private var jumpJob: Job? = null
var loadingTime = 5L
/**
* 超时跳转
*/
fun startJumpJob(lifecycleCoroutineScope: LifecycleCoroutineScope) {
if (ConstObject.ifAgreePrivacy) {
if (jumpJob == null) {
val startTime = System.currentTimeMillis()
jumpJob = lifecycleCoroutineScope.launch {
delay(loadingTime * 1000)
val endTime = System.currentTimeMillis()
LogEx.logDebug(TAG, "超时跳转 time=${endTime - startTime}")
splashView.jumpNext()
}
}
}
}
/**
* 暂停超时跳转
*/
fun pauseJumpJob() {
jumpJob?.cancel()
jumpJob = null
}
} }
\ No newline at end of file
...@@ -2,9 +2,10 @@ package com.base.pdfviewerscannerwhite.ui.splash ...@@ -2,9 +2,10 @@ package com.base.pdfviewerscannerwhite.ui.splash
interface SplashView { interface SplashView {
abstract fun showAd() fun showAd()
abstract fun agreePrivacy() fun agreePrivacy()
fun jumpNext()
} }
\ No newline at end of file
...@@ -12,15 +12,19 @@ import androidx.core.content.FileProvider ...@@ -12,15 +12,19 @@ import androidx.core.content.FileProvider
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
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.DialogCommonTipBinding
import com.base.pdfviewerscannerwhite.databinding.DialogDeleteBinding import com.base.pdfviewerscannerwhite.databinding.DialogDeleteBinding
import com.base.pdfviewerscannerwhite.databinding.DialogDocumentDetailBinding import com.base.pdfviewerscannerwhite.databinding.DialogDocumentDetailBinding
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.DialogPdfDetailBinding import com.base.pdfviewerscannerwhite.databinding.DialogPdfDetailBinding
import com.base.pdfviewerscannerwhite.databinding.DialogPdfMoreBinding import com.base.pdfviewerscannerwhite.databinding.DialogPdfMoreBinding
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.main.DocumentView import com.base.pdfviewerscannerwhite.ui.main.DocumentView
import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfView import com.base.pdfviewerscannerwhite.ui.document.pdf.PdfView
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDeleteDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showDocumentRenameDialog
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePdfIntent import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePdfIntent
import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePdfPrintIntent import com.base.pdfviewerscannerwhite.utils.IntentShareUtils.sharePdfPrintIntent
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize
...@@ -114,7 +118,7 @@ object DialogView { ...@@ -114,7 +118,7 @@ object DialogView {
} }
binding.llDelete.setOnClickListener { binding.llDelete.setOnClickListener {
dialog.dismiss() dialog.dismiss()
showDeleteDialog{ showDeleteDialog {
documentView.deleteDocument(item) documentView.deleteDocument(item)
} }
} }
...@@ -173,6 +177,23 @@ object DialogView { ...@@ -173,6 +177,23 @@ object DialogView {
} }
fun Context.showPdfPwdDialog() {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPdfPasswordBinding.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
}
private fun Context.showJumpPageNumberDialog(pageNumber: Int, okAction: ((pageIndex: Int) -> Unit)?) { private fun Context.showJumpPageNumberDialog(pageNumber: Int, okAction: ((pageIndex: Int) -> Unit)?) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog) val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogPageNumberBinding.inflate(LayoutInflater.from(this)) val binding = DialogPageNumberBinding.inflate(LayoutInflater.from(this))
...@@ -271,4 +292,35 @@ object DialogView { ...@@ -271,4 +292,35 @@ object DialogView {
deleteAction.invoke() deleteAction.invoke()
} }
} }
fun Context.showCommonTipDialog(
title: String = "",
tip: String = "",
noBtn: String = "Cancel",
yesBtn: String = "Ok"
) {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogCommonTipBinding.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
binding.tvTittle.text = title
binding.tvTips.text = tip
binding.tvNo.text = noBtn
binding.tvYes.text = yesBtn
binding.tvNo.setOnClickListener {
dialog.dismiss()
}
binding.tvYes.setOnClickListener {
dialog.dismiss()
}
}
} }
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.view
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.LayoutInflater
import android.view.View
import com.base.pdfviewerscannerwhite.R
import com.base.pdfviewerscannerwhite.databinding.DialogRateStarBinding
import com.base.pdfviewerscannerwhite.utils.AppPreferences
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
object RateDialog {
fun Context.showRateDialog(mustShow: Boolean = false) {
if (!mustShow) {
if (AppPreferences.getInstance().getBoolean("isRated", false)) {
return
}
}
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogRateStarBinding.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
listOf(
binding.iv1,
binding.iv2,
binding.iv3,
binding.iv4,
binding.iv5
).forEachIndexed { index, it ->
it.setOnClickListener {
setStar(binding, index)
}
}
binding.ivClose.setOnClickListener {
dialog.dismiss()
}
binding.tvSubmit.setOnClickListener {
if (star >= 5) {
AppPreferences.getInstance().put("isRated", true)
try {
val uri =
Uri.parse("https://play.google.com/store/apps/details?id=" + this.packageName)
val intent = Intent(Intent.ACTION_VIEW, uri)
this.startActivity(intent)
} catch (_: Exception) {
}
}
dialog.dismiss()
}
dialog.setOnDismissListener {
AppPreferences.getInstance().put("isRated", true)
}
}
private var star = 5
private fun setStar(binding: DialogRateStarBinding, star: Int) {
this.star = star + 1
// if (this.star < 3) {
// binding.ivFace.setImageResource(R.mipmap.pingfeniconk)
// } else {
// binding.ivFace.setImageResource(R.mipmap.pingfenicon)
// }
listOf(
binding.iv1,
binding.iv2,
binding.iv3,
binding.iv4,
binding.iv5
).forEachIndexed { index, it ->
it.setImageResource(
if (index <= star) {
R.mipmap.xing_s
} else {
R.mipmap.xing_n
}
)
}
}
}
\ No newline at end of file
...@@ -35,6 +35,10 @@ object KotlinExt { ...@@ -35,6 +35,10 @@ object KotlinExt {
return SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(this) return SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(this)
} }
fun Long.toFormatTime4(): String {
return SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH).format(this)
}
fun Array<String>.array2String(): String { fun Array<String>.array2String(): String {
val stringBuilder = StringBuilder() val stringBuilder = StringBuilder()
......
<?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="@color/white" />
<!-- <item--> <item
<!-- android:top="130dp"--> android:gravity="top|center_horizontal"
<!-- android:gravity="top|center_horizontal">--> android:top="220dp">
<!-- <bitmap--> <bitmap android:src="@mipmap/qdylogo" />
<!-- android:src="@mipmap/qdylogo" />--> </item>
<!-- </item>-->
</layer-list> </layer-list>
\ No newline at end of file
...@@ -7,4 +7,89 @@ ...@@ -7,4 +7,89 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.document.pdf.PdfMergeActivity"> tools:context=".ui.document.pdf.PdfMergeActivity">
<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="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="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="true"
android:gravity="center"
android:text="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> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_docment" /> tools:listitem="@layout/item_document" />
</FrameLayout> </FrameLayout>
<TextView <TextView
......
...@@ -3,8 +3,62 @@ ...@@ -3,8 +3,62 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main" android:id="@+id/main"
android:background="@drawable/splash_bp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.splash.SplashActivity"> tools:context=".ui.splash.SplashActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="220dp"
android:src="@mipmap/qdylogo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<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:layout_marginBottom="64dp"
android:max="100"
android:progressDrawable="@drawable/progress_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="Start"
android:textColor="#333333"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/progressBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_privacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" />
</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="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:id="@+id/tv_tittle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:includeFontPadding="false"
android:text="Delete"
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">
<TextView
android:id="@+id/tv_tips"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="32dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:paddingHorizontal="20dp"
android:singleLine="true"
android:textColor="#333333"
android:textSize="18sp"
tools:ignore="Autofill,HardcodedText,LabelFor,TextFields" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="15dp"
android:padding="5dp">
<androidx.cardview.widget.CardView
android:id="@+id/card_no"
android:layout_width="163dp"
android:layout_height="48dp"
app:cardBackgroundColor="#f1f2f6"
app:cardCornerRadius="10dp"
app:cardElevation="5dp">
<TextView
android:id="@+id/tv_no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="Cancel"
android:textColor="#505050"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:id="@+id/card_yes"
android:layout_width="163dp"
android:layout_height="48dp"
android:layout_marginStart="14dp"
app:cardBackgroundColor="#00B8DE"
app:cardCornerRadius="10dp"
app:cardElevation="5dp"
tools:ignore="HardcodedText">
<TextView
android:id="@+id/tv_yes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Ok"
android:textColor="@color/white"
android:textSize="18sp" />
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="-50dp"
android:src="@mipmap/h_pdfiocn" android:src="@mipmap/h_pdfiocn"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="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: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:id="@+id/tv_tittle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:includeFontPadding="false"
android:text="Set Password"
android:textColor="#333333"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="26dp"
android:src="@mipmap/suo"
tools:ignore="ContentDescription" />
</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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="22dp"
android:text="Set password protection pdf"
android:textColor="#333333"
android:textSize="18sp"
tools:ignore="HardcodedText" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="20dp"
android:gravity="center"
app:endIconDrawable="@mipmap/weishuru"
app:endIconMode="custom"
tools:ignore="Autofill,HardcodedText,LabelFor,TextFields">
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_stoke_bababa_10"
android:ellipsize="end"
android:gravity="center_vertical"
android:hint="Input..."
android:inputType="textPassword"
android:paddingHorizontal="20dp"
android:singleLine="true"
android:textColor="#333333"
android:textSize="18sp" />
<ImageView
android:id="@+id/iv_eye"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="24dp"
android:src="@mipmap/weishuru"
tools:ignore="ContentDescription" />
</FrameLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="26dp"
android:layout_marginBottom="20dp">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="163dp"
android:layout_height="48dp"
android:background="@drawable/bg_f1f2f6_10"
android:gravity="center"
android:text="Cancel"
android:textColor="#505050"
android:textSize="18sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_confirm"
android:layout_width="163dp"
android:layout_height="48dp"
android:layout_marginStart="14dp"
android:background="@drawable/bg_selector_btn"
android:enabled="false"
android:gravity="center"
android:text="Confirm"
android:textColor="@color/white"
android:textSize="18sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</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:color/transparent">
<FrameLayout
android:id="@+id/fl"
android:layout_width="match_parent"
android:layout_height="65dp"
android:layout_marginTop="38dp"
android:background="@drawable/bg_f3f3f3_tlr25"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="26dp"
android:src="@mipmap/guanbi_dialog"
tools:ignore="ContentDescription" />
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:layout_constraintTop_toBottomOf="@id/fl">
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="22dp"
android:text="Thank you for your support!"
android:textColor="#333333"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="Your five-star rating will inspire us to keep\nmoving forward"
android:textColor="#333333"
android:textSize="15sp"
app:layout_constraintStart_toStartOf="@id/tv_1"
app:layout_constraintTop_toBottomOf="@id/tv_1"
tools:ignore="HardcodedText" />
<LinearLayout
android:id="@+id/ll_star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_2">
<ImageView
android:id="@+id/iv_1"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_2"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_3"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_4"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_5"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_margin="10dp"
android:src="@mipmap/xing_s"
tools:ignore="ContentDescription" />
</LinearLayout>
<TextView
android:id="@+id/tv_submit"
android:layout_width="338dp"
android:layout_height="48dp"
android:layout_marginTop="24dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_00b8de_10"
android:gravity="center"
android:text="Evaluate"
android:textColor="@color/white"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_star"
tools:ignore="HardcodedText" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="26dp"
android:src="@mipmap/pingjiatu"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_docment" /> tools:listitem="@layout/item_document" />
</FrameLayout> </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="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/h_pdfiocn"
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: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
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