Commit 41821fcb authored by wanglei's avatar wanglei

...ui

parent 27a61480
...@@ -22,11 +22,11 @@ class PrivacySpaceActivity : BaseActivity<ActivityPrivacySpaceBinding>() { ...@@ -22,11 +22,11 @@ class PrivacySpaceActivity : BaseActivity<ActivityPrivacySpaceBinding>() {
ActivityPrivacySpaceBinding.inflate(layoutInflater) ActivityPrivacySpaceBinding.inflate(layoutInflater)
} }
private val photosFragment: PrivacyPageFragment by lazy { private val photosFragment: PrivacyPageFragment by lazy {
PrivacyPageFragment() PrivacyPageFragment("Photos")
} }
private val videosFragment: PrivacyPageFragment by lazy { private val videosFragment: PrivacyPageFragment by lazy {
PrivacyPageFragment() PrivacyPageFragment("Videos")
} }
private val fragments by lazy { private val fragments by lazy {
mutableListOf(photosFragment, videosFragment) mutableListOf(photosFragment, videosFragment)
......
package com.base.datarecovery.adapter
import android.annotation.SuppressLint
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.datarecovery.R
import com.base.datarecovery.databinding.ItemMediaGridBinding
import com.base.datarecovery.view.XmlEx.inflate
import com.bumptech.glide.Glide
class FileGridAdapter : RecyclerView.Adapter<FileGridAdapter.FFF>() {
private val beanList = arrayListOf<String>()
inner class FFF(view: View) : ViewHolder(view)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FFF {
return FFF(R.layout.item_media_grid.inflate(parent))
}
override fun getItemCount(): Int {
return beanList.size
}
override fun onBindViewHolder(holder: FFF, position: Int) {
val binding = ItemMediaGridBinding.bind(holder.itemView)
val context = holder.itemView.context
Glide.with(context).load(beanList[position]).centerCrop().into(binding.iv)
}
@SuppressLint("NotifyDataSetChanged")
fun setData(list: List<String>) {
beanList.clear()
beanList.addAll(list)
notifyDataSetChanged()
}
}
\ No newline at end of file
package com.base.datarecovery.fragment package com.base.datarecovery.fragment
import android.view.View
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.adapter.FileGridAdapter
import com.base.datarecovery.databinding.FragmentPrivacyPageBinding import com.base.datarecovery.databinding.FragmentPrivacyPageBinding
import com.base.datarecovery.help.BaseFragment import com.base.datarecovery.help.BaseFragment
import com.base.datarecovery.help.FileHelp.loadFileByFilter
import com.base.datarecovery.view.DialogViews.showImageImportDialog
import java.io.File
class PrivacyPageFragment : BaseFragment<FragmentPrivacyPageBinding>() { class PrivacyPageFragment(
val type: String
) : BaseFragment<FragmentPrivacyPageBinding>() {
private val TAG = "PrivacyPageFragment"
override val binding: FragmentPrivacyPageBinding by lazy { override val binding: FragmentPrivacyPageBinding by lazy {
FragmentPrivacyPageBinding.inflate(layoutInflater) FragmentPrivacyPageBinding.inflate(layoutInflater)
} }
private lateinit var adapter: FileGridAdapter
override fun setView() { override fun setView() {
adapter = FileGridAdapter()
binding.rv.adapter = adapter
initData()
} }
override fun setListener() { override fun setListener() {
arrayOf(binding.ivAdd, binding.ivAddEmpty).forEach {
it.setOnClickListener {
requireContext().showImageImportDialog()
}
}
} }
private fun initData() {
val dir = if (type == "Photos") {
File(requireContext().filesDir, "photos")
} else {
File(requireContext().filesDir, "videos")
}
if (!dir.exists()) {
dir.mkdirs()
}
val list = arrayListOf<String>()
lifecycleScope.loadFileByFilter(folder = dir,
filter = { true },
onDo = { list.add(it.absolutePath) },
onFinish = {
if (list.isNotEmpty()) {
binding.flEmpty.visibility = View.GONE
binding.ivAdd.visibility = View.VISIBLE
binding.tvManager.visibility = View.VISIBLE
adapter.setData(list)
}
})
}
} }
\ No newline at end of file
...@@ -18,10 +18,10 @@ object FileHelp { ...@@ -18,10 +18,10 @@ object FileHelp {
private val TAG = "FileHelp" private val TAG = "FileHelp"
fun CoroutineScope.loadFileByFilter( fun CoroutineScope.loadFileByFilter(
mutableSharedFlow: MutableSharedFlow<String>, mutableSharedFlow: MutableSharedFlow<String>? = null,
folder: File, folder: File,
filter: (file: File) -> Boolean, filter: (file: File) -> Boolean,
onDo: ((file: File) -> Unit)?, onDo: ((file: File) -> Unit)? = null,
onFinish: (() -> Unit)? = null onFinish: (() -> Unit)? = null
) = launch(Dispatchers.IO) { ) = launch(Dispatchers.IO) {
...@@ -37,7 +37,7 @@ object FileHelp { ...@@ -37,7 +37,7 @@ object FileHelp {
if (flag) { if (flag) {
onDo?.invoke(it) onDo?.invoke(it)
} }
mutableSharedFlow.emit(it.absolutePath) mutableSharedFlow?.emit(it.absolutePath)
} }
} }
...@@ -55,7 +55,7 @@ object FileHelp { ...@@ -55,7 +55,7 @@ object FileHelp {
if (flag) { if (flag) {
onDo?.invoke(it) onDo?.invoke(it)
} }
mutableSharedFlow.emit(it.absolutePath) mutableSharedFlow?.emit(it.absolutePath)
} }
} }
} }
......
package com.base.datarecovery.view package com.base.datarecovery.view
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.AlertDialog
import android.app.Dialog import android.app.Dialog
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
import com.base.datarecovery.R import com.base.datarecovery.R
import com.base.datarecovery.databinding.DialogImageTakeBinding
import com.base.datarecovery.databinding.DialogPermissonOpenBinding import com.base.datarecovery.databinding.DialogPermissonOpenBinding
import com.base.datarecovery.databinding.DialogRecoveringBinding import com.base.datarecovery.databinding.DialogRecoveringBinding
import com.base.datarecovery.utils.LogEx import com.base.datarecovery.utils.LogEx
import com.base.datarecovery.view.DialogViews.showRecoveringDialog
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
...@@ -135,4 +139,19 @@ object DialogViews { ...@@ -135,4 +139,19 @@ object DialogViews {
dialog.show() dialog.show()
} }
fun Context.showImageImportDialog() {
val binding = DialogImageTakeBinding.inflate(LayoutInflater.from(this))
val dialog = AlertDialog.Builder(this, R.style.CustomAlertDialogStyle).setView(binding.root).create()
dialog.setContentView(binding.root)
dialog.setCanceledOnTouchOutside(true)
dialog.show()
val params = dialog.window?.attributes
params?.gravity = Gravity.BOTTOM
params?.y = 200
dialog.window?.attributes = params
}
} }
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="20dp" />
<solid android:color="@color/white" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_camera"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="20dp"
android:layout_weight="1"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/take"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="20dp"
android:text="Take photo or video"
android:textColor="#181D2C"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_marginHorizontal="18dp"
android:background="#D4D4D4" />
<LinearLayout
android:id="@+id/ll_import"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="20dp"
android:layout_weight="1"
android:orientation="horizontal"
tools:ignore="UseCompoundDrawables">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:src="@mipmap/importimage"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="20dp"
android:text="Take photo or video"
android:textColor="#181D2C"
android:textSize="17sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout 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" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".fragment.PrivacyPageFragment"> tools:context=".fragment.PrivacyPageFragment">
<!-- TODO: Update blank fragment layout -->
<TextView <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" /> android:layout_marginTop="29dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_manager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="16dp"
android:text="Manage"
android:textColor="#3A9BFF"
android:textSize="18sp"
android:visibility="gone"
tools:ignore="HardcodedText" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="4" />
<FrameLayout
android:id="@+id/fl_empty"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/kongwenjian"
tools:ignore="ContentDescription" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="No Secret Files"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:text="Tap + belows to add photos and videos"
tools:ignore="HardcodedText" />
<ImageView
android:id="@+id/iv_add_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="48dp"
android:layout_marginBottom="60dp"
android:src="@mipmap/tianjia"
tools:ignore="ContentDescription" />
</LinearLayout>
</FrameLayout>
</FrameLayout>
</LinearLayout>
<ImageView
android:id="@+id/iv_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginEnd="24dp"
android:layout_marginBottom="80dp"
android:src="@mipmap/tianjia"
android:visibility="gone"
tools:ignore="ContentDescription" />
</FrameLayout> </FrameLayout>
\ No newline at end of file
<?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="80dp"
android:layout_height="80dp"
android:layout_margin="4dp"
app:cardCornerRadius="5dp"
app:cardElevation="0dp">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
\ No newline at end of file
...@@ -6,4 +6,12 @@ ...@@ -6,4 +6,12 @@
</style> </style>
<style name="Theme.DataRecovery" parent="Base.Theme.DataRecovery" /> <style name="Theme.DataRecovery" parent="Base.Theme.DataRecovery" />
<style name="CustomAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- 设置对话框的背景 -->
<item name="android:windowBackground">@drawable/bg_ffffff_20</item>
<!-- 设置圆角的半径 -->
<item name="android:backgroundDimEnabled">true</item>
</style>
</resources> </resources>
\ 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