From 3a27fa719bd29ac789bba054574b60d38c5d8944 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Wed, 20 Mar 2024 13:35:06 +0530 Subject: [PATCH] ui: sheets: Use BottomSheetDialogFragment directly We don't need base class anymore. Also use view binding the recommended way for fragments. Signed-off-by: Aayush Gupta --- .../store/view/ui/sheets/AppMenuSheet.kt | 32 ++++--- .../view/ui/sheets/AppPeekDialogSheet.kt | 38 ++++----- .../store/view/ui/sheets/BaseBottomSheet.kt | 83 ------------------- .../store/view/ui/sheets/DeviceMiuiSheet.kt | 51 ++++-------- .../store/view/ui/sheets/DownloadMenuSheet.kt | 17 +--- .../store/view/ui/sheets/DozeWarningSheet.kt | 36 ++++---- .../store/view/ui/sheets/FilterSheet.kt | 44 +++++----- .../view/ui/sheets/InstallErrorDialogSheet.kt | 46 ++++------ .../view/ui/sheets/ManualDownloadSheet.kt | 57 +++++++------ .../view/ui/sheets/NetworkDialogSheet.kt | 28 +++---- .../view/ui/sheets/PermissionBottomSheet.kt | 43 +++++----- app/src/main/res/values/themes.xml | 2 - 12 files changed, 175 insertions(+), 302 deletions(-) delete mode 100644 app/src/main/java/com/aurora/store/view/ui/sheets/BaseBottomSheet.kt diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt index b6e4099c4..459fc690d 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/AppMenuSheet.kt @@ -21,10 +21,8 @@ package com.aurora.store.view.ui.sheets import android.os.Bundle -import android.view.LayoutInflater import android.view.MenuItem import android.view.View -import android.view.ViewGroup import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.viewModels import androidx.navigation.fragment.navArgs @@ -37,16 +35,23 @@ import com.aurora.store.data.providers.BlacklistProvider import com.aurora.store.databinding.SheetAppMenuBinding import com.aurora.store.util.PackageUtil import com.aurora.store.viewmodel.sheets.SheetsViewModel +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint import org.greenrobot.eventbus.EventBus @AndroidEntryPoint -class AppMenuSheet : BaseBottomSheet() { +class AppMenuSheet : BottomSheetDialogFragment(R.layout.sheet_app_menu) { - private lateinit var B: SheetAppMenuBinding + companion object { + const val TAG = "APP_MENU_SHEET" + } + + private var _binding: SheetAppMenuBinding? = null + private val binding get() = _binding!! private val viewModel: SheetsViewModel by viewModels() private val args: AppMenuSheetArgs by navArgs() + private val exportMimeType = "application/zip" private val requestDocumentCreation = @@ -59,22 +64,14 @@ class AppMenuSheet : BaseBottomSheet() { dismissAllowingStateLoss() } - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetAppMenuBinding.inflate(layoutInflater) - return B.root - } - - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = SheetAppMenuBinding.bind(view) val blacklistProvider = BlacklistProvider.with(requireContext()) val isBlacklisted: Boolean = blacklistProvider.isBlacklisted(args.app.packageName) - with(B.navigationView) { + with(binding.navigationView) { //Switch strings for Add/Remove Blacklist val blackListMenu: MenuItem = menu.findItem(R.id.action_blacklist) blackListMenu.setTitle( @@ -125,7 +122,8 @@ class AppMenuSheet : BaseBottomSheet() { } } - companion object { - const val TAG = "APP_MENU_SHEET" + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/AppPeekDialogSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/AppPeekDialogSheet.kt index 263258737..5cc681e50 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/AppPeekDialogSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/AppPeekDialogSheet.kt @@ -20,47 +20,43 @@ package com.aurora.store.view.ui.sheets import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import androidx.navigation.fragment.navArgs import coil.load import coil.transform.RoundedCornersTransformation import com.aurora.store.R import com.aurora.store.databinding.SheetAppPeekBinding import com.aurora.store.util.CommonUtil +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class AppPeekDialogSheet : BaseBottomSheet() { +class AppPeekDialogSheet : BottomSheetDialogFragment(R.layout.sheet_app_peek) { - lateinit var B: SheetAppPeekBinding + private var _binding: SheetAppPeekBinding? = null + private val binding get() = _binding!! private val args: AppPeekDialogSheetArgs by navArgs() - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetAppPeekBinding.inflate(inflater, container, false) - return B.root - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = SheetAppPeekBinding.bind(view) - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { - B.txtLine1.text = args.app.displayName - B.imgIcon.load(args.app.iconArtwork.url) { + binding.txtLine1.text = args.app.displayName + binding.imgIcon.load(args.app.iconArtwork.url) { transformations(RoundedCornersTransformation(25F)) } - B.txtLine2.text = args.app.developerName - B.txtLine3.text = String.format( + binding.txtLine2.text = args.app.developerName + binding.txtLine3.text = String.format( requireContext().getString(R.string.app_list_rating), CommonUtil.addSiPrefix(args.app.size), args.app.labeledRating, - if (args.app.isFree) - "Free" - else - "Paid" + if (args.app.isFree) "Free" else "Paid" ) } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/BaseBottomSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/BaseBottomSheet.kt deleted file mode 100644 index c6ffd3376..000000000 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/BaseBottomSheet.kt +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Aurora Store - * Copyright (C) 2021, Rahul Kumar Patel - * - * Aurora Store is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * Aurora Store is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Aurora Store. If not, see . - * - */ - -package com.aurora.store.view.ui.sheets - -import android.app.Dialog -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.FrameLayout -import com.aurora.store.R -import com.aurora.store.databinding.SheetBaseBinding -import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import com.google.gson.Gson -import com.google.gson.GsonBuilder -import java.lang.reflect.Modifier - -abstract class BaseBottomSheet : BottomSheetDialogFragment() { - - lateinit var VM: SheetBaseBinding - - var gson: Gson = GsonBuilder() - .excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT) - .create() - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val bottomSheetDialog = BottomSheetDialog( - requireContext(), - R.style.AppTheme_Dialog - ) - - VM = SheetBaseBinding.inflate(layoutInflater) - - bottomSheetDialog.setContentView(VM.root) - - val container = VM.container - val contentView = onCreateContentView( - LayoutInflater.from(requireContext()), - container, - savedInstanceState - ) - - if (contentView != null) { - onContentViewCreated(contentView, savedInstanceState) - container.addView(contentView) - } - - bottomSheetDialog.setOnShowListener { - val bottomSheet = - bottomSheetDialog.findViewById(com.google.android.material.R.id.design_bottom_sheet) - if (bottomSheet != null) - BottomSheetBehavior.from(bottomSheet).state = BottomSheetBehavior.STATE_EXPANDED - } - return bottomSheetDialog - } - - abstract fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View? - - abstract fun onContentViewCreated(view: View, savedInstanceState: Bundle?) -} diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/DeviceMiuiSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/DeviceMiuiSheet.kt index 27b069743..5606f7e88 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/DeviceMiuiSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/DeviceMiuiSheet.kt @@ -22,59 +22,44 @@ package com.aurora.store.view.ui.sheets import android.content.Intent import android.os.Bundle import android.provider.Settings -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import coil.load import coil.transform.CircleCropTransformation import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.databinding.SheetDeviceMiuiBinding +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class DeviceMiuiSheet : BaseBottomSheet() { +class DeviceMiuiSheet : BottomSheetDialogFragment(R.layout.sheet_device_miui) { - private lateinit var B: SheetDeviceMiuiBinding + private var _binding: SheetDeviceMiuiBinding? = null + private val binding get() = _binding!! - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetDeviceMiuiBinding.inflate(inflater, container, false) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = SheetDeviceMiuiBinding.bind(view) - inflateData() - attachAction() - - return B.root - } - - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { - - } - - private fun inflateData() { - B.imgIcon.load(R.drawable.ic_xiaomi_logo) { + binding.imgIcon.load(R.drawable.ic_xiaomi_logo) { transformations(CircleCropTransformation()) } - } - private fun attachAction() { - B.btnPrimary.setOnClickListener { - openDeveloperSettings() + binding.btnPrimary.setOnClickListener { + try { + startActivity(Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS)) + } catch (e: Exception) { + toast(R.string.toast_developer_setting_failed) + } } - B.btnSecondary.setOnClickListener { + binding.btnSecondary.setOnClickListener { dismissAllowingStateLoss() } } - private fun openDeveloperSettings() { - try { - startActivity(Intent(Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS)) - } catch (e: Exception) { - toast(R.string.toast_developer_setting_failed) - } + override fun onDestroyView() { + super.onDestroyView() + _binding = null } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt index 816e24103..0ad46afd1 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/DownloadMenuSheet.kt @@ -21,9 +21,7 @@ package com.aurora.store.view.ui.sheets import android.os.Bundle import android.util.Log -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs @@ -34,13 +32,14 @@ import com.aurora.store.data.installer.AppInstaller import com.aurora.store.data.model.DownloadStatus import com.aurora.store.databinding.SheetDownloadMenuBinding import com.aurora.store.util.DownloadWorkerUtil +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.launch @AndroidEntryPoint -class DownloadMenuSheet : BaseBottomSheet() { +class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu) { private val TAG = DownloadMenuSheet::class.java.simpleName @@ -56,17 +55,9 @@ class DownloadMenuSheet : BaseBottomSheet() { @Inject lateinit var appInstaller: AppInstaller - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - _binding = SheetDownloadMenuBinding.inflate(layoutInflater) - return binding.root - } - - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + _binding = SheetDownloadMenuBinding.bind(view) with(binding.navigationView) { menu.findItem(R.id.action_cancel).isVisible = !args.download.isFinished diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt index a32dd944a..af86dfd6e 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/DozeWarningSheet.kt @@ -4,9 +4,7 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import android.provider.Settings -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import androidx.activity.result.contract.ActivityResultContracts import androidx.navigation.fragment.navArgs import com.aurora.extensions.isIgnoringBatteryOptimizations @@ -17,8 +15,9 @@ import com.aurora.store.data.work.UpdateWorker import com.aurora.store.databinding.SheetDozeWarningBinding import com.aurora.store.util.Preferences.PREFERENCE_UPDATES_AUTO import com.aurora.store.util.save +import com.google.android.material.bottomsheet.BottomSheetDialogFragment -class DozeWarningSheet : BaseBottomSheet() { +class DozeWarningSheet : BottomSheetDialogFragment(R.layout.sheet_doze_warning) { private val args: DozeWarningSheetArgs by navArgs() @@ -42,26 +41,23 @@ class DozeWarningSheet : BaseBottomSheet() { private var _binding: SheetDozeWarningBinding? = null private val binding get() = _binding!! - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - _binding = SheetDozeWarningBinding.inflate(inflater, container, false) - return binding.root - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = SheetDozeWarningBinding.bind(view) - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { binding.btnSecondary.setOnClickListener { dismissAllowingStateLoss() } - binding.btnPrimary.setOnClickListener { requestDozePermission() } - } - - private fun requestDozePermission() { - if (isMAndAbove()) { - val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { - data = Uri.parse("package:${requireContext().packageName}") + binding.btnPrimary.setOnClickListener { + if (isMAndAbove()) { + val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply { + data = Uri.parse("package:${requireContext().packageName}") + } + startForDozeResult.launch(intent) } - startForDozeResult.launch(intent) } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt index af0072dc3..ef1c13217 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/FilterSheet.kt @@ -20,51 +20,51 @@ package com.aurora.store.view.ui.sheets import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import com.aurora.store.R import com.aurora.store.data.Filter import com.aurora.store.data.providers.FilterProvider import com.aurora.store.databinding.SheetFilterBinding +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.chip.Chip import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class FilterSheet : BaseBottomSheet() { +class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) { + + private var _binding: SheetFilterBinding? = null + private val binding get() = _binding!! - private lateinit var B: SheetFilterBinding private lateinit var filter: Filter - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetFilterBinding.inflate(inflater, container, false) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = SheetFilterBinding.bind(view) filter = FilterProvider.with(requireContext()).getSavedFilter() - return B.root - } - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { attachSingleChips() attachMultipleChips() attachActions() } + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + private fun attachActions() { - B.btnPositive.setOnClickListener { + binding.btnPositive.setOnClickListener { FilterProvider.with(requireContext()).saveFilter(filter) dismissAllowingStateLoss() } - B.btnNegative.setOnClickListener { + binding.btnNegative.setOnClickListener { dismissAllowingStateLoss() } } private fun attachSingleChips() { - B.filterGfs.apply { + binding.filterGfs.apply { isChecked = filter.gsfDependentApps setOnCheckedChangeListener { _, checked -> isChecked = checked @@ -72,7 +72,7 @@ class FilterSheet : BaseBottomSheet() { } } - B.filterPaid.apply { + binding.filterPaid.apply { isChecked = filter.paidApps setOnCheckedChangeListener { _, checked -> isChecked = checked @@ -80,7 +80,7 @@ class FilterSheet : BaseBottomSheet() { } } - B.filterAds.apply { + binding.filterAds.apply { isChecked = filter.appsWithAds setOnCheckedChangeListener { _, checked -> isChecked = checked @@ -101,11 +101,11 @@ class FilterSheet : BaseBottomSheet() { chip.id = i chip.text = downloadLabel chip.isChecked = filter.downloads == downloadValues[i].toInt() - B.downloadChips.addView(chip) + binding.downloadChips.addView(chip) i++ } - B.downloadChips.setOnCheckedStateChangeListener { _, checkedIds -> + binding.downloadChips.setOnCheckedStateChangeListener { _, checkedIds -> filter.downloads = downloadValues[checkedIds[0]].toInt() } @@ -115,11 +115,11 @@ class FilterSheet : BaseBottomSheet() { chip.id = i chip.text = ratingLabel chip.isChecked = filter.rating == ratingValues[i].toFloat() - B.ratingChips.addView(chip) + binding.ratingChips.addView(chip) i++ } - B.ratingChips.setOnCheckedStateChangeListener { _, checkedIds -> + binding.ratingChips.setOnCheckedStateChangeListener { _, checkedIds -> filter.rating = ratingValues[checkedIds[0]].toFloat() } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/InstallErrorDialogSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/InstallErrorDialogSheet.kt index 7e4fa2fb8..d23911bbc 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/InstallErrorDialogSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/InstallErrorDialogSheet.kt @@ -20,9 +20,7 @@ package com.aurora.store.view.ui.sheets import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import androidx.navigation.fragment.navArgs import coil.load import coil.transform.CircleCropTransformation @@ -30,49 +28,41 @@ import com.aurora.extensions.copyToClipBoard import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.databinding.SheetInstallErrorBinding +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class InstallErrorDialogSheet : BaseBottomSheet() { +class InstallErrorDialogSheet : BottomSheetDialogFragment(R.layout.sheet_install_error) { - private lateinit var B: SheetInstallErrorBinding + private var _binding: SheetInstallErrorBinding? = null + private val binding get() = _binding!! private val args: InstallErrorDialogSheetArgs by navArgs() - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetInstallErrorBinding.inflate(inflater, container, false) - inflateData() - attachAction() + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = SheetInstallErrorBinding.bind(view) - return B.root - } - - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { - - } - - private fun inflateData() { - B.imgIcon.load(args.app.iconArtwork.url) { + binding.imgIcon.load(args.app.iconArtwork.url) { transformations(CircleCropTransformation()) } - B.txtLine1.text = args.app.displayName - B.txtLine2.text = args.error - B.txtLine3.text = args.extra - } + binding.txtLine1.text = args.app.displayName + binding.txtLine2.text = args.error + binding.txtLine3.text = args.extra - private fun attachAction() { - B.btnPrimary.setOnClickListener { + binding.btnPrimary.setOnClickListener { dismissAllowingStateLoss() } - B.btnSecondary.setOnClickListener { + binding.btnSecondary.setOnClickListener { requireContext().copyToClipBoard(args.extra) requireContext().toast(R.string.toast_clipboard_copied) } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt index c9d39e599..c7f9e7508 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt @@ -21,9 +21,7 @@ package com.aurora.store.view.ui.sheets import android.app.Dialog import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs @@ -33,34 +31,43 @@ import com.aurora.extensions.toast import com.aurora.store.R import com.aurora.store.databinding.SheetManualDownloadBinding import com.aurora.store.viewmodel.sheets.SheetsViewModel +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @AndroidEntryPoint -class ManualDownloadSheet : BaseBottomSheet() { +class ManualDownloadSheet : BottomSheetDialogFragment(R.layout.sheet_manual_download) { - private lateinit var B: SheetManualDownloadBinding + private var _binding: SheetManualDownloadBinding? = null + private val binding get() = _binding!! private val viewModel: SheetsViewModel by viewModels() private val args: ManualDownloadSheetArgs by navArgs() - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetManualDownloadBinding.inflate(inflater) - return B.root - } - - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - + _binding = SheetManualDownloadBinding.bind(view) isCancelable = false inflateData() attachActions() + + viewLifecycleOwner.lifecycleScope.launch { + viewModel.purchaseStatus.collectLatest { + if (it) { + toast(R.string.toast_manual_available) + dismissAllowingStateLoss() + } else { + toast(R.string.toast_manual_unavailable) + } + } + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -78,30 +85,30 @@ class ManualDownloadSheet : BaseBottomSheet() { } private fun inflateData() { - B.imgIcon.load(args.app.iconArtwork.url) { + binding.imgIcon.load(args.app.iconArtwork.url) { placeholder(R.drawable.bg_placeholder) transformations(RoundedCornersTransformation(32F)) } - B.txtLine1.text = args.app.displayName - B.txtLine2.text = args.app.packageName - B.txtLine3.text = ("${args.app.versionName} (${args.app.versionCode})") + binding.txtLine1.text = args.app.displayName + binding.txtLine2.text = args.app.packageName + binding.txtLine3.text = ("${args.app.versionName} (${args.app.versionCode})") - B.versionCodeLayout.hint = "${args.app.versionCode}" - B.versionCodeLayout.editText?.setText("${args.app.versionCode}") + binding.versionCodeLayout.hint = "${args.app.versionCode}" + binding.versionCodeLayout.editText?.setText("${args.app.versionCode}") } private fun attachActions() { - B.btnPrimary.setOnClickListener { - val customVersionString = (B.versionCodeInp.text).toString() + binding.btnPrimary.setOnClickListener { + val customVersionString = (binding.versionCodeInp.text).toString() if (customVersionString.isEmpty()) - B.versionCodeInp.error = "Enter version code" + binding.versionCodeInp.error = "Enter version code" else { viewModel.purchase(requireContext(), args.app, customVersionString.toInt()) } } - B.btnSecondary.setOnClickListener { + binding.btnSecondary.setOnClickListener { dismissAllowingStateLoss() } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/NetworkDialogSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/NetworkDialogSheet.kt index 62a16a1ec..cf4fb766a 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/NetworkDialogSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/NetworkDialogSheet.kt @@ -24,19 +24,20 @@ import android.content.Intent import android.os.Bundle import android.provider.Settings import android.util.Log -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import com.aurora.extensions.isQAndAbove +import com.aurora.store.R import com.aurora.store.databinding.SheetNetworkBinding +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -class NetworkDialogSheet : BaseBottomSheet() { +class NetworkDialogSheet : BottomSheetDialogFragment(R.layout.sheet_network) { private val TAG = NetworkDialogSheet::class.java.simpleName - lateinit var B: SheetNetworkBinding + private var _binding: SheetNetworkBinding? = null + private val binding get() = _binding!! companion object { @@ -50,17 +51,11 @@ class NetworkDialogSheet : BaseBottomSheet() { } } - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetNetworkBinding.inflate(inflater, container, false) - return B.root - } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = SheetNetworkBinding.bind(view) - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { - B.btnAction.setOnClickListener { + binding.btnAction.setOnClickListener { if (isQAndAbove()) { startActivity(Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)) } else { @@ -73,4 +68,9 @@ class NetworkDialogSheet : BaseBottomSheet() { } } } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } } diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/PermissionBottomSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/PermissionBottomSheet.kt index 132cca7b5..b7f3d8ea4 100644 --- a/app/src/main/java/com/aurora/store/view/ui/sheets/PermissionBottomSheet.kt +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/PermissionBottomSheet.kt @@ -22,9 +22,7 @@ package com.aurora.store.view.ui.sheets import android.content.pm.PackageManager import android.content.pm.PermissionInfo import android.os.Bundle -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup import android.widget.LinearLayout import androidx.navigation.fragment.navArgs import com.aurora.extensions.hide @@ -33,32 +31,23 @@ import com.aurora.store.R import com.aurora.store.data.model.PermissionGroupInfo import com.aurora.store.databinding.SheetPermissionsBinding import com.aurora.store.view.custom.layouts.PermissionGroup +import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint import java.util.* @AndroidEntryPoint -class PermissionBottomSheet : BaseBottomSheet() { +class PermissionBottomSheet : BottomSheetDialogFragment(R.layout.sheet_permissions) { + + private var _binding: SheetPermissionsBinding? = null + private val binding get() = _binding!! - private lateinit var B: SheetPermissionsBinding private lateinit var packageManager: PackageManager private val args: PermissionBottomSheetArgs by navArgs() - override fun onCreateContentView( - inflater: LayoutInflater, - container: ViewGroup, - savedInstanceState: Bundle? - ): View { - B = SheetPermissionsBinding.inflate(inflater) - return B.root - } - - override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - inflateData() - } - - private fun inflateData() { + _binding = SheetPermissionsBinding.bind(view) packageManager = requireContext().packageManager val permissionGroupWidgets: MutableMap = @@ -84,17 +73,23 @@ class PermissionBottomSheet : BaseBottomSheet() { permissionGroup?.addPermission(permissionInfo) } - B.permissionsContainer.removeAllViews() + binding.permissionsContainer.removeAllViews() val permissionGroupLabels: List = ArrayList(permissionGroupWidgets.keys) permissionGroupLabels.sortedBy { it }.forEach { - B.permissionsContainer.addView(permissionGroupWidgets[it]) + binding.permissionsContainer.addView(permissionGroupWidgets[it]) } - if (permissionGroupLabels.isEmpty()) - B.permissionsNone.show() - else - B.permissionsNone.hide() + if (permissionGroupLabels.isEmpty()) { + binding.permissionsNone.show() + } else { + binding.permissionsNone.hide() + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null } private fun getPermissionInfo(permissionName: String): PermissionInfo? { diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 050e37133..4f469d0bd 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -120,6 +120,4 @@ - -