From caa64c3e8e98373b0df6591a1bc666aa75a0c5b1 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Thu, 10 Dec 2020 14:40:35 +0100 Subject: [PATCH] update fragments to viewBinding --- .../ui/fragment/ComparisonChartFragment.kt | 3 - .../android/ui/fragment/CurrenciesFragment.kt | 20 +++++-- .../android/ui/fragment/GraphFragment.kt | 28 +++++++--- .../android/ui/fragment/ImportFragment.kt | 49 +++++++++++------ .../ui/fragment/ReportCreationFragment.kt | 33 +++++++---- .../android/ui/fragment/ReportsFragment.kt | 24 +++++--- .../android/ui/fragment/SettingsFragment.kt | 28 +++++++--- .../android/ui/fragment/StatisticsFragment.kt | 21 +++++-- .../ui/fragment/SubscriptionFragment.kt | 55 ++++++++++++------- .../android/ui/fragment/Top10Fragment.kt | 27 ++++++--- .../report/ComparisonReportFragment.kt | 25 +++++++-- .../report/ComposableTableReportFragment.kt | 51 ++++++++++------- .../fragment/report/ProgressReportFragment.kt | 35 ++++++++---- .../ui/fragment/report/TableReportFragment.kt | 24 ++++++-- 14 files changed, 288 insertions(+), 135 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ComparisonChartFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ComparisonChartFragment.kt index 7fe31d06..af780328 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ComparisonChartFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ComparisonChartFragment.kt @@ -39,8 +39,6 @@ class ComparisonChartFragment : BaseFragment(), StaticRowRepresentableDataSource private lateinit var viewPagerAdapter: ComparisonChartPagerAdapter private var comparisonChartMenu: Menu? = null private var _binding: FragmentComparisonChartBinding? = null - // This property is only valid between onCreateView and -// onDestroyView. private val binding get() = _binding!! override fun onDestroyView() { @@ -53,7 +51,6 @@ class ComparisonChartFragment : BaseFragment(), StaticRowRepresentableDataSource override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { _binding = FragmentComparisonChartBinding.inflate(inflater, container, false) return binding.root - //return inflater.inflate(R.layout.fragment_comparison_chart, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt index a0f6d88e..e72a75bd 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CurrenciesFragment.kt @@ -8,8 +8,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.fragment_data_list.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentCurrenciesBinding import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource @@ -71,10 +71,20 @@ class CurrenciesFragment : BaseFragment(), StaticRowRepresentableDataSource, Row override val viewType: Int = RowViewType.TITLE_VALUE.ordinal } + private var _binding: FragmentCurrenciesBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_currencies, container, false) - } + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + _binding = FragmentCurrenciesBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -120,7 +130,7 @@ class CurrenciesFragment : BaseFragment(), StaticRowRepresentableDataSource, Row val viewManager = LinearLayoutManager(requireContext()) val dataListAdapter = RowRepresentableAdapter(this, this) - recyclerView.apply { + binding.recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = dataListAdapter diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt index 3ae89109..60297427 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt @@ -13,9 +13,8 @@ import com.github.mikephil.charting.data.LineData import com.github.mikephil.charting.highlight.Highlight import com.github.mikephil.charting.interfaces.datasets.IBarLineScatterCandleBubbleDataSet import com.github.mikephil.charting.listener.OnChartValueSelectedListener -import kotlinx.android.synthetic.main.fragment_graph.* -import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.databinding.FragmentGraphBinding import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.interfaces.ObjectIdentifier import net.pokeranalytics.android.ui.fragment.components.RealmFragment @@ -65,10 +64,21 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener { private var chartView: BarLineChartBase<*>? = null - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_graph, container, false) - } + private var _binding: FragmentGraphBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentGraphBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -94,7 +104,7 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener { else -> LegendView(requireContext()) } - this.legendContainer.addView(this.legendView) + this.binding.legendContainer.addView(this.legendView) } fun reload(style: Style) { @@ -109,7 +119,7 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener { */ private fun loadGraph() { - this.chartContainer.removeAllViews() + this.binding.chartContainer.removeAllViews() this.chartView = when (this.style) { Style.LINE, Style.MULTILINE -> { @@ -165,7 +175,7 @@ class GraphFragment : RealmFragment(), OnChartValueSelectedListener { } } - this.chartContainer.addView(this.chartView) + this.binding.chartContainer.addView(this.chartView) this.chartView?.setStyle(false, this.graphDataProvider.axisFormatting, requireContext()) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt index d6a0f2de..4374cf94 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt @@ -6,12 +6,11 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import com.google.android.material.snackbar.Snackbar -import kotlinx.android.synthetic.main.fragment_import.* -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async import kotlinx.coroutines.launch import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentImportBinding import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.util.csv.CSVImporter import net.pokeranalytics.android.util.csv.ImportDelegate @@ -19,7 +18,6 @@ import timber.log.Timber import java.io.InputStream import java.text.NumberFormat import java.util.* -import kotlin.coroutines.CoroutineContext class ImportFragment : RealmFragment(), ImportDelegate { @@ -30,7 +28,24 @@ class ImportFragment : RealmFragment(), ImportDelegate { private lateinit var inputStream: InputStream private lateinit var importer: CSVImporter - fun setData(path: String) { + private var _binding: FragmentImportBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentImportBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + + fun setData(path: String) { this.filePath = path } @@ -38,11 +53,6 @@ class ImportFragment : RealmFragment(), ImportDelegate { this.inputStream = inputStream } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_import, container, false) - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -53,15 +63,20 @@ class ImportFragment : RealmFragment(), ImportDelegate { private fun initUI() { - this.imported.text = requireContext().getString(R.string.imported) - this.total.text = requireContext().getString(R.string.total) + val imported = binding.imported + val total = binding.total + val save = binding.save + val cancel = binding.cancel + + imported.text = requireContext().getString(R.string.imported) + total.text = requireContext().getString(R.string.total) - this.save.isEnabled = false - this.save.setOnClickListener { + save.isEnabled = false + save.setOnClickListener { this.end() } - this.cancel.setOnClickListener { + cancel.setOnClickListener { this.cancel() this.end() } @@ -128,7 +143,7 @@ class ImportFragment : RealmFragment(), ImportDelegate { private fun importDidFinish() { - this.save.isEnabled = true + binding.save.isEnabled = true } @@ -141,8 +156,8 @@ class ImportFragment : RealmFragment(), ImportDelegate { // ImportDelegate override fun parsingCountUpdate(importedCount: Int, totalCount: Int) { - this.counter.text = this.numberFormatter.format(importedCount) - this.totalCounter.text = this.numberFormatter.format(totalCount) + binding.counter.text = this.numberFormatter.format(importedCount) + binding.totalCounter.text = this.numberFormatter.format(totalCount) } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt index 7bc5c016..81758779 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportCreationFragment.kt @@ -6,10 +6,10 @@ import android.os.Bundle import android.view.* import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm -import kotlinx.android.synthetic.main.fragment_report_creation.* import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.databinding.FragmentReportCreationBinding import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.CustomFieldCriteria import net.pokeranalytics.android.model.realm.CustomField @@ -37,10 +37,21 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR private var currentRows: List = listOf() private var reportCreationMenu: Menu? = null - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_report_creation, container, false) - } + private var _binding: FragmentReportCreationBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentReportCreationBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -94,13 +105,13 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR //this.optionsAdapter.setHasStableIds(true) val viewManager = LinearLayoutManager(requireContext()) - recyclerView.apply { + binding.recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = optionsAdapter } - this.next.setOnClickListener { + binding.next.setOnClickListener { if (assistant.nextEnabled) { this.assistant.nextStep() @@ -126,9 +137,9 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR */ private fun updateUIWithCurrentStep() { - this.next.visibility = if (this.assistant.nextButtonShouldAppear) View.VISIBLE else View.GONE - this.next.text = requireContext().getString(this.assistant.nextButtonTitleResId) - this.next.isEnabled = this.assistant.nextEnabled + binding.next.visibility = if (this.assistant.nextButtonShouldAppear) View.VISIBLE else View.GONE + binding.next.text = requireContext().getString(this.assistant.nextButtonTitleResId) + binding.next.isEnabled = this.assistant.nextEnabled this.reportCreationMenu?.findItem(R.id.add)?.isVisible = this.assistant.addButtonShouldAppear val rows = mutableListOf() @@ -198,7 +209,7 @@ class ReportCreationFragment : RealmFragment(), RowRepresentableDataSource, RowR if (newStep) { this.updateUIWithCurrentStep() } else { - this.next.isEnabled = this.assistant.nextEnabled + binding.next.isEnabled = this.assistant.nextEnabled this.optionsAdapter.notifyDataSetChanged() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt index c1aefee7..335da63e 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt @@ -10,7 +10,6 @@ import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm import io.realm.RealmResults -import kotlinx.android.synthetic.main.fragment_data_list.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay @@ -18,6 +17,7 @@ import kotlinx.coroutines.launch import net.pokeranalytics.android.R import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.databinding.FragmentReportsBinding import net.pokeranalytics.android.model.Criteria import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.model.interfaces.Deletable @@ -59,13 +59,21 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc } } + private var _binding: FragmentReportsBinding? = null + private val binding get() = _binding!! - // Life Cycle + // Life Cycle - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_reports, container, false) - } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentReportsBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -119,13 +127,13 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc val viewManager = LinearLayoutManager(requireContext()) - recyclerView.apply { + binding.recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = dataListAdapter } - this.addButton.setOnClickListener { + binding.addButton.setOnClickListener { ReportCreationActivity.newInstanceForResult(this, requireContext()) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt index a2b30120..925e9fda 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt @@ -15,9 +15,9 @@ import androidx.recyclerview.widget.LinearLayoutManager import com.android.billingclient.api.Purchase import com.google.android.play.core.review.ReviewManagerFactory import io.realm.Realm -import kotlinx.android.synthetic.main.fragment_settings.* import net.pokeranalytics.android.BuildConfig import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentSettingsBinding import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.Currency @@ -71,7 +71,24 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep private lateinit var settingsAdapterRow: RowRepresentableAdapter - override fun onCreate(savedInstanceState: Bundle?) { + private var _binding: FragmentSettingsBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentSettingsBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) AppGuard.registerListener(this) } @@ -81,11 +98,6 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep AppGuard.unregisterListener(this) } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_settings, container, false) - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initData() @@ -227,7 +239,7 @@ class SettingsFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRep val viewManager = LinearLayoutManager(requireContext()) settingsAdapterRow = RowRepresentableAdapter(this, this) - recyclerView.apply { + binding.recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = settingsAdapterRow diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt index 9762d79a..dfcb3f63 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt @@ -15,6 +15,8 @@ import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.databinding.FragmentGraphBinding +import net.pokeranalytics.android.databinding.FragmentStatsBinding import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.filter.Query import net.pokeranalytics.android.model.filter.QueryCondition @@ -46,12 +48,21 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener { } } - // Life Cycle + private var _binding: FragmentStatsBinding? = null + private val binding get() = _binding!! - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_stats, container, false) - } + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentStatsBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt index aa5b22b5..61e787b3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/SubscriptionFragment.kt @@ -22,8 +22,8 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentStatePagerAdapter import androidx.viewpager.widget.ViewPager import com.android.billingclient.api.* -import kotlinx.android.synthetic.main.fragment_subscription.* import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentSubscriptionBinding import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.utils.CrashLogging import net.pokeranalytics.android.ui.extensions.px @@ -55,7 +55,23 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas private var selectedProduct: SkuDetails? = null private var showSessionMessage = false - override fun onCreate(savedInstanceState: Bundle?) { + private var _binding: FragmentSubscriptionBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + _binding = FragmentSubscriptionBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val cm = requireContext().getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager @@ -78,10 +94,6 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_subscription, container, false) - } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initData() @@ -99,6 +111,11 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas private fun initUI() { + val title = binding.title + val message = binding.message + val pager = binding.pager + val purchase = binding.purchase + val pageIndicator = binding.pageIndicator val upgradeString = requireContext().getString(R.string.pro_upgrade) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { @@ -119,25 +136,25 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas } } - this.title.text = ssb + title.text = ssb } else { - this.title.text = upgradeString + title.text = upgradeString } if (showSessionMessage) { - this.message.text = getString(R.string.iap_session_message) + message.text = getString(R.string.iap_session_message) } // Pager // The pager adapter, which provides the pages to the view pager widget. this.pagerAdapter = ScreenSlidePagerAdapter(parentFragmentManager) - this.pager.adapter = pagerAdapter - this.pager.addOnPageChangeListener(this) + pager.adapter = pagerAdapter + pager.addOnPageChangeListener(this) - this.purchase.isEnabled = false - this.purchase.setOnClickListener { + purchase.isEnabled = false + purchase.setOnClickListener { this.selectedProduct?.let { AppGuard.initiatePurchase(this.requireActivity(), it) @@ -146,13 +163,13 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas } } - val count = this.pager.adapter?.count ?: 0 + val count = pager.adapter?.count ?: 0 for (i in 1..count) { val view = View(requireContext()) view.background = requireContext().getDrawable(R.drawable.circle_green) val layoutParam = LinearLayout.LayoutParams(8.px, 8.px) layoutParam.setMargins(6.px) - this.pageIndicator.addView(view, layoutParam) + pageIndicator.addView(view, layoutParam) } this.updatePagerIndicators(0) @@ -210,10 +227,10 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas private fun updateUI() { this.selectedProduct?.let { - this.purchase.isEnabled = true + binding.purchase.isEnabled = true val perYearString = requireContext().getString(R.string.year_subscription) val formattedPrice = it.price + " / " + perYearString - this.price.text = formattedPrice + binding.price.text = formattedPrice var freeTrialDays = 30 // initial, should be more, no less if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { @@ -226,7 +243,7 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas } val formattedFreeTrial = "$freeTrialDays " + requireContext().getString(R.string.days) + " " + requireContext().getString(R.string.free_trial) - this.freetrial.text = formattedFreeTrial + binding.freetrial.text = formattedFreeTrial } ?: run { Toast.makeText(requireContext(), R.string.contact_support, Toast.LENGTH_LONG).show() } @@ -261,7 +278,7 @@ class SubscriptionFragment : BaseFragment(), SkuDetailsResponseListener, Purchas } private fun updatePagerIndicators(position: Int) { - this.pageIndicator.children.forEachIndexed { index, view -> + binding.pageIndicator.children.forEachIndexed { index, view -> val drawable = view.background when (drawable) { is GradientDrawable -> { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt index 716427dc..0507adf2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt @@ -7,8 +7,7 @@ import android.view.ViewGroup import com.google.android.material.tabs.TabLayout import io.realm.RealmResults import io.realm.kotlin.where -import kotlinx.android.synthetic.main.fragment_top_10.* -import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentTop10Binding import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource @@ -43,10 +42,21 @@ class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresenta private var currentTab: Tab = Tab.CASH_GAMES - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_top_10, container, false) - } + private var _binding: FragmentTop10Binding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentTop10Binding.inflate(inflater, container, false) + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -59,7 +69,10 @@ class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresenta */ private fun initUI() { - dataListAdapter = RowRepresentableAdapter(this, this) + val recyclerView = binding.recyclerView + val tabs = binding.tabs + + dataListAdapter = RowRepresentableAdapter(this, this) recyclerView.adapter = dataListAdapter setDisplayHomeAsUpEnabled(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt index 517605a0..fceba811 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComparisonReportFragment.kt @@ -5,8 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.google.android.material.tabs.TabLayout -import kotlinx.android.synthetic.main.fragment_report_details.* -import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentReportDetailsBinding import net.pokeranalytics.android.ui.adapter.ReportPagerAdapter class ComparisonReportFragment : AbstractReportFragment() { @@ -21,10 +20,21 @@ class ComparisonReportFragment : AbstractReportFragment() { } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_report_details, container, false) - } + private var _binding: FragmentReportDetailsBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentReportDetailsBinding.inflate(inflater, container, false) + return binding.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -36,6 +46,9 @@ class ComparisonReportFragment : AbstractReportFragment() { */ private fun initUI() { + val viewPager = binding.viewPager + val tabs = binding.tabs + viewPager.adapter = ReportPagerAdapter(requireContext(), requireActivity().supportFragmentManager, this.reportViewModel) // setDisplayHomeAsUpEnabled(true) diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt index e80a0560..1524faad 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt @@ -7,7 +7,6 @@ import android.view.ViewGroup import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import io.realm.Realm -import kotlinx.android.synthetic.main.fragment_composable_table_report.* import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async @@ -17,6 +16,7 @@ import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.ComputableGroup import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.databinding.FragmentComposableTableReportBinding import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.realm.ComputableResult import net.pokeranalytics.android.ui.activity.components.ReportActivity @@ -39,34 +39,43 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab // override val coroutineContext: CoroutineContext // get() = Dispatchers.Main - private var rowRepresentables: ArrayList = ArrayList() + companion object { + + /** + * Create new instance + */ + fun newInstance(report: Report? = null): ComposableTableReportFragment { + val fragment = ComposableTableReportFragment() + fragment.report = report + + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } + } + + private var rowRepresentables: ArrayList = ArrayList() private var statsAdapter: RowRepresentableAdapter? = null var report: Report? = null private var hasComputationInProgress: Boolean = false - companion object { - - /** - * Create new instance - */ - fun newInstance(report: Report? = null): ComposableTableReportFragment { - val fragment = ComposableTableReportFragment() - fragment.report = report - - val bundle = Bundle() - fragment.arguments = bundle - return fragment - } - } + private var _binding: FragmentComposableTableReportBinding? = null + private val binding get() = _binding!! // Life Cycle - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_composable_table_report, container, false) - } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentComposableTableReportBinding.inflate(inflater, container, false) + return binding.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -126,7 +135,7 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab open fun initUI() { val viewManager = LinearLayoutManager(requireContext()) - recyclerView.apply { + binding.recyclerView.apply { setHasFixedSize(true) layoutManager = viewManager adapter = statsAdapter diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt index ed487940..ed680045 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt @@ -11,7 +11,6 @@ import com.github.mikephil.charting.data.LineDataSet import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup import io.realm.Realm -import kotlinx.android.synthetic.main.fragment_progress_report.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch @@ -24,6 +23,7 @@ import net.pokeranalytics.android.calculus.AggregationType import net.pokeranalytics.android.calculus.Calculator import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.databinding.FragmentProgressReportBinding import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.combined import net.pokeranalytics.android.ui.extensions.ChipGroupExtension @@ -57,10 +57,21 @@ class ProgressReportFragment : AbstractReportFragment() { private var reports: MutableMap = EnumMap(AggregationType::class.java) - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_progress_report, container, false) - } + private var _binding: FragmentProgressReportBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentProgressReportBinding.inflate(inflater, container, false) + return binding.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -72,6 +83,7 @@ class ProgressReportFragment : AbstractReportFragment() { */ private fun initUI() { + val chipGroup = binding.chipGroup val fragmentManager = parentActivity?.supportFragmentManager val fragmentTransaction = fragmentManager?.beginTransaction() this.graphFragment = GraphFragment.newInstance(GraphFragment.Style.LINE) @@ -96,14 +108,14 @@ class ProgressReportFragment : AbstractReportFragment() { chip.text = requireContext().getString(type.resId) chip.chipStartPadding = 8f.px chip.chipEndPadding = 8f.px - this.chipGroup.addView(chip) + chipGroup.addView(chip) } - this.chipGroup.isVisible = this.reportViewModel.showAggregationChoices - this.chipGroup.isSingleSelection = true - this.chipGroup.check(0) + chipGroup.isVisible = this.reportViewModel.showAggregationChoices + chipGroup.isSingleSelection = true + chipGroup.check(0) - this.chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { + chipGroup.setOnCheckedChangeListener(object : ChipGroupExtension.SingleSelectionOnCheckedListener() { override fun onCheckedChanged(group: ChipGroup, checkedId: Int) { super.onCheckedChanged(group, checkedId) @@ -140,6 +152,9 @@ class ProgressReportFragment : AbstractReportFragment() { */ private fun launchStatComputation(aggregationType: AggregationType) { + val graphContainer = binding.graphContainer + val progressBar = binding.progressBar + graphContainer.hideWithAnimation() progressBar.showWithAnimation() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt index 4ef6f6ec..caf16361 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/TableReportFragment.kt @@ -5,11 +5,10 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import net.pokeranalytics.android.R +import net.pokeranalytics.android.databinding.FragmentTableReportBinding class TableReportFragment : AbstractReportFragment() { - private lateinit var tableReportFragment: ComposableTableReportFragment - companion object { fun newInstance(): TableReportFragment { @@ -20,10 +19,23 @@ class TableReportFragment : AbstractReportFragment() { } } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - super.onCreateView(inflater, container, savedInstanceState) - return inflater.inflate(R.layout.fragment_table_report, container, false) - } + private lateinit var tableReportFragment: ComposableTableReportFragment + + private var _binding: FragmentTableReportBinding? = null + private val binding get() = _binding!! + + // Life Cycle + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + super.onCreateView(inflater, container, savedInstanceState) + _binding = FragmentTableReportBinding.inflate(inflater, container, false) + return binding.root + } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState)