| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package com.simplauncher.models
- import androidx.lifecycle.MutableLiveData
- import androidx.lifecycle.Observer
- import androidx.lifecycle.ViewModel
- import androidx.lifecycle.viewModelScope
- import com.simplauncher.data.model.App
- import dagger.hilt.android.lifecycle.HiltViewModel
- import kotlinx.coroutines.Dispatchers
- import kotlinx.coroutines.launch
- import javax.inject.Inject
- @HiltViewModel
- class AddAppViewModel @Inject constructor(
- private val repository: Repository
- ) : ViewModel() {
- private var filterQuery = ""
- private val regex = Regex("[!@#\$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>/? ]")
- private val _installedApps = mutableListOf<App>()
- private val _homeApps = mutableListOf<App>()
- private val homeAppsObserver = Observer<List<HomeApp>> {
- this._homeApps.clear()
- it.orEmpty().forEach { item -> this._homeApps.add(App.from(item)) }
- if (it !== null) updateDisplayedApps()
- }
- val apps = MutableLiveData<List<App>>()
- init {
- repository.apps.observeForever(homeAppsObserver)
- }
- fun filterApps(query: String = "") {
- this.filterQuery = regex.replace(query, "")
- this.updateDisplayedApps()
- }
- private fun updateDisplayedApps() {
- val filteredApps = _installedApps.filterNot { _homeApps.contains(it) }
- this.apps.postValue(filteredApps.filter {
- regex.replace(it.appName, "").contains(filterQuery, ignoreCase = true)
- })
- }
- fun setInstalledApps(apps: List<App>) {
- this.filterQuery = ""
- this._installedApps.clear()
- this._installedApps.addAll(apps)
- }
- fun addAppToHomeScreen(app: App) {
- val index = _homeApps.size
- viewModelScope.launch(Dispatchers.IO) {
- repository.add(HomeApp.from(app, index))
- }
- }
- override fun onCleared() {
- super.onCleared()
- repository.apps.removeObserver(homeAppsObserver)
- }
- }
|