From e3ebbe37d2b2548fe4793ac9c6ce0efb3070d6e4 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 23 Jan 2025 20:05:27 +0700 Subject: [PATCH] Move hilt injected objects into viewmodels everywhere Signed-off-by: Aayush Gupta --- .../java/com/aurora/store/MainActivity.kt | 14 +++------- .../java/com/aurora/store/MainViewModel.kt | 18 +++++++++++++ .../store/view/ui/account/AccountFragment.kt | 16 +++++------ .../view/ui/apps/AppsContainerFragment.kt | 9 +++---- .../view/ui/commons/MoreDialogFragment.kt | 19 +++++++------ .../view/ui/details/AppDetailsFragment.kt | 13 +++------ .../view/ui/details/DetailsExodusFragment.kt | 10 +++---- .../view/ui/downloads/DownloadFragment.kt | 15 +++++------ .../view/ui/games/GamesContainerFragment.kt | 9 +++---- .../view/ui/onboarding/OnboardingFragment.kt | 9 +++---- .../view/ui/preferences/ProxyURLDialog.kt | 9 +++---- .../view/ui/preferences/UpdatesPreference.kt | 25 +++++++++-------- .../store/view/ui/sheets/AppMenuSheet.kt | 15 ++++------- .../store/view/ui/sheets/DownloadMenuSheet.kt | 20 +++++--------- .../store/view/ui/sheets/FilterSheet.kt | 11 ++++---- .../view/ui/sheets/ManualDownloadSheet.kt | 4 +-- .../viewmodel/account/AccountViewModel.kt | 14 ++++++++++ .../store/viewmodel/all/UpdatesViewModel.kt | 2 +- .../viewmodel/apps/AppsContainerViewModel.kt | 14 ++++++++++ .../store/viewmodel/commons/MoreViewModel.kt | 14 ++++++++++ .../viewmodel/details/AppDetailsViewModel.kt | 2 ++ .../details/DetailsExodusViewModel.kt | 14 ++++++++++ .../viewmodel/downloads/DownloadViewModel.kt | 14 ++++++++++ .../games/GamesContainerViewModel.kt | 14 ++++++++++ .../onboarding/OnboardingViewModel.kt | 14 ++++++++++ .../preferences/ProxyURLViewModel.kt | 14 ++++++++++ .../viewmodel/sheets/AppMenuViewModel.kt | 23 ++++++++++++++++ .../viewmodel/sheets/DownloadMenuViewModel.kt | 27 +++++++++++++++++++ .../store/viewmodel/sheets/FilterViewModel.kt | 14 ++++++++++ ...iewModel.kt => ManualDownloadViewModel.kt} | 17 ++---------- 30 files changed, 281 insertions(+), 132 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/MainViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/account/AccountViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/apps/AppsContainerViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/commons/MoreViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/details/DetailsExodusViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/games/GamesContainerViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/onboarding/OnboardingViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/preferences/ProxyURLViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/sheets/AppMenuViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/sheets/DownloadMenuViewModel.kt create mode 100644 app/src/main/java/com/aurora/store/viewmodel/sheets/FilterViewModel.kt rename app/src/main/java/com/aurora/store/viewmodel/sheets/{SheetsViewModel.kt => ManualDownloadViewModel.kt} (70%) diff --git a/app/src/main/java/com/aurora/store/MainActivity.kt b/app/src/main/java/com/aurora/store/MainActivity.kt index 88233a26a..988236dec 100644 --- a/app/src/main/java/com/aurora/store/MainActivity.kt +++ b/app/src/main/java/com/aurora/store/MainActivity.kt @@ -24,6 +24,7 @@ import android.os.Bundle import android.view.View import androidx.activity.addCallback import androidx.activity.enableEdgeToEdge +import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat.Type.displayCutout @@ -34,30 +35,23 @@ import androidx.navigation.FloatingWindow import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.setupWithNavController import com.aurora.extensions.isNAndAbove -import com.aurora.store.data.helper.UpdateHelper import com.aurora.store.data.model.NetworkStatus import com.aurora.store.data.receiver.MigrationReceiver import com.aurora.store.databinding.ActivityMainBinding import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB import com.aurora.store.view.ui.sheets.NetworkDialogSheet -import com.aurora.store.data.providers.NetworkProvider import com.aurora.store.util.PackageUtil import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch -import javax.inject.Inject import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @AndroidEntryPoint class MainActivity : AppCompatActivity() { - @Inject - lateinit var networkProvider: NetworkProvider - - @Inject - lateinit var updateHelper: UpdateHelper + private val viewModel: MainViewModel by viewModels() private lateinit var B: ActivityMainBinding @@ -91,7 +85,7 @@ class MainActivity : AppCompatActivity() { val navController = navHostFragment.navController if (isNAndAbove && !PackageUtil.isTv(this)) { - networkProvider.status.onEach { networkStatus -> + viewModel.networkProvider.status.onEach { networkStatus -> when (networkStatus) { NetworkStatus.AVAILABLE -> { if (!supportFragmentManager.isDestroyed && isIntroDone()) { @@ -152,7 +146,7 @@ class MainActivity : AppCompatActivity() { // Updates lifecycleScope.launch { - updateHelper.updates.collectLatest { list -> + viewModel.updateHelper.updates.collectLatest { list -> B.navView.getOrCreateBadge(R.id.updatesFragment).apply { isVisible = !list.isNullOrEmpty() number = list?.size ?: 0 diff --git a/app/src/main/java/com/aurora/store/MainViewModel.kt b/app/src/main/java/com/aurora/store/MainViewModel.kt new file mode 100644 index 000000000..8d70dbf25 --- /dev/null +++ b/app/src/main/java/com/aurora/store/MainViewModel.kt @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.helper.UpdateHelper +import com.aurora.store.data.providers.NetworkProvider +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class MainViewModel @Inject constructor( + val networkProvider: NetworkProvider, + val updateHelper: UpdateHelper +) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt index adca32e45..f3f48979f 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt @@ -21,6 +21,7 @@ package com.aurora.store.view.ui.account import android.os.Bundle import android.view.View +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import coil3.load import coil3.request.placeholder @@ -31,17 +32,15 @@ import com.aurora.Constants.URL_LICENSE import com.aurora.Constants.URL_TOS import com.aurora.extensions.browse import com.aurora.store.R -import com.aurora.store.data.providers.AuthProvider import com.aurora.store.databinding.FragmentAccountBinding import com.aurora.store.view.ui.commons.BaseFragment +import com.aurora.store.viewmodel.account.AccountViewModel import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class AccountFragment : BaseFragment() { - @Inject - lateinit var authProvider: AuthProvider + private val viewModel: AccountViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -56,15 +55,16 @@ class AccountFragment : BaseFragment() { binding.chipTos.setOnClickListener { browse(URL_TOS) } } - authProvider.authData?.userProfile?.let { - val avatar = if (authProvider.isAnonymous) R.mipmap.ic_launcher else it.artwork.url + viewModel.authProvider.authData?.userProfile?.let { + val avatar = + if (viewModel.authProvider.isAnonymous) R.mipmap.ic_launcher else it.artwork.url binding.imgAvatar.load(avatar) { placeholder(R.drawable.bg_placeholder) transformations(RoundedCornersTransformation(32F)) } - binding.txtName.text = if (authProvider.isAnonymous) "Anonymous" else it.name + binding.txtName.text = if (viewModel.authProvider.isAnonymous) "Anonymous" else it.name binding.txtEmail.text = - if (authProvider.isAnonymous) "anonymous@gmail.com" else it.email + if (viewModel.authProvider.isAnonymous) "anonymous@gmail.com" else it.email } binding.btnLogout.addOnClickListener { diff --git a/app/src/main/java/com/aurora/store/view/ui/apps/AppsContainerFragment.kt b/app/src/main/java/com/aurora/store/view/ui/apps/AppsContainerFragment.kt index ea529f1ad..b46a2b5bd 100644 --- a/app/src/main/java/com/aurora/store/view/ui/apps/AppsContainerFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/apps/AppsContainerFragment.kt @@ -23,28 +23,27 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager +import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.navigation.fragment.findNavController import androidx.viewpager2.adapter.FragmentStateAdapter import com.aurora.store.MobileNavigationDirections import com.aurora.store.R -import com.aurora.store.data.providers.AuthProvider import com.aurora.store.databinding.FragmentAppsGamesBinding import com.aurora.store.util.Preferences import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.commons.CategoryFragment import com.aurora.store.view.ui.commons.ForYouFragment import com.aurora.store.view.ui.commons.TopChartContainerFragment +import com.aurora.store.viewmodel.apps.AppsContainerViewModel import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class AppsContainerFragment : BaseFragment() { - @Inject - lateinit var authProvider: AuthProvider + private val viewModel: AppsContainerViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -77,7 +76,7 @@ class AppsContainerFragment : BaseFragment() { binding.pager.adapter = ViewPagerAdapter( childFragmentManager, viewLifecycleOwner.lifecycle, - !authProvider.isAnonymous, + !viewModel.authProvider.isAnonymous, isForYouEnabled ) diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt index e8e5199ce..11ce8cead 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt @@ -48,6 +48,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.util.fastForEach import androidx.fragment.app.DialogFragment +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import coil3.compose.AsyncImage import coil3.request.ImageRequest @@ -59,18 +60,16 @@ import com.aurora.extensions.getStyledAttributeColor import com.aurora.extensions.setAppTheme import com.aurora.store.MR import com.aurora.store.R -import com.aurora.store.data.providers.AuthProvider import com.aurora.store.util.Preferences import com.aurora.store.view.theme.AuroraTheme +import com.aurora.store.viewmodel.commons.MoreViewModel import com.google.android.material.dialog.MaterialAlertDialogBuilder import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class MoreDialogFragment : DialogFragment() { - @Inject - lateinit var authProvider: AuthProvider + private val viewModel: MoreViewModel by viewModels() private var primaryColor: Color = Color.White private var onPrimaryColor: Color = Color.Black @@ -240,10 +239,10 @@ class MoreDialogFragment : DialogFragment() { AsyncImage( model = ImageRequest.Builder(LocalContext.current) .data( - if (authProvider.isAnonymous) { + if (viewModel.authProvider.isAnonymous) { R.mipmap.ic_launcher } else { - authProvider.authData?.userProfile?.artwork?.url + viewModel.authProvider.authData?.userProfile?.artwork?.url } ) .crossfade(true) @@ -260,10 +259,10 @@ class MoreDialogFragment : DialogFragment() { horizontalAlignment = Alignment.Start ) { Text( - text = if (authProvider.isAnonymous) { + text = if (viewModel.authProvider.isAnonymous) { stringResource(R.string.account_anonymous) } else { - authProvider.authData?.userProfile?.name + viewModel.authProvider.authData?.userProfile?.name ?: stringResource(R.string.status_unavailable) }, fontWeight = FontWeight.Normal, @@ -273,10 +272,10 @@ class MoreDialogFragment : DialogFragment() { overflow = TextOverflow.Ellipsis ) Text( - text = if (authProvider.isAnonymous) { + text = if (viewModel.authProvider.isAnonymous) { stringResource(R.string.account_anonymous_email) } else { - authProvider.authData?.userProfile?.email + viewModel.authProvider.authData?.userProfile?.email ?: stringResource(R.string.status_unavailable) }, fontWeight = FontWeight.Light, diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt index 98f705dfa..8197571e9 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt @@ -70,7 +70,6 @@ import com.aurora.store.data.model.DownloadStatus import com.aurora.store.data.model.PermissionType import com.aurora.store.data.model.ViewState import com.aurora.store.data.model.ViewState.Loading.getDataAs -import com.aurora.store.data.providers.AuthProvider import com.aurora.store.databinding.FragmentDetailsBinding import com.aurora.store.util.CertUtil import com.aurora.store.util.CommonUtil @@ -94,7 +93,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import java.util.Locale -import javax.inject.Inject import com.aurora.gplayapi.data.models.datasafety.Report as DataSafetyReport @AndroidEntryPoint @@ -105,9 +103,6 @@ class AppDetailsFragment : BaseFragment() { private val args: AppDetailsFragmentArgs by navArgs() - @Inject - lateinit var authProvider: AuthProvider - private lateinit var app: App private lateinit var iconDrawable: Drawable @@ -198,7 +193,7 @@ class AppDetailsFragment : BaseFragment() { // App User Review // We can not fetch it outside of this block, as we need the testing program status - if (!authProvider.isAnonymous && app.isInstalled) { + if (!viewModel.authProvider.isAnonymous && app.isInstalled) { viewModel.fetchUserAppReview(app) } @@ -680,7 +675,7 @@ class AppDetailsFragment : BaseFragment() { } binding.layoutDetailsApp.btnPrimaryAction.setOnClickListener { - if (authProvider.isAnonymous && !app.isFree) { + if (viewModel.authProvider.isAnonymous && !app.isFree) { toast(R.string.toast_purchase_blocked) return@setOnClickListener } else if (app.versionCode == 0) { @@ -744,7 +739,7 @@ class AppDetailsFragment : BaseFragment() { updateAppPermission(app) // Allow users to handle beta subscriptions, if logged in by own account. - if (!authProvider.isAnonymous) { + if (!viewModel.authProvider.isAnonymous) { // Update app name to the testing program name, if subscribed app.testingProgram?.let { if (it.isAvailable && it.isSubscribed) { @@ -853,7 +848,7 @@ class AppDetailsFragment : BaseFragment() { private fun updateUserReview(review: Review? = null) { binding.layoutDetailsReview.apply { - layoutUserReview.isVisible = !authProvider.isAnonymous + layoutUserReview.isVisible = !viewModel.authProvider.isAnonymous btnPostReview.setOnClickListener { viewModel.postAppReview( app.packageName, diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt index a3be33f54..db0b6c0dd 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt @@ -21,6 +21,7 @@ package com.aurora.store.view.ui.details import android.os.Bundle import android.view.View +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.aurora.Constants @@ -32,18 +33,15 @@ import com.aurora.store.databinding.FragmentGenericWithToolbarBinding import com.aurora.store.view.epoxy.views.HeaderViewModel_ import com.aurora.store.view.epoxy.views.details.ExodusViewModel_ import com.aurora.store.view.ui.commons.BaseFragment +import com.aurora.store.viewmodel.details.DetailsExodusViewModel import dagger.hilt.android.AndroidEntryPoint -import org.json.JSONObject -import javax.inject.Inject @AndroidEntryPoint class DetailsExodusFragment : BaseFragment() { + private val viewModel: DetailsExodusViewModel by viewModels() private val args: DetailsExodusFragmentArgs by navArgs() - @Inject - lateinit var exodusTrackers: JSONObject - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -80,7 +78,7 @@ class DetailsExodusFragment : BaseFragment() private fun getExodusTrackersFromReport(report: Report): List { val trackerObjects = report.trackers.map { - exodusTrackers.getJSONObject(it.toString()) + viewModel.exodusTrackers.getJSONObject(it.toString()) }.toList() return trackerObjects.map { diff --git a/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt b/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt index 23b83e3ef..664f8f4af 100644 --- a/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadFragment.kt @@ -22,30 +22,29 @@ package com.aurora.store.view.ui.downloads import android.os.Bundle import android.text.format.DateUtils import android.view.View +import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.aurora.Constants.GITLAB_URL import com.aurora.extensions.browse import com.aurora.store.R -import com.aurora.store.data.helper.DownloadHelper import com.aurora.store.data.room.download.Download import com.aurora.store.databinding.FragmentDownloadBinding import com.aurora.store.view.epoxy.views.DownloadViewModel_ import com.aurora.store.view.epoxy.views.TextDividerViewModel_ import com.aurora.store.view.epoxy.views.app.NoAppViewModel_ import com.aurora.store.view.ui.commons.BaseFragment +import com.aurora.store.viewmodel.downloads.DownloadViewModel import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import java.util.Date -import javax.inject.Inject @AndroidEntryPoint class DownloadFragment : BaseFragment() { - @Inject - lateinit var downloadHelper: DownloadHelper + private val viewModel: DownloadViewModel by viewModels() private lateinit var downloadList: List @@ -59,19 +58,19 @@ class DownloadFragment : BaseFragment() { when (it.itemId) { R.id.action_force_clear_all -> { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { - downloadHelper.clearAllDownloads() + viewModel.downloadHelper.clearAllDownloads() } } R.id.action_cancel_all -> { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { - downloadHelper.cancelAll() + viewModel.downloadHelper.cancelAll() } } R.id.action_clear_completed -> { viewLifecycleOwner.lifecycleScope.launch(NonCancellable) { - downloadHelper.clearFinishedDownloads() + viewModel.downloadHelper.clearFinishedDownloads() } } } @@ -80,7 +79,7 @@ class DownloadFragment : BaseFragment() { } viewLifecycleOwner.lifecycleScope.launch { - downloadHelper.downloadsList.collectLatest { + viewModel.downloadHelper.downloadsList.collectLatest { downloadList = it updateController(it.reversed()) } diff --git a/app/src/main/java/com/aurora/store/view/ui/games/GamesContainerFragment.kt b/app/src/main/java/com/aurora/store/view/ui/games/GamesContainerFragment.kt index cc5fa5ee3..0f3ce91a7 100644 --- a/app/src/main/java/com/aurora/store/view/ui/games/GamesContainerFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/games/GamesContainerFragment.kt @@ -23,28 +23,27 @@ import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager +import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.navigation.fragment.findNavController import androidx.viewpager2.adapter.FragmentStateAdapter import com.aurora.store.MobileNavigationDirections import com.aurora.store.R -import com.aurora.store.data.providers.AuthProvider import com.aurora.store.databinding.FragmentAppsGamesBinding import com.aurora.store.util.Preferences import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.view.ui.commons.CategoryFragment import com.aurora.store.view.ui.commons.ForYouFragment import com.aurora.store.view.ui.commons.TopChartContainerFragment +import com.aurora.store.viewmodel.games.GamesContainerViewModel import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class GamesContainerFragment : BaseFragment() { - @Inject - lateinit var authProvider: AuthProvider + private val viewModel: GamesContainerViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -77,7 +76,7 @@ class GamesContainerFragment : BaseFragment() { binding.pager.adapter = ViewPagerAdapter( childFragmentManager, viewLifecycleOwner.lifecycle, - !authProvider.isAnonymous, + !viewModel.authProvider.isAnonymous, isForYouEnabled ) diff --git a/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt b/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt index e28213454..db797ba60 100644 --- a/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/onboarding/OnboardingFragment.kt @@ -25,6 +25,7 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager +import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback @@ -32,7 +33,6 @@ import com.aurora.Constants import com.aurora.extensions.areNotificationsEnabled import com.aurora.extensions.isIgnoringBatteryOptimizations import com.aurora.store.R -import com.aurora.store.data.helper.UpdateHelper import com.aurora.store.data.model.UpdateMode import com.aurora.store.data.work.CacheWorker import com.aurora.store.databinding.FragmentOnboardingBinding @@ -56,16 +56,15 @@ import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_EXTENDED import com.aurora.store.util.Preferences.PREFERENCE_VENDING_VERSION import com.aurora.store.util.save import com.aurora.store.view.ui.commons.BaseFragment +import com.aurora.store.viewmodel.onboarding.OnboardingViewModel import com.google.android.material.tabs.TabLayoutMediator import com.jakewharton.processphoenix.ProcessPhoenix import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class OnboardingFragment : BaseFragment() { - @Inject - lateinit var updateHelper: UpdateHelper + private val viewModel: OnboardingViewModel by viewModels() private var lastPosition = 0 @@ -193,6 +192,6 @@ class OnboardingFragment : BaseFragment() { else -> UpdateMode.DISABLED } save(PREFERENCE_UPDATES_AUTO, updateMode.ordinal) - updateHelper.scheduleAutomatedCheck() + viewModel.updateHelper.scheduleAutomatedCheck() } } diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt index 2d3085f4b..47af82273 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/ProxyURLDialog.kt @@ -6,6 +6,7 @@ import android.app.Dialog import android.os.Bundle import android.view.WindowManager import androidx.fragment.app.DialogFragment +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.aurora.extensions.showKeyboard import com.aurora.extensions.toast @@ -15,17 +16,15 @@ import com.aurora.store.util.Preferences import com.aurora.store.util.Preferences.PREFERENCE_PROXY_INFO import com.aurora.store.util.Preferences.PREFERENCE_PROXY_URL import com.aurora.store.util.save +import com.aurora.store.viewmodel.preferences.ProxyURLViewModel import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.textfield.TextInputLayout -import com.google.gson.Gson import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class ProxyURLDialog: DialogFragment() { - @Inject - lateinit var gson: Gson + private val viewModel: ProxyURLViewModel by viewModels() private val textInputLayout: TextInputLayout? get() = dialog?.findViewById(R.id.textInputLayout) @@ -67,7 +66,7 @@ class ProxyURLDialog: DialogFragment() { val proxyInfo = CommonUtil.parseProxyUrl(url) if (proxyInfo != null) { save(PREFERENCE_PROXY_URL, url) - save(PREFERENCE_PROXY_INFO, gson.toJson(proxyInfo)) + save(PREFERENCE_PROXY_INFO, viewModel.gson.toJson(proxyInfo)) toast(R.string.toast_proxy_success) findNavController().navigate(R.id.forceRestartDialog) return diff --git a/app/src/main/java/com/aurora/store/view/ui/preferences/UpdatesPreference.kt b/app/src/main/java/com/aurora/store/view/ui/preferences/UpdatesPreference.kt index 269e2086d..4becc4c2f 100644 --- a/app/src/main/java/com/aurora/store/view/ui/preferences/UpdatesPreference.kt +++ b/app/src/main/java/com/aurora/store/view/ui/preferences/UpdatesPreference.kt @@ -22,12 +22,12 @@ package com.aurora.store.view.ui.preferences import android.os.Bundle import android.view.View import androidx.appcompat.widget.Toolbar +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.preference.ListPreference import androidx.preference.SeekBarPreference import androidx.preference.SwitchPreferenceCompat import com.aurora.store.R -import com.aurora.store.data.helper.UpdateHelper import com.aurora.store.data.model.PermissionType import com.aurora.store.data.model.UpdateMode import com.aurora.store.util.Preferences @@ -37,14 +37,13 @@ import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK_INTERVAL import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_EXTENDED import com.aurora.store.util.save +import com.aurora.store.viewmodel.all.UpdatesViewModel import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class UpdatesPreference : BasePreferenceFragment() { - @Inject - lateinit var updateHelper: UpdateHelper + private val viewModel: UpdatesViewModel by viewModels() override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences_updates, rootKey) @@ -56,7 +55,7 @@ class UpdatesPreference : BasePreferenceFragment() { when (UpdateMode.entries[newValue.toString().toInt()]) { UpdateMode.DISABLED -> { updateCheckIntervalPref?.isEnabled = false - updateHelper.cancelAutomatedCheck() + viewModel.updateHelper.cancelAutomatedCheck() requireContext().save(PREFERENCE_UPDATES_AUTO, 0) true } @@ -64,14 +63,14 @@ class UpdatesPreference : BasePreferenceFragment() { UpdateMode.CHECK_AND_NOTIFY -> { if (permissionProvider.isGranted(PermissionType.POST_NOTIFICATIONS)) { updateCheckIntervalPref?.isEnabled = true - updateHelper.scheduleAutomatedCheck() + viewModel.updateHelper.scheduleAutomatedCheck() true } else { permissionProvider.request(PermissionType.POST_NOTIFICATIONS) { if (it) { updateCheckIntervalPref?.isEnabled = true requireContext().save(PREFERENCE_UPDATES_AUTO, 1) - updateHelper.scheduleAutomatedCheck() + viewModel.updateHelper.scheduleAutomatedCheck() activity?.recreate() } } @@ -82,14 +81,14 @@ class UpdatesPreference : BasePreferenceFragment() { UpdateMode.CHECK_AND_INSTALL -> { if (permissionProvider.isGranted(PermissionType.DOZE_WHITELIST)) { updateCheckIntervalPref?.isEnabled = true - updateHelper.scheduleAutomatedCheck() + viewModel.updateHelper.scheduleAutomatedCheck() true } else { permissionProvider.request(PermissionType.DOZE_WHITELIST) { if (it) { updateCheckIntervalPref?.isEnabled = true requireContext().save(PREFERENCE_UPDATES_AUTO, 2) - updateHelper.scheduleAutomatedCheck() + viewModel.updateHelper.scheduleAutomatedCheck() activity?.recreate() } } @@ -104,7 +103,7 @@ class UpdatesPreference : BasePreferenceFragment() { findPreference(PREFERENCE_UPDATES_CHECK_INTERVAL)?.apply { isEnabled = Preferences.getInteger(requireContext(), PREFERENCE_UPDATES_AUTO) != 0 setOnPreferenceChangeListener { _, _ -> - updateHelper.updateAutomatedCheck() + viewModel.updateHelper.updateAutomatedCheck() true } } @@ -113,21 +112,21 @@ class UpdatesPreference : BasePreferenceFragment() { ?.setOnPreferenceChangeListener { _, newValue -> findPreference(PREFERENCE_FILTER_FDROID)?.isEnabled = !newValue.toString().toBoolean() - updateHelper.checkUpdatesNow() + viewModel.updateHelper.checkUpdatesNow() true } findPreference(PREFERENCE_FILTER_FDROID)?.apply { isEnabled = !Preferences.getBoolean(requireContext(), PREFERENCE_FILTER_AURORA_ONLY) setOnPreferenceChangeListener { _, _ -> - updateHelper.checkUpdatesNow() + viewModel.updateHelper.checkUpdatesNow() true } } findPreference(PREFERENCE_UPDATES_EXTENDED) ?.setOnPreferenceChangeListener { _, _ -> - updateHelper.checkUpdatesNow() + viewModel.updateHelper.checkUpdatesNow() true } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt index d80761402..8443947bb 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt @@ -32,12 +32,10 @@ import com.aurora.store.AuroraApp import com.aurora.store.R import com.aurora.store.data.event.BusEvent import com.aurora.store.data.installer.AppInstaller -import com.aurora.store.data.providers.BlacklistProvider import com.aurora.store.databinding.SheetAppMenuBinding import com.aurora.store.util.PackageUtil -import com.aurora.store.viewmodel.sheets.SheetsViewModel +import com.aurora.store.viewmodel.sheets.AppMenuViewModel import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class AppMenuSheet : BaseDialogSheet() { @@ -46,10 +44,7 @@ class AppMenuSheet : BaseDialogSheet() { const val TAG = "APP_MENU_SHEET" } - @Inject - lateinit var blacklistProvider: BlacklistProvider - - private val viewModel: SheetsViewModel by viewModels() + private val viewModel: AppMenuViewModel by viewModels() private val args: AppMenuSheetArgs by navArgs() private val exportMimeType = "application/zip" @@ -67,7 +62,7 @@ class AppMenuSheet : BaseDialogSheet() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val isBlacklisted: Boolean = blacklistProvider.isBlacklisted(args.app.packageName) + val isBlacklisted: Boolean = viewModel.blacklistProvider.isBlacklisted(args.app.packageName) with(binding.navigationView) { //Switch strings for Add/Remove Blacklist @@ -89,10 +84,10 @@ class AppMenuSheet : BaseDialogSheet() { R.id.action_blacklist -> { if (isBlacklisted) { - blacklistProvider.whitelist(args.app.packageName) + viewModel.blacklistProvider.whitelist(args.app.packageName) requireContext().toast(R.string.toast_apk_whitelisted) } else { - blacklistProvider.blacklist(args.app.packageName) + viewModel.blacklistProvider.blacklist(args.app.packageName) requireContext().toast(R.string.toast_apk_blacklisted) } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt index 8cfe783aa..34bd49e9e 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt @@ -30,22 +30,20 @@ import androidx.navigation.fragment.navArgs import com.aurora.extensions.copyToClipBoard import com.aurora.extensions.toast import com.aurora.store.R -import com.aurora.store.data.helper.DownloadHelper -import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.model.DownloadStatus import com.aurora.store.databinding.SheetDownloadMenuBinding import com.aurora.store.util.PathUtil -import com.aurora.store.viewmodel.sheets.SheetsViewModel +import com.aurora.store.viewmodel.sheets.DownloadMenuViewModel import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.launch -import javax.inject.Inject @AndroidEntryPoint class DownloadMenuSheet : BaseDialogSheet() { private val TAG = DownloadMenuSheet::class.java.simpleName - private val viewModel: SheetsViewModel by viewModels() + + private val viewModel: DownloadMenuViewModel by viewModels() private val args: DownloadMenuSheetArgs by navArgs() private val playStoreURL = "https://play.google.com/store/apps/details?id=" @@ -61,12 +59,6 @@ class DownloadMenuSheet : BaseDialogSheet() { dismissAllowingStateLoss() } - @Inject - lateinit var downloadHelper: DownloadHelper - - @Inject - lateinit var appInstaller: AppInstaller - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -101,14 +93,14 @@ class DownloadMenuSheet : BaseDialogSheet() { R.id.action_cancel -> { findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) { - downloadHelper.cancelDownload(args.download.packageName) + viewModel.downloadHelper.cancelDownload(args.download.packageName) } dismissAllowingStateLoss() } R.id.action_clear -> { findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) { - downloadHelper.clearDownload( + viewModel.downloadHelper.clearDownload( args.download.packageName, args.download.versionCode ) @@ -127,7 +119,7 @@ class DownloadMenuSheet : BaseDialogSheet() { private fun install() { try { - appInstaller.getPreferredInstaller().install(args.download) + viewModel.appInstaller.getPreferredInstaller().install(args.download) } catch (exception: Exception) { Log.e(TAG, "Failed to install ${args.download.packageName}", exception) if (exception is NullPointerException) { diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt index 03839672c..d76a1e2c2 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt @@ -22,25 +22,24 @@ package com.aurora.store.view.ui.sheets import android.content.DialogInterface import android.os.Bundle import android.view.View +import androidx.fragment.app.viewModels import com.aurora.store.R import com.aurora.store.data.model.Filter -import com.aurora.store.data.providers.FilterProvider import com.aurora.store.databinding.SheetFilterBinding +import com.aurora.store.viewmodel.sheets.FilterViewModel import com.google.android.material.chip.Chip import dagger.hilt.android.AndroidEntryPoint -import javax.inject.Inject @AndroidEntryPoint class FilterSheet : BaseDialogSheet() { - @Inject - lateinit var filterProvider: FilterProvider + private val viewModel: FilterViewModel by viewModels() private lateinit var filter: Filter override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - filter = filterProvider.getSavedFilter() + filter = viewModel.filterProvider.getSavedFilter() attachSingleChips() attachMultipleChips() @@ -48,7 +47,7 @@ class FilterSheet : BaseDialogSheet() { override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) - filterProvider.saveFilter(filter) + viewModel.filterProvider.saveFilter(filter) } private fun attachSingleChips() { diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt index 8a740f79a..5ee223dd6 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt @@ -32,14 +32,14 @@ import coil3.transform.RoundedCornersTransformation import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.databinding.SheetManualDownloadBinding -import com.aurora.store.viewmodel.sheets.SheetsViewModel +import com.aurora.store.viewmodel.sheets.ManualDownloadViewModel import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @AndroidEntryPoint class ManualDownloadSheet : BaseDialogSheet() { - private val viewModel: SheetsViewModel by viewModels() + private val viewModel: ManualDownloadViewModel by viewModels() private val args: ManualDownloadSheetArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/aurora/store/viewmodel/account/AccountViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/account/AccountViewModel.kt new file mode 100644 index 000000000..582340ba5 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/account/AccountViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.account + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.providers.AuthProvider +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class AccountViewModel @Inject constructor(val authProvider: AuthProvider) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt index 6872bad5a..90d034cdd 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt @@ -30,7 +30,7 @@ import javax.inject.Inject @HiltViewModel class UpdatesViewModel @Inject constructor( - private val updateHelper: UpdateHelper, + val updateHelper: UpdateHelper, private val downloadHelper: DownloadHelper, ) : ViewModel() { diff --git a/app/src/main/java/com/aurora/store/viewmodel/apps/AppsContainerViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/apps/AppsContainerViewModel.kt new file mode 100644 index 000000000..3647cf9d8 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/apps/AppsContainerViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.apps + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.providers.AuthProvider +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class AppsContainerViewModel @Inject constructor(val authProvider: AuthProvider) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/commons/MoreViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/commons/MoreViewModel.kt new file mode 100644 index 000000000..38633aa5e --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/commons/MoreViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.commons + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.providers.AuthProvider +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class MoreViewModel @Inject constructor(val authProvider: AuthProvider) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt index 6deb54f5f..09f4f5718 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt @@ -19,6 +19,7 @@ import com.aurora.store.data.helper.DownloadHelper import com.aurora.store.data.model.ExodusReport import com.aurora.store.data.model.PlexusReport import com.aurora.store.data.model.Report +import com.aurora.store.data.providers.AuthProvider import com.aurora.store.data.room.favourite.Favourite import com.aurora.store.data.room.favourite.FavouriteDao import com.aurora.store.util.PackageUtil @@ -40,6 +41,7 @@ import com.aurora.gplayapi.data.models.datasafety.Report as DataSafetyReport @HiltViewModel class AppDetailsViewModel @Inject constructor( + val authProvider: AuthProvider, @ApplicationContext private val context: Context, private val appDetailsHelper: AppDetailsHelper, private val reviewsHelper: ReviewsHelper, diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/DetailsExodusViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/DetailsExodusViewModel.kt new file mode 100644 index 000000000..51d03b993 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/details/DetailsExodusViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.details + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import org.json.JSONObject +import javax.inject.Inject + +@HiltViewModel +class DetailsExodusViewModel @Inject constructor(val exodusTrackers: JSONObject) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadViewModel.kt new file mode 100644 index 000000000..6888a80e1 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/downloads/DownloadViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.downloads + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.helper.DownloadHelper +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class DownloadViewModel @Inject constructor(val downloadHelper: DownloadHelper) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/games/GamesContainerViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/games/GamesContainerViewModel.kt new file mode 100644 index 000000000..0c3c69790 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/games/GamesContainerViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.games + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.providers.AuthProvider +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class GamesContainerViewModel @Inject constructor(val authProvider: AuthProvider) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/onboarding/OnboardingViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/onboarding/OnboardingViewModel.kt new file mode 100644 index 000000000..1e1486ee1 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/onboarding/OnboardingViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.onboarding + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.helper.UpdateHelper +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class OnboardingViewModel @Inject constructor(val updateHelper: UpdateHelper) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/preferences/ProxyURLViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/preferences/ProxyURLViewModel.kt new file mode 100644 index 000000000..db948d014 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/preferences/ProxyURLViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.preferences + +import androidx.lifecycle.ViewModel +import com.google.gson.Gson +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class ProxyURLViewModel @Inject constructor(val gson: Gson) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/sheets/AppMenuViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/sheets/AppMenuViewModel.kt new file mode 100644 index 000000000..920c3bc8a --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/sheets/AppMenuViewModel.kt @@ -0,0 +1,23 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.sheets + +import android.content.Context +import android.net.Uri +import androidx.lifecycle.ViewModel +import com.aurora.store.data.model.MinimalApp +import com.aurora.store.data.providers.BlacklistProvider +import com.aurora.store.data.work.ExportWorker +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class AppMenuViewModel @Inject constructor(val blacklistProvider: BlacklistProvider) : ViewModel() { + + fun copyInstalledApp(context: Context, app: MinimalApp, uri: Uri) { + ExportWorker.exportInstalledApp(context, app, uri) + } +} diff --git a/app/src/main/java/com/aurora/store/viewmodel/sheets/DownloadMenuViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/sheets/DownloadMenuViewModel.kt new file mode 100644 index 000000000..2bc44098f --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/sheets/DownloadMenuViewModel.kt @@ -0,0 +1,27 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.sheets + +import android.content.Context +import android.net.Uri +import androidx.lifecycle.ViewModel +import com.aurora.store.data.helper.DownloadHelper +import com.aurora.store.data.installer.AppInstaller +import com.aurora.store.data.room.download.Download +import com.aurora.store.data.work.ExportWorker +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class DownloadMenuViewModel @Inject constructor( + val downloadHelper: DownloadHelper, + val appInstaller: AppInstaller +) : ViewModel() { + + fun copyDownloadedApp(context: Context, download: Download, uri: Uri) { + ExportWorker.exportDownloadedApp(context, download, uri) + } +} diff --git a/app/src/main/java/com/aurora/store/viewmodel/sheets/FilterViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/sheets/FilterViewModel.kt new file mode 100644 index 000000000..537f55048 --- /dev/null +++ b/app/src/main/java/com/aurora/store/viewmodel/sheets/FilterViewModel.kt @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.viewmodel.sheets + +import androidx.lifecycle.ViewModel +import com.aurora.store.data.providers.FilterProvider +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class FilterViewModel @Inject constructor(val filterProvider: FilterProvider) : ViewModel() diff --git a/app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/sheets/ManualDownloadViewModel.kt similarity index 70% rename from app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt rename to app/src/main/java/com/aurora/store/viewmodel/sheets/ManualDownloadViewModel.kt index 2cbc52fae..ba66e6be2 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/sheets/ManualDownloadViewModel.kt @@ -1,7 +1,5 @@ package com.aurora.store.viewmodel.sheets -import android.content.Context -import android.net.Uri import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -9,9 +7,6 @@ import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.helpers.PurchaseHelper import com.aurora.store.AuroraApp import com.aurora.store.data.event.BusEvent -import com.aurora.store.data.model.MinimalApp -import com.aurora.store.data.room.download.Download -import com.aurora.store.data.work.ExportWorker import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableSharedFlow @@ -20,11 +15,11 @@ import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel -class SheetsViewModel @Inject constructor( +class ManualDownloadViewModel @Inject constructor( private val purchaseHelper: PurchaseHelper ) : ViewModel() { - private val TAG = SheetsViewModel::class.java.simpleName + private val TAG = ManualDownloadViewModel::class.java.simpleName private val _purchaseStatus = MutableSharedFlow() val purchaseStatus = _purchaseStatus.asSharedFlow() @@ -45,12 +40,4 @@ class SheetsViewModel @Inject constructor( } } } - - fun copyInstalledApp(context: Context, app: MinimalApp, uri: Uri) { - ExportWorker.exportInstalledApp(context, app, uri) - } - - fun copyDownloadedApp(context: Context, download: Download, uri: Uri) { - ExportWorker.exportDownloadedApp(context, download, uri) - } }