From 5cf7fa6b3c8f1c40cae46f049df3743c7b2df57c Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 20 Mar 2024 12:16:55 +0530 Subject: [PATCH] Fragment: Multiple improvements to fragments * Use viewModels method to get ViewModel instances * Use view binding as recommended for fragments * Mark possible variables as private and val Signed-off-by: Aayush Gupta --- .../store/view/ui/account/GoogleFragment.kt | 4 +- .../store/view/ui/all/AppsGamesFragment.kt | 6 +- .../view/ui/all/InstalledAppsFragment.kt | 43 +++++--------- .../store/view/ui/all/LibraryAppsFragment.kt | 57 +++++++----------- .../view/ui/all/PurchasedAppsFragment.kt | 59 +++++++------------ .../view/ui/commons/BlacklistFragment.kt | 16 ++--- .../view/ui/commons/CategoryBrowseFragment.kt | 34 +++++------ .../store/view/ui/commons/CategoryFragment.kt | 3 +- .../view/ui/commons/EditorChoiceFragment.kt | 3 +- .../ui/commons/EditorStreamBrowseFragment.kt | 11 ++-- .../commons/ExpandedStreamBrowseFragment.kt | 17 +++--- .../store/view/ui/commons/ForYouFragment.kt | 17 ++---- .../view/ui/commons/StreamBrowseFragment.kt | 18 +++--- .../store/view/ui/commons/TopChartFragment.kt | 6 +- .../view/ui/details/DetailsMoreFragment.kt | 1 - .../view/ui/details/DetailsReviewFragment.kt | 15 ++--- .../store/view/ui/details/DevAppsFragment.kt | 17 ++---- .../view/ui/details/DevProfileFragment.kt | 23 +++----- .../view/ui/downloads/DownloadFragment.kt | 3 +- .../store/view/ui/sale/AppSalesFragment.kt | 13 ++-- .../view/ui/search/SearchResultsFragment.kt | 31 ++++------ .../ui/search/SearchSuggestionFragment.kt | 14 ++--- .../view/ui/spoof/DeviceSpoofFragment.kt | 48 ++++++--------- .../view/ui/spoof/LocaleSpoofFragment.kt | 49 +++++++-------- 24 files changed, 201 insertions(+), 307 deletions(-) diff --git a/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt b/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt index cb207d33e..01a701b9a 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/GoogleFragment.kt @@ -61,12 +61,12 @@ class GoogleFragment : Fragment(R.layout.fragment_google) { private val binding: FragmentGoogleBinding get() = _binding!! - private val cookieManager = CookieManager.getInstance() - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentGoogleBinding.bind(view) + val cookieManager = CookieManager.getInstance() + binding.webview.apply { cookieManager.removeAllCookies(null) cookieManager.acceptThirdPartyCookies(this) diff --git a/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt index bd78ee35c..12de1fb24 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/AppsGamesFragment.kt @@ -27,7 +27,6 @@ import androidx.fragment.app.FragmentManager import androidx.lifecycle.Lifecycle import androidx.navigation.fragment.findNavController import androidx.viewpager2.adapter.FragmentStateAdapter -import com.aurora.gplayapi.data.models.AuthData import com.aurora.store.R import com.aurora.store.data.providers.AuthProvider import com.aurora.store.databinding.ActivityGenericPagerBinding @@ -42,12 +41,11 @@ class AppsGamesFragment : Fragment(R.layout.activity_generic_pager) { private val binding: ActivityGenericPagerBinding get() = _binding!! - private lateinit var authData: AuthData - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericPagerBinding.bind(view) - authData = AuthProvider.with(view.context).getAuthData() + + val authData = AuthProvider.with(view.context).getAuthData() // Toolbar binding.layoutActionToolbar.toolbar.apply { diff --git a/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt index 17faf2406..4a7bb33d2 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/InstalledAppsFragment.kt @@ -20,10 +20,8 @@ package com.aurora.store.view.ui.all import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import com.aurora.gplayapi.data.models.App import com.aurora.store.R import com.aurora.store.databinding.FragmentAppsBinding @@ -35,10 +33,13 @@ import com.aurora.store.viewmodel.all.InstalledViewModel import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class InstalledAppsFragment : BaseFragment() { +class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) { - private lateinit var VM: InstalledViewModel - private lateinit var B: FragmentAppsBinding + private var _binding: FragmentAppsBinding? = null + private val binding: FragmentAppsBinding + get() = _binding!! + + private val viewModel: InstalledViewModel by viewModels() companion object { @JvmStatic @@ -47,36 +48,24 @@ class InstalledAppsFragment : BaseFragment() { } } - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - B = FragmentAppsBinding.bind( - inflater.inflate( - R.layout.fragment_apps, - container, - false - ) - ) - - VM = ViewModelProvider(requireActivity())[InstalledViewModel::class.java] - VM.observe() - - return B.root - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - VM.liveData.observe(viewLifecycleOwner) { + _binding = FragmentAppsBinding.bind(view) + + viewModel.liveData.observe(viewLifecycleOwner) { updateController(it) } updateController(null) } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun updateController(appList: List?) { - B.recycler.withModels { + binding.recycler.withModels { setFilterDuplicates(true) if (appList == null) { for (i in 1..10) { diff --git a/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt index 1a6e3bc17..d87709eaa 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/LibraryAppsFragment.kt @@ -20,14 +20,11 @@ package com.aurora.store.view.ui.all import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.store.R import com.aurora.store.databinding.FragmentAppsBinding -import com.aurora.store.databinding.FragmentUpdatesBinding import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener import com.aurora.store.view.epoxy.views.AppProgressViewModel_ import com.aurora.store.view.epoxy.views.HeaderViewModel_ @@ -38,11 +35,13 @@ import com.aurora.store.viewmodel.all.LibraryAppsViewModel import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class LibraryAppsFragment : BaseFragment() { +class LibraryAppsFragment : BaseFragment(R.layout.fragment_apps) { - private lateinit var VM: LibraryAppsViewModel - private lateinit var B: FragmentAppsBinding - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private var _binding: FragmentAppsBinding? = null + private val binding: FragmentAppsBinding + get() = _binding!! + + private val viewModel: LibraryAppsViewModel by viewModels() companion object { @JvmStatic @@ -53,45 +52,31 @@ class LibraryAppsFragment : BaseFragment() { } } - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - B = FragmentAppsBinding.bind( - inflater.inflate( - R.layout.fragment_apps, - container, - false - ) - ) - - VM = ViewModelProvider(requireActivity()).get(LibraryAppsViewModel::class.java) - - return B.root - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - VM.liveData.observe(viewLifecycleOwner) { + _binding = FragmentAppsBinding.bind(view) + + val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { + override fun onLoadMore(currentPage: Int) { + viewModel.observe() + } + } + binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) + + viewModel.liveData.observe(viewLifecycleOwner) { updateController(it) } - attachRecycler() updateController(null) } - private fun attachRecycler() { - endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { - override fun onLoadMore(currentPage: Int) { - VM.observe() - } - } - B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) + override fun onDestroyView() { + super.onDestroyView() + _binding = null } private fun updateController(streamCluster: StreamCluster?) { - B.recycler.withModels { + binding.recycler.withModels { setFilterDuplicates(true) if (streamCluster == null) { for (i in 1..10) { diff --git a/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt index 8dbbd13ec..c96517a45 100644 --- a/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/all/PurchasedAppsFragment.kt @@ -20,10 +20,8 @@ package com.aurora.store.view.ui.all import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import com.aurora.store.R import com.aurora.store.databinding.FragmentAppsBinding import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener @@ -36,11 +34,13 @@ import com.aurora.store.viewmodel.all.PurchasedViewModel import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class PurchasedAppsFragment : BaseFragment() { +class PurchasedAppsFragment : BaseFragment(R.layout.fragment_apps) { - private lateinit var VM: PurchasedViewModel - private lateinit var B: FragmentAppsBinding - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private var _binding: FragmentAppsBinding? = null + private val binding: FragmentAppsBinding + get() = _binding!! + + private val viewModel: PurchasedViewModel by viewModels() companion object { @JvmStatic @@ -49,48 +49,33 @@ class PurchasedAppsFragment : BaseFragment() { } } - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - B = FragmentAppsBinding.bind( - inflater.inflate( - R.layout.fragment_apps, - container, - false - ) - ) - - VM = ViewModelProvider(requireActivity())[PurchasedViewModel::class.java] - - return B.root - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - VM.liveData.observe(viewLifecycleOwner) { - updateController(it) + _binding = FragmentAppsBinding.bind(view) + + val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener(8) { + override fun onLoadMore(currentPage: Int) { + viewModel.observe() + } } - attachRecycler() + binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) + + viewModel.liveData.observe(viewLifecycleOwner) { + updateController(it) + } updateController(null) } - private fun attachRecycler() { - val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener(8) { - override fun onLoadMore(currentPage: Int) { - VM.observe() - } - } - - B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) + override fun onDestroyView() { + super.onDestroyView() + _binding = null } private fun updateController(paginatedAppList: PaginatedAppList?) { - B.recycler.withModels { + binding.recycler.withModels { setFilterDuplicates(true) if (paginatedAppList == null) { for (i in 1..10) { diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/BlacklistFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/BlacklistFragment.kt index 8099043eb..5895ff6e8 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/BlacklistFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/BlacklistFragment.kt @@ -22,7 +22,7 @@ package com.aurora.store.view.ui.commons import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.aurora.store.R import com.aurora.store.data.model.Black @@ -40,17 +40,17 @@ class BlacklistFragment : Fragment(R.layout.activity_generic_recycler) { private val binding: ActivityGenericRecyclerBinding get() = _binding!! - private lateinit var VM: BlacklistViewModel + private val viewModel: BlacklistViewModel by viewModels() + private lateinit var blacklistProvider: BlacklistProvider override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - VM = ViewModelProvider(this)[BlacklistViewModel::class.java] blacklistProvider = BlacklistProvider.with(view.context) - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { updateController(it.sortedByDescending { app -> blacklistProvider.isBlacklisted(app.packageName) }) @@ -67,7 +67,7 @@ class BlacklistFragment : Fragment(R.layout.activity_generic_recycler) { override fun onPause() { super.onPause() - blacklistProvider.save(VM.selected) + blacklistProvider.save(viewModel.selected) } override fun onDestroyView() { @@ -91,12 +91,12 @@ class BlacklistFragment : Fragment(R.layout.activity_generic_recycler) { BlackListViewModel_() .id(it.packageName.hashCode()) .black(it) - .markChecked(VM.selected.contains(it.packageName)) + .markChecked(viewModel.selected.contains(it.packageName)) .checked { _, isChecked -> if (isChecked) - VM.selected.add(it.packageName) + viewModel.selected.add(it.packageName) else - VM.selected.remove(it.packageName) + viewModel.selected.remove(it.packageName) requestModelBuild() } diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/CategoryBrowseFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/CategoryBrowseFragment.kt index 65d7aea38..7db75e81b 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/CategoryBrowseFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/CategoryBrowseFragment.kt @@ -22,7 +22,7 @@ package com.aurora.store.view.ui.commons import android.os.Bundle import android.view.View import android.widget.Toast -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.aurora.gplayapi.data.models.App @@ -46,18 +46,16 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler), get() = _binding!! private val args: CategoryBrowseFragmentArgs by navArgs() + private val viewModel: SubCategoryClusterViewModel by viewModels() - lateinit var C: GenericCarouselController - lateinit var VM: SubCategoryClusterViewModel - - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private lateinit var genericCarouselController: GenericCarouselController + private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - C = CategoryCarouselController(this) - VM = ViewModelProvider(this)[SubCategoryClusterViewModel::class.java] + genericCarouselController = CategoryCarouselController(this) // Toolbar binding.layoutToolbarAction.apply { @@ -66,9 +64,9 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler), } // RecyclerView - binding.recycler.setController(C) + binding.recycler.setController(genericCarouselController) - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { when (it) { is ViewState.Empty -> { } @@ -89,17 +87,16 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler), } } - endlessRecyclerOnScrollListener = - object : EndlessRecyclerOnScrollListener() { - override fun onLoadMore(currentPage: Int) { - VM.observe() - } + endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { + override fun onLoadMore(currentPage: Int) { + viewModel.observe() } + } endlessRecyclerOnScrollListener.disable() binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) - VM.observeCategory(args.browseUrl) + viewModel.observeCategory(args.browseUrl) updateController(null) } @@ -109,9 +106,8 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler), } private fun updateController(streamBundle: StreamBundle?) { - if (streamBundle != null) - endlessRecyclerOnScrollListener.enable() - C.setData(streamBundle) + if (streamBundle != null) endlessRecyclerOnScrollListener.enable() + genericCarouselController.setData(streamBundle) } override fun onHeaderClicked(streamCluster: StreamCluster) { @@ -127,7 +123,7 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler), } override fun onClusterScrolled(streamCluster: StreamCluster) { - VM.observeCluster(streamCluster) + viewModel.observeCluster(streamCluster) } override fun onAppClick(app: App) { diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/CategoryFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/CategoryFragment.kt index 192e21e85..971d1ec2c 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/CategoryFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/CategoryFragment.kt @@ -38,8 +38,6 @@ class CategoryFragment : BaseFragment(R.layout.fragment_generic_recycler) { private val viewModel: CategoryViewModel by viewModels() - private var pageType = 0 - companion object { @JvmStatic fun newInstance(pageType: Int): CategoryFragment { @@ -55,6 +53,7 @@ class CategoryFragment : BaseFragment(R.layout.fragment_generic_recycler) { super.onViewCreated(view, savedInstanceState) _binding = FragmentGenericRecyclerBinding.bind(view) + var pageType = 0 val bundle = arguments if (bundle != null) { pageType = bundle.getInt(Constants.PAGE_TYPE, 0) diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/EditorChoiceFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/EditorChoiceFragment.kt index 4ee5e63d9..97b102166 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/EditorChoiceFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/EditorChoiceFragment.kt @@ -40,8 +40,6 @@ class EditorChoiceFragment : BaseFragment(R.layout.fragment_for_you), private val viewModel: EditorChoiceViewModel by viewModels() - private var pageType = 0 - companion object { @JvmStatic fun newInstance(pageType: Int): EditorChoiceFragment { @@ -57,6 +55,7 @@ class EditorChoiceFragment : BaseFragment(R.layout.fragment_for_you), super.onViewCreated(view, savedInstanceState) _binding = FragmentForYouBinding.bind(view) + var pageType = 0 val bundle = arguments if (bundle != null) { pageType = bundle.getInt(Constants.PAGE_TYPE, 0) diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/EditorStreamBrowseFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/EditorStreamBrowseFragment.kt index 1b55f3272..4eb679e55 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/EditorStreamBrowseFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/EditorStreamBrowseFragment.kt @@ -21,7 +21,7 @@ package com.aurora.store.view.ui.commons import android.os.Bundle import android.view.View -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.airbnb.epoxy.EpoxyModel @@ -46,15 +46,12 @@ class EditorStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycl get() = _binding!! private val args: EditorStreamBrowseFragmentArgs by navArgs() - - lateinit var VM: EditorBrowseViewModel - lateinit var title: String + private val viewModel: EditorBrowseViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - VM = ViewModelProvider(this)[EditorBrowseViewModel::class.java] // Toolbar binding.layoutToolbarAction.apply { @@ -64,11 +61,11 @@ class EditorStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycl } } - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { updateController(it) } - VM.getEditorStreamBundle(args.browseUrl) + viewModel.getEditorStreamBundle(args.browseUrl) updateController(null) } diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/ExpandedStreamBrowseFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/ExpandedStreamBrowseFragment.kt index e7bd63842..d18b773b5 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/ExpandedStreamBrowseFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/ExpandedStreamBrowseFragment.kt @@ -21,7 +21,7 @@ package com.aurora.store.view.ui.commons import android.os.Bundle import android.view.View -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.airbnb.epoxy.EpoxyModel @@ -46,17 +46,14 @@ class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recy get() = _binding!! private val args: ExpandedStreamBrowseFragmentArgs by navArgs() + private val viewModel: ExpandedStreamBrowseViewModel by viewModels() - lateinit var VM: ExpandedStreamBrowseViewModel - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener - - lateinit var title: String - lateinit var cluster: StreamCluster + private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private lateinit var cluster: StreamCluster override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - VM = ViewModelProvider(this)[ExpandedStreamBrowseViewModel::class.java] // Toolbar binding.layoutToolbarAction.apply { @@ -66,7 +63,7 @@ class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recy } } - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { if (!::cluster.isInitialized) attachRecycler() cluster = it @@ -74,7 +71,7 @@ class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recy updateTitle(cluster) } - VM.getInitialCluster(args.expandedStreamUrl) + viewModel.getInitialCluster(args.expandedStreamUrl) updateController(null) } @@ -91,7 +88,7 @@ class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recy private fun attachRecycler() { endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { - VM.next() + viewModel.next() } } binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/ForYouFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/ForYouFragment.kt index 01a3485ce..4df2e5a1c 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/ForYouFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/ForYouFragment.kt @@ -45,11 +45,8 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you), private val viewModel: BaseClusterViewModel by viewModels() - private lateinit var C: GenericCarouselController private lateinit var streamBundle: StreamBundle - private var pageType = 0 - companion object { @JvmStatic fun newInstance(pageType: Int): ForYouFragment { @@ -65,8 +62,9 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you), super.onViewCreated(view, savedInstanceState) _binding = FragmentForYouBinding.bind(view) - C = GenericCarouselController(this) + val genericCarouselController = GenericCarouselController(this) + var pageType = 0 val bundle = arguments if (bundle != null) { pageType = bundle.getInt(Constants.PAGE_TYPE, 0) @@ -77,7 +75,7 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you), 1 -> viewModel.getStreamBundle(Category.GAME, Type.HOME) } - binding.recycler.setController(C) + binding.recycler.setController(genericCarouselController) viewModel.liveData.observe(viewLifecycleOwner) { when (it) { @@ -85,7 +83,7 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you), } is ViewState.Loading -> { - updateController(null) + genericCarouselController.setData(null) } is ViewState.Error -> { @@ -108,8 +106,7 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you), } streamBundle = it.data as StreamBundle - - updateController(streamBundle) + genericCarouselController.setData(streamBundle) } } } @@ -120,10 +117,6 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you), _binding = null } - private fun updateController(streamBundle: StreamBundle?) { - C.setData(streamBundle) - } - override fun onHeaderClicked(streamCluster: StreamCluster) { if (streamCluster.clusterBrowseUrl.isNotEmpty()) openStreamBrowseFragment(streamCluster.clusterBrowseUrl, streamCluster.clusterTitle) diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseFragment.kt index 2ad397f87..93d872858 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/StreamBrowseFragment.kt @@ -21,7 +21,7 @@ package com.aurora.store.view.ui.commons import android.os.Bundle import android.view.View -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.aurora.gplayapi.data.models.StreamCluster @@ -42,18 +42,14 @@ class StreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) { get() = _binding!! private val args: StreamBrowseFragmentArgs by navArgs() + private val viewModel: StreamBrowseViewModel by viewModels() - lateinit var VM: StreamBrowseViewModel - - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener - - lateinit var title: String - lateinit var cluster: StreamCluster + private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private lateinit var cluster: StreamCluster override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - VM = ViewModelProvider(this)[StreamBrowseViewModel::class.java] // Toolbar binding.layoutToolbarAction.apply { @@ -63,11 +59,11 @@ class StreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) { } } - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { if (!::cluster.isInitialized) { endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { - VM.nextCluster() + viewModel.nextCluster() } } binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) @@ -79,7 +75,7 @@ class StreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) { binding.layoutToolbarAction.txtTitle.text = it.clusterTitle } - VM.getStreamBundle(args.browseUrl) + viewModel.getStreamBundle(args.browseUrl) updateController(null) } diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/TopChartFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/TopChartFragment.kt index 4cc51b071..a17762db7 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/TopChartFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/TopChartFragment.kt @@ -43,9 +43,6 @@ class TopChartFragment : BaseFragment(R.layout.fragment_top_container) { private val viewModel: TopChartViewModel by viewModels() - private var chartType = 0 - private var chartCategory = 0 - companion object { @JvmStatic fun newInstance(chartType: Int, chartCategory: Int): TopChartFragment { @@ -62,7 +59,10 @@ class TopChartFragment : BaseFragment(R.layout.fragment_top_container) { super.onViewCreated(view, savedInstanceState) _binding = FragmentTopContainerBinding.bind(view) + var chartType = 0 + var chartCategory = 0 val bundle = arguments + if (bundle != null) { chartType = bundle.getInt(Constants.TOP_CHART_TYPE, 0) chartCategory = bundle.getInt(Constants.TOP_CHART_CATEGORY, 0) diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreFragment.kt index 60f85b218..ec7e58c9f 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsMoreFragment.kt @@ -48,7 +48,6 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) { get() = _binding!! private val viewModel: DetailsMoreViewModel by viewModels() - private val args: DetailsMoreFragmentArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewFragment.kt index 64f19664d..65aaed802 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsReviewFragment.kt @@ -22,7 +22,7 @@ package com.aurora.store.view.ui.details import android.os.Bundle import android.view.View import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.aurora.gplayapi.data.models.Review @@ -43,18 +43,15 @@ class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) { get() = _binding!! private val args: DetailsReviewFragmentArgs by navArgs() - - private lateinit var VM: ReviewViewModel + private val viewModel: ReviewViewModel by viewModels() private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener - private lateinit var filter: Review.Filter private lateinit var reviewCluster: ReviewCluster override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentDetailsReviewBinding.bind(view) - VM = ViewModelProvider(this)[ReviewViewModel::class.java] // Toolbar binding.layoutToolbarActionReview.apply { @@ -64,12 +61,12 @@ class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) { } } - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { if (!::reviewCluster.isInitialized) { endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { if (::reviewCluster.isInitialized) { - VM.next(reviewCluster.nextPageUrl) + viewModel.next(reviewCluster.nextPageUrl) } } } @@ -84,7 +81,7 @@ class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) { // Fetch Reviews filter = Review.Filter.ALL - VM.fetchReview(args.packageName, filter) + viewModel.fetchReview(args.packageName, filter) // Chips binding.chipGroup.setOnCheckedStateChangeListener { _, checkedIds -> @@ -100,7 +97,7 @@ class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) { } endlessRecyclerOnScrollListener.resetPageCount() - VM.fetchReview(args.packageName, filter) + viewModel.fetchReview(args.packageName, filter) } } diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DevAppsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/DevAppsFragment.kt index ab53496c1..1db1b488a 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DevAppsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DevAppsFragment.kt @@ -21,7 +21,7 @@ package com.aurora.store.view.ui.details import android.os.Bundle import android.view.View -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.aurora.gplayapi.data.models.SearchBundle @@ -33,7 +33,6 @@ import com.aurora.store.view.epoxy.views.app.AppListViewModel_ import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.viewmodel.search.SearchResultViewModel import dagger.hilt.android.AndroidEntryPoint -import okhttp3.internal.filterList @AndroidEntryPoint class DevAppsFragment : BaseFragment(R.layout.activity_generic_recycler) { @@ -43,17 +42,13 @@ class DevAppsFragment : BaseFragment(R.layout.activity_generic_recycler) { get() = _binding!! private val args: DevAppsFragmentArgs by navArgs() - - private lateinit var VM: SearchResultViewModel - - private lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private val viewModel: SearchResultViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - VM = ViewModelProvider(this)[SearchResultViewModel::class.java] - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { updateController(it) } @@ -66,14 +61,14 @@ class DevAppsFragment : BaseFragment(R.layout.activity_generic_recycler) { } // Recycler View - endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { + val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { - VM.liveData.value?.let { VM.next(it.subBundles) } + viewModel.liveData.value?.let { viewModel.next(it.subBundles) } } } binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) - VM.observeSearchResults("pub:${args.developerName}") + viewModel.observeSearchResults("pub:${args.developerName}") } override fun onDestroyView() { diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DevProfileFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/DevProfileFragment.kt index 9df414acc..f548ddc58 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/DevProfileFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/DevProfileFragment.kt @@ -21,12 +21,11 @@ package com.aurora.store.view.ui.details import android.os.Bundle import android.view.View -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import coil.load import com.aurora.gplayapi.data.models.App -import com.aurora.gplayapi.data.models.AuthData import com.aurora.gplayapi.data.models.StreamCluster import com.aurora.gplayapi.data.models.details.DevStream import com.aurora.store.R @@ -48,18 +47,14 @@ class DevProfileFragment : BaseFragment(R.layout.fragment_dev_profile), get() = _binding!! private val args: DevProfileFragmentArgs by navArgs() - - private lateinit var VM: DevProfileViewModel - private lateinit var C: DeveloperCarouselController - private lateinit var authData: AuthData + private val viewModel: DevProfileViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentDevProfileBinding.bind(view) - C = DeveloperCarouselController(this) - VM = ViewModelProvider(this)[DevProfileViewModel::class.java] - authData = AuthProvider.with(requireContext()).getAuthData() + val developerCarouselController = DeveloperCarouselController(this) + val authData = AuthProvider.with(requireContext()).getAuthData() // Toolbar binding.layoutToolbarAction.apply { @@ -69,9 +64,9 @@ class DevProfileFragment : BaseFragment(R.layout.fragment_dev_profile), } // RecyclerView - binding.recycler.setController(C) + binding.recycler.setController(developerCarouselController) - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { when (it) { is ViewState.Empty -> { } @@ -95,14 +90,14 @@ class DevProfileFragment : BaseFragment(R.layout.fragment_dev_profile), binding.txtDevDescription.text = description binding.imgIcon.load(imgUrl) binding.viewFlipper.displayedChild = 0 - C.setData(streamBundle) + developerCarouselController.setData(streamBundle) } } } } binding.viewFlipper.displayedChild = 1 - VM.getStreamBundle(args.devId) + viewModel.getStreamBundle(args.devId) } override fun onDestroyView() { @@ -115,7 +110,7 @@ class DevProfileFragment : BaseFragment(R.layout.fragment_dev_profile), } override fun onClusterScrolled(streamCluster: StreamCluster) { - VM.observeCluster(streamCluster) + viewModel.observeCluster(streamCluster) } override fun onAppClick(app: App) { 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 258873e2a..3124d42c3 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 @@ -50,7 +50,8 @@ class DownloadFragment : BaseFragment(R.layout.fragment_download) { @Inject lateinit var downloadWorkerUtil: DownloadWorkerUtil - lateinit var downloadList: List + + private lateinit var downloadList: List override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesFragment.kt b/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesFragment.kt index 340cb28d4..583a74f18 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sale/AppSalesFragment.kt @@ -21,7 +21,7 @@ package com.aurora.store.view.ui.sale import android.os.Bundle import android.view.View -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.aurora.store.R import com.aurora.store.databinding.ActivityGenericRecyclerBinding @@ -43,30 +43,27 @@ class AppSalesFragment : BaseFragment(R.layout.activity_generic_recycler) { private val binding: ActivityGenericRecyclerBinding get() = _binding!! - lateinit var VM: AppSalesViewModel - - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener + private val viewModel: AppSalesViewModel by viewModels() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = ActivityGenericRecyclerBinding.bind(view) - VM = ViewModelProvider(this)[AppSalesViewModel::class.java] binding.layoutToolbarAction.txtTitle.text = getString(R.string.title_apps_sale) binding.layoutToolbarAction.imgActionPrimary.setOnClickListener { findNavController().navigateUp() } - endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { + val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { - VM.observe() + viewModel.observe() } } binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) updateController(null) - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { updateController(it) } } diff --git a/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt index 47e662843..fda9f3bc3 100644 --- a/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt @@ -28,7 +28,7 @@ import android.view.KeyEvent import android.view.View import android.view.inputmethod.EditorInfo import android.widget.TextView -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.SearchBundle @@ -44,10 +44,8 @@ import com.aurora.store.view.epoxy.views.app.NoAppViewModel_ import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_ import com.aurora.store.view.ui.commons.BaseFragment import com.aurora.store.viewmodel.search.SearchResultViewModel -import com.google.android.material.snackbar.Snackbar import com.google.android.material.textfield.TextInputEditText import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.launch @AndroidEntryPoint class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), @@ -57,25 +55,22 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), private val binding: FragmentSearchResultBinding get() = _binding!! - lateinit var VM: SearchResultViewModel + private val viewModel: SearchResultViewModel by viewModels() - lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener - lateinit var searchView: TextInputEditText + private lateinit var searchView: TextInputEditText - lateinit var sharedPreferences: SharedPreferences - lateinit var filter: Filter + private lateinit var sharedPreferences: SharedPreferences + private lateinit var filter: Filter - var query: String? = null - var searchBundle: SearchBundle = SearchBundle() + private var query: String? = null + private var searchBundle: SearchBundle = SearchBundle() private var shimmerAnimationVisible = false - private var snackbar: Snackbar? = null override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentSearchResultBinding.bind(view) - VM = ViewModelProvider(this)[SearchResultViewModel::class.java] sharedPreferences = Preferences.getPrefs(view.context) sharedPreferences.registerOnSharedPreferenceChangeListener(this) @@ -96,9 +91,9 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), attachSearch() // RecyclerView - endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { + val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() { override fun onLoadMore(currentPage: Int) { - VM.next(searchBundle.subBundles) + viewModel.next(searchBundle.subBundles) } } binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener) @@ -108,7 +103,7 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), findNavController().navigate(R.id.filterSheet) } - VM.liveData.observe(viewLifecycleOwner) { + viewModel.liveData.observe(viewLifecycleOwner) { if (shimmerAnimationVisible) { endlessRecyclerOnScrollListener.resetPageCount() binding.recycler.clear() @@ -148,7 +143,7 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), if (filteredAppList.isEmpty()) { if (searchBundle.subBundles.isNotEmpty()) { - VM.next(searchBundle.subBundles) + viewModel.next(searchBundle.subBundles) binding.recycler.withModels { setFilterDuplicates(true) add( @@ -197,7 +192,7 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), binding.recycler.adapter?.let { if (it.itemCount < 10) { - VM.next(searchBundle.subBundles) + viewModel.next(searchBundle.subBundles) } } } @@ -240,7 +235,7 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result), private fun queryViewModel(query: String) { updateController(null) - VM.observeSearchResults(query) + viewModel.observeSearchResults(query) } private fun filter(appList: MutableList): List { diff --git a/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt b/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt index 66564b54a..2842bd928 100644 --- a/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt @@ -27,7 +27,7 @@ import android.view.View import android.view.inputmethod.EditorInfo import android.widget.TextView import androidx.fragment.app.Fragment -import androidx.lifecycle.ViewModelProvider +import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import com.aurora.extensions.showKeyboard import com.aurora.gplayapi.SearchSuggestEntry @@ -45,16 +45,16 @@ class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) { private val binding: FragmentSearchSuggestionBinding get() = _binding!! - lateinit var VM: SearchSuggestionViewModel - lateinit var searchView: TextInputEditText + private val viewModel: SearchSuggestionViewModel by viewModels() - var query: String = String() + private lateinit var searchView: TextInputEditText + + private var query: String = String() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) _binding = FragmentSearchSuggestionBinding.bind(view) - VM = ViewModelProvider(this)[SearchSuggestionViewModel::class.java] // Toolbar binding.layoutToolbarSearch.apply { @@ -67,7 +67,7 @@ class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) { } } - VM.liveSearchSuggestions.observe(viewLifecycleOwner) { + viewModel.liveSearchSuggestions.observe(viewLifecycleOwner) { updateController(it) } @@ -113,7 +113,7 @@ class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) { if (s.isNotEmpty()) { query = s.toString() if (query.isNotEmpty()) { - VM.observeStreamBundles(query) + viewModel.observeStreamBundles(query) } } } 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 e9316d9a0..b57f0be30 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 @@ -20,9 +20,7 @@ package com.aurora.store.view.ui.spoof 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 @@ -40,15 +38,16 @@ import kotlinx.coroutines.launch import java.util.Properties @AndroidEntryPoint -class DeviceSpoofFragment : BaseFragment() { +class DeviceSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) { - private lateinit var B: FragmentGenericRecyclerBinding - private lateinit var spoofProvider: SpoofProvider - - private var properties: Properties = Properties() + private var _binding: FragmentGenericRecyclerBinding? = null + private val binding get() = _binding!! private val viewModel: SpoofViewModel by viewModels() + private lateinit var spoofProvider: SpoofProvider + private lateinit var properties: Properties + companion object { @JvmStatic fun newInstance(): DeviceSpoofFragment { @@ -58,30 +57,16 @@ class DeviceSpoofFragment : BaseFragment() { } } - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - B = FragmentGenericRecyclerBinding.bind( - inflater.inflate( - R.layout.fragment_generic_recycler, - container, - false - ) - ) - - properties = NativeDeviceInfoProvider(requireContext()).getNativeDeviceProperties() - spoofProvider = SpoofProvider(requireContext()) - - return B.root - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentGenericRecyclerBinding.bind(view) - if (spoofProvider.isDeviceSpoofEnabled()) - properties = spoofProvider.getSpoofDeviceProperties() + spoofProvider = SpoofProvider(requireContext()) + properties = if (spoofProvider.isDeviceSpoofEnabled()) { + spoofProvider.getSpoofDeviceProperties() + } else { + NativeDeviceInfoProvider(requireContext()).getNativeDeviceProperties() + } viewLifecycleOwner.lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { @@ -91,8 +76,13 @@ class DeviceSpoofFragment : BaseFragment() { viewModel.fetchAvailableDevices(view.context) } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun updateController(locales: List) { - B.recycler.withModels { + binding.recycler.withModels { setFilterDuplicates(true) locales .sortedBy { it.getProperty("UserReadableName") } diff --git a/app/src/main/java/com/aurora/store/view/ui/spoof/LocaleSpoofFragment.kt b/app/src/main/java/com/aurora/store/view/ui/spoof/LocaleSpoofFragment.kt index dbac3178c..1f7cf066d 100644 --- a/app/src/main/java/com/aurora/store/view/ui/spoof/LocaleSpoofFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/spoof/LocaleSpoofFragment.kt @@ -21,9 +21,7 @@ package com.aurora.store.view.ui.spoof import android.os.Bundle import android.util.Log -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.data.providers.SpoofProvider @@ -34,15 +32,16 @@ import dagger.hilt.android.AndroidEntryPoint import java.util.Locale @AndroidEntryPoint -class LocaleSpoofFragment : BaseFragment() { - - private lateinit var B: FragmentGenericRecyclerBinding - private lateinit var spoofProvider: SpoofProvider - - private var locale: Locale = Locale.getDefault() +class LocaleSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) { private val TAG = LocaleSpoofFragment::class.java.simpleName + private var _binding: FragmentGenericRecyclerBinding? = null + private val binding get() = _binding!! + + private lateinit var spoofProvider: SpoofProvider + private lateinit var locale: Locale + companion object { @JvmStatic fun newInstance(): LocaleSpoofFragment { @@ -52,29 +51,16 @@ class LocaleSpoofFragment : BaseFragment() { } } - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - B = FragmentGenericRecyclerBinding.bind( - inflater.inflate( - R.layout.fragment_generic_recycler, - container, - false - ) - ) - - spoofProvider = SpoofProvider(requireContext()) - - return B.root - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = FragmentGenericRecyclerBinding.bind(view) - if (spoofProvider.isLocaleSpoofEnabled()) - locale = spoofProvider.getSpoofLocale() + spoofProvider = SpoofProvider(requireContext()) + locale = if (spoofProvider.isLocaleSpoofEnabled()) { + spoofProvider.getSpoofLocale() + } else { + Locale.getDefault() + } try { updateController(fetchAvailableLocales()) @@ -83,8 +69,13 @@ class LocaleSpoofFragment : BaseFragment() { } } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun updateController(locales: List) { - B.recycler.withModels { + binding.recycler.withModels { setFilterDuplicates(true) locales .sortedBy { it.displayName }