diff --git a/app/src/main/java/com/all/pdfreader/pro/app/model/PdfPickerSource.kt b/app/src/main/java/com/all/pdfreader/pro/app/model/PdfPickerSource.kt index 3d5be4a..c033ebb 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/model/PdfPickerSource.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/model/PdfPickerSource.kt @@ -8,5 +8,6 @@ enum class PdfPickerSource { UNLOCK, // PDF解密 IMAGES_TO_PDF,// 图片转PDF PDF_TO_IMAGES,// PDF转图片 - TO_LONG_IMAGE // PDF转长图 + TO_LONG_IMAGE, // PDF转长图 + PRINT } \ No newline at end of file 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 88b2f94..e802886 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 @@ -2,26 +2,32 @@ package com.all.pdfreader.pro.app.ui.act import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Build import android.os.Bundle import android.os.Parcelable import android.view.View +import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import com.all.pdfreader.pro.app.R import com.all.pdfreader.pro.app.databinding.ActivityPdfPickerBinding import com.all.pdfreader.pro.app.model.PdfPickerSource +import com.all.pdfreader.pro.app.model.PrintResult import com.all.pdfreader.pro.app.model.SortConfig import com.all.pdfreader.pro.app.room.entity.PdfDocumentEntity import com.all.pdfreader.pro.app.room.repository.PdfRepository import com.all.pdfreader.pro.app.ui.adapter.PdfAdapter import com.all.pdfreader.pro.app.ui.dialog.PdfRemovePasswordDialog import com.all.pdfreader.pro.app.ui.dialog.PdfSetPasswordDialog +import com.all.pdfreader.pro.app.util.AppUtils.printPdfFile import com.all.pdfreader.pro.app.util.AppUtils.setClickWithAnimation import com.all.pdfreader.pro.app.util.AppUtils.setOnSingleClickListener +import com.all.pdfreader.pro.app.util.ToastUtils import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.launch +import java.io.File import java.io.Serializable class PdfPickerActivity : BaseActivity() { @@ -119,6 +125,31 @@ class PdfPickerActivity : BaseActivity() { startActivity(intent) finish() } + + PdfPickerSource.PRINT ->{ + val result = printPdfFile(this, Uri.fromFile(File(pdf.filePath))) + when (result) { + PrintResult.DeviceNotSupported -> { + ToastUtils.show(this,getString(R.string.device_does_not_support_printing)) + } + + is PrintResult.Error -> { + ToastUtils.show(this,getString(R.string.pdf_cannot_print_error)) + } + + PrintResult.MalformedPdf -> { + ToastUtils.show(this,getString(R.string.cannot_print_malformed_pdf)) + } + + PrintResult.PasswordRequired -> { + ToastUtils.show(this,getString(R.string.pdf_cant_print_password_protected)) + } + + PrintResult.Success -> { + + } + } + } } }, onSelectModelItemClick = { 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 620e6ea..22c0780 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 @@ -118,7 +118,7 @@ class PdfToImageActivity : BaseActivity() { } private fun initSplitData(file: File) { - lifecycleScope.launch { + lifecycleScope.launch(Dispatchers.IO) { // 是否存在密码 val isEncrypted = withContext(Dispatchers.IO) { isPdfEncrypted(file) 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 c147cd9..bfea984 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/act/SearchActivity.kt @@ -3,6 +3,7 @@ package com.all.pdfreader.pro.app.ui.act import android.content.Context import android.content.Intent import android.content.SharedPreferences +import android.net.Uri import android.os.Build import android.os.Bundle import android.text.Editable @@ -16,18 +17,22 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.all.pdfreader.pro.app.R import com.all.pdfreader.pro.app.databinding.ActivitySearchPdfBinding import com.all.pdfreader.pro.app.model.PdfPickerSource +import com.all.pdfreader.pro.app.model.PrintResult import com.all.pdfreader.pro.app.ui.adapter.SearchPdfAdapter import com.all.pdfreader.pro.app.ui.dialog.ListMoreDialogFragment import com.all.pdfreader.pro.app.ui.dialog.PdfRemovePasswordDialog import com.all.pdfreader.pro.app.ui.dialog.PdfSetPasswordDialog import com.all.pdfreader.pro.app.ui.dialog.PromptDialogFragment +import com.all.pdfreader.pro.app.util.AppUtils.printPdfFile import com.all.pdfreader.pro.app.util.AppUtils.showKeyboard +import com.all.pdfreader.pro.app.util.ToastUtils import com.gyf.immersionbar.ImmersionBar import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import org.json.JSONArray +import java.io.File import java.io.Serializable class SearchActivity : BaseActivity() { @@ -184,8 +189,42 @@ class SearchActivity : BaseActivity() { } PdfPickerSource.IMAGES_TO_PDF -> {} - PdfPickerSource.TO_LONG_IMAGE -> {} - PdfPickerSource.PDF_TO_IMAGES -> {} + PdfPickerSource.TO_LONG_IMAGE -> { + val intent = PdfToImageActivity.createIntent(this, pdf.filePath, + PdfPickerSource.TO_LONG_IMAGE) + startActivity(intent) + finish() + } + PdfPickerSource.PDF_TO_IMAGES -> { + val intent = PdfToImageActivity.createIntent(this, pdf.filePath, + PdfPickerSource.PDF_TO_IMAGES) + startActivity(intent) + finish() + } + PdfPickerSource.PRINT -> { + val result = printPdfFile(this, Uri.fromFile(File(pdf.filePath))) + when (result) { + PrintResult.DeviceNotSupported -> { + ToastUtils.show(this,getString(R.string.device_does_not_support_printing)) + } + + is PrintResult.Error -> { + ToastUtils.show(this,getString(R.string.pdf_cannot_print_error)) + } + + PrintResult.MalformedPdf -> { + ToastUtils.show(this,getString(R.string.cannot_print_malformed_pdf)) + } + + PrintResult.PasswordRequired -> { + ToastUtils.show(this,getString(R.string.pdf_cant_print_password_protected)) + } + + PrintResult.Success -> { + + } + } + } } }, onMoreClick = { pdf -> ListMoreDialogFragment(pdf.filePath).show(supportFragmentManager, FRAG_TAG) diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfResultAdapter.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfResultAdapter.kt index da33187..4f3ea01 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfResultAdapter.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/PdfResultAdapter.kt @@ -32,7 +32,7 @@ class PdfResultAdapter( val item = list[position] if (item.thumbnailPath != null) { Glide.with(holder.binding.root).load(File(item.thumbnailPath)) - .transform(CenterCrop(), RoundedCorners(8.dpToPx(holder.binding.root.context))) + .transform(CenterCrop(), RoundedCorners(4.dpToPx(holder.binding.root.context))) .into(holder.binding.image) } if (item.isPassword) { diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/SearchPdfAdapter.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/SearchPdfAdapter.kt index 4ba99d4..5ee7e92 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/SearchPdfAdapter.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/adapter/SearchPdfAdapter.kt @@ -22,7 +22,7 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners class SearchPdfAdapter( private val onItemClick: (PdfDocumentEntity) -> Unit, private val onMoreClick: (PdfDocumentEntity) -> Unit, - private var showMoreButton: Boolean = true, // 是否显示更多按钮 + private var showMoreButton: Boolean = false, // 是否显示更多按钮 private var showCheckButton: Boolean = false // 是否显示选择框按钮 ) : ListAdapter(PdfDiffCallback()) { private var searchKeyword: String? = null // 保存当前搜索关键字 diff --git a/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/ListMoreDialogFragment.kt b/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/ListMoreDialogFragment.kt index 2e408bd..7ec6249 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/ListMoreDialogFragment.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/ui/dialog/ListMoreDialogFragment.kt @@ -165,25 +165,19 @@ class ListMoreDialogFragment(val filePath: String) : BottomSheetDialogFragment() val result = printPdfFile(requireActivity(), Uri.fromFile(File(pdfDocument.filePath))) when (result) { PrintResult.DeviceNotSupported -> { - Toast.makeText( - context, R.string.device_does_not_support_printing, Toast.LENGTH_LONG - ).show() + ToastUtils.show(requireActivity(),getString(R.string.device_does_not_support_printing)) } is PrintResult.Error -> { - Toast.makeText(context, R.string.pdf_cannot_print_error, Toast.LENGTH_LONG) - .show() + ToastUtils.show(requireActivity(),getString(R.string.pdf_cannot_print_error)) } PrintResult.MalformedPdf -> { - Toast.makeText(context, R.string.cannot_print_malformed_pdf, Toast.LENGTH_LONG) - .show() + ToastUtils.show(requireActivity(),getString(R.string.cannot_print_malformed_pdf)) } PrintResult.PasswordRequired -> { - Toast.makeText( - context, R.string.pdf_cant_print_password_protected, Toast.LENGTH_LONG - ).show() + ToastUtils.show(requireActivity(),getString(R.string.pdf_cant_print_password_protected)) } PrintResult.Success -> { 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 ff9a0ff..519b502 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 @@ -76,6 +76,10 @@ class ToolsFrag : BaseFrag() { val intent = PdfPickerActivity.createIntent(requireActivity(), PdfPickerSource.TO_LONG_IMAGE) startActivity(intent) } + binding.printBtn.setOnClickListener { + val intent = PdfPickerActivity.createIntent(requireActivity(), PdfPickerSource.PRINT) + startActivity(intent) + } } private fun openImagePicker() { diff --git a/app/src/main/java/com/all/pdfreader/pro/app/util/AppUtils.kt b/app/src/main/java/com/all/pdfreader/pro/app/util/AppUtils.kt index 71d4bb7..3ccff8e 100644 --- a/app/src/main/java/com/all/pdfreader/pro/app/util/AppUtils.kt +++ b/app/src/main/java/com/all/pdfreader/pro/app/util/AppUtils.kt @@ -117,11 +117,7 @@ object AppUtils { fun shareFile(context: Context, file: File) { try { if (!file.exists()) { - Toast.makeText( - context, - context.getString(R.string.error_file_not_exist), - Toast.LENGTH_SHORT - ).show() + ToastUtils.show(context,context.getString(R.string.error_file_not_exist)) return } diff --git a/app/src/main/res/drawable/drw_tools_img2pdf_bg.xml b/app/src/main/res/drawable/drw_tools_img2pdf_bg.xml new file mode 100644 index 0000000..4398069 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_img2pdf_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_lock_bg.xml b/app/src/main/res/drawable/drw_tools_lock_bg.xml new file mode 100644 index 0000000..b1f7e48 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_lock_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_merge_bg.xml b/app/src/main/res/drawable/drw_tools_merge_bg.xml new file mode 100644 index 0000000..3b70880 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_merge_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_pdf2img_bg.xml b/app/src/main/res/drawable/drw_tools_pdf2img_bg.xml new file mode 100644 index 0000000..b1f7e48 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_pdf2img_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_pdf2long_bg.xml b/app/src/main/res/drawable/drw_tools_pdf2long_bg.xml new file mode 100644 index 0000000..3b70880 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_pdf2long_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_print_bg.xml b/app/src/main/res/drawable/drw_tools_print_bg.xml new file mode 100644 index 0000000..c87a2f9 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_print_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_split_bg.xml b/app/src/main/res/drawable/drw_tools_split_bg.xml new file mode 100644 index 0000000..b7f9c60 --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_split_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drw_tools_unlock_bg.xml b/app/src/main/res/drawable/drw_tools_unlock_bg.xml new file mode 100644 index 0000000..dc2fc0c --- /dev/null +++ b/app/src/main/res/drawable/drw_tools_unlock_bg.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/progressbar_horizontal.xml b/app/src/main/res/drawable/progressbar_horizontal.xml new file mode 100644 index 0000000..47e7950 --- /dev/null +++ b/app/src/main/res/drawable/progressbar_horizontal.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/tools_img2pdf.xml b/app/src/main/res/drawable/tools_img2pdf.xml new file mode 100644 index 0000000..b4fce9e --- /dev/null +++ b/app/src/main/res/drawable/tools_img2pdf.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/tools_lock.xml b/app/src/main/res/drawable/tools_lock.xml new file mode 100644 index 0000000..f37b8fe --- /dev/null +++ b/app/src/main/res/drawable/tools_lock.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/tools_merge.xml b/app/src/main/res/drawable/tools_merge.xml new file mode 100644 index 0000000..bda199f --- /dev/null +++ b/app/src/main/res/drawable/tools_merge.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/tools_pdf2img.xml b/app/src/main/res/drawable/tools_pdf2img.xml new file mode 100644 index 0000000..4e01c79 --- /dev/null +++ b/app/src/main/res/drawable/tools_pdf2img.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/tools_pdf2long.xml b/app/src/main/res/drawable/tools_pdf2long.xml new file mode 100644 index 0000000..a95cb49 --- /dev/null +++ b/app/src/main/res/drawable/tools_pdf2long.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/tools_print.xml b/app/src/main/res/drawable/tools_print.xml new file mode 100644 index 0000000..7e2f87f --- /dev/null +++ b/app/src/main/res/drawable/tools_print.xml @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable/tools_split.xml b/app/src/main/res/drawable/tools_split.xml new file mode 100644 index 0000000..9d2d385 --- /dev/null +++ b/app/src/main/res/drawable/tools_split.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/tools_unlock.xml b/app/src/main/res/drawable/tools_unlock.xml new file mode 100644 index 0000000..5eeccd1 --- /dev/null +++ b/app/src/main/res/drawable/tools_unlock.xml @@ -0,0 +1,13 @@ + + + + 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 1801a07..bd43e81 100644 --- a/app/src/main/res/layout/activity_pdf_split_result.xml +++ b/app/src/main/res/layout/activity_pdf_split_result.xml @@ -176,7 +176,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/share_file" - android:textColor="@color/black_60" + android:textColor="@color/icon_on" android:textSize="16sp" /> diff --git a/app/src/main/res/layout/adapter_pdf_item.xml b/app/src/main/res/layout/adapter_pdf_item.xml index ede144c..9ebb6d5 100644 --- a/app/src/main/res/layout/adapter_pdf_item.xml +++ b/app/src/main/res/layout/adapter_pdf_item.xml @@ -61,8 +61,8 @@ diff --git a/app/src/main/res/layout/dialog_permission.xml b/app/src/main/res/layout/dialog_permission.xml index 164627f..354450e 100644 --- a/app/src/main/res/layout/dialog_permission.xml +++ b/app/src/main/res/layout/dialog_permission.xml @@ -67,7 +67,6 @@ android:id="@+id/allow_layout" android:layout_width="match_parent" android:layout_height="48dp" - android:background="@drawable/dr_rounded_corner_bg_grey" android:gravity="center_vertical" android:paddingStart="16dp" @@ -80,7 +79,7 @@ android:layout_weight="1" android:gravity="center_vertical" android:text="@string/permission_required_desc_2" - android:textColor="@color/black_80" + android:textColor="@color/text_color_lv1" android:textSize="14sp" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_tools.xml b/app/src/main/res/layout/fragment_tools.xml index 1ea348a..bfb06df 100644 --- a/app/src/main/res/layout/fragment_tools.xml +++ b/app/src/main/res/layout/fragment_tools.xml @@ -9,48 +9,302 @@ android:layout_width="match_parent" android:layout_height="0dp" /> - -