InstalledAppsFragment: Move event handling to fragment

* Just fetch the list again, its not that expensive

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-03-20 14:57:32 +05:30
parent 0b07c3cecb
commit b187096869
2 changed files with 37 additions and 59 deletions

View File

@@ -20,10 +20,12 @@
package com.aurora.store.view.ui.all
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.viewModels
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.data.event.BusEvent
import com.aurora.store.databinding.FragmentAppsBinding
import com.aurora.store.view.epoxy.views.HeaderViewModel_
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
@@ -31,10 +33,15 @@ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.all.InstalledViewModel
import dagger.hilt.android.AndroidEntryPoint
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
@AndroidEntryPoint
class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) {
private val TAG = InstalledAppsFragment::class.java.simpleName
private var _binding: FragmentAppsBinding? = null
private val binding: FragmentAppsBinding
get() = _binding!!
@@ -48,6 +55,31 @@ class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) {
}
}
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
}
override fun onStop() {
EventBus.getDefault().unregister(this)
super.onStop()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onEvent(event: BusEvent) {
when (event) {
is BusEvent.InstallEvent,
is BusEvent.UninstallEvent,
is BusEvent.Blacklisted -> {
viewModel.getInstalledApps(requireContext())
}
else -> {
Log.i(TAG, "Got an unhandled event: $event")
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppsBinding.bind(view)
@@ -57,6 +89,8 @@ class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) {
}
updateController(null)
viewModel.getInstalledApps(view.context)
}
override fun onDestroyView() {

View File

@@ -19,43 +19,25 @@
package com.aurora.store.viewmodel.all
import android.annotation.SuppressLint
import android.content.Context
import android.util.Log
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.extensions.flushAndAdd
import com.aurora.gplayapi.data.models.App
import com.aurora.store.data.event.BusEvent
import com.aurora.store.util.AppUtil
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.Locale
import javax.inject.Inject
@HiltViewModel
@SuppressLint("StaticFieldLeak") // false positive, see https://github.com/google/dagger/issues/3253
class InstalledViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel() {
class InstalledViewModel : ViewModel() {
private val TAG = InstalledViewModel::class.java.simpleName
var appList: MutableList<App> = mutableListOf()
private var appList: MutableList<App> = mutableListOf()
val liveData: MutableLiveData<List<App>> = MutableLiveData()
init {
EventBus.getDefault().register(this)
observe()
}
fun observe() {
fun getInstalledApps(context: Context) {
viewModelScope.launch(Dispatchers.IO) {
try {
appList = AppUtil.getFilteredInstalledApps(context).toMutableList()
@@ -65,42 +47,4 @@ class InstalledViewModel @Inject constructor(
}
}
}
@Subscribe(threadMode = ThreadMode.BACKGROUND)
fun onEvent(event: BusEvent) {
when (event) {
is BusEvent.InstallEvent -> {
updateListAndPost(event.packageName)
}
is BusEvent.UninstallEvent -> {
updateListAndPost(event.packageName)
}
is BusEvent.Blacklisted -> {
observe()
}
else -> {
}
}
}
private fun updateListAndPost(packageName: String) {
//Remove from current list
val updatedList = appList.filter {
it.packageName != packageName
}.toList()
appList.flushAndAdd(updatedList)
//Post new update list
liveData.postValue(appList.sortedBy { it.displayName.lowercase(Locale.getDefault()) })
}
override fun onCleared() {
EventBus.getDefault().unregister(this)
super.onCleared()
}
}