Commit d3fb2a7c authored by wanglei's avatar wanglei

...提交部分ui...

parent 61e24108
...@@ -47,7 +47,9 @@ dependencies { ...@@ -47,7 +47,9 @@ dependencies {
testImplementation libs.junit testImplementation libs.junit
androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.junit
androidTestImplementation libs.androidx.espresso.core androidTestImplementation libs.androidx.espresso.core
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
//工具库
implementation("com.blankj:utilcodex:1.31.1") implementation("com.blankj:utilcodex:1.31.1")
//ui第三方 //ui第三方
......
...@@ -2,6 +2,13 @@ ...@@ -2,6 +2,13 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application <application
android:name=".MyApplication" android:name=".MyApplication"
android:allowBackup="true" android:allowBackup="true"
......
...@@ -2,31 +2,27 @@ package com.base.superpdfreader ...@@ -2,31 +2,27 @@ package com.base.superpdfreader
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.Color import android.graphics.Color
import android.os.Bundle
import android.util.Log import android.util.Log
import android.widget.LinearLayout
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.base.superpdfreader.databinding.ActivityMainBinding import com.base.superpdfreader.databinding.ActivityMainBinding
import com.base.superpdfreader.databinding.ItemTabBinding import com.base.superpdfreader.databinding.ItemTabBinding
import com.base.superpdfreader.fragment.DocumentListFragment import com.base.superpdfreader.fragment.DocumentListFragment
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_DPF import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_DPF
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_EXCEL
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PPT import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PPT
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_WORD import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_WORD
import com.base.superpdfreader.helps.BaseActivity import com.base.superpdfreader.helps.BaseActivity
import com.blankj.utilcode.util.BarUtils import com.blankj.utilcode.util.BarUtils
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
class MainActivity : BaseActivity<ActivityMainBinding>() { class MainActivity : BaseActivity<ActivityMainBinding>() {
private val TAG = "MainActivity"
override val binding: ActivityMainBinding by lazy { override val binding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater) ActivityMainBinding.inflate(layoutInflater)
} }
...@@ -42,7 +38,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -42,7 +38,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
DocumentListFragment().apply { UI_MODE = MODE_PPT } DocumentListFragment().apply { UI_MODE = MODE_PPT }
} }
private val excelFragment by lazy { private val excelFragment by lazy {
DocumentListFragment().apply { UI_MODE = MODE_PPT } DocumentListFragment().apply { UI_MODE = MODE_EXCEL}
} }
private lateinit var pagerAdapter: DocumentPagerAdapter private lateinit var pagerAdapter: DocumentPagerAdapter
...@@ -61,45 +57,60 @@ class MainActivity : BaseActivity<ActivityMainBinding>() { ...@@ -61,45 +57,60 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
pages.add(excelFragment) pages.add(excelFragment)
pagerAdapter = DocumentPagerAdapter(this) pagerAdapter = DocumentPagerAdapter(this)
binding.viewpager2.adapter = pagerAdapter binding.viewpager2.adapter = pagerAdapter
binding.viewpager2.registerOnPageChangeCallback(object : OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
when (position) {
0 -> {
binding.llTop.setBackgroundColor(ContextCompat.getColor(this@MainActivity, R.color.color_pdf))
} }
@SuppressLint("SetTextI18n") 1 -> {
private fun intTab() { binding.llTop.setBackgroundColor(ContextCompat.getColor(this@MainActivity, R.color.color_word))
}
2 -> {
binding.llTop.setBackgroundColor(ContextCompat.getColor(this@MainActivity, R.color.color_ppt))
val pdfBinding = ItemTabBinding.inflate(layoutInflater)
pdfBinding.tvTab.text = "PDF"
val pdfTab = binding.tabLayout.newTab()
pdfTab.customView = pdfBinding.root
binding.tabLayout.addTab(pdfTab)
val wordBinding = ItemTabBinding.inflate(layoutInflater) }
wordBinding.tvTab.text = "Word"
val wordTab = binding.tabLayout.newTab()
wordTab.customView = pdfBinding.root
binding.tabLayout.addTab(wordTab)
val pptBinding = ItemTabBinding.inflate(layoutInflater) 3 -> {
wordBinding.tvTab.text = "PPT" binding.llTop.setBackgroundColor(ContextCompat.getColor(this@MainActivity, R.color.color_excel))
val pptTab = binding.tabLayout.newTab()
pptTab.customView = pptBinding.root
binding.tabLayout.addTab(pptTab)
val excelBinding = ItemTabBinding.inflate(layoutInflater) }
wordBinding.tvTab.text = "Excel" }
val excelTab = binding.tabLayout.newTab() }
excelTab.customView = excelBinding.root })
binding.tabLayout.addTab(excelTab) }
@SuppressLint("SetTextI18n")
private fun intTab() {
binding.tabLayout.setTabRippleColorResource(android.R.color.transparent) binding.tabLayout.setTabRippleColorResource(android.R.color.transparent)
TabLayoutMediator(binding.tabLayout, binding.viewpager2, false) { tab, position -> TabLayoutMediator(binding.tabLayout, binding.viewpager2, false) { tab, position ->
// Log.e(TAG, "position=$position")
val tabBinding = ItemTabBinding.inflate(layoutInflater)
when (position) {
0 -> {
tabBinding.tvTab.text = "PDF"
}
repeat(4) { index -> 1 -> {
// val tab=binding.tabLayout. tabBinding.tvTab.text = "Work"
}
2 -> {
tabBinding.tvTab.text = "PPT"
}
3 -> {
tabBinding.tvTab.text = "Excel"
}
} }
tab.customView = tabBinding.root
}.attach() }.attach()
binding.viewpager2.currentItem = 0
} }
......
package com.base.superpdfreader.adapter package com.base.superpdfreader.adapter
import android.annotation.SuppressLint
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.superpdfreader.R
import com.base.superpdfreader.bean.DocumentBean import com.base.superpdfreader.bean.DocumentBean
import com.base.superpdfreader.databinding.ItemDocumentBinding
import com.base.superpdfreader.view.XmlEx.inflate
import java.io.File
import java.nio.file.Files
import java.nio.file.attribute.FileTime
class DocumentAdapter : RecyclerView.Adapter<DocumentAdapter.DDD>() { class DocumentAdapter(val itemClick: (bean: DocumentBean) -> Unit) : RecyclerView.Adapter<DocumentAdapter.DDD>() {
private val docList = arrayListOf<DocumentBean>() private val hasData = HashSet<File>()
private val docList = ArrayList<DocumentBean>()
class DDD(view: View) : ViewHolder(view) class DDD(view: View) : ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DDD { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DDD {
TODO("Not yet implemented") return DDD(R.layout.item_document.inflate(parent))
} }
override fun getItemCount(): Int { override fun getItemCount(): Int {
...@@ -21,6 +29,28 @@ class DocumentAdapter : RecyclerView.Adapter<DocumentAdapter.DDD>() { ...@@ -21,6 +29,28 @@ class DocumentAdapter : RecyclerView.Adapter<DocumentAdapter.DDD>() {
} }
override fun onBindViewHolder(holder: DDD, position: Int) { override fun onBindViewHolder(holder: DDD, position: Int) {
TODO("Not yet implemented") val data = docList[position]
val binding = ItemDocumentBinding.bind(holder.itemView)
val context = holder.itemView.context
binding.iv.setImageResource(data.drawable)
binding.tvName.text = data.name
binding.tvInfo.text = data.info()
binding.root.setOnClickListener {
itemClick.invoke(data)
} }
}
@SuppressLint("NotifyDataSetChanged")
fun addData(type: String, drawable: Int, list: List<File>) {
list.forEach { file ->
val flag = hasData.add(file)
if (flag) {
val bean = DocumentBean(drawable, file.name, file.lastModified(), file.length(), type)
docList.add(bean)
}
}
notifyDataSetChanged()
}
} }
\ No newline at end of file
package com.base.superpdfreader.bean package com.base.superpdfreader.bean
import android.annotation.SuppressLint
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import com.base.superpdfreader.helps.KotlinExt.toFormatSize
import java.text.SimpleDateFormat
data class DocumentBean( data class DocumentBean(
val drawable: Int = 0, val drawable: Int = 0,
val name: String = "", val name: String = "",
val time: Long = 0, val time: Long = 0,
val size: Long = 0 val size: Long = 0,
) val type: String = "",
\ No newline at end of file ) {
@SuppressLint("SimpleDateFormat")
fun info(split: Boolean = false): String {
var info = ""
runCatching {
val simpleDateFormat = SimpleDateFormat("dd-MM-yyyy HH:mm")
val timeF = simpleDateFormat.format(time)
val sizeF = size.toFormatSize()
info = if (split) "$timeF | $sizeF" else "$timeF $sizeF"
}
return info
}
}
\ No newline at end of file
package com.base.superpdfreader.fragment package com.base.superpdfreader.fragment
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.superpdfreader.MainActivity
import com.base.superpdfreader.R
import com.base.superpdfreader.adapter.DocumentAdapter
import com.base.superpdfreader.databinding.FragmentDocumentListBinding import com.base.superpdfreader.databinding.FragmentDocumentListBinding
import com.base.superpdfreader.helps.BaseFragment import com.base.superpdfreader.helps.BaseFragment
import com.base.superpdfreader.helps.FileHelp.loadDocument
import com.base.superpdfreader.helps.PermissionHelp.checkStorePermission
import com.base.superpdfreader.helps.PermissionHelp.requestStorePermission
import com.base.superpdfreader.view.DocumentDetailDialog.showDocumentDetailDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() { class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
var UI_MODE: String = MODE_DPF var UI_MODE: String = MODE_DPF
private lateinit var adapter: DocumentAdapter
override val binding: FragmentDocumentListBinding by lazy { public override val binding: FragmentDocumentListBinding by lazy {
FragmentDocumentListBinding.inflate(layoutInflater) FragmentDocumentListBinding.inflate(layoutInflater)
} }
override fun setView() { override fun setView() {
when (UI_MODE) {
MODE_DPF -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_pdf)
}
MODE_WORD -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_word)
}
MODE_PPT -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_ppt)
}
MODE_EXCEL -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_excel)
}
}
adapter = DocumentAdapter { bean ->
requireContext().showDocumentDetailDialog(UI_MODE, bean)
}
binding.rv.adapter = adapter
if (checkStorePermission()) {
initData()
}
}
override fun setListener() {
binding.tvAllow.setOnClickListener {
val launcher = (requireActivity() as MainActivity).launcher
requireContext().requestStorePermission(launcher,
jumpAction = {},
result = { flag ->
binding.llPermission.isVisible = !flag
initData()
}
)
}
binding.swipeRefresh.setOnRefreshListener {
binding.swipeRefresh.isRefreshing = false
}
}
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
when (UI_MODE) {
MODE_DPF -> {
loadDocument(filter = {
it.path.contains(".pdf")
}) { files ->
adapter.addData(MODE_DPF, R.mipmap.pdf, files)
}
}
MODE_WORD -> {
loadDocument(filter = {
it.path.contains(".doc")
}) { files ->
adapter.addData(MODE_WORD, R.mipmap.doc, files)
}
}
MODE_PPT -> {
loadDocument(filter = {
it.path.contains(".ppt")
}) { files ->
adapter.addData(MODE_PPT, R.mipmap.ppt, files)
}
}
MODE_EXCEL -> {
loadDocument(filter = {
it.path.contains(".xls")
}) { files ->
adapter.addData(MODE_EXCEL, R.mipmap.xls, files)
}
}
}
}
override fun onResume() {
super.onResume()
binding.llPermission.isVisible = !checkStorePermission()
} }
companion object { companion object {
......
package com.base.superpdfreader.helps
import android.content.Intent
import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultCallback
import androidx.activity.result.ActivityResultCaller
import androidx.activity.result.contract.ActivityResultContracts
class ActivityLauncher(activityResultCaller: ActivityResultCaller) {
//region 权限
private var permissionCallback: ActivityResultCallback<Map<String, Boolean>>? = null
private val permissionLauncher =
activityResultCaller.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result: Map<String, Boolean> ->
permissionCallback?.onActivityResult(result)
}
fun launch(
permissionArray: Array<String>,
permissionCallback: ActivityResultCallback<Map<String, Boolean>>?
) {
this.permissionCallback = permissionCallback
permissionLauncher.launch(permissionArray)
}
//endregion
//region intent跳转
private var activityResultCallback: ActivityResultCallback<ActivityResult>? = null
private val intentLauncher =
activityResultCaller.registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { activityResult: ActivityResult ->
activityResultCallback?.onActivityResult(activityResult)
}
/**
* it.resultCode == Activity.RESULT_OK
*/
fun launch(
intent: Intent,
activityResultCallback: ActivityResultCallback<ActivityResult>? = null
) {
this.activityResultCallback = activityResultCallback
intentLauncher.launch(intent)
}
//endregion
}
\ No newline at end of file
...@@ -14,8 +14,14 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() { ...@@ -14,8 +14,14 @@ abstract class BaseActivity<T : ViewBinding> : AppCompatActivity() {
protected open val isLightMode: Boolean? = null protected open val isLightMode: Boolean? = null
lateinit var launcher: ActivityLauncher
//是否跳转过系统选项页面
protected var haveJumpPermission: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
launcher = ActivityLauncher(this)
setContentView(binding.root) setContentView(binding.root)
isLightMode?.let { isLightMode?.let {
BarUtils.setStatusBarLightMode(this, it) BarUtils.setStatusBarLightMode(this, it)
......
package com.base.superpdfreader.helps
import android.os.Environment
import android.util.Log
import androidx.lifecycle.LifecycleCoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
import java.util.LinkedList
object FileHelp {
private val TAG = "FileHelp"
fun loadDocument(
filter: (file: File) -> Boolean,
eachFile: (eachFiles: List<File>) -> Unit
) {
var firstSend = true
val resultList = arrayListOf<File>()
val root = Environment.getExternalStorageDirectory()
loadFileByFilter(root, filter = filter, onDo = {
Log.e(TAG, "file=$it")
if (firstSend) {
//第一次发送
firstSend = false
eachFile.invoke(listOf(it))
} else {
//间隔发送
resultList.add(it)
if (resultList.size == 5) {
val mainList = arrayListOf<File>()
mainList.addAll(mainList)
//这里onDo切换到main主协程,避免IO协程里的数据和main协程里的数据共用同一对象
eachFile.invoke(mainList)
resultList.clear()
}
}
})
eachFile.invoke(resultList)
}
fun loadFileByFilter(
folder: File,
filter: (file: File) -> Boolean,
onDo: ((file: File) -> Unit)?
) {
//添加第一层文件到链表
val linkList = LinkedList<File>()
val fileList = folder.listFiles()
fileList?.forEach {
if (it.isDirectory) {
linkList.add(it)
} else {
onDo?.invoke(it)
}
}
//链表取文件
var tempFile: File
while (!linkList.isEmpty()) {
tempFile = linkList.removeFirst()
val tempFileList = tempFile.listFiles()
tempFileList?.forEach {
if (it.isDirectory) {
linkList.add(it)
} else {
if (filter(it)) {
onDo?.invoke(it)
}
}
}
}
}
}
\ No newline at end of file
package com.base.superpdfreader.helps
import android.view.View
import org.json.JSONObject
import java.text.SimpleDateFormat
import java.util.Locale
object KotlinExt {
private val aesMap = mutableMapOf<Int, String>()
fun View.setTrackedOnClickListener(action: (view: View) -> Unit) {
setOnClickListener {
action(this)
var view: View? = this
while (view != null) {
try {
val obj = JSONObject()
obj.put("view_id", resources.getResourceEntryName(view.id))
// EventHelper.event("click_id", ext = obj)
break
} catch (_: Exception) {
view = view.parent as? View
}
}
}
}
fun Number.toFormatSize(count: Int = 1): String {
var suffix = "B"
var fSize = this.toDouble()
if (fSize > 1024) {
suffix = "KB"
fSize /= 1024.0
}
if (fSize > 1024) {
suffix = "MB"
fSize /= 1024.0
}
if (fSize > 1024) {
suffix = "GB"
fSize /= 1024.0
}
return String.format("%.${count}f %s", fSize, suffix)
}
}
\ No newline at end of file
package com.base.superpdfreader.helps
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.Settings
import com.blankj.utilcode.constant.PermissionConstants
import com.blankj.utilcode.util.PermissionUtils
object PermissionHelp {
fun checkStorePermission(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Environment.isExternalStorageManager()
} else {
PermissionUtils.isGranted(PermissionConstants.STORAGE)
}
}
fun Context.requestStorePermission(
launcher: ActivityLauncher,
jumpAction: (() -> Unit)? = null,
result: (flag: Boolean) -> Unit
) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val intent =
Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.addCategory("android.intent.category.DEFAULT")
intent.data = Uri.parse("package:${packageName}")
jumpAction?.invoke()
launcher.launch(intent) {
result.invoke(checkStorePermission())
}
} else {
PermissionUtils.permissionGroup(PermissionConstants.STORAGE).callback { isAllGranted, _, _, _ ->
result.invoke(isAllGranted)
}
}
}
}
\ No newline at end of file
package com.base.superpdfreader.view
import android.content.Context
import android.view.LayoutInflater
import com.base.superpdfreader.R
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_PPT
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_WORD
import com.google.android.material.bottomsheet.BottomSheetDialog
object DocumentDetailDialog {
fun Context.showDocumentDetailDialog(UI_MODE: String, bean: DocumentBean) {
val dialog = BottomSheetDialog(this)
val binding = DialogDocumentDetailBinding.inflate(LayoutInflater.from(this))
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(true)
dialog.show()
binding.tvName.text = bean.name
binding.tvInfo.text = "Last modified: ${bean.info(true)}"
when (UI_MODE) {
DocumentListFragment.MODE_DPF -> {
binding.ivDocument.setImageResource(R.mipmap.pdf)
binding.ivOpen.setImageResource(R.mipmap.openfileh)
binding.ivEmail.setImageResource(R.mipmap.emailh)
binding.ivShowCopy.setImageResource(R.mipmap.shareh)
binding.ivCopy.setImageResource(R.mipmap.copyh)
binding.ivRename.setImageResource(R.mipmap.renameh)
binding.ivDelete.setImageResource(R.mipmap.deleteh)
}
MODE_WORD->{
binding.ivDocument.setImageResource(R.mipmap.doc)
binding.ivOpen.setImageResource(R.mipmap.openfilel)
binding.ivEmail.setImageResource(R.mipmap.emaill)
binding.ivShowCopy.setImageResource(R.mipmap.sharel)
binding.ivCopy.setImageResource(R.mipmap.copyl)
binding.ivRename.setImageResource(R.mipmap.renamel)
binding.ivDelete.setImageResource(R.mipmap.deletel)
}
MODE_PPT->{
binding.ivDocument.setImageResource(R.mipmap.ppt)
binding.ivOpen.setImageResource(R.mipmap.openfileh)
binding.ivEmail.setImageResource(R.mipmap.emailh)
binding.ivShowCopy.setImageResource(R.mipmap.shareh)
binding.ivCopy.setImageResource(R.mipmap.copyh)
binding.ivRename.setImageResource(R.mipmap.renameh)
binding.ivDelete.setImageResource(R.mipmap.deleteh)
}
MODE_EXCEL->{
binding.ivDocument.setImageResource(R.mipmap.xls)
binding.ivOpen.setImageResource(R.mipmap.openfilelv)
binding.ivEmail.setImageResource(R.mipmap.emaillv)
binding.ivShowCopy.setImageResource(R.mipmap.sharelv)
binding.ivCopy.setImageResource(R.mipmap.copylv)
binding.ivRename.setImageResource(R.mipmap.renamelv)
binding.ivDelete.setImageResource(R.mipmap.deletelv)
}
}
}
}
\ No newline at end of file
package com.base.superpdfreader.view
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
object XmlEx {
fun Int.inflate(parent: ViewGroup, attachToRoot: Boolean = false): View {
return LayoutInflater.from(parent.context).inflate(this, parent, attachToRoot)
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_excel" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_pdf" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_ppt" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_word" />
<corners android:radius="10dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.noober.background.view.BLLinearLayout 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="match_parent"
android:orientation="vertical"
app:bl_corners_topLeftRadius="10dp"
app:bl_corners_topRightRadius="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="24dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_document"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="37dp"
android:minHeight="37dp"
tools:ignore="ContentDescription"
tools:src="@mipmap/pdf" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="All Document.pdf" />
<TextView
android:id="@+id/tv_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#999999"
android:textSize="12sp"
tools:text="Last modified: 05-05-2024 | 82.08 KB" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_marginTop="30dp"
android:id="@+id/ll_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/iv_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Open File"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/iv_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Email"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_share_copy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/iv_show_copy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Share a Copy"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_copy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/iv_copy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Copy To"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_rename"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/iv_rename"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Rename"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<LinearLayout
android:layout_marginBottom="40dp"
android:id="@+id/ll_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/iv_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:minWidth="27dp"
android:minHeight="27dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:text="Delete"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
</com.noober.background.view.BLLinearLayout>
\ No newline at end of file
...@@ -12,11 +12,18 @@ ...@@ -12,11 +12,18 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv" android:id="@+id/rv"
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" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<LinearLayout <LinearLayout
android:id="@+id/ll_empty" android:id="@+id/ll_empty"
...@@ -56,6 +63,7 @@ ...@@ -56,6 +63,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables"> tools:ignore="UseCompoundDrawables">
<ImageView <ImageView
...@@ -75,19 +83,18 @@ ...@@ -75,19 +83,18 @@
android:text="To read and edit your files, please allowSuper PDF Reader to ac" android:text="To read and edit your files, please allowSuper PDF Reader to ac"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
<com.noober.background.view.BLTextView <TextView
android:id="@+id/tv_allow" android:id="@+id/tv_allow"
android:layout_width="280dp" android:layout_width="280dp"
android:layout_height="44dp" android:layout_height="44dp"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:background="@drawable/bg_allow_pdf"
android:gravity="center" android:gravity="center"
android:text="Allow" android:text="Allow"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="17sp" android:textSize="17sp"
android:textStyle="bold" android:textStyle="bold"
app:bl_corners_radius="10dp"
app:bl_solid_color="#FF3835"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
</LinearLayout> </LinearLayout>
......
...@@ -65,8 +65,8 @@ ...@@ -65,8 +65,8 @@
android:layout_gravity="center" android:layout_gravity="center"
android:src="@mipmap/genduo" android:src="@mipmap/genduo"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>
......
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
android:textSize="15sp" android:textSize="15sp"
app:bl_corners_radius="15dp" app:bl_corners_radius="15dp"
app:bl_selected_solid_color="@color/white" app:bl_selected_solid_color="@color/white"
app:bl_selected_textColor="#FD3835"
app:bl_unSelected_solid_color="@android:color/transparent" app:bl_unSelected_solid_color="@android:color/transparent"
app:bl_unSelected_textColor="@color/white"
tools:text="PDF" /> tools:text="PDF" />
</LinearLayout> </LinearLayout>
\ 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