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:
@@ -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() {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user