diff --git a/app/src/main/java/com/aurora/store/view/ui/spoof/DeviceSpoofFragment.kt b/app/src/main/java/com/aurora/store/view/ui/spoof/DeviceSpoofFragment.kt index b7278ee2f..68844e1fb 100644 --- a/app/src/main/java/com/aurora/store/view/ui/spoof/DeviceSpoofFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/spoof/DeviceSpoofFragment.kt @@ -23,19 +23,20 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.data.providers.NativeDeviceInfoProvider -import com.aurora.store.data.providers.SpoofDeviceProvider import com.aurora.store.data.providers.SpoofProvider import com.aurora.store.databinding.FragmentGenericRecyclerBinding -import com.aurora.store.util.Log import com.aurora.store.view.epoxy.views.preference.DeviceViewModel_ import com.aurora.store.view.ui.commons.BaseFragment -import nl.komponents.kovenant.task -import nl.komponents.kovenant.ui.failUi -import nl.komponents.kovenant.ui.successUi +import com.aurora.store.viewmodel.spoof.SpoofViewModel import java.util.* +import kotlinx.coroutines.launch class DeviceSpoofFragment : BaseFragment() { @@ -45,6 +46,8 @@ class DeviceSpoofFragment : BaseFragment() { private var properties: Properties = Properties() + private val viewModel: SpoofViewModel by viewModels() + companion object { @JvmStatic fun newInstance(): DeviceSpoofFragment { @@ -79,13 +82,12 @@ class DeviceSpoofFragment : BaseFragment() { if (spoofProvider.isDeviceSpoofEnabled()) properties = spoofProvider.getSpoofDeviceProperties() - task { - fetchAvailableDevices() - } successUi { - updateController(it) - } failUi { - Log.e("Could not get spoof device properties") + viewLifecycleOwner.lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.availableDevices.collect { updateController(it) } + } } + viewModel.fetchAvailableDevices(view.context) } private fun updateController(locales: List) { @@ -115,12 +117,8 @@ class DeviceSpoofFragment : BaseFragment() { } } - private fun fetchAvailableDevices(): List { - return SpoofDeviceProvider.with(requireContext()).availableDevice - } - private fun saveSelection(properties: Properties) { requireContext().toast(R.string.spoof_apply) spoofProvider.setSpoofDeviceProperties(properties) } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/aurora/store/viewmodel/spoof/SpoofViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/spoof/SpoofViewModel.kt new file mode 100644 index 000000000..d36885edc --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/spoof/SpoofViewModel.kt @@ -0,0 +1,23 @@ +package com.aurora.store.viewmodel.spoof + +import android.content.Context +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.aurora.store.data.providers.SpoofDeviceProvider +import java.util.Properties +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch + +class SpoofViewModel: ViewModel() { + + private val _availableDevices: MutableStateFlow> = MutableStateFlow(emptyList()) + val availableDevices = _availableDevices.asStateFlow() + + fun fetchAvailableDevices(context: Context) { + viewModelScope.launch(Dispatchers.IO) { + _availableDevices.value = SpoofDeviceProvider.with(context).availableDevice + } + } +}