diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 3509c3c..d4fc0b9 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/data/CollectViewModel.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/data/CollectViewModel.kt
new file mode 100644
index 0000000..c21ddd5
--- /dev/null
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/data/CollectViewModel.kt
@@ -0,0 +1,30 @@
+package com.timber.soft.mylivewallpaper.data
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import kotlinx.coroutines.launch
+
+class CollectViewModel : ViewModel() {
+
+ private var wallpaperDataList: MutableLiveData> =
+ MutableLiveData>()
+
+ init {
+ viewModelScope.launch {
+ wallpaperDataList.value = AppDatabase.dataBase.getWallpaperDao().getCollectData()
+ }
+ }
+
+ fun update() {
+ viewModelScope.launch {
+ wallpaperDataList.value = AppDatabase.dataBase.getWallpaperDao().getCollectData()
+ }
+ }
+
+ fun getList() = wallpaperDataList
+
+ override fun onCleared() {
+ super.onCleared()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt
index 98b5ae8..dec3b4d 100644
--- a/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperDao.kt
@@ -3,18 +3,23 @@ package com.timber.soft.mylivewallpaper.data
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
+import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
@Dao
interface WallpaperDao {
+
+ @Query("delete from t_wallpaper")
+ suspend fun deleteAllData()
+
@Query("select * from t_wallpaper where isCollect = :collect ")
suspend fun getCollectData(collect: Boolean = true): List
@Update
suspend fun updateData(wallpaperData: WallpaperData)
- @Insert
+ @Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertData(wallpaperData: WallpaperData)
@Delete
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperData.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperData.kt
index c3ffa61..018e1e6 100644
--- a/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperData.kt
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/data/WallpaperData.kt
@@ -12,7 +12,7 @@ data class WallpaperData(
val title: String,
@PrimaryKey(autoGenerate = true)
- val id: Int = 0,
+ var id: Int = 0,
val classId: String? = null,
var isCollect: Boolean = false,
var downloadUrl: String? = null
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt
index 8208084..2683974 100644
--- a/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/tools/AppFinalString.kt
@@ -6,5 +6,6 @@ object AppFinalString {
const val DB_VERSION = 1
const val TABLE_NAME_WALLPAPER = "t_wallpaper"
const val KEY_EXTRA = "KEY_EXTRA"
+ const val ACTION_DATABASE_UPDATED = "ACTION_DATABASE_UPDATED"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/MainActivity.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/MainActivity.kt
index 3e0fdc7..c1021d1 100644
--- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/MainActivity.kt
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/activity/MainActivity.kt
@@ -34,6 +34,7 @@ class MainActivity :
binding.mainViewpager.run {
adapter = MainViewPagerAdapter(viewPagerFragments, supportFragmentManager)
addOnPageChangeListener(this@MainActivity)
+ setOffscreenPageLimit(0)
}
setTabSelect(0)
}
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/CollectAdapter.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/CollectAdapter.kt
new file mode 100644
index 0000000..1d77209
--- /dev/null
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/adapter/CollectAdapter.kt
@@ -0,0 +1,63 @@
+package com.timber.soft.mylivewallpaper.ui.adapter
+
+import android.content.Context
+import android.content.Intent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.cardview.widget.CardView
+import androidx.recyclerview.widget.RecyclerView
+import com.bumptech.glide.Glide
+import com.bumptech.glide.load.engine.DiskCacheStrategy
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
+import com.bumptech.glide.request.RequestOptions
+import com.timber.soft.mylivewallpaper.R
+import com.timber.soft.mylivewallpaper.data.WallpaperData
+import com.timber.soft.mylivewallpaper.tools.AppFinalString
+import com.timber.soft.mylivewallpaper.ui.activity.DetailActivity
+
+class CollectAdapter(
+ private val context: Context,
+) : RecyclerView.Adapter() {
+
+ private var wallpaperDataList: List = emptyList()
+
+ fun updateData(dataList: List) {
+ wallpaperDataList = dataList
+ notifyDataSetChanged()
+ }
+
+ inner class CollectItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val wallpaperItem = itemView.findViewById(R.id.item_home_img)
+ val rootView = itemView.findViewById(R.id.item_home_root)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CollectItemViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.item_home_wallpaper, parent,false)
+ return CollectItemViewHolder(view)
+ }
+
+ override fun getItemCount(): Int {
+ return wallpaperDataList.size
+ }
+
+ override fun onBindViewHolder(holder: CollectItemViewHolder, position: Int) {
+ wallpaperDataList[position].run {
+ try {
+ Glide.with(context).load(thumbnail)
+ .diskCacheStrategy(DiskCacheStrategy.ALL)
+ .transition(DrawableTransitionOptions.withCrossFade()).apply(
+ RequestOptions().placeholder(R.drawable.img_loading)
+ ).error(R.drawable.img_loading_err).into(holder.wallpaperItem)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ holder.rootView.setOnClickListener() {
+ context.startActivity(Intent(context, DetailActivity::class.java).apply {
+ putExtra(AppFinalString.KEY_EXTRA, this@run)
+ })
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/CollectFragment.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/CollectFragment.kt
index 63b395f..19e7389 100644
--- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/CollectFragment.kt
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/CollectFragment.kt
@@ -1,12 +1,75 @@
package com.timber.soft.mylivewallpaper.ui.fragment
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
import android.view.View
+import android.view.ViewGroup
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import com.timber.soft.mylivewallpaper.data.CollectViewModel
import com.timber.soft.mylivewallpaper.databinding.FragmentCollectBinding
+import com.timber.soft.mylivewallpaper.tools.AppFinalString
+import com.timber.soft.mylivewallpaper.ui.adapter.CollectAdapter
class CollectFragment : BaseFragment() {
private lateinit var binding: FragmentCollectBinding
+ private lateinit var collectAdapter: CollectAdapter
+ private lateinit var collectViewModel: CollectViewModel
override fun getFragmentContentView(): View {
binding = FragmentCollectBinding.inflate(layoutInflater)
return binding.root
}
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val filter = IntentFilter(AppFinalString.ACTION_DATABASE_UPDATED)
+ LocalBroadcastManager.getInstance(requireContext())
+ .registerReceiver(mDatabaseUpdatedReceiver, filter)
+ }
+
+ override fun initViews() {
+ super.initViews()
+ collectAdapter = CollectAdapter(requireContext())
+ binding.recyclerCollect.run {
+ adapter = collectAdapter
+ layoutManager = StaggeredGridLayoutManager(2, LinearLayoutManager.VERTICAL)
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ collectViewModel.update()
+ }
+
+ override fun onActivityCreated(savedInstanceState: Bundle?) {
+ super.onActivityCreated(savedInstanceState)
+ collectViewModel = ViewModelProvider(this)[CollectViewModel::class.java]
+ collectViewModel.getList().observe(viewLifecycleOwner, Observer {
+ collectAdapter.updateData(it)
+ })
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ LocalBroadcastManager.getInstance(requireContext())
+ .unregisterReceiver(mDatabaseUpdatedReceiver)
+ }
+
+ private val mDatabaseUpdatedReceiver = object : BroadcastReceiver() {
+ override fun onReceive(context: Context?, intent: Intent?) {
+ if (intent != null) {
+ if (intent.action.equals(AppFinalString.ACTION_DATABASE_UPDATED)) {
+ collectViewModel.update()
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt
index 4fada93..e632bc4 100644
--- a/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt
+++ b/app/src/main/java/com/timber/soft/mylivewallpaper/ui/fragment/SettingFragment.kt
@@ -7,8 +7,15 @@ import android.net.Uri
import android.os.Build
import android.util.Log
import android.view.View
+import android.widget.Toast
+import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.timber.soft.mylivewallpaper.R
+import com.timber.soft.mylivewallpaper.data.AppDatabase
import com.timber.soft.mylivewallpaper.databinding.FragmentSettingBinding
+import com.timber.soft.mylivewallpaper.tools.AppFinalString
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
class SettingFragment : BaseFragment() {
private lateinit var binding: FragmentSettingBinding
@@ -19,17 +26,11 @@ class SettingFragment : BaseFragment() {
override fun initViews() {
super.initViews()
- binding.setLayoutRating.setOnClickListener {
- RateFragment.newInstance(0, 0).show(childFragmentManager, "")
- }
- binding.setLayoutShare.setOnClickListener {
- val url = getString(R.string.set_shop_link) + (activity?.packageName ?: "")
- val intent = Intent(Intent.ACTION_SEND)
- intent.setType("text/plain")
- intent.putExtra(Intent.EXTRA_TEXT, url)
- startActivity(intent)
- }
+ initButton()
+ initInfoCard()
+ }
+ private fun initInfoCard() {
val pInfo: PackageInfo
try {
pInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
@@ -45,4 +46,34 @@ class SettingFragment : BaseFragment() {
binding.setAppVersion.text = "Version: " + ""
}
}
+
+ private fun initButton() {
+ binding.setLayoutRating.setOnClickListener {
+ RateFragment.newInstance(0, 0).show(childFragmentManager, "")
+ }
+
+ binding.setLayoutShare.setOnClickListener {
+ val url = getString(R.string.set_shop_link) + (activity?.packageName ?: "")
+ val intent = Intent(Intent.ACTION_SEND)
+ intent.setType("text/plain")
+ intent.putExtra(Intent.EXTRA_TEXT, url)
+ startActivity(intent)
+ }
+
+ binding.setLayoutDelete.setOnClickListener() {
+
+ CoroutineScope(Dispatchers.IO).launch {
+ AppDatabase.dataBase.getWallpaperDao().deleteAllData()
+ }
+ sendDatabaseUpdatedBroadcast()
+ Toast.makeText(
+ requireActivity(), "Cleared all collections successfully.", Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+
+ private fun sendDatabaseUpdatedBroadcast() {
+ val intent = Intent(AppFinalString.ACTION_DATABASE_UPDATED)
+ LocalBroadcastManager.getInstance(requireContext()).sendBroadcast(intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/svg_delete.xml b/app/src/main/res/drawable/svg_delete.xml
new file mode 100644
index 0000000..c366025
--- /dev/null
+++ b/app/src/main/res/drawable/svg_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_collect.xml b/app/src/main/res/layout/fragment_collect.xml
index 0ef716c..dba6421 100644
--- a/app/src/main/res/layout/fragment_collect.xml
+++ b/app/src/main/res/layout/fragment_collect.xml
@@ -26,6 +26,8 @@
android:id="@+id/recycler_collect"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:layout_marginTop="14dp"
+ android:layout_marginEnd="14dp"
android:paddingTop="4dp" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml
index f008213..18f5b15 100644
--- a/app/src/main/res/layout/fragment_setting.xml
+++ b/app/src/main/res/layout/fragment_setting.xml
@@ -145,4 +145,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 286e044..70bf683 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -12,6 +12,7 @@
We hope this app is useful for you, if it does, would youplease give us a 5 sar and a mice revtew on Google Play, it really helps!
CANCEL
RATE IT
+ Clear All My Favorites
My Collection