Improve viewbinding - [1/3]

This commit is contained in:
Rahul Patel
2024-07-10 23:31:42 +05:30
committed by Aayush Gupta
parent cb4f36c2d5
commit 47760b7407
43 changed files with 107 additions and 473 deletions

View File

@@ -21,7 +21,6 @@ package com.aurora.store.view.ui.about
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
@@ -33,18 +32,14 @@ import com.aurora.store.R
import com.aurora.store.data.model.Link
import com.aurora.store.databinding.FragmentAboutBinding
import com.aurora.store.view.epoxy.views.preference.LinkViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class AboutFragment : Fragment(R.layout.fragment_about) {
private var _binding: FragmentAboutBinding? = null
private val binding: FragmentAboutBinding
get() = _binding!!
class AboutFragment : BaseFragment<FragmentAboutBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAboutBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.txtTitle.text = getString(R.string.title_about)
@@ -66,11 +61,6 @@ class AboutFragment : Fragment(R.layout.fragment_about) {
updateController()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController() {
val linkURLS = resources.getStringArray(R.array.link_urls)
val linkTitles = resources.getStringArray(R.array.link_titles)

View File

@@ -21,7 +21,6 @@ package com.aurora.store.view.ui.account
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import coil.load
import coil.transform.RoundedCornersTransformation
@@ -33,22 +32,18 @@ import com.aurora.store.R
import com.aurora.store.data.providers.AccountProvider
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAccountBinding
import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class AccountFragment : Fragment(R.layout.fragment_account) {
private var _binding: FragmentAccountBinding? = null
private val binding: FragmentAccountBinding
get() = _binding!!
class AccountFragment : BaseFragment<FragmentAccountBinding>() {
@Inject
lateinit var authProvider: AuthProvider
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAccountBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.txtTitle.text = getString(R.string.title_account_manager)
@@ -70,7 +65,8 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
transformations(RoundedCornersTransformation(32F))
}
binding.txtName.text = if (authProvider.isAnonymous) "Anonymous" else it.name
binding.txtEmail.text = if (authProvider.isAnonymous) "anonymous@gmail.com" else it.email
binding.txtEmail.text =
if (authProvider.isAnonymous) "anonymous@gmail.com" else it.email
}
binding.btnLogout.addOnClickListener {
@@ -81,9 +77,4 @@ class AccountFragment : Fragment(R.layout.fragment_account) {
)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -29,7 +29,6 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@@ -38,12 +37,13 @@ import com.aurora.store.R
import com.aurora.store.data.event.BusEvent
import com.aurora.store.databinding.FragmentGoogleBinding
import com.aurora.store.util.AC2DMUtil
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.auth.AuthViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
@AndroidEntryPoint
class GoogleFragment : Fragment(R.layout.fragment_google) {
class GoogleFragment : BaseFragment<FragmentGoogleBinding>() {
private val viewModel: AuthViewModel by activityViewModels()
@@ -54,13 +54,8 @@ class GoogleFragment : Fragment(R.layout.fragment_google) {
"(function() { return document.getElementById('profileIdentifier').innerHTML; })();"
}
private var _binding: FragmentGoogleBinding? = null
private val binding: FragmentGoogleBinding
get() = _binding!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentGoogleBinding.bind(view)
val cookieManager = CookieManager.getInstance()
@@ -119,11 +114,6 @@ class GoogleFragment : Fragment(R.layout.fragment_google) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun onEventReceived(event: BusEvent) {
when (event) {
is BusEvent.GoogleAAS -> {

View File

@@ -30,24 +30,19 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import com.aurora.store.R
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.ActivityGenericPagerBinding
import com.aurora.store.view.ui.commons.BaseFragment
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class AppsGamesFragment : Fragment(R.layout.activity_generic_pager) {
private var _binding: ActivityGenericPagerBinding? = null
private val binding: ActivityGenericPagerBinding
get() = _binding!!
class AppsGamesFragment : BaseFragment<ActivityGenericPagerBinding>() {
@Inject
lateinit var authProvider: AuthProvider
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericPagerBinding.bind(view)
// Toolbar
binding.layoutActionToolbar.toolbar.apply {
@@ -77,11 +72,6 @@ class AppsGamesFragment : Fragment(R.layout.activity_generic_pager) {
}.attach()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
internal class ViewPagerAdapter(
fragment: FragmentManager,
lifecycle: Lifecycle,

View File

@@ -26,7 +26,6 @@ import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import com.aurora.gplayapi.data.models.App
import com.aurora.store.AuroraApp
import com.aurora.store.R
import com.aurora.store.data.event.BusEvent
import com.aurora.store.databinding.FragmentAppsBinding
import com.aurora.store.view.epoxy.views.HeaderViewModel_
@@ -38,14 +37,9 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
@AndroidEntryPoint
class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) {
class InstalledAppsFragment : BaseFragment<FragmentAppsBinding>() {
private val TAG = InstalledAppsFragment::class.java.simpleName
private var _binding: FragmentAppsBinding? = null
private val binding: FragmentAppsBinding
get() = _binding!!
private val viewModel: InstalledViewModel by activityViewModels()
companion object {
@@ -71,7 +65,6 @@ class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppsBinding.bind(view)
viewLifecycleOwner.lifecycleScope.launch {
viewModel.installedApps.collect {
@@ -84,11 +77,6 @@ class InstalledAppsFragment : BaseFragment(R.layout.fragment_apps) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(appList: List<App>?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -35,12 +35,7 @@ import com.aurora.store.viewmodel.all.LibraryAppsViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class LibraryAppsFragment : BaseFragment(R.layout.fragment_apps) {
private var _binding: FragmentAppsBinding? = null
private val binding: FragmentAppsBinding
get() = _binding!!
class LibraryAppsFragment : BaseFragment<FragmentAppsBinding>() {
private val viewModel: LibraryAppsViewModel by viewModels()
companion object {
@@ -54,7 +49,6 @@ class LibraryAppsFragment : BaseFragment(R.layout.fragment_apps) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppsBinding.bind(view)
val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() {
override fun onLoadMore(currentPage: Int) {
@@ -70,11 +64,6 @@ class LibraryAppsFragment : BaseFragment(R.layout.fragment_apps) {
updateController(null)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(streamCluster: StreamCluster?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -34,12 +34,7 @@ import com.aurora.store.viewmodel.all.PurchasedViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class PurchasedAppsFragment : BaseFragment(R.layout.fragment_apps) {
private var _binding: FragmentAppsBinding? = null
private val binding: FragmentAppsBinding
get() = _binding!!
class PurchasedAppsFragment : BaseFragment<FragmentAppsBinding>() {
private val viewModel: PurchasedViewModel by viewModels()
companion object {
@@ -51,7 +46,6 @@ class PurchasedAppsFragment : BaseFragment(R.layout.fragment_apps) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppsBinding.bind(view)
val endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener(8) {
override fun onLoadMore(currentPage: Int) {
@@ -68,12 +62,6 @@ class PurchasedAppsFragment : BaseFragment(R.layout.fragment_apps) {
updateController(null)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(paginatedAppList: PaginatedAppList?) {
binding.recycler.withModels {
setFilterDuplicates(true)
@@ -98,7 +86,7 @@ class PurchasedAppsFragment : BaseFragment(R.layout.fragment_apps) {
)
}
if (paginatedAppList.hasMore){
if (paginatedAppList.hasMore) {
add(
AppProgressViewModel_()
.id("progress")

View File

@@ -31,6 +31,7 @@ import com.aurora.store.R
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAppsGamesBinding
import com.aurora.store.util.Preferences
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.view.ui.commons.CategoryFragment
import com.aurora.store.view.ui.commons.EditorChoiceFragment
import com.aurora.store.view.ui.commons.ForYouFragment
@@ -41,17 +42,13 @@ import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class AppsContainerFragment : Fragment(R.layout.fragment_apps_games) {
private var _binding: FragmentAppsGamesBinding? = null
private val binding get() = _binding!!
class AppsContainerFragment : BaseFragment<FragmentAppsGamesBinding>() {
@Inject
lateinit var authProvider: AuthProvider
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppsGamesBinding.bind(view)
// Toolbar
binding.toolbar.apply {
@@ -61,6 +58,7 @@ class AppsContainerFragment : Fragment(R.layout.fragment_apps_games) {
R.id.menu_download_manager -> {
findNavController().navigate(R.id.downloadFragment)
}
R.id.menu_more -> {
findNavController().navigate(
MobileNavigationDirections.actionGlobalMoreDialogFragment()
@@ -114,9 +112,8 @@ class AppsContainerFragment : Fragment(R.layout.fragment_apps_games) {
}
override fun onDestroyView() {
super.onDestroyView()
binding.pager.adapter = null
_binding = null
super.onDestroyView()
}
internal class ViewPagerAdapter(

View File

@@ -19,24 +19,49 @@
package com.aurora.store.view.ui.commons
import androidx.annotation.LayoutRes
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.viewbinding.ViewBinding
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Category
import com.aurora.store.MobileNavigationDirections
import com.google.gson.Gson
import java.lang.reflect.ParameterizedType
import javax.inject.Inject
abstract class BaseFragment : Fragment {
constructor(): super()
constructor(@LayoutRes contentLayoutId: Int) : super(contentLayoutId)
abstract class BaseFragment<ViewBindingType : ViewBinding> : Fragment() {
@Inject
lateinit var gson: Gson
private var _binding: ViewBindingType? = null
protected val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val type =
(javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<ViewBindingType>
val method = type.getMethod(
"inflate",
LayoutInflater::class.java,
ViewGroup::class.java,
Boolean::class.java
)
_binding = method.invoke(null, inflater, container, false) as ViewBindingType
return binding.root
}
override fun onDestroyView() {
_binding = null
super.onDestroyView()
}
fun openDetailsFragment(packageName: String, app: App? = null) {
findNavController().navigate(
MobileNavigationDirections.actionGlobalAppDetailsFragment(packageName, app)

View File

@@ -21,7 +21,6 @@ package com.aurora.store.view.ui.commons
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@@ -36,12 +35,7 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
@AndroidEntryPoint
class BlacklistFragment : Fragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class BlacklistFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val viewModel: BlacklistViewModel by activityViewModels()
private lateinit var blacklistProvider: BlacklistProvider
@@ -49,7 +43,6 @@ class BlacklistFragment : Fragment(R.layout.activity_generic_recycler) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
blacklistProvider = BlacklistProvider.with(requireContext())
viewLifecycleOwner.lifecycleScope.launch {
@@ -70,11 +63,6 @@ class BlacklistFragment : Fragment(R.layout.activity_generic_recycler) {
blacklistProvider.save(viewModel.selected)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(blackList: List<App>?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -28,7 +28,6 @@ import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.StreamBundle
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.store.R
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.model.ViewState.Loading.getDataAs
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
@@ -39,13 +38,8 @@ import com.aurora.store.viewmodel.subcategory.SubCategoryClusterViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler),
class CategoryBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>(),
GenericCarouselController.Callbacks {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
private val args: CategoryBrowseFragmentArgs by navArgs()
private val viewModel: SubCategoryClusterViewModel by activityViewModels()
@@ -55,8 +49,6 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
val rawCategory = args.browseUrl.split("/").last()
category = StreamContract.Category.NONE.apply { value = rawCategory }
@@ -96,11 +88,6 @@ class CategoryBrowseFragment : BaseFragment(R.layout.activity_generic_recycler),
viewModel.observe(category)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onHeaderClicked(streamCluster: StreamCluster) {
}

View File

@@ -25,7 +25,6 @@ import androidx.fragment.app.viewModels
import com.aurora.Constants
import com.aurora.gplayapi.data.models.Category
import com.aurora.store.CategoryStash
import com.aurora.store.R
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.model.ViewState.Empty.getDataAs
import com.aurora.store.databinding.FragmentGenericRecyclerBinding
@@ -35,11 +34,7 @@ import com.aurora.store.viewmodel.category.CategoryViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class CategoryFragment : BaseFragment(R.layout.fragment_generic_recycler) {
private var _binding: FragmentGenericRecyclerBinding? = null
private val binding get() = _binding!!
class CategoryFragment : BaseFragment<FragmentGenericRecyclerBinding>() {
private val viewModel: CategoryViewModel by viewModels()
companion object {
@@ -55,7 +50,6 @@ class CategoryFragment : BaseFragment(R.layout.fragment_generic_recycler) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentGenericRecyclerBinding.bind(view)
var pageType = 0
val bundle = arguments
@@ -109,9 +103,4 @@ class CategoryFragment : BaseFragment(R.layout.fragment_generic_recycler) {
}
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -25,19 +25,14 @@ import androidx.fragment.app.viewModels
import com.aurora.Constants
import com.aurora.gplayapi.data.models.editor.EditorChoiceCluster
import com.aurora.gplayapi.helpers.contracts.StreamContract
import com.aurora.store.R
import com.aurora.store.databinding.FragmentForYouBinding
import com.aurora.store.view.epoxy.controller.EditorChoiceController
import com.aurora.store.viewmodel.editorschoice.EditorChoiceViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class EditorChoiceFragment : BaseFragment(R.layout.fragment_for_you),
class EditorChoiceFragment : BaseFragment<FragmentForYouBinding>(),
EditorChoiceController.Callbacks {
private var _binding: FragmentForYouBinding? = null
private val binding get() = _binding!!
private val viewModel: EditorChoiceViewModel by viewModels()
companion object {
@@ -53,7 +48,6 @@ class EditorChoiceFragment : BaseFragment(R.layout.fragment_for_you),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentForYouBinding.bind(view)
var pageType = 0
val bundle = arguments
@@ -74,11 +68,6 @@ class EditorChoiceFragment : BaseFragment(R.layout.fragment_for_you),
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onClick(editorChoiceCluster: EditorChoiceCluster) {
openEditorStreamBrowseFragment(
editorChoiceCluster.clusterBrowseUrl,

View File

@@ -26,7 +26,6 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.airbnb.epoxy.EpoxyModel
import com.aurora.gplayapi.data.models.App
import com.aurora.store.R
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_
import com.aurora.store.view.epoxy.views.EditorHeadViewModel_
@@ -39,20 +38,13 @@ import com.aurora.store.viewmodel.editorschoice.EditorBrowseViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class EditorStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class EditorStreamBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val args: EditorStreamBrowseFragmentArgs by navArgs()
private val viewModel: EditorBrowseViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.apply {
txtTitle.text = args.title
@@ -69,11 +61,6 @@ class EditorStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycl
updateController(null)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(appList: MutableList<App>?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -26,7 +26,6 @@ import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.airbnb.epoxy.EpoxyModel
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.store.R
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
import com.aurora.store.view.epoxy.groups.CarouselHorizontalModel_
@@ -39,12 +38,7 @@ import com.aurora.store.viewmodel.browse.ExpandedStreamBrowseViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class ExpandedStreamBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val args: ExpandedStreamBrowseFragmentArgs by navArgs()
private val viewModel: ExpandedStreamBrowseViewModel by viewModels()
@@ -53,7 +47,6 @@ class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recy
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.apply {
@@ -75,11 +68,6 @@ class ExpandedStreamBrowseFragment : BaseFragment(R.layout.activity_generic_recy
updateController(null)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateTitle(streamCluster: StreamCluster) {
if (streamCluster.clusterTitle.isNotEmpty())
binding.layoutToolbarAction.txtTitle.text = streamCluster.clusterTitle

View File

@@ -39,12 +39,7 @@ import kotlinx.coroutines.launch
import java.util.Calendar
@AndroidEntryPoint
class FavouriteFragment : BaseFragment(R.layout.fragment_favourite) {
private var _binding: FragmentFavouriteBinding? = null
private val binding: FragmentFavouriteBinding
get() = _binding!!
class FavouriteFragment : BaseFragment<FragmentFavouriteBinding>() {
private val viewModel: FavouriteViewModel by viewModels()
private val mimeType = "application/json"
@@ -60,8 +55,6 @@ class FavouriteFragment : BaseFragment(R.layout.fragment_favourite) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentFavouriteBinding.bind(view)
viewLifecycleOwner.lifecycleScope.launch {
viewModel.favouritesList.collect {
updateController(it)
@@ -87,11 +80,6 @@ class FavouriteFragment : BaseFragment(R.layout.fragment_favourite) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(favourites: List<Favourite>?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -29,7 +29,6 @@ import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.contracts.StreamContract.Category
import com.aurora.gplayapi.helpers.contracts.StreamContract.Type
import com.aurora.store.HomeStash
import com.aurora.store.R
import com.aurora.store.data.model.ViewState
import com.aurora.store.data.model.ViewState.Loading.getDataAs
import com.aurora.store.databinding.FragmentForYouBinding
@@ -39,12 +38,8 @@ import com.aurora.store.viewmodel.homestream.StreamViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class ForYouFragment : BaseFragment(R.layout.fragment_for_you),
class ForYouFragment : BaseFragment<FragmentForYouBinding>(),
GenericCarouselController.Callbacks {
private var _binding: FragmentForYouBinding? = null
private val binding get() = _binding!!
private val viewModel: StreamViewModel by activityViewModels()
private var category: Category = Category.APPLICATION
@@ -63,7 +58,6 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentForYouBinding.bind(view)
val genericCarouselController = GenericCarouselController(this)
@@ -112,11 +106,6 @@ class ForYouFragment : BaseFragment(R.layout.fragment_for_you),
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onHeaderClicked(streamCluster: StreamCluster) {
}

View File

@@ -25,7 +25,6 @@ import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.store.R
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
@@ -35,12 +34,7 @@ import com.aurora.store.viewmodel.browse.StreamBrowseViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class StreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class StreamBrowseFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val args: StreamBrowseFragmentArgs by navArgs()
private val viewModel: StreamBrowseViewModel by viewModels()
@@ -49,7 +43,6 @@ class StreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.apply {
@@ -79,11 +72,6 @@ class StreamBrowseFragment : BaseFragment(R.layout.activity_generic_recycler) {
updateController(null)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(streamCluster: StreamCluster?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -32,11 +32,7 @@ import com.aurora.store.databinding.FragmentTopChartBinding
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class TopChartContainerFragment : Fragment(R.layout.fragment_top_chart) {
private var _binding: FragmentTopChartBinding? = null
private val binding get() = _binding!!
class TopChartContainerFragment : BaseFragment<FragmentTopChartBinding>() {
companion object {
@JvmStatic
fun newInstance(chartType: Int): TopChartContainerFragment {
@@ -50,7 +46,6 @@ class TopChartContainerFragment : Fragment(R.layout.fragment_top_chart) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentTopChartBinding.bind(view)
var chartType = 0
val bundle = arguments
@@ -84,9 +79,8 @@ class TopChartContainerFragment : Fragment(R.layout.fragment_top_chart) {
}
override fun onDestroyView() {
super.onDestroyView()
binding.pager.adapter = null
_binding = null
super.onDestroyView()
}
internal class ViewPagerAdapter(

View File

@@ -39,10 +39,7 @@ import com.aurora.store.viewmodel.topchart.TopChartViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class TopChartFragment : BaseFragment(R.layout.fragment_top_container) {
private var _binding: FragmentTopContainerBinding? = null
private val binding get() = _binding!!
class TopChartFragment : BaseFragment<FragmentTopContainerBinding>() {
private val viewModel: TopChartViewModel by activityViewModels()
@@ -62,7 +59,6 @@ class TopChartFragment : BaseFragment(R.layout.fragment_top_container) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentTopContainerBinding.bind(view)
var type = 0
var category = 0
@@ -112,11 +108,6 @@ class TopChartFragment : BaseFragment(R.layout.fragment_top_container) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(streamCluster: StreamCluster?) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -96,11 +96,7 @@ import java.util.Locale
import javax.inject.Inject
@AndroidEntryPoint
class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
private var _binding: FragmentDetailsBinding? = null
private val binding: FragmentDetailsBinding
get() = _binding!!
class AppDetailsFragment : BaseFragment<FragmentDetailsBinding>() {
private val viewModel: AppDetailsViewModel by viewModels()
private val detailsClusterViewModel: DetailsClusterViewModel by viewModels()
@@ -190,7 +186,6 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentDetailsBinding.bind(view)
if (args.app != null) {
app = args.app!!
@@ -674,11 +669,6 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun attachBottomSheet() {
binding.layoutDetailsInstall.apply {
viewFlipper.setInAnimation(requireContext(), R.anim.fade_in)

View File

@@ -29,19 +29,17 @@ import com.aurora.extensions.browse
import com.aurora.store.R
import com.aurora.store.data.model.ExodusTracker
import com.aurora.store.data.model.Report
import com.aurora.store.databinding.ActivityGenericPagerBinding
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
import com.aurora.store.view.epoxy.views.HeaderViewModel_
import com.aurora.store.view.epoxy.views.details.ExodusViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
import org.json.JSONObject
import javax.inject.Inject
@AndroidEntryPoint
class DetailsExodusFragment : Fragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class DetailsExodusFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val args: DetailsExodusFragmentArgs by navArgs()
@@ -50,7 +48,6 @@ class DetailsExodusFragment : Fragment(R.layout.activity_generic_recycler) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.apply {
@@ -63,11 +60,6 @@ class DetailsExodusFragment : Fragment(R.layout.activity_generic_recycler) {
updateController(getExodusTrackersFromReport(args.report))
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(reviews: List<ExodusTracker>) {
binding.recycler.withModels {
add(

View File

@@ -41,18 +41,13 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
@AndroidEntryPoint
class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
private var _binding: FragmentDetailsMoreBinding? = null
private val binding: FragmentDetailsMoreBinding
get() = _binding!!
class DetailsMoreFragment : BaseFragment<FragmentDetailsMoreBinding>() {
private val viewModel: DetailsMoreViewModel by viewModels()
private val args: DetailsMoreFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentDetailsMoreBinding.bind(view)
// Toolbar
binding.layoutToolbarActionMore.toolbar.setOnClickListener {
@@ -89,11 +84,6 @@ class DetailsMoreFragment : BaseFragment(R.layout.fragment_details_more) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun inflateDescription(app: App) {
binding.layoutToolbarActionMore.txtTitle.text = app.displayName
binding.txtDescription.text = HtmlCompat.fromHtml(

View File

@@ -32,15 +32,12 @@ import com.aurora.store.databinding.FragmentDetailsReviewBinding
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
import com.aurora.store.view.epoxy.views.details.ReviewViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.review.ReviewViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) {
private var _binding: FragmentDetailsReviewBinding? = null
private val binding: FragmentDetailsReviewBinding
get() = _binding!!
class DetailsReviewFragment : BaseFragment<FragmentDetailsReviewBinding>() {
private val args: DetailsReviewFragmentArgs by navArgs()
private val viewModel: ReviewViewModel by viewModels()
@@ -51,7 +48,6 @@ class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentDetailsReviewBinding.bind(view)
// Toolbar
binding.layoutToolbarActionReview.apply {
@@ -101,11 +97,6 @@ class DetailsReviewFragment : Fragment(R.layout.fragment_details_review) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(reviewCluster: ReviewCluster) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -35,18 +35,13 @@ import com.aurora.store.viewmodel.search.SearchResultViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class DevAppsFragment : BaseFragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class DevAppsFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val args: DevAppsFragmentArgs by navArgs()
private val viewModel: SearchResultViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
viewModel.liveData.observe(viewLifecycleOwner) {
updateController(it)
@@ -71,11 +66,6 @@ class DevAppsFragment : BaseFragment(R.layout.activity_generic_recycler) {
viewModel.observeSearchResults("pub:${args.developerName}")
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(searchBundle: SearchBundle) {
binding.recycler
.withModels {

View File

@@ -38,19 +38,14 @@ import com.aurora.store.viewmodel.details.DevProfileViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class DevProfileFragment : BaseFragment(R.layout.fragment_dev_profile),
class DevProfileFragment : BaseFragment<FragmentDevProfileBinding>(),
GenericCarouselController.Callbacks {
private var _binding: FragmentDevProfileBinding? = null
private val binding: FragmentDevProfileBinding
get() = _binding!!
private val args: DevProfileFragmentArgs by navArgs()
private val viewModel: DevProfileViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentDevProfileBinding.bind(view)
val developerCarouselController = DeveloperCarouselController(this)
@@ -98,11 +93,6 @@ class DevProfileFragment : BaseFragment(R.layout.fragment_dev_profile),
viewModel.getStreamBundle(args.devId)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onHeaderClicked(streamCluster: StreamCluster) {
openStreamBrowseFragment(streamCluster.clusterBrowseUrl, streamCluster.clusterTitle)
}

View File

@@ -32,20 +32,16 @@ import com.aurora.gplayapi.data.models.Artwork
import com.aurora.store.R
import com.aurora.store.databinding.FragmentScreenshotBinding
import com.aurora.store.view.epoxy.views.details.LargeScreenshotViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class ScreenshotFragment : Fragment(R.layout.fragment_screenshot) {
private var _binding: FragmentScreenshotBinding? = null
private val binding: FragmentScreenshotBinding
get() = _binding!!
class ScreenshotFragment : BaseFragment<FragmentScreenshotBinding>() {
private val args: ScreenshotFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentScreenshotBinding.bind(view)
// Toolbar
binding.toolbar.apply {
@@ -63,11 +59,6 @@ class ScreenshotFragment : Fragment(R.layout.fragment_screenshot) {
updateController(args.arrayOfArtwork, args.position)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(artworks: Array<Artwork>, position: Int) {
binding.recyclerView.withModels {
artworks.forEach {

View File

@@ -3,7 +3,6 @@ package com.aurora.store.view.ui.dispenser
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.aurora.extensions.copyToClipBoard
import com.aurora.store.R
@@ -11,15 +10,13 @@ import com.aurora.store.databinding.FragmentDispenserBinding
import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_DISPENSER_URLS
import com.aurora.store.view.epoxy.views.DispenserViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class DispenserFragment : Fragment(R.layout.fragment_dispenser),
class DispenserFragment : BaseFragment<FragmentDispenserBinding>(),
SharedPreferences.OnSharedPreferenceChangeListener {
private var _binding: FragmentDispenserBinding? = null
private val binding get() = _binding!!
private val dispensers: Set<String>
get() = Preferences.getStringSet(requireContext(), PREFERENCE_DISPENSER_URLS)
@@ -27,7 +24,6 @@ class DispenserFragment : Fragment(R.layout.fragment_dispenser),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentDispenserBinding.bind(view)
sharedPreferences = Preferences.getPrefs(view.context)
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
@@ -40,9 +36,8 @@ class DispenserFragment : Fragment(R.layout.fragment_dispenser),
}
override fun onDestroyView() {
super.onDestroyView()
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
_binding = null
super.onDestroyView()
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {

View File

@@ -41,11 +41,7 @@ import kotlinx.coroutines.launch
import javax.inject.Inject
@AndroidEntryPoint
class DownloadFragment : BaseFragment(R.layout.fragment_download) {
private var _binding: FragmentDownloadBinding? = null
private val binding: FragmentDownloadBinding
get() = _binding!!
class DownloadFragment : BaseFragment<FragmentDownloadBinding>() {
@Inject
lateinit var downloadWorkerUtil: DownloadWorkerUtil
@@ -55,8 +51,6 @@ class DownloadFragment : BaseFragment(R.layout.fragment_download) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentDownloadBinding.bind(view)
// Toolbar
binding.layoutToolbarAction.toolbar.apply {
elevation = 0f
@@ -71,11 +65,13 @@ class DownloadFragment : BaseFragment(R.layout.fragment_download) {
downloadWorkerUtil.clearAllDownloads()
}
}
R.id.action_cancel_all -> {
viewLifecycleOwner.lifecycleScope.launch(NonCancellable) {
downloadWorkerUtil.cancelAll()
}
}
R.id.action_clear_completed -> {
viewLifecycleOwner.lifecycleScope.launch(NonCancellable) {
downloadWorkerUtil.clearFinishedDownloads()
@@ -94,11 +90,6 @@ class DownloadFragment : BaseFragment(R.layout.fragment_download) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(downloads: List<Download>) {
binding.recycler.withModels {
if (downloads.isEmpty()) {

View File

@@ -31,6 +31,7 @@ import com.aurora.store.R
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.FragmentAppsGamesBinding
import com.aurora.store.util.Preferences
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.view.ui.commons.CategoryFragment
import com.aurora.store.view.ui.commons.EditorChoiceFragment
import com.aurora.store.view.ui.commons.ForYouFragment
@@ -41,17 +42,13 @@ import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class GamesContainerFragment : Fragment(R.layout.fragment_apps_games) {
private var _binding: FragmentAppsGamesBinding? = null
private val binding get() = _binding!!
class GamesContainerFragment : BaseFragment<FragmentAppsGamesBinding>() {
@Inject
lateinit var authProvider: AuthProvider
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppsGamesBinding.bind(view)
// Toolbar
binding.toolbar.apply {
@@ -61,6 +58,7 @@ class GamesContainerFragment : Fragment(R.layout.fragment_apps_games) {
R.id.menu_download_manager -> {
findNavController().navigate(R.id.downloadFragment)
}
R.id.menu_more -> {
findNavController().navigate(
MobileNavigationDirections.actionGlobalMoreDialogFragment()
@@ -113,9 +111,8 @@ class GamesContainerFragment : Fragment(R.layout.fragment_apps_games) {
}
override fun onDestroyView() {
super.onDestroyView()
binding.pager.adapter = null
_binding = null
super.onDestroyView()
}
internal class ViewPagerAdapter(

View File

@@ -9,22 +9,18 @@ import android.provider.Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
import android.util.Log
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.fragment.app.Fragment
import com.aurora.extensions.isSAndAbove
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.databinding.FragmentAppLinksBinding
import com.aurora.store.view.ui.commons.BaseFragment
import com.google.android.material.button.MaterialButton
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class AppLinksFragment : Fragment(R.layout.fragment_app_links) {
class AppLinksFragment : BaseFragment<FragmentAppLinksBinding>() {
private val TAG = AppLinksFragment::class.java.simpleName
private var _binding: FragmentAppLinksBinding? = null
private val binding get() = _binding!!
private val playStoreDomain = "play.google.com"
private val marketDomain = "market.android.com"
@@ -41,7 +37,6 @@ class AppLinksFragment : Fragment(R.layout.fragment_app_links) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAppLinksBinding.bind(view)
buttons = mapOf(
playStoreDomain to binding.playStoreButton,
@@ -69,7 +64,6 @@ class AppLinksFragment : Fragment(R.layout.fragment_app_links) {
override fun onDestroyView() {
buttons = emptyMap()
_binding = null
super.onDestroyView()
}

View File

@@ -56,14 +56,12 @@ import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_CHECK_INTERVAL
import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_EXTENDED
import com.aurora.store.util.Preferences.PREFERENCE_VENDING_VERSION
import com.aurora.store.util.save
import com.aurora.store.view.ui.commons.BaseFragment
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
private var _binding: FragmentOnboardingBinding? = null
private val binding get() = _binding!!
class OnboardingFragment : BaseFragment<FragmentOnboardingBinding>() {
private var lastPosition = 0
@@ -85,7 +83,6 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentOnboardingBinding.bind(view)
val isDefaultPrefLoaded = Preferences.getBoolean(requireContext(), PREFERENCE_DEFAULT)
if (!isDefaultPrefLoaded) {
@@ -124,11 +121,6 @@ class OnboardingFragment : Fragment(R.layout.fragment_onboarding) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
fun refreshButtonState() {
binding.btnBackward.isEnabled = lastPosition != 0
binding.btnForward.isEnabled = lastPosition != 2

View File

@@ -48,10 +48,7 @@ import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permissions) {
private var _binding: FragmentOnboardingPermissionsBinding? = null
private val binding get() = _binding!!
class PermissionsFragment : BaseFragment<FragmentOnboardingPermissionsBinding>() {
private val startForDozeResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
@@ -89,7 +86,6 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentOnboardingPermissionsBinding.bind(view)
// RecyclerView
val installerList = mutableListOf(
@@ -188,11 +184,6 @@ class PermissionsFragment : BaseFragment(R.layout.fragment_onboarding_permission
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun requestDozePermission() {
if (isMAndAbove()) {
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {

View File

@@ -31,14 +31,10 @@ import com.aurora.store.view.ui.commons.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class WelcomeFragment : BaseFragment(R.layout.fragment_onboarding_welcome) {
private var _binding: FragmentOnboardingWelcomeBinding? = null
private val binding get() = _binding!!
class WelcomeFragment : BaseFragment<FragmentOnboardingWelcomeBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentOnboardingWelcomeBinding.bind(view)
// RecyclerView
binding.epoxyRecycler.withModels {
@@ -106,9 +102,4 @@ class WelcomeFragment : BaseFragment(R.layout.fragment_onboarding_welcome) {
)
)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -41,10 +41,7 @@ import rikka.shizuku.Shizuku
import rikka.sui.Sui
@AndroidEntryPoint
class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
private var _binding: FragmentInstallerBinding? = null
private val binding get() = _binding!!
class InstallerFragment : BaseFragment<FragmentInstallerBinding>() {
private var installerId: Int = 0
@@ -74,7 +71,6 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentInstallerBinding.bind(view)
// Toolbar
binding.toolbar.setNavigationOnClickListener { findNavController().navigateUp() }
@@ -109,11 +105,6 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
override fun onDestroy() {
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
Shizuku.removeBinderReceivedListener(shizukuAliveListener)
@@ -132,6 +123,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
this.installerId = installerId
save(PREFERENCE_INSTALLER_ID, installerId)
}
2 -> {
if (AppInstaller.hasRootAccess()) {
this.installerId = installerId
@@ -143,6 +135,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
)
}
}
3 -> {
if (AppInstaller.hasAuroraService(requireContext())) {
this.installerId = installerId
@@ -154,6 +147,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
)
}
}
4 -> {
if (AppInstaller.hasAppManager(requireContext())) {
this.installerId = installerId
@@ -165,6 +159,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
)
}
}
5 -> {
if (isOAndAbove() && AppInstaller.hasShizukuOrSui(requireContext())) {
if (shizukuAlive && AppInstaller.hasShizukuPerm()) {
@@ -185,6 +180,7 @@ class InstallerFragment : BaseFragment(R.layout.fragment_installer) {
)
}
}
else -> {
this.installerId = installerId
save(PREFERENCE_INSTALLER_ID, installerId)

View File

@@ -37,19 +37,13 @@ import com.aurora.store.viewmodel.sale.AppSalesViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class AppSalesFragment : BaseFragment(R.layout.activity_generic_recycler) {
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
class AppSalesFragment : BaseFragment<ActivityGenericRecyclerBinding>() {
private val viewModel: AppSalesViewModel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
binding.layoutToolbarAction.txtTitle.text = getString(R.string.title_apps_sale)
binding.layoutToolbarAction.imgActionPrimary.setOnClickListener {
findNavController().navigateUp()
@@ -68,11 +62,6 @@ class AppSalesFragment : BaseFragment(R.layout.activity_generic_recycler) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(paginatedAppList: PaginatedAppList?) {
binding.recycler
.withModels {

View File

@@ -49,13 +49,9 @@ import com.google.android.material.textfield.TextInputEditText
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
class SearchResultsFragment : BaseFragment<FragmentSearchResultBinding>(),
OnSharedPreferenceChangeListener {
private var _binding: FragmentSearchResultBinding? = null
private val binding: FragmentSearchResultBinding
get() = _binding!!
private val viewModel: SearchResultViewModel by viewModels()
private lateinit var searchView: TextInputEditText
@@ -70,8 +66,6 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentSearchResultBinding.bind(view)
sharedPreferences = Preferences.getPrefs(view.context)
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
@@ -132,7 +126,6 @@ class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
override fun onDestroyView() {
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onDestroyView()
_binding = null
}
override fun onDestroy() {

View File

@@ -26,7 +26,6 @@ import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.aurora.extensions.showKeyboard
@@ -34,16 +33,13 @@ import com.aurora.gplayapi.SearchSuggestEntry
import com.aurora.store.R
import com.aurora.store.databinding.FragmentSearchSuggestionBinding
import com.aurora.store.view.epoxy.views.SearchSuggestionViewModel_
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.search.SearchSuggestionViewModel
import com.google.android.material.textfield.TextInputEditText
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) {
private var _binding: FragmentSearchSuggestionBinding? = null
private val binding: FragmentSearchSuggestionBinding
get() = _binding!!
class SearchSuggestionFragment : BaseFragment<FragmentSearchSuggestionBinding>() {
private val viewModel: SearchSuggestionViewModel by viewModels()
@@ -54,8 +50,6 @@ class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentSearchSuggestionBinding.bind(view)
// Toolbar
binding.layoutToolbarSearch.apply {
searchView = inputSearch
@@ -85,11 +79,6 @@ class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(searchSuggestions: List<SearchSuggestEntry>) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -22,7 +22,6 @@ package com.aurora.store.view.ui.splash
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.aurora.extensions.hide
@@ -36,20 +35,17 @@ import com.aurora.store.util.Preferences
import com.aurora.store.util.Preferences.PREFERENCE_DEFAULT_SELECTED_TAB
import com.aurora.store.util.Preferences.PREFERENCE_INTRO
import com.aurora.store.util.Preferences.PREFERENCE_SCOPED_RESTART
import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.viewmodel.auth.AuthViewModel
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SplashFragment : Fragment(R.layout.fragment_splash) {
private var _binding: FragmentSplashBinding? = null
private val binding get() = _binding!!
class SplashFragment : BaseFragment<FragmentSplashBinding>() {
private val viewModel: AuthViewModel by activityViewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentSplashBinding.bind(view)
if (!Preferences.getBoolean(requireContext(), PREFERENCE_INTRO)) {
findNavController().navigate(
@@ -166,11 +162,6 @@ class SplashFragment : Fragment(R.layout.fragment_splash) {
viewModel.observe()
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateStatus(string: String?) {
activity?.runOnUiThread { binding.txtStatus.text = string }
}

View File

@@ -38,11 +38,7 @@ import kotlinx.coroutines.launch
import java.util.Properties
@AndroidEntryPoint
class DeviceSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) {
private var _binding: FragmentGenericRecyclerBinding? = null
private val binding get() = _binding!!
class DeviceSpoofFragment : BaseFragment<FragmentGenericRecyclerBinding>() {
private val viewModel: SpoofViewModel by viewModels()
private lateinit var spoofProvider: SpoofProvider
@@ -59,7 +55,6 @@ class DeviceSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentGenericRecyclerBinding.bind(view)
spoofProvider = SpoofProvider(requireContext())
properties = if (spoofProvider.isDeviceSpoofEnabled()) {
@@ -76,11 +71,6 @@ class DeviceSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) {
viewModel.fetchAvailableDevices(view.context)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(locales: List<Properties>) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -32,13 +32,9 @@ import dagger.hilt.android.AndroidEntryPoint
import java.util.Locale
@AndroidEntryPoint
class LocaleSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) {
class LocaleSpoofFragment : BaseFragment<FragmentGenericRecyclerBinding>() {
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
@@ -53,7 +49,6 @@ class LocaleSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentGenericRecyclerBinding.bind(view)
spoofProvider = SpoofProvider(requireContext())
locale = if (spoofProvider.isLocaleSpoofEnabled()) {
@@ -69,11 +64,6 @@ class LocaleSpoofFragment : BaseFragment(R.layout.fragment_generic_recycler) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(locales: List<Locale>) {
binding.recycler.withModels {
setFilterDuplicates(true)

View File

@@ -36,17 +36,13 @@ import com.aurora.store.R
import com.aurora.store.data.providers.NativeDeviceInfoProvider
import com.aurora.store.databinding.ActivityGenericPagerBinding
import com.aurora.store.util.PathUtil
import com.aurora.store.view.ui.commons.BaseFragment
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SpoofFragment : Fragment(R.layout.activity_generic_pager) {
private var _binding: ActivityGenericPagerBinding? = null
private val binding: ActivityGenericPagerBinding
get() = _binding!!
class SpoofFragment : BaseFragment<ActivityGenericPagerBinding>() {
private val TAG = SpoofFragment::class.java.simpleName
// Android is weird, even if export device config with proper mime type, it will refuse to open
@@ -65,7 +61,6 @@ class SpoofFragment : Fragment(R.layout.activity_generic_pager) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericPagerBinding.bind(view)
// Toolbar
binding.layoutActionToolbar.toolbar.apply {
@@ -107,9 +102,8 @@ class SpoofFragment : Fragment(R.layout.activity_generic_pager) {
}
override fun onDestroyView() {
super.onDestroyView()
binding.pager.adapter = null
_binding = null
super.onDestroyView()
}
private fun importDeviceConfig(uri: Uri) {

View File

@@ -54,13 +54,10 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
@AndroidEntryPoint
class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
class UpdatesFragment : BaseFragment<FragmentUpdatesBinding>() {
private lateinit var app: App
private var _binding: FragmentUpdatesBinding? = null
private val binding get() = _binding!!
private val viewModel: UpdatesViewModel by activityViewModels()
private val startForStorageManagerResult =
@@ -79,7 +76,6 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentUpdatesBinding.bind(view)
// Toolbar
binding.toolbar.setOnMenuItemClickListener {
@@ -151,11 +147,6 @@ class UpdatesFragment : BaseFragment(R.layout.fragment_updates) {
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun onEvent(event: BusEvent) {
when (event) {
is BusEvent.InstallEvent, is BusEvent.UninstallEvent -> {