diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index e4c25d1..fec5139 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -74,8 +74,8 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
-// implementation(libs.immersionbar)
-// implementation(libs.immersionbar.ktx)
+ implementation(libs.immersionbar)
+ implementation(libs.immersionbar.ktx)
implementation(libs.androidx.room.runtime)
ksp(libs.androidx.room.compiler)
implementation(libs.androidx.room.ktx)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 22ad550..3b2c482 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -34,9 +34,9 @@
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/app_logo"
android:label="@string/app_name"
+ android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/app_logo"
- android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/Theme.PDFReaderPro">
+
+
Unit) {
+ val bar = ImmersionBar.with(this)
+
+ // 通用逻辑:监听 insets 改变
+ bar.setOnInsetsChangeListener(object : OnInsetsChangeListener {
+ override fun onInsetsChanged(top: Int, bottom: Int, left: Int, right: Int) {
+ rootBottomView?.setPadding(left, 0, right, bottom)
+ }
+ })
+ bar.block()
+
+ bar.init()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/FAQActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/FAQActivity.kt
index 017eff8..2f3e37b 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/FAQActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/FAQActivity.kt
@@ -10,7 +10,8 @@ import com.all.pdfreader.pro.app.databinding.ActivityFaqBinding
class FAQActivity : BaseActivity() {
override val TAG: String = "FAQActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
private lateinit var binding: ActivityFaqBinding
private var faqAboutApp1IsOpen = true
private var faqAboutApp2IsOpen = false
@@ -21,6 +22,11 @@ class FAQActivity : BaseActivity() {
super.onCreate(savedInstanceState)
binding = ActivityFaqBinding.inflate(layoutInflater)
setContentView(binding.root)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.white)
+ }
initView()
}
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt
index 9df7393..64288bd 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MainActivity.kt
@@ -40,7 +40,8 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
RecentlyFrag.OnItemLongClickListener, FavoriteFrag.OnItemLongClickListener {
override val TAG: String = "MainActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
private lateinit var binding: ActivityMainBinding
private val pdfRepository = getRepository()
private lateinit var pdfScanner: PdfScanner
@@ -60,6 +61,11 @@ class MainActivity : BaseActivity(), PermissionDialogFragment.PermissionCallback
setContentView(binding.root)
setupDoubleBackExit()
initObserve()
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(false)
+ navigationBarColor(R.color.white)
+ }
setupFragments()
setupNavigation()
pdfScanner = PdfScanner(this, pdfRepository)
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MergePdfActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MergePdfActivity.kt
index 2fe1bd6..d1b968f 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MergePdfActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/MergePdfActivity.kt
@@ -6,6 +6,7 @@ import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.os.Parcelable
+import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.activity.result.contract.ActivityResultContract
import androidx.lifecycle.lifecycleScope
@@ -25,6 +26,8 @@ import java.io.File
class MergePdfActivity : BaseActivity() {
override val TAG: String = "MergePdfActivity"
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
private lateinit var binding: ActivityPdfMergeBinding
private var selectedList: ArrayList = arrayListOf()
private lateinit var adapter: PdfAdapter
@@ -34,6 +37,11 @@ class MergePdfActivity : BaseActivity() {
binding = ActivityPdfMergeBinding.inflate(layoutInflater)
setContentView(binding.root)
setupBackPressedCallback()
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.white)
+ }
val list: ArrayList = requireParcelableArrayList(EXTRA_PDF_LIST)
updateContinueNowBtnState(list.size >= 2)
lifecycleScope.launch {
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt
index 44310da..b159d7f 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfPickerActivity.kt
@@ -30,6 +30,8 @@ import java.io.Serializable
class PdfPickerActivity : BaseActivity() {
override val TAG: String = "PdfPickerActivity"
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
private lateinit var binding: ActivityPdfPickerBinding
private lateinit var adapter: PdfAdapter
private lateinit var source: PdfPickerSource // 保存来源
@@ -49,6 +51,11 @@ class PdfPickerActivity : BaseActivity() {
}
fromActivityResult = intent.getStringExtra(EXTRA_FROM) ?: ""
historyList = requireParcelableArrayList(EXTRA_HISTORY_LIST)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.white)
+ }
updateViewAndState()
initView()
setupClick()
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfResultActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfResultActivity.kt
index aee842c..8af44cf 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfResultActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfResultActivity.kt
@@ -34,6 +34,7 @@ import com.all.pdfreader.pro.app.util.ToastUtils
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
+import com.gyf.immersionbar.ImmersionBar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -42,7 +43,8 @@ import java.io.Serializable
class PdfResultActivity : BaseActivity() {
override val TAG: String = "PdfResultActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
companion object {
private const val EXTRA_SELECTED_LIST = "extra_selected_list"
private const val EXTRA_FILE_LIST = "extra_file_list"
@@ -126,6 +128,11 @@ class PdfResultActivity : BaseActivity() {
binding = ActivityPdfSplitResultBinding.inflate(layoutInflater)
setContentView(binding.root)
setupBackPressedCallback()
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.bg_color)
+ }
source = getSerializableOrDefault(EXTRA_SOURCE, PdfPickerSource.NONE)
if (source == PdfPickerSource.NONE) {
showToast(getString(R.string.pdf_loading_failed))
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfToImageActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfToImageActivity.kt
index 8583107..9a26ed3 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfToImageActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfToImageActivity.kt
@@ -24,7 +24,8 @@ import java.io.Serializable
class PdfToImageActivity : BaseActivity() {
override val TAG: String = "PdfToImageActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
var currentPassword: String? = null//只会选择一个文件。直接进行密码传递
private lateinit var source: PdfPickerSource
@@ -49,6 +50,11 @@ class PdfToImageActivity : BaseActivity() {
super.onCreate(savedInstanceState)
binding = ActivityPdfToImgBinding.inflate(layoutInflater)
setContentView(binding.root)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.bg_color)
+ }
filePath = intent.getStringExtra(EXTRA_PDF_PATH)
?: throw IllegalArgumentException("PDF file hash is required")
source = getSerializableOrDefault(EXTRA_SOURCE, PdfPickerSource.NONE)
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt
index df91707..39e0724 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PdfViewActivity.kt
@@ -32,6 +32,8 @@ import com.github.barteksc.pdfviewer.listener.OnErrorListener
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener
import com.github.barteksc.pdfviewer.listener.OnTapListener
+import com.gyf.immersionbar.BarHide
+import com.gyf.immersionbar.ImmersionBar
import com.tom_roush.pdfbox.pdmodel.PDDocument
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -43,7 +45,8 @@ import java.io.File
class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeListener,
OnErrorListener, OnTapListener {
override val TAG: String = "PdfViewActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
companion object {
const val FRAG_TAG = "PdfViewActivity"
private const val EXTRA_PDF_HASH = "extra_pdf_hash"
@@ -72,6 +75,11 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList
super.onCreate(savedInstanceState)
binding = ActivityPdfViewBinding.inflate(layoutInflater)
setContentView(binding.root)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.white)
+ }
setupDoubleBackExit()
initObserve()
val filePath = intent.getStringExtra(EXTRA_PDF_HASH)
@@ -384,12 +392,12 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList
isFullScreen = !isFullScreen
updateStatusAndNavigationLayout(isFullScreen)
if (isFullScreen) {
-// ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_BAR).init()
+ ImmersionBar.with(this).hideBar(BarHide.FLAG_HIDE_BAR).init()
} else {
val navColor =
if (appStore.isEyeCareMode) R.color.eye_protection_color else R.color.white
-// ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(true)
-// .navigationBarColor(navColor).hideBar(BarHide.FLAG_SHOW_BAR).init()
+ ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(true)
+ .navigationBarColor(navColor).hideBar(BarHide.FLAG_SHOW_BAR).init()
}
}
@@ -416,8 +424,8 @@ class PdfViewActivity : BaseActivity(), OnLoadCompleteListener, OnPageChangeList
binding.eyeCareOverlay.visibility = View.GONE
binding.eyeProtectIv.setImageResource(R.drawable.eye_protect)
}
-// ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(true)
-// .navigationBarColor(navColor).init()
+ ImmersionBar.with(this).statusBarView(binding.view).statusBarDarkFont(true)
+ .navigationBarColor(navColor).init()
}
private fun setupDoubleBackExit() {
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PictureSelectorActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PictureSelectorActivity.kt
new file mode 100644
index 0000000..dcfc843
--- /dev/null
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PictureSelectorActivity.kt
@@ -0,0 +1,181 @@
+package com.all.pdfreader.pro.app.ui.act
+
+import android.content.Context
+import android.net.Uri
+import android.os.Bundle
+import android.view.View
+import androidx.core.net.toUri
+import androidx.fragment.app.Fragment
+import com.all.pdfreader.pro.app.PRApp
+import com.all.pdfreader.pro.app.R
+import com.all.pdfreader.pro.app.databinding.ActPictureSelectorBinding
+import com.all.pdfreader.pro.app.model.PdfPickerSource
+import com.all.pdfreader.pro.app.util.GlideEngine
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.PictureMimeType
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.config.SelectModeConfig
+import com.luck.picture.lib.engine.CompressFileEngine
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener
+import com.luck.picture.lib.interfaces.OnMediaEditInterceptListener
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.luck.picture.lib.style.PictureSelectorStyle
+import com.luck.picture.lib.style.SelectMainStyle
+import com.luck.picture.lib.utils.DateUtils
+import com.yalantis.ucrop.UCrop
+import top.zibin.luban.Luban
+import top.zibin.luban.OnNewCompressListener
+import java.io.File
+
+class PictureSelectorActivity : BaseActivity() {
+ private lateinit var binding: ActPictureSelectorBinding
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
+ override val TAG = "PictureSelectorActivity"
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActPictureSelectorBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(false)
+ }
+ openImagePicker()
+ }
+
+ private fun openImagePicker() {
+ val selectorStyle = PictureSelectorStyle().apply {
+ selectMainStyle = SelectMainStyle().apply {
+ isSelectNumberStyle = true
+ isPreviewSelectNumberStyle = true
+ selectBackground = R.drawable.num_checkbox_selector
+ }
+ }
+ PictureSelector.create(this)
+ .openGallery(SelectMimeType.ofImage())
+ .setSelectorUIStyle(selectorStyle)
+ .setImageEngine(GlideEngine.createGlideEngine())
+ .setImageSpanCount(3)
+ .isGif(false)
+ .isFastSlidingSelect(true)
+ .setSelectionMode(SelectModeConfig.MULTIPLE)
+ .setMaxSelectNum(50)
+ .isPreviewFullScreenMode(false)
+ .setCompressEngine(object : CompressFileEngine {
+ override fun onStartCompress(
+ context: Context?,
+ source: ArrayList?,
+ call: OnKeyValueResultCallbackListener?
+ ) {
+ Luban.with(context)
+ .load(source)
+ .ignoreBy(100)
+ .setCompressListener(object : OnNewCompressListener {
+ override fun onStart() {
+
+ }
+
+ override fun onSuccess(
+ source: String?,
+ compressFile: File?
+ ) {
+ call?.onCallback(source, compressFile?.absolutePath)
+ }
+
+ override fun onError(source: String?, e: Throwable?) {
+ call?.onCallback(source, null)
+ }
+ })
+ .launch()
+ }
+ })
+ .setEditMediaInterceptListener(object : OnMediaEditInterceptListener {
+ override fun onStartMediaEdit(
+ fragment: Fragment, currentLocalMedia: LocalMedia, requestCode: Int
+ ) {
+ val currentEditPath = currentLocalMedia.getAvailablePath()
+ val inputUri = if (PictureMimeType.isContent(currentEditPath)) {
+ currentEditPath.toUri()
+ } else {
+ Uri.fromFile(File(currentEditPath))
+ }
+ val destinationUri = Uri.fromFile(
+ File(
+ getSandboxPath(), DateUtils.getCreateFileName("CROP_") + ".jpeg"
+ )
+ )
+ val uCrop = UCrop.of(inputUri, destinationUri)
+ val buildOptions = UCrop.Options().apply {
+ isDarkStatusBarBlack(true)
+ }
+ uCrop.withOptions(buildOptions)
+ uCrop.start(this@PictureSelectorActivity, fragment, requestCode)
+ }
+
+ }).buildLaunch(R.id.fragment_container,object : OnResultCallbackListener{
+ override fun onResult(result: ArrayList) {
+ logDebug("forResult ->${result.size}")
+ if (result.isNotEmpty()) {
+ // result 中可能有带裁剪的 Uri 或原图 Uri
+ // 取出路径列表
+ val paths = result.mapNotNull { media ->
+ media.availablePath
+ }
+ if (paths.isEmpty()) {
+ return
+ }
+ val intent = PdfResultActivity.createIntentInputFile(
+ this@PictureSelectorActivity,
+ ArrayList(paths),
+ PdfPickerSource.IMAGES_TO_PDF
+ )
+ startActivity(intent)
+ finish()
+ }
+ }
+
+ override fun onCancel() {
+ finish()
+ }
+
+ })
+
+// .forResult(object : OnResultCallbackListener {
+// override fun onResult(result: ArrayList) {
+// logDebug("forResult ->${result.size}")
+// if (result.isNotEmpty()) {
+// // result 中可能有带裁剪的 Uri 或原图 Uri
+// // 取出路径列表
+// val paths = result.mapNotNull { media ->
+// media.availablePath
+// }
+// if (paths.isEmpty()) {
+// return
+// }
+// val intent = PdfResultActivity.createIntentInputFile(
+// this@PictureSelectorActivity,
+// ArrayList(paths),
+// PdfPickerSource.IMAGES_TO_PDF
+// )
+// startActivity(intent)
+// }
+// }
+//
+// override fun onCancel() {
+// logDebug("onCancel")
+// }
+// })
+
+// supportFragmentManager.beginTransaction()
+// .add(R.id.fragment_fl, selectorFragment, selectorFragment.getFragmentTag())
+// .addToBackStack(selectorFragment.getFragmentTag())
+// .commitAllowingStateLoss();
+ }
+
+ fun getSandboxPath(): String {
+ val dir = File(PRApp.getContext().externalCacheDir, "SandboxPdfPro")
+ if (!dir.exists()) dir.mkdirs()
+ return dir.absolutePath
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PrivacyPolicyActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PrivacyPolicyActivity.kt
index aeaa69b..8719660 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PrivacyPolicyActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/PrivacyPolicyActivity.kt
@@ -1,6 +1,7 @@
package com.all.pdfreader.pro.app.ui.act
import android.os.Bundle
+import android.view.View
import android.webkit.WebChromeClient
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
@@ -11,12 +12,19 @@ import com.all.pdfreader.pro.app.databinding.ActPrivacyPolicyBinding
class PrivacyPolicyActivity : BaseActivity() {
private lateinit var binding: ActPrivacyPolicyBinding
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
override val TAG = "PrivacyPolicyActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActPrivacyPolicyBinding.inflate(layoutInflater)
setContentView(binding.root)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.bg_color)
+ }
binding.backBtn.setOnClickListener {
finish()
}
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt
index 9c3b2df..f9b32a7 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt
@@ -36,7 +36,8 @@ import java.io.Serializable
class SearchActivity : BaseActivity() {
override val TAG: String = "SearchActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
companion object {
const val FRAG_TAG = "SearchActivity"
private const val PREF_SEARCH_HISTORY = "pref_search_history"
@@ -64,6 +65,11 @@ class SearchActivity : BaseActivity() {
super.onCreate(savedInstanceState)
binding = ActivitySearchPdfBinding.inflate(layoutInflater)
setContentView(binding.root)
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.bg_color)
+ }
source = getSerializableOrDefault(EXTRA_SOURCE, PdfPickerSource.NONE)
sp = getSharedPreferences(PREF_SEARCH_HISTORY, MODE_PRIVATE)
loadHistory()
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplashActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplashActivity.kt
index 939a6d3..4d139c2 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplashActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplashActivity.kt
@@ -5,11 +5,14 @@ import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
+import com.all.pdfreader.pro.app.R
import com.all.pdfreader.pro.app.databinding.ActivitySplashBinding
+import com.gyf.immersionbar.BarHide
+import com.gyf.immersionbar.ImmersionBar
@SuppressLint("CustomSplashScreen")
class SplashActivity : BaseActivity() {
-
+
override val TAG: String = "SplashActivity"
private lateinit var binding: ActivitySplashBinding
@@ -17,10 +20,15 @@ class SplashActivity : BaseActivity() {
companion object {
private const val SPLASH_DELAY = 3000L // 启动页显示时长
}
-
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySplashBinding.inflate(layoutInflater)
+ setupImmersionBar {
+ fullScreen(true)
+ statusBarDarkFont(true)
+ hideBar(BarHide.FLAG_HIDE_NAVIGATION_BAR)
+ }
// 设置启动页布局
setContentView(binding.root)
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplitPdfActivity.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplitPdfActivity.kt
index ec53f42..53db126 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplitPdfActivity.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SplitPdfActivity.kt
@@ -23,6 +23,7 @@ import com.all.pdfreader.pro.app.util.AppUtils.setOnSingleClickListener
import com.all.pdfreader.pro.app.util.FileUtils.isPdfEncrypted
import com.all.pdfreader.pro.app.util.FileUtils.toUnderscoreDateTime
import com.all.pdfreader.pro.app.util.PdfUtils
+import com.gyf.immersionbar.ImmersionBar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -30,7 +31,8 @@ import java.io.File
class SplitPdfActivity : BaseActivity() {
override val TAG: String = "SplitPdfActivity"
-
+ override val rootBottomView: View?
+ get() = binding.rootBottomLayout
private var currentViewState: ViewState = ViewState.SPLIT_LIST
var currentPassword : String? = null//拆分只会选择一个文件。直接进行密码传递
@@ -63,6 +65,11 @@ class SplitPdfActivity : BaseActivity() {
binding = ActivityPdfSplitBinding.inflate(layoutInflater)
setContentView(binding.root)
setupBackPressedCallback()
+ setupImmersionBar {
+ statusBarView(binding.view)
+ statusBarDarkFont(true)
+ navigationBarColor(R.color.bg_color)
+ }
filePath = intent.getStringExtra(EXTRA_PDF_PATH)
?: throw IllegalArgumentException("PDF file hash is required")
if (filePath.isEmpty()) {
diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/ToolsFrag.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/ToolsFrag.kt
index 519b502..5192efc 100644
--- a/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/ToolsFrag.kt
+++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/fragment/ToolsFrag.kt
@@ -1,6 +1,7 @@
package com.all.pdfreader.pro.app.ui.fragment
import android.content.Context
+import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
@@ -14,6 +15,7 @@ import com.all.pdfreader.pro.app.databinding.FragmentToolsBinding
import com.all.pdfreader.pro.app.model.PdfPickerSource
import com.all.pdfreader.pro.app.ui.act.PdfPickerActivity
import com.all.pdfreader.pro.app.ui.act.PdfResultActivity
+import com.all.pdfreader.pro.app.ui.act.PictureSelectorActivity
import com.all.pdfreader.pro.app.util.GlideEngine
import com.luck.picture.lib.basic.PictureSelector
import com.luck.picture.lib.config.PictureMimeType
@@ -66,7 +68,8 @@ class ToolsFrag : BaseFrag() {
startActivity(intent)
}
binding.imgToPdfBtn.setOnClickListener {
- openImagePicker()
+ val intent = Intent(requireActivity(), PictureSelectorActivity::class.java)
+ startActivity(intent)
}
binding.pdfToImgBtn.setOnClickListener {
val intent = PdfPickerActivity.createIntent(requireActivity(), PdfPickerSource.PDF_TO_IMAGES)
@@ -81,106 +84,4 @@ class ToolsFrag : BaseFrag() {
startActivity(intent)
}
}
-
- private fun openImagePicker() {
- val selectorStyle = PictureSelectorStyle().apply {
- selectMainStyle = SelectMainStyle().apply {
- isSelectNumberStyle = true
- isPreviewSelectNumberStyle = true
- selectBackground = R.drawable.num_checkbox_selector
- }
- }
- PictureSelector.create(this)
- .openGallery(SelectMimeType.ofImage())
- .setSelectorUIStyle(selectorStyle)
- .setImageEngine(GlideEngine.createGlideEngine())
- .setImageSpanCount(3)
- .isGif(false)
- .isFastSlidingSelect(true)
- .setSelectionMode(SelectModeConfig.MULTIPLE)
- .setMaxSelectNum(50)
-
- .setCompressEngine(object : CompressFileEngine {
- override fun onStartCompress(
- context: Context?,
- source: ArrayList?,
- call: OnKeyValueResultCallbackListener?
- ) {
- Luban.with(context)
- .load(source)
- .ignoreBy(100)
- .setCompressListener(object : OnNewCompressListener {
- override fun onStart() {
-
- }
-
- override fun onSuccess(
- source: String?,
- compressFile: File?
- ) {
- call?.onCallback(source, compressFile?.absolutePath)
- }
-
- override fun onError(source: String?, e: Throwable?) {
- call?.onCallback(source, null)
- }
- })
- .launch()
- }
- })
- .setEditMediaInterceptListener(object : OnMediaEditInterceptListener {
- override fun onStartMediaEdit(
- fragment: Fragment, currentLocalMedia: LocalMedia, requestCode: Int
- ) {
- val currentEditPath = currentLocalMedia.getAvailablePath()
- val inputUri = if (PictureMimeType.isContent(currentEditPath)) {
- currentEditPath.toUri()
- } else {
- Uri.fromFile(File(currentEditPath))
- }
- val destinationUri = Uri.fromFile(
- File(
- getSandboxPath(), DateUtils.getCreateFileName("CROP_") + ".jpeg"
- )
- )
- val uCrop = UCrop.of(inputUri, destinationUri)
- val buildOptions = UCrop.Options().apply {
- isDarkStatusBarBlack(true)
- }
- uCrop.withOptions(buildOptions)
- uCrop.start(requireActivity(), fragment, requestCode)
- }
-
- }).forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList) {
- logDebug("forResult ->${result.size}")
- if (result.isNotEmpty()) {
- // result 中可能有带裁剪的 Uri 或原图 Uri
- // 取出路径列表
- val paths = result.mapNotNull { media ->
- media.availablePath
- }
- if (paths.isEmpty()) {
- return
- }
- val intent = PdfResultActivity.createIntentInputFile(
- requireActivity(),
- ArrayList(paths),
- PdfPickerSource.IMAGES_TO_PDF
- )
- startActivity(intent)
- }
- }
-
- override fun onCancel() {
- logDebug("onCancel")
- }
- })
- }
-
- fun getSandboxPath(): String {
- val dir = File(PRApp.getContext().externalCacheDir, "SandboxPdfPro")
- if (!dir.exists()) dir.mkdirs()
- return dir.absolutePath
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/act_picture_selector.xml b/app/src/main/res/layout/act_picture_selector.xml
new file mode 100644
index 0000000..a47c8a9
--- /dev/null
+++ b/app/src/main/res/layout/act_picture_selector.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/act_privacy_policy.xml b/app/src/main/res/layout/act_privacy_policy.xml
index 3d2d5fb..468504e 100644
--- a/app/src/main/res/layout/act_privacy_policy.xml
+++ b/app/src/main/res/layout/act_privacy_policy.xml
@@ -1,5 +1,5 @@
-
+ android:layout_height="match_parent"
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_below="@+id/view"
+ android:orientation="vertical">
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
-
-
-
-
-
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:orientation="horizontal">
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_faq.xml b/app/src/main/res/layout/activity_faq.xml
index 16465a8..0978154 100644
--- a/app/src/main/res/layout/activity_faq.xml
+++ b/app/src/main/res/layout/activity_faq.xml
@@ -1,5 +1,5 @@
-
+ android:layout_height="match_parent"
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_below="@+id/view"
+ android:orientation="vertical">
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index ea64891..a4425bf 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -454,6 +454,14 @@
android:textSize="12sp" />
+
+
+
+
diff --git a/app/src/main/res/layout/activity_pdf_merge.xml b/app/src/main/res/layout/activity_pdf_merge.xml
index 8c03a6f..3bb9c2d 100644
--- a/app/src/main/res/layout/activity_pdf_merge.xml
+++ b/app/src/main/res/layout/activity_pdf_merge.xml
@@ -1,5 +1,5 @@
-
+ android:layout_height="match_parent"
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_below="@+id/view"
+ android:orientation="vertical">
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+ android:id="@+id/noFilesLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:visibility="gone">
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@mipmap/img_no_files_yet" />
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:orientation="horizontal">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/app/src/main/res/layout/activity_pdf_picker.xml b/app/src/main/res/layout/activity_pdf_picker.xml
index afd0743..a1deca5 100644
--- a/app/src/main/res/layout/activity_pdf_picker.xml
+++ b/app/src/main/res/layout/activity_pdf_picker.xml
@@ -1,5 +1,5 @@
-
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+ android:id="@+id/noFilesLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:visibility="gone">
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@mipmap/img_no_files_yet" />
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_height="wrap_content"
+ android:background="@color/white"
+ android:layout_alignParentBottom="true"
+ android:orientation="horizontal">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/app/src/main/res/layout/activity_pdf_split.xml b/app/src/main/res/layout/activity_pdf_split.xml
index ec6cc56..605ed03 100644
--- a/app/src/main/res/layout/activity_pdf_split.xml
+++ b/app/src/main/res/layout/activity_pdf_split.xml
@@ -1,5 +1,5 @@
-
+ android:layout_height="match_parent"
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_below="@+id/view"
+ android:orientation="vertical">
-
-
-
-
-
-
-
+ android:orientation="horizontal">
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/app/src/main/res/layout/activity_pdf_split_result.xml b/app/src/main/res/layout/activity_pdf_split_result.xml
index 21ebf17..804cb59 100644
--- a/app/src/main/res/layout/activity_pdf_split_result.xml
+++ b/app/src/main/res/layout/activity_pdf_split_result.xml
@@ -1,5 +1,5 @@
-
+ android:orientation="vertical">
+ android:id="@+id/processingLayout"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:visibility="gone">
-
+ android:orientation="horizontal">
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="24dp"
+ android:layout_margin="32dp"
+ android:indeterminate="true" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -257,104 +173,208 @@
-
+ android:visibility="gone">
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
+
diff --git a/app/src/main/res/layout/activity_pdf_to_img.xml b/app/src/main/res/layout/activity_pdf_to_img.xml
index 1d55b7a..ad15f5c 100644
--- a/app/src/main/res/layout/activity_pdf_to_img.xml
+++ b/app/src/main/res/layout/activity_pdf_to_img.xml
@@ -1,5 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_below="@+id/view"
+ android:orientation="vertical">
+ android:layout_height="44dp"
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_pdf_view.xml b/app/src/main/res/layout/activity_pdf_view.xml
index de70880..f8856a0 100644
--- a/app/src/main/res/layout/activity_pdf_view.xml
+++ b/app/src/main/res/layout/activity_pdf_view.xml
@@ -333,6 +333,15 @@
+
+
+
+
diff --git a/app/src/main/res/layout/activity_search_pdf.xml b/app/src/main/res/layout/activity_search_pdf.xml
index 5b19b72..613259c 100644
--- a/app/src/main/res/layout/activity_search_pdf.xml
+++ b/app/src/main/res/layout/activity_search_pdf.xml
@@ -1,5 +1,5 @@
-
+ android:layout_height="match_parent"
+ android:layout_above="@+id/rootBottomLayout"
+ android:layout_below="@+id/view"
+ android:orientation="vertical">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:src="@drawable/back_black" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="vertical"
+ android:visibility="gone">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+ android:layout_height="wrap_content"
+ android:background="@color/white"
+ android:layout_alignParentBottom="true"
+ android:orientation="horizontal">
-
+
+
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 87ddd41..d5b049c 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,14 +1,7 @@
-
+