Commit 282c9765 authored by wanglei's avatar wanglei

补充代码

parent 484a940f
......@@ -52,4 +52,5 @@ dependencies {
androidTestImplementation(libs.androidx.espresso.core)
implementation(libs.androidx.navigation.fragment.ktx)
implementation(libs.androidx.navigation.ui.ktx)
implementation(libs.glide)
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro
import android.content.Context
import android.os.Environment
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako.Companion.koFileDatako
import com.zxhy.fastfilemanagerpro.kokotools.HelperTraverse
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import java.io.File
import kotlin.reflect.KFunction1
abstract class CommonViewModel : ViewModel() {
fun deleteFiles(files: List<File>, finishAction: () -> Unit) =
viewModelScope.launch(Dispatchers.IO) {
runCatching {
files.forEach {
if (it.exists()) {
it.delete()
}
}
}
finishAction.invoke()
}
fun loadFile(
context: Context,
filter: (file: File) -> Boolean,
onDo: (list: List<KoFileDatako>) -> Unit,
onFinish: (list: List<KoFileDatako>) -> Unit
) {
viewModelScope.launch(Dispatchers.IO) {
val root = Environment.getExternalStorageDirectory()
val resultList = arrayListOf<KoFileDatako>()
var firstSend = false
HelperTraverse.linkedLisTraverseFolder(root) { file ->
if (filter(file)) {
resultList.add(file.koFileDatako(context))
if (resultList.size == 20 && !firstSend) {
onDo.invoke(resultList)
resultList.clear()
firstSend = true
}
}
}
onFinish.invoke(resultList)
}
}
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro
import android.app.Application
import com.bumptech.glide.annotation.GlideModule
@GlideModule
class GlideApp : Application() {
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro.gridfile
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.zxhy.fastfilemanagerpro.R
import com.zxhy.fastfilemanagerpro.databinding.ItemKokoGridFileBinding
import com.zxhy.fastfilemanagerpro.kokoadapter.CommonAdapter
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako.Companion.isImage
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako.Companion.isVideo
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako.Companion.toFile
import com.zxhy.fastfilemanagerpro.kokotools.GlideHelper.loadImageView
import com.zxhy.fastfilemanagerpro.kokotools.XmlEx.inflate
class KoFileGridkoAdapter(
private val allSelect: (flag: Boolean) -> Unit
) : CommonAdapter<KoFileGridkoAdapter.KoFileGridkoViewHolder>() {
inner class KoFileGridkoViewHolder(view: View) : ViewHolder(view) {
val binding = ItemKokoGridFileBinding.bind(view)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): KoFileGridkoViewHolder {
return KoFileGridkoViewHolder(R.layout.item_koko_grid_file.inflate(parent))
}
override fun onBindViewHolder(holder: KoFileGridkoViewHolder, position: Int) {
}
override fun onBindViewHolder(
holder: KoFileGridkoViewHolder,
position: Int,
payloads: MutableList<Any>
) {
val context = holder.binding.root.context
val data = fileList[position]
if (payloads.isEmpty()) {
holder.binding.apply {
ivIcon.loadImageView(context, data.toFile())
if (data.isImage()) {
ivCamera.visibility = View.GONE
}
if (data.isVideo()) {
ivCamera.visibility = View.VISIBLE
}
ivSelector.isSelected = data.isSelect
ivSelector.setOnClickListener {
data.isSelect = !data.isSelect
notifyItemChanged(position, "局部刷新")
allSelect.invoke(fileList.all { it.isSelect })
}
}
} else {
holder.binding.apply {
ivSelector.isSelected = data.isSelect
}
super.onBindViewHolder(holder, position, payloads)
}
}
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro.gridfile
import android.annotation.SuppressLint
import android.content.Context
import android.os.Bundle
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.zxhy.fastfilemanagerpro.R
import com.zxhy.fastfilemanagerpro.databinding.ActivityKoGridFilekoBinding
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako.Companion.toFile
import com.zxhy.fastfilemanagerpro.kokotools.ActivityLauncher
import com.zxhy.fastfilemanagerpro.kokotools.permission.PermissionCheck.storePermissionCheck
import com.zxhy.fastfilemanagerpro.kokotools.permission.StorePermissionEx.requestStoreFollow
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
class KoGridFilekoActivity : AppCompatActivity() {
private lateinit var binding: ActivityKoGridFilekoBinding
private val viewModel: KoGridFilekoViewModel by viewModels()
private lateinit var activityLauncher: ActivityLauncher
private var tittle = ""
private lateinit var adapter: KoFileGridkoAdapter
private lateinit var context: Context
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
context = this
activityLauncher = ActivityLauncher(this)
binding = ActivityKoGridFilekoBinding.inflate(layoutInflater)
setContentView(binding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
......@@ -20,6 +42,119 @@ class KoGridFilekoActivity : AppCompatActivity() {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
tittle = intent.extras?.getString("Tittle") ?: ""
binding.tvTittle.text = tittle
adapter = KoFileGridkoAdapter {
binding.ivAllSelector.isSelected = it
enableDelete()
}
binding.rv.adapter=adapter
binding.ivAllSelector.setOnClickListener {
it.isSelected = !it.isSelected
adapter.toggleSelect(it.isSelected)
enableDelete()
}
binding.ivBack.setOnClickListener {
finish()
}
if (storePermissionCheck()) {
showPermissionSet(false)
loadListFile()
} else {
showPermissionSet(true)
}
}
//region
fun showOperationResult() = lifecycleScope.launch(Dispatchers.Main) {
binding.llResult.visibility = View.VISIBLE
delay(500)
binding.llResult.visibility = View.GONE
}
fun showPermissionSet(show: Boolean) {
if (show) {
binding.clContent.visibility = View.GONE
binding.clPermissionSet.visibility = View.VISIBLE
binding.tvSet.setOnClickListener {
requestStoreFollow(activityLauncher, disAgreeAction = {
showPermissionSet(true)
}, agreeAction = {
showPermissionSet(false)
loadListFile()
})
}
} else {
binding.clContent.visibility = View.VISIBLE
binding.clPermissionSet.visibility = View.GONE
}
}
fun enableDelete() {
val enable = adapter.getSelectData().isNotEmpty()
binding.tvDelete.isEnabled = enable
if (enable) {
binding.tvDelete.background =
ContextCompat.getDrawable(context, R.drawable.bg_ffff6767_corners)
binding.tvDelete.setTextColor(ContextCompat.getColor(context, R.color.white))
binding.tvDelete.setOnClickListener {
deleteFiles()
}
} else {
binding.tvDelete.background =
ContextCompat.getDrawable(context, R.drawable.bg_fff4f4f4_corners)
binding.tvDelete.setTextColor(ContextCompat.getColor(context, R.color.color_999999))
binding.tvDelete.setOnClickListener {}
}
}
private fun deleteFiles() {
val selectData = adapter.getSelectData()
val files = selectData.map { it.toFile() }
viewModel.deleteFiles(files) {
lifecycleScope.launch(Dispatchers.Main) {
showOperationResult()
adapter.removeData(selectData)
showEmptyList()
enableDelete()
}
}
}
private fun showEmptyList() {
if (adapter.itemCount == 0) {
binding.clEmpty.visibility = View.VISIBLE
binding.clShowContent.visibility = View.GONE
binding.llAll.visibility = View.GONE
} else {
binding.clEmpty.visibility = View.GONE
binding.clShowContent.visibility = View.VISIBLE
binding.llAll.visibility = View.VISIBLE
}
}
private fun onDoList(list: List<KoFileDatako>) = lifecycleScope.launch(Dispatchers.Main) {
adapter.setData(list)
}
@SuppressLint("SetTextI18n")
private fun onFinishList(list: List<KoFileDatako>) = lifecycleScope.launch(Dispatchers.Main) {
adapter.setData(list)
showEmptyList()
enableDelete()
binding.tvItems.text = "total:${adapter.itemCount} items"
}
//endregion
private fun loadListFile() {
when (tittle) {
IMAGE_FILE -> viewModel.loadImageFile(context, ::onDoList, ::onFinishList)
VIDEO_FILE -> viewModel.loadVideoFile(context, ::onDoList, ::onFinishList)
}
}
companion object {
......
package com.zxhy.fastfilemanagerpro.gridfile
import android.content.Context
import com.zxhy.fastfilemanagerpro.CommonViewModel
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako
import java.io.File
class KoGridFilekoViewModel : CommonViewModel() {
fun isImageFilter(file: File): Boolean {
return file.name.contains(".jpg") or
file.name.contains(".png") or
file.name.contains(".gif")
}
fun isVideoFilter(file: File): Boolean {
return file.name.contains(".mp4") or
file.name.contains(".avi") or
file.name.contains(".flv") or
file.name.contains(".rmvb") or
file.name.contains(".mkv")
}
fun loadImageFile(
context: Context,
onDo: (list: List<KoFileDatako>) -> Unit,
onFinish: (list: List<KoFileDatako>) -> Unit
) {
loadFile(context, filter = (::isImageFilter),
onDo = { list ->
onDo.invoke(list)
},
onFinish = { list ->
onFinish.invoke(list)
}
)
}
fun loadVideoFile(
context: Context,
onDo: (list: List<KoFileDatako>) -> Unit,
onFinish: (list: List<KoFileDatako>) -> Unit
) {
loadFile(context, filter = (::isVideoFilter),
onDo = { list ->
onDo.invoke(list)
},
onFinish = { list ->
onFinish.invoke(list)
}
)
}
}
\ No newline at end of file
......@@ -14,6 +14,19 @@ data class KoFileDatako(
val sizeF: String = ""
) {
companion object {
fun KoFileDatako.isImage(): Boolean {
return name.contains(".jpg") or name.contains(".png") or name.contains(".gif")
}
fun KoFileDatako.isVideo(): Boolean {
return name.contains(".mp4") or
name.contains(".avi") or
name.contains(".flv") or
name.contains(".rmvb") or
name.contains(".mkv")
}
fun KoFileDatako.toFile(): File {
return File(path)
}
......
......@@ -148,7 +148,7 @@ class KoListFilekoActivity : AppCompatActivity() {
adapter.setData(list)
showEmptyList()
enableDelete()
binding.tvTittle.text = "total:${adapter.itemCount} items"
binding.tvItems.text = "total:${adapter.itemCount} items"
}
......
......@@ -4,6 +4,7 @@ import android.content.Context
import android.os.Environment
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.zxhy.fastfilemanagerpro.CommonViewModel
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako
import com.zxhy.fastfilemanagerpro.kokodata.KoFileDatako.Companion.koFileDatako
import com.zxhy.fastfilemanagerpro.kokotools.HelperTraverse.linkedLisTraverseFolder
......@@ -13,7 +14,7 @@ import kotlinx.coroutines.launch
import java.io.File
import kotlin.reflect.KFunction1
class KoListFilekoViewModel : ViewModel() {
class KoListFilekoViewModel : CommonViewModel() {
fun isEmptyFilter(file: File): Boolean {
......@@ -25,23 +26,33 @@ class KoListFilekoViewModel : ViewModel() {
}
fun isAudioFilter(file: File): Boolean {
return file.length() >= 10 * 1024 * 1024L
return file.name.contains(".mp3") or
file.name.contains(".aac") or
file.name.contains(".ogg") or
file.name.contains(".aac")
}
fun isLogFilter(file: File): Boolean {
return file.length() >= 10 * 1024 * 1024L
return file.name.contains("log") or file.name.contains("Log")
}
fun isZipFilter(file: File): Boolean {
return file.length() >= 10 * 1024 * 1024L
return file.name.contains(".zip") or file.name.contains(".7z")
}
fun isApkFilter(file: File): Boolean {
return file.length() >= 10 * 1024 * 1024L
return file.name.contains(".apk")
}
fun isDocumentsFilter(file: File): Boolean {
return file.length() >= 10 * 1024 * 1024L
return file.name.contains(".doc") or
file.name.contains(".docx") or
file.name.contains(".ppt") or
file.name.contains(".pptx") or
file.name.contains(".xls") or
file.name.contains(".xlsx") or
file.name.contains(".txt") or
file.name.contains(".pdf")
}
fun loadEmptyFile(
......@@ -150,45 +161,4 @@ class KoListFilekoViewModel : ViewModel() {
)
}
private fun loadFile(
context: Context,
filter: (file: File) -> Boolean,
onDo: (list: List<KoFileDatako>) -> Unit,
onFinish: (list: List<KoFileDatako>) -> Unit
) {
viewModelScope.launch(Dispatchers.IO) {
val root = Environment.getExternalStorageDirectory()
val resultList = arrayListOf<KoFileDatako>()
var firstSend = false
linkedLisTraverseFolder(root) { file ->
if (filter(file)) {
resultList.add(file.koFileDatako(context))
if (resultList.size == 20 && !firstSend) {
onDo.invoke(resultList)
resultList.clear()
firstSend = true
}
}
}
onFinish.invoke(resultList)
}
}
fun deleteFiles(files: List<File>, finishAction: () -> Unit) =
viewModelScope.launch(Dispatchers.IO) {
runCatching {
files.forEach {
if (it.exists()) {
it.delete()
}
}
}
finishAction.invoke()
}
}
\ No newline at end of file
......@@ -5,8 +5,16 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import com.zxhy.fastfilemanagerpro.R
import com.zxhy.fastfilemanagerpro.databinding.FragmentKoManagerkoBinding
import com.zxhy.fastfilemanagerpro.gridfile.KoGridFilekoActivity.Companion.IMAGE_FILE
import com.zxhy.fastfilemanagerpro.gridfile.KoGridFilekoActivity.Companion.VIDEO_FILE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.APK_FILE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.AUDIO_FILE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.DOCUMENTS_FILE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.LOG_FILE
import com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity.Companion.ZIP_FILE
class KoManagerkoFragment : Fragment() {
......@@ -27,10 +35,48 @@ class KoManagerkoFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
companion object{
binding.llImage.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", IMAGE_FILE)
}
findNavController().navigate(R.id.koGridFilekoActivity, bundle)
}
binding.llVideo.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", VIDEO_FILE)
}
findNavController().navigate(R.id.koGridFilekoActivity, bundle)
}
binding.llAudio.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", AUDIO_FILE)
}
findNavController().navigate(R.id.koListFilekoActivity, bundle)
}
binding.llLogFile.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", LOG_FILE)
}
findNavController().navigate(R.id.koListFilekoActivity, bundle)
}
binding.llZip.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", ZIP_FILE)
}
findNavController().navigate(R.id.koListFilekoActivity, bundle)
}
binding.llApk.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", APK_FILE)
}
findNavController().navigate(R.id.koListFilekoActivity, bundle)
}
binding.llDocuments.setOnClickListener {
val bundle = Bundle().apply {
putString("Tittle", DOCUMENTS_FILE)
}
findNavController().navigate(R.id.koListFilekoActivity, bundle)
}
}
}
\ No newline at end of file
package com.zxhy.fastfilemanagerpro.kokotools
import android.content.Context
import android.widget.ImageView
import com.bumptech.glide.Glide
import java.io.File
object GlideHelper {
fun ImageView.loadImageView(context: Context, file: File) {
Glide.with(context).load(file).centerCrop().into(this)
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/dda_026336" android:state_selected="false" />
<item android:drawable="@mipmap/d_998989" android:state_selected="true" />
</selector>
\ No newline at end of file
......@@ -22,6 +22,7 @@
tools:ignore="UseCompoundDrawables">
<ImageView
android:id="@+id/iv_back"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
......@@ -82,8 +83,7 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_show_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_items"
......@@ -103,6 +103,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/tv_items"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_items"
......@@ -118,6 +119,7 @@
tools:ignore="HardcodedText" />
<ImageView
android:id="@+id/iv_all_selector"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
......@@ -127,14 +129,16 @@
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:layout_width="0dp"
android:id="@+id/rv"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginVertical="8dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintBottom_toTopOf="@id/tv_delete"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_items" />
app:layout_constraintTop_toBottomOf="@id/tv_items"
app:spanCount="4" />
<TextView
android:id="@+id/tv_delete"
......@@ -151,6 +155,41 @@
app:layout_constraintRight_toRightOf="parent"
tools:ignore="HardcodedText" />
<LinearLayout
android:id="@+id/ll_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_000000_corners"
android:orientation="horizontal"
android:paddingVertical="8dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="8dp"
android:src="@mipmap/dd_899900"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tv_operation_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:singleLine="true"
android:text="Delete successful!"
android:textColor="#FFFFFF"
android:textSize="14sp"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
......@@ -188,6 +227,7 @@
app:layout_constraintTop_toBottomOf="@id/iv_lock" />
<TextView
android:id="@+id/tv_set"
android:layout_width="270dp"
android:layout_height="40dp"
android:layout_marginTop="20dp"
......
......@@ -64,6 +64,7 @@
app:layout_constraintTop_toBottomOf="@id/tv_Folder">
<LinearLayout
android:id="@+id/ll_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
......@@ -89,6 +90,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/ll_video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
......@@ -114,6 +116,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/ll_audio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
......@@ -150,6 +153,7 @@
app:layout_constraintTop_toBottomOf="@id/fl_1">
<LinearLayout
android:id="@+id/ll_log_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
......@@ -175,6 +179,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/ll_zip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
......@@ -200,6 +205,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/ll_apk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
......@@ -230,18 +236,18 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginTop="20dp"
android:layout_marginStart="-10dp"
android:layout_marginTop="20dp"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="@id/fl_2"
app:layout_constraintTop_toBottomOf="@id/fl_2"
tools:ignore="UseCompoundDrawables">
<ImageView
android:src="@mipmap/qwe_889989"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_gravity="center_horizontal"
android:src="@mipmap/qwe_889989"
tools:ignore="ContentDescription" />
<TextView
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 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="70dp"
android:layout_margin="8dp"
android:layout_height="70dp"
app:cardCornerRadius="8dp">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_camera"
android:layout_width="20dp"
android:layout_height="16dp"
android:layout_gravity="center"
android:src="@mipmap/cc_87897"
tools:ignore="ContentDescription" />
<ImageView
android:id="@+id/iv_selector"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_gravity="end|bottom"
android:layout_margin="4dp"
android:src="@drawable/bg_grid_file_selector"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
\ No newline at end of file
......@@ -13,6 +13,9 @@
<action
android:id="@+id/action_koManagerkoFragment_to_koHomekoFragment"
app:destination="@id/koHomekoFragment" />
<action
android:id="@+id/action_koManagerkoFragment_to_koGridFilekoActivity"
app:destination="@id/koGridFilekoActivity" />
</fragment>
<fragment
android:id="@+id/koHomekoFragment"
......@@ -31,4 +34,9 @@
android:name="com.zxhy.fastfilemanagerpro.kokolistfile.KoListFilekoActivity"
android:label="activity_ko_list_fileko"
tools:layout="@layout/activity_ko_list_fileko" />
<activity
android:id="@+id/koGridFilekoActivity"
android:name="com.zxhy.fastfilemanagerpro.gridfile.KoGridFilekoActivity"
android:label="activity_ko_grid_fileko"
tools:layout="@layout/activity_ko_grid_fileko" />
</navigation>
\ No newline at end of file
......@@ -13,6 +13,7 @@ activityKtx = "1.6.2"
fragmentKtx = "1.6.2"
navigationFragmentKtx = "2.7.7"
navigationUiKtx = "2.7.7"
glide = "4.16.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
......@@ -27,6 +28,7 @@ androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", ve
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigationFragmentKtx" }
androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" }
glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
......
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