Commit 4ad226de authored by wanglei's avatar wanglei

...提交部分功能...

parent 5471aaee
......@@ -53,6 +53,10 @@ dependencies {
//ui第三方
implementation("com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.6")
implementation 'com.github.bumptech.glide:glide:4.16.0'
// implementation 'com.airbnb.android:lottie:6.4.0'
implementation 'com.airbnb.android:lottie:6.4.0'
//XLS表格
implementation 'com.github.huangyanbin:SmartTable:2.2.0'
//pdf浏览
//https://github.com/DImuthuUpe/AndroidPdfViewer
......
{"v":"5.5.7","fr":60,"ip":0,"op":60,"w":640,"h":140,"nm":"合成 1","ddd":0,"assets":[{"id":"image_0","w":157,"h":175,"u":"images/","p":"img_0.png","e":0},{"id":"image_1","w":86,"h":50,"u":"images/","p":"img_1.png","e":0},{"id":"image_2","w":540,"h":114,"u":"images/","p":"img_2.png","e":0}],"layers":[{"ddd":0,"ind":1,"ty":2,"nm":"bu.png","cl":"png","refId":"image_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[518,94.5,0],"to":[5.917,0,0],"ti":[-5.917,0,0]},{"t":30,"s":[553.5,94.5,0]}],"ix":2},"a":{"a":0,"k":[78.5,87.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":2,"nm":"on.png","cl":"png","refId":"image_1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[0]},{"t":31,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[502.25,57.5,0],"ix":2},"a":{"a":0,"k":[43,25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":2,"nm":"qx2.png","cl":"png","refId":"image_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[320,57,0],"ix":2},"a":{"a":0,"k":[270,57,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":60,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
......@@ -17,7 +17,10 @@ import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PPT
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_WORD
import com.base.superpdfreader.helps.BaseActivity
import com.base.superpdfreader.helps.MediaStoreHelp.updateMediaStore
import com.base.superpdfreader.helps.PermissionHelp.checkStorePermission
import com.base.superpdfreader.helps.PermissionHelp.requestStorePermission
import com.base.superpdfreader.utils.BarUtils
import com.base.superpdfreader.view.DialogViews.showGerPermission
import com.base.superpdfreader.view.PDFOperationDialog.showPDFCreateConverter
import com.google.android.material.tabs.TabLayoutMediator
......@@ -51,6 +54,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
initPage()
intTab()
if (checkStorePermission()) {
} else {
dialog = showGerPermission(null, deny = {}, allow = {
requestStorePermission(launcher = launcher, result = { flag ->
if (flag) {
}
})
})
}
updateMediaStore()
}
......
......@@ -82,7 +82,7 @@ class ImageSelectionActivity : BaseActivity<ActivityImageSelectionBinding>() {
}
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
val files = arrayListOf<Pair<File, Uri>>()
val files = arrayListOf<Pair<String, Uri>>()
getMediaImage(files)
LogEx.logDebug(TAG, "files.size=${files.size}")
launch(Dispatchers.Main) {
......
package com.base.superpdfreader.adapter
class ImageDragAdapter {
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.superpdfreader.R
import com.base.superpdfreader.bean.ImageBean
import com.base.superpdfreader.databinding.ItemImageDragBinding
import com.base.superpdfreader.view.XmlEx.inflate
class ImageDragAdapter : RecyclerView.Adapter<ImageDragAdapter.AAA>() {
private val beanList = arrayListOf<ImageBean>()
inner class AAA(view: View) : ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AAA {
return AAA(R.layout.item_image_drag.inflate(parent))
}
override fun getItemCount(): Int {
return beanList.size
}
override fun onBindViewHolder(holder: AAA, position: Int) {
val binding = ItemImageDragBinding.bind(holder.itemView)
val context = holder.itemView.context
val bean = beanList[position]
}
}
\ No newline at end of file
......@@ -11,9 +11,7 @@ import com.base.superpdfreader.databinding.ItemImageSelectedBinding
import com.base.superpdfreader.databinding.ItemImageSelectionBinding
import com.base.superpdfreader.view.XmlEx.inflate
import com.bumptech.glide.Glide
import kotlinx.coroutines.selects.select
import java.io.File
import java.util.ArrayList
class ImageSelectionAdapter(
val uiMode: Int = UI_IMAGE_GRID,
......@@ -55,9 +53,7 @@ class ImageSelectionAdapter(
} else {
binding.flCamera.visibility = View.GONE
binding.flContent.visibility = View.VISIBLE
if (data.file?.exists() == true) {
Glide.with(context).load(data.file).centerCrop().into(binding.iv)
}
Glide.with(context).load(data.path).centerCrop().into(binding.iv)
binding.ivSelector.isSelected = data.isSelect
arrayOf(binding.root, binding.ivSelector).forEach {
it.setOnClickListener {
......@@ -76,9 +72,7 @@ class ImageSelectionAdapter(
UI_IMAGE_LIST -> {
val binding = ItemImageSelectedBinding.bind(holder.itemView)
if (data.file?.exists() == true) {
Glide.with(context).load(data.file).centerCrop().into(binding.iv)
}
Glide.with(context).load(data.path).centerCrop().into(binding.iv)
binding.ivDelete.setOnClickListener {
remove?.invoke(data)
}
......@@ -87,7 +81,7 @@ class ImageSelectionAdapter(
}
fun setData(files: List<Pair<File, Uri>>, isClean: Boolean = true) {
fun setData(files: List<Pair<String, Uri>>, isClean: Boolean = true) {
if (isClean) {
imageBeans.clear()
}
......@@ -118,7 +112,7 @@ class ImageSelectionAdapter(
fun unSelectBean(imageBean: ImageBean) {
imageBeans.forEach {
if (it.file == imageBean.file) {
if (it.path == imageBean.path) {
it.isSelect = false
}
}
......
package com.base.superpdfreader.bean
import java.io.File
data class ImageBean(val file: File? = null) {
data class ImageBean(
val path: String? = null
) {
var isCamera: Boolean = false
var isSelect: Boolean = false
}
......@@ -73,9 +73,10 @@ object MediaStoreHelp {
}
@SuppressLint("Range")
fun Context.getMediaImage(
list: ArrayList<Pair<File, Uri>>,
): ArrayList<Pair<File, Uri>> {
list: ArrayList<Pair<String, Uri>>,
): ArrayList<Pair<String, Uri>> {
val projection = arrayOf(
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
......@@ -105,7 +106,7 @@ object MediaStoreHelp {
)
// 其他属性...
list.add(
Pair(File(path), uri)
Pair(path, uri)
)
}
}
......
package com.base.superpdfreader.view
import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.LayoutInflater
import com.base.superpdfreader.R
import com.base.superpdfreader.databinding.DialogPermissonOpenBinding
object DialogViews {
@SuppressLint("SetTextI18n")
fun Context.showGerPermission(
tittle: String? = null,
deny: ((view: Dialog) -> Unit)? = null,
allow: ((view: Dialog) -> Unit)? = null
): Dialog {
val dialog = Dialog(this)
val binding = DialogPermissonOpenBinding.inflate(LayoutInflater.from(this))
dialog.requestWindowFeature(1)
dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.window!!.setLayout(-1, -1)
dialog.setCanceledOnTouchOutside(false)
dialog.setCancelable(false)
dialog.setContentView(binding.root)
val str = resources.getString(R.string.app_name)
// SpanUtils.with(binding.idTvTt)
// .append("Allow ${str} to access ")
// .setFontSize(13, true)
// .setForegroundColor(0xFF999999.toInt())
// .append("All Files Access ")
// .setBold()
// .setFontSize(13, true)
// .setForegroundColor(0xFF4273FF.toInt())
// .append("permission to manage files of your device?")
// .setFontSize(13, true)
// .setForegroundColor(0xFF999999.toInt())
// .create()
binding.idTvTt.text =
"Our application needs to access your files to implement junk scanning, image compression, duplicate photos, and large file cleanup. Before you authorize, we need to confirm with you:"
tittle?.let { binding.idTvTt.text = it }
binding.idFullLottie.imageAssetsFolder = "easy_permission_finger/images/"
binding.idFullLottie.setAnimation("easy_permission_finger/data.json")
binding.idFullLottie.playAnimation()
binding.idDeny.setOnClickListener {
dialog.dismiss()
deny?.invoke(dialog)
}
binding.idTvAllow.setOnClickListener {
dialog.dismiss()
allow?.invoke(dialog)
}
dialog.show()
return dialog
}
}
\ No newline at end of file
package com.base.superpdfreader.view
import android.annotation.SuppressLint
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.view.LayoutInflater
import com.base.superpdfreader.R
import com.base.superpdfreader.activity.DocBrowserActivity
......@@ -10,17 +12,19 @@ import com.base.superpdfreader.activity.PdfBrowserActivity
import com.base.superpdfreader.activity.XlsBrowserActivity
import com.base.superpdfreader.bean.DocumentBean
import com.base.superpdfreader.databinding.DialogDocumentDetailBinding
import com.base.superpdfreader.fragment.DocumentListFragment
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_EXCEL
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PDF
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PPT
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_WORD
import com.base.superpdfreader.helps.ActivityLauncher
import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.OutputStream
object DocumentDetailDialog {
@SuppressLint("SetTextI18n")
fun Context.showDocumentDetailDialog(UI_MODE: String, bean: DocumentBean) {
@SuppressLint("SetTextI18n", "QueryPermissionsNeeded")
fun Context.showDocumentDetailDialog(UI_MODE: String, bean: DocumentBean, launcher: ActivityLauncher) {
val dialog = BottomSheetDialog(this)
val binding = DialogDocumentDetailBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
......@@ -96,8 +100,57 @@ object DocumentDetailDialog {
}
dialog.dismiss()
}
binding.llEmail.setOnClickListener {
dialog.dismiss()
val emailIntent = Intent(Intent.ACTION_SEND).apply {
// 附加文件
putExtra(Intent.EXTRA_STREAM, bean.uri)
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
// 检查是否有可以处理此Intent的应用
if (emailIntent.resolveActivity(packageManager) != null) {
startActivity(emailIntent)
}
}
binding.llCopy.setOnClickListener {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
launcher.launch(intent) { result ->
val srcUri = bean.uri
val treeUri: Uri? = result.data?.data
}
}
binding.llDelete.setOnClickListener {
}
}
@SuppressLint("Recycle")
fun Context.copyFileToUri(targetUri: Uri, sourceUri: Uri) {
contentResolver.openInputStream(sourceUri).use { input ->
val outputStream: OutputStream = contentResolver.openOutputStream(
getOutputUri(targetUri, "your_filename.ext")
) ?: return
input?.let {
val buffer = ByteArray(1024)
var length: Int
while (it.read(buffer).also { length = it } != -1) {
outputStream.write(buffer, 0, length)
}
outputStream.flush()
}
}
}
// 辅助函数,用于在目标Uri下创建文件
private fun getOutputUri(baseUri: Uri, filename: String): Uri {
return Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT)
.authority("com.android.externalstorage.documents")
.appendPath("tree") // 根据SAF的Uri结构,这可能需要调整
.appendPath(baseUri.lastPathSegment)
.appendPath(filename)
.build()
}
}
\ No newline at end of file
......@@ -7,8 +7,8 @@
android:layout_height="match_parent"
tools:context=".activity.XlsBrowserActivity">
<WebView
android:id="@+id/webView"
<com.bin.david.form.core.SmartTable
android:id="@+id/smartTable"
android:layout_width="match_parent"
android:layout_height="match_parent" />
......
......@@ -56,10 +56,10 @@
</LinearLayout>
<LinearLayout
android:layout_marginTop="30dp"
android:id="@+id/ll_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
......@@ -73,7 +73,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
android:minHeight="27dp"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
......@@ -82,7 +83,8 @@
android:layout_marginStart="12dp"
android:text="Open File"
android:textColor="@color/black"
android:textSize="16sp" />
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
......@@ -102,7 +104,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
android:minHeight="27dp"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
......@@ -111,7 +114,8 @@
android:layout_marginStart="12dp"
android:text="Email"
android:textColor="@color/black"
android:textSize="16sp" />
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
......@@ -131,7 +135,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
android:minHeight="27dp"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
......@@ -140,7 +145,8 @@
android:layout_marginStart="12dp"
android:text="Share a Copy"
android:textColor="@color/black"
android:textSize="16sp" />
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
......@@ -160,7 +166,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
android:minHeight="27dp"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
......@@ -169,7 +176,8 @@
android:layout_marginStart="12dp"
android:text="Copy To"
android:textColor="@color/black"
android:textSize="16sp" />
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
......@@ -189,7 +197,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
android:minHeight="27dp"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
......@@ -198,14 +207,15 @@
android:layout_marginStart="12dp"
android:text="Rename"
android:textColor="@color/black"
android:textSize="16sp" />
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:layout_marginBottom="40dp"
android:id="@+id/ll_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
......@@ -219,7 +229,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
android:minHeight="27dp"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
......@@ -228,7 +239,8 @@
android:layout_marginStart="12dp"
android:text="Delete"
android:textColor="@color/black"
android:textSize="16sp" />
android:textSize="16sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</com.noober.background.view.BLLinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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:layout_gravity="center"
android:orientation="vertical">
<com.noober.background.view.BLLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="12dp"
android:orientation="vertical"
app:bl_corners_radius="10dp"
app:bl_solid_color="@color/white">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:text="Permission request"
android:textColor="#000000"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/id_tv_tt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="22dp"
android:layout_marginBottom="38dp"
android:textSize="13sp" />
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/id_full_lottie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
app:lottie_autoPlay="true"
app:lottie_loop="true" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="23dp"
android:layout_marginTop="40dp"
android:layout_marginBottom="14dp">
<com.noober.background.view.BLTextView
android:id="@+id/id_deny"
android:layout_width="0dp"
android:layout_height="36dp"
android:layout_marginEnd="13dp"
android:layout_weight="1"
android:gravity="center"
android:text="Deny"
android:textColor="#000000"
android:textSize="17sp"
app:bl_corners_radius="18dp"
app:bl_solid_color="#F5F5F5"
tools:ignore="HardcodedText" />
<com.noober.background.view.BLTextView
android:id="@+id/id_tv_allow"
android:layout_width="0dp"
android:layout_height="36dp"
android:layout_weight="1"
android:gravity="center"
android:text="Allow"
android:textColor="@color/white"
android:textSize="17sp"
app:bl_corners_radius="18dp"
app:bl_solid_color="#355bea"
tools:ignore="HardcodedText" />
</androidx.appcompat.widget.LinearLayoutCompat>
</com.noober.background.view.BLLinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.noober.background.view.BLFrameLayout 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="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
app:bl_corners_radius="9dp"
app:bl_solid_color="#F5F5F5">
<ImageView
android:id="@+id/iv"
android:layout_width="110dp"
android:layout_height="140dp"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_clip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom"
android:layout_marginStart="16dp"
android:layout_marginBottom="8dp"
android:minWidth="26dp"
android:minHeight="26dp"
android:src="@mipmap/clip"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_drag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:minWidth="26dp"
android:minHeight="26dp"
android:src="@mipmap/clip"
tools:ignore="ContentDescription" />
</com.noober.background.view.BLFrameLayout>
\ No newline at end of file
......@@ -16,14 +16,13 @@ dependencyResolutionManagement {
repositories {
mavenCentral()
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://android-sdk.is.com" }
maven { url "https://maven.google.com" }
maven { url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea" }
maven { url "https://artifact.bytedance.com/repository/pangle" }
maven { url "https://s01.oss.sonatype.org/content/groups/public" }
maven { url "https://maven.google.com" }
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
......
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