From e59cf9e58adf75f2f22185d523c418ff602daeea Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Tue, 17 Nov 2020 11:18:06 +0000 Subject: [PATCH] Removed adapter leaks in EntriesFragment.kt --- .gitignore | 3 ++ .../look4sat/ui/adapters/EntriesAdapter.kt | 7 ++- .../look4sat/ui/adapters/PassesAdapter.kt | 13 +++--- .../look4sat/ui/adapters/SourcesAdapter.kt | 7 ++- .../look4sat/ui/adapters/TransAdapter.kt | 7 ++- .../look4sat/ui/fragments/EntriesFragment.kt | 44 ++++++++++++------- build.gradle | 4 +- gradlew | 0 8 files changed, 48 insertions(+), 37 deletions(-) mode change 100755 => 100644 app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt mode change 100755 => 100644 gradlew diff --git a/.gitignore b/.gitignore index 51c5e32a..83957b29 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,6 @@ fastlane/Preview.html fastlane/screenshots fastlane/test_output fastlane/readme.md +/app/release/app-release.aab +/app/release/app-release.apk +/app/release/output-metadata.json diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt old mode 100755 new mode 100644 index f6bd113c..14daae5a --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/EntriesAdapter.kt @@ -20,7 +20,6 @@ package com.rtbishop.look4sat.ui.adapters import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import android.widget.SearchView import androidx.recyclerview.widget.RecyclerView @@ -94,7 +93,7 @@ class EntriesAdapter : RecyclerView.Adapter(), override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SatEntryHolder { val binding = ItemSatEntryBinding .inflate(LayoutInflater.from(parent.context), parent, false) - return SatEntryHolder(binding.root, binding) + return SatEntryHolder(binding) } override fun onBindViewHolder(holder: SatEntryHolder, position: Int) { @@ -105,8 +104,8 @@ class EntriesAdapter : RecyclerView.Adapter(), return currentEntries.size } - inner class SatEntryHolder(itemView: View, private val binding: ItemSatEntryBinding) : - RecyclerView.ViewHolder(itemView) { + inner class SatEntryHolder(private val binding: ItemSatEntryBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind(satEntry: SatEntry) { binding.satEntryCheckbox.text = satEntry.name diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt index 3c312c1e..91a0434e 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/PassesAdapter.kt @@ -21,7 +21,6 @@ package com.rtbishop.look4sat.ui.adapters import android.content.Context import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.core.os.bundleOf import androidx.navigation.findNavController @@ -89,11 +88,11 @@ class PassesAdapter(context: Context, private val shouldUseUTC: Boolean = false) return if (viewType == 0) { val bindingLeo = ItemPassLeoBinding .inflate(LayoutInflater.from(parent.context), parent, false) - SatPassLeoHolder(bindingLeo.root, bindingLeo) + SatPassLeoHolder(bindingLeo) } else { val bindingGeo = ItemPassGeoBinding .inflate(LayoutInflater.from(parent.context), parent, false) - SatPassGeoHolder(bindingGeo.root, bindingGeo) + SatPassGeoHolder(bindingGeo) } } @@ -105,8 +104,8 @@ class PassesAdapter(context: Context, private val shouldUseUTC: Boolean = false) } } - inner class SatPassLeoHolder(itemView: View, private val binding: ItemPassLeoBinding) : - RecyclerView.ViewHolder(itemView) { + inner class SatPassLeoHolder(private val binding: ItemPassLeoBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind(satPass: SatPass) { binding.apply { @@ -130,8 +129,8 @@ class PassesAdapter(context: Context, private val shouldUseUTC: Boolean = false) } } - inner class SatPassGeoHolder(itemView: View, private val binding: ItemPassGeoBinding) : - RecyclerView.ViewHolder(itemView) { + inner class SatPassGeoHolder(private val binding: ItemPassGeoBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind(satPass: SatPass) { val satPos = satPass.predictor.getSatPos(satPass.pass.startTime) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt index 0572d8bf..2a12fdae 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/SourcesAdapter.kt @@ -20,7 +20,6 @@ package com.rtbishop.look4sat.ui.adapters import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.core.widget.doOnTextChanged import androidx.recyclerview.widget.RecyclerView @@ -45,7 +44,7 @@ class SourcesAdapter(private var sources: MutableList = mutableListOf override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TleSourceHolder { val binding = ItemTleSourceBinding .inflate(LayoutInflater.from(parent.context), parent, false) - return TleSourceHolder(binding.root, binding) + return TleSourceHolder(binding) } override fun onBindViewHolder(holder: TleSourceHolder, position: Int) { @@ -56,8 +55,8 @@ class SourcesAdapter(private var sources: MutableList = mutableListOf return sources.size } - inner class TleSourceHolder(itemView: View, private val binding: ItemTleSourceBinding) : - RecyclerView.ViewHolder(itemView) { + inner class TleSourceHolder(private val binding: ItemTleSourceBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind(source: TleSource) { binding.tleSourceUrl.setText(source.url) diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt index 5952df4b..b75c5754 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/adapters/TransAdapter.kt @@ -21,7 +21,6 @@ package com.rtbishop.look4sat.ui.adapters import android.content.Context import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.rtbishop.look4sat.R @@ -66,15 +65,15 @@ class TransAdapter(context: Context, private val satPass: SatPass) : override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TransHolder { val binding = ItemTransBinding .inflate(LayoutInflater.from(parent.context), parent, false) - return TransHolder(binding.root, binding) + return TransHolder(binding) } override fun onBindViewHolder(holder: TransHolder, position: Int) { holder.bind(transmittersList[position]) } - inner class TransHolder(itemView: View, private val binding: ItemTransBinding) : - RecyclerView.ViewHolder(itemView) { + inner class TransHolder(private val binding: ItemTransBinding) : + RecyclerView.ViewHolder(binding.root) { fun bind(satTrans: SatTrans) { binding.description.text = satTrans.description diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt index e96aa4dd..75f53e8a 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/fragments/EntriesFragment.kt @@ -21,8 +21,8 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class EntriesFragment : Fragment(R.layout.fragment_entries) { - private lateinit var binding: FragmentEntriesBinding - private lateinit var entriesAdapter: EntriesAdapter + private var binding: FragmentEntriesBinding? = null + private var entriesAdapter: EntriesAdapter? = null private val viewModel: SharedViewModel by activityViewModels() private val pickFileReqCode = 100 @@ -35,7 +35,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { private fun setupComponents() { entriesAdapter = EntriesAdapter() - binding.apply { + binding?.apply { entriesRecycler.apply { setHasFixedSize(true) adapter = entriesAdapter @@ -44,7 +44,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { } importWeb.setOnClickListener { showImportFromWebDialog() } importFile.setOnClickListener { showImportFromFileDialog() } - selectAll.setOnClickListener { entriesAdapter.selectAll() } + selectAll.setOnClickListener { entriesAdapter?.selectAll() } entriesFab.setOnClickListener { navigateToPasses() } searchBar.setOnQueryTextListener(entriesAdapter) searchBar.clearFocus() @@ -56,7 +56,7 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { if (entries.isNullOrEmpty()) setError() else { viewModel.setEntries(entries) - entriesAdapter.setEntries(entries as MutableList) + entriesAdapter?.setEntries(entries as MutableList) setLoaded() } observeEvents() @@ -88,26 +88,32 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { } private fun setLoaded() { - binding.entriesError.visibility = View.INVISIBLE - binding.entriesProgress.visibility = View.INVISIBLE - binding.entriesRecycler.visibility = View.VISIBLE + binding?.apply { + entriesError.visibility = View.INVISIBLE + entriesProgress.visibility = View.INVISIBLE + entriesRecycler.visibility = View.VISIBLE + } } private fun setLoading() { - binding.entriesError.visibility = View.INVISIBLE - binding.entriesRecycler.visibility = View.INVISIBLE - binding.entriesProgress.visibility = View.VISIBLE + binding?.apply { + entriesError.visibility = View.INVISIBLE + entriesRecycler.visibility = View.INVISIBLE + entriesProgress.visibility = View.VISIBLE + } } private fun setError() { - binding.entriesProgress.visibility = View.INVISIBLE - binding.entriesRecycler.visibility = View.INVISIBLE - binding.entriesError.visibility = View.VISIBLE + binding?.apply { + entriesProgress.visibility = View.INVISIBLE + entriesRecycler.visibility = View.INVISIBLE + entriesError.visibility = View.VISIBLE + } } private fun navigateToPasses() { - binding.searchBar.clearFocus() - viewModel.updateEntriesSelection(entriesAdapter.getEntries()) + binding?.searchBar?.clearFocus() + entriesAdapter?.let { viewModel.updateEntriesSelection(it.getEntries()) } requireView().findNavController().navigate(R.id.action_entries_to_passes) } @@ -116,4 +122,10 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) { data?.data?.also { uri -> viewModel.updateEntriesFromFile(uri) } } else super.onActivityResult(requestCode, resultCode, data) } + + override fun onDestroyView() { + entriesAdapter = null + binding = null + super.onDestroyView() + } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index e31fc87d..1f22af23 100644 --- a/build.gradle +++ b/build.gradle @@ -19,10 +19,10 @@ buildscript { ext { - gradle_version = '4.1.0' + gradle_version = '4.1.1' gradle_plugin_version = '1.4.10' material_version = '1.2.1' - constraint_layout_version = '2.0.2' + constraint_layout_version = '2.0.4' navigation_version = '2.3.1' preference_version = '1.1.1' room_version = '2.2.5' diff --git a/gradlew b/gradlew old mode 100755 new mode 100644