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 <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-03-20 12:16:55 +05:30
parent c3bae480c4
commit 5cf7fa6b3c
24 changed files with 201 additions and 307 deletions

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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<App>?) {
B.recycler.withModels {
binding.recycler.withModels {
setFilterDuplicates(true)
if (appList == null) {
for (i in 1..10) {

View File

@@ -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) {

View File

@@ -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) {

View File

@@ -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()
}

View File

@@ -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) {

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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?) {

View File

@@ -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)
}
}

View File

@@ -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() {

View File

@@ -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) {

View File

@@ -50,7 +50,8 @@ class DownloadFragment : BaseFragment(R.layout.fragment_download) {
@Inject
lateinit var downloadWorkerUtil: DownloadWorkerUtil
lateinit var downloadList: List<Download>
private lateinit var downloadList: List<Download>
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

View File

@@ -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)
}
}

View File

@@ -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<App>): List<App> {

View File

@@ -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)
}
}
}

View File

@@ -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<Properties>) {
B.recycler.withModels {
binding.recycler.withModels {
setFilterDuplicates(true)
locales
.sortedBy { it.getProperty("UserReadableName") }

View File

@@ -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<Locale>) {
B.recycler.withModels {
binding.recycler.withModels {
setFilterDuplicates(true)
locales
.sortedBy { it.displayName }