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 de0e49638..34f073cd8 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 @@ -36,19 +36,15 @@ 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 @AndroidEntryPoint -class AppMenuSheet : BottomSheetDialogFragment(R.layout.sheet_app_menu) { +class AppMenuSheet : BaseDialogSheet() { 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() @@ -66,7 +62,6 @@ class AppMenuSheet : BottomSheetDialogFragment(R.layout.sheet_app_menu) { 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) @@ -122,9 +117,4 @@ class AppMenuSheet : BottomSheetDialogFragment(R.layout.sheet_app_menu) { } } } - - 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 5cc681e50..be99f6a0e 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 @@ -27,20 +27,14 @@ 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 : BottomSheetDialogFragment(R.layout.sheet_app_peek) { - - private var _binding: SheetAppPeekBinding? = null - private val binding get() = _binding!! - +class AppPeekDialogSheet : BaseDialogSheet() { private val args: AppPeekDialogSheetArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetAppPeekBinding.bind(view) binding.txtLine1.text = args.app.displayName binding.imgIcon.load(args.app.iconArtwork.url) { @@ -54,9 +48,4 @@ class AppPeekDialogSheet : BottomSheetDialogFragment(R.layout.sheet_app_peek) { 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/BaseDialogSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/BaseDialogSheet.kt new file mode 100644 index 000000000..dd2b5bc23 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/BaseDialogSheet.kt @@ -0,0 +1,58 @@ +/* + * Aurora Store + * Copyright (C) 2021, Rahul Kumar Patel + * Copyright (C) 2022, The Calyx Institute + * + * 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.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.viewbinding.ViewBinding +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import java.lang.reflect.ParameterizedType + +abstract class BaseDialogSheet : BottomSheetDialogFragment() { + + 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 + 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() + } +} 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 5606f7e88..d66bb2581 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 @@ -28,18 +28,13 @@ 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 : BottomSheetDialogFragment(R.layout.sheet_device_miui) { - - private var _binding: SheetDeviceMiuiBinding? = null - private val binding get() = _binding!! +class DeviceMiuiSheet : BaseDialogSheet() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetDeviceMiuiBinding.bind(view) binding.imgIcon.load(R.drawable.ic_xiaomi_logo) { transformations(CircleCropTransformation()) @@ -57,9 +52,4 @@ class DeviceMiuiSheet : BottomSheetDialogFragment(R.layout.sheet_device_miui) { dismissAllowingStateLoss() } } - - 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 ad65b2b6b..451396338 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 @@ -36,20 +36,15 @@ import com.aurora.store.databinding.SheetDownloadMenuBinding import com.aurora.store.util.DownloadWorkerUtil import com.aurora.store.util.PathUtil import com.aurora.store.viewmodel.sheets.SheetsViewModel -import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.launch import javax.inject.Inject @AndroidEntryPoint -class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu) { +class DownloadMenuSheet : BaseDialogSheet() { private val TAG = DownloadMenuSheet::class.java.simpleName - - private var _binding: SheetDownloadMenuBinding? = null - private val binding get() = _binding!! - private val viewModel: SheetsViewModel by viewModels() private val args: DownloadMenuSheetArgs by navArgs() private val playStoreURL = "https://play.google.com/store/apps/details?id=" @@ -74,7 +69,6 @@ class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetDownloadMenuBinding.bind(view) with(binding.navigationView) { val downloadCompleted = args.download.downloadStatus == DownloadStatus.COMPLETED @@ -96,6 +90,7 @@ class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu install() dismissAllowingStateLoss() } + R.id.action_copy -> { requireContext().copyToClipBoard( "${playStoreURL}${args.download.packageName}" @@ -103,12 +98,14 @@ class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu requireContext().toast(requireContext().getString(R.string.toast_clipboard_copied)) dismissAllowingStateLoss() } + R.id.action_cancel -> { findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) { downloadWorkerUtil.cancelDownload(args.download.packageName) } dismissAllowingStateLoss() } + R.id.action_clear -> { findViewTreeLifecycleOwner()?.lifecycleScope?.launch(NonCancellable) { downloadWorkerUtil.clearDownload( @@ -118,6 +115,7 @@ class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu } dismissAllowingStateLoss() } + R.id.action_local -> { requestDocumentCreation.launch("${args.download.packageName}.zip") } @@ -127,11 +125,6 @@ class DownloadMenuSheet : BottomSheetDialogFragment(R.layout.sheet_download_menu } } - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } - private fun install() { try { appInstaller.getPreferredInstaller().install(args.download) 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 af86dfd6e..568f2c414 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 @@ -15,9 +15,8 @@ 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 : BottomSheetDialogFragment(R.layout.sheet_doze_warning) { +class DozeWarningSheet : BaseDialogSheet() { private val args: DozeWarningSheetArgs by navArgs() @@ -38,12 +37,8 @@ class DozeWarningSheet : BottomSheetDialogFragment(R.layout.sheet_doze_warning) } } - private var _binding: SheetDozeWarningBinding? = null - private val binding get() = _binding!! - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetDozeWarningBinding.bind(view) binding.btnSecondary.setOnClickListener { dismissAllowingStateLoss() } binding.btnPrimary.setOnClickListener { @@ -55,9 +50,4 @@ class DozeWarningSheet : BottomSheetDialogFragment(R.layout.sheet_doze_warning) } } } - - 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 65b4d3d05..44bed992c 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 @@ -25,16 +25,12 @@ import com.aurora.store.R import com.aurora.store.data.model.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 import javax.inject.Inject @AndroidEntryPoint -class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) { - - private var _binding: SheetFilterBinding? = null - private val binding get() = _binding!! +class FilterSheet : BaseDialogSheet() { @Inject lateinit var filterProvider: FilterProvider @@ -43,7 +39,6 @@ class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetFilterBinding.bind(view) filter = filterProvider.getSavedFilter() attachSingleChips() @@ -51,11 +46,6 @@ class FilterSheet : BottomSheetDialogFragment(R.layout.sheet_filter) { attachActions() } - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } - private fun attachActions() { binding.btnPositive.setOnClickListener { filterProvider.saveFilter(filter) 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 d23911bbc..6b8366ec5 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 @@ -28,20 +28,15 @@ 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 : BottomSheetDialogFragment(R.layout.sheet_install_error) { - - private var _binding: SheetInstallErrorBinding? = null - private val binding get() = _binding!! +class InstallErrorDialogSheet : BaseDialogSheet() { private val args: InstallErrorDialogSheetArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetInstallErrorBinding.bind(view) binding.imgIcon.load(args.app.iconArtwork.url) { transformations(CircleCropTransformation()) @@ -60,9 +55,4 @@ class InstallErrorDialogSheet : BottomSheetDialogFragment(R.layout.sheet_install 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 ccbcc915e..b69cd2e28 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 @@ -31,23 +31,17 @@ 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 : BottomSheetDialogFragment(R.layout.sheet_manual_download) { - - private var _binding: SheetManualDownloadBinding? = null - private val binding get() = _binding!! - +class ManualDownloadSheet : BaseDialogSheet() { private val viewModel: SheetsViewModel by viewModels() private val args: ManualDownloadSheetArgs by navArgs() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetManualDownloadBinding.bind(view) isCancelable = false inflateData() @@ -65,11 +59,6 @@ class ManualDownloadSheet : BottomSheetDialogFragment(R.layout.sheet_manual_down } } - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { this.lifecycleScope.launch { viewModel.purchaseStatus.collectLatest { 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 cf4fb766a..086efba08 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 @@ -26,19 +26,14 @@ import android.provider.Settings import android.util.Log import android.view.View 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 : BottomSheetDialogFragment(R.layout.sheet_network) { +class NetworkDialogSheet : BaseDialogSheet() { private val TAG = NetworkDialogSheet::class.java.simpleName - private var _binding: SheetNetworkBinding? = null - private val binding get() = _binding!! - companion object { const val TAG = "NetworkDialogSheet" @@ -53,8 +48,6 @@ class NetworkDialogSheet : BottomSheetDialogFragment(R.layout.sheet_network) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetNetworkBinding.bind(view) - binding.btnAction.setOnClickListener { if (isQAndAbove()) { startActivity(Intent(Settings.Panel.ACTION_INTERNET_CONNECTIVITY)) @@ -68,9 +61,4 @@ class NetworkDialogSheet : BottomSheetDialogFragment(R.layout.sheet_network) { } } } - - 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 553038aa4..06bdb5976 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 @@ -31,14 +31,10 @@ 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 @AndroidEntryPoint -class PermissionBottomSheet : BottomSheetDialogFragment(R.layout.sheet_permissions) { - - private var _binding: SheetPermissionsBinding? = null - private val binding get() = _binding!! +class PermissionBottomSheet : BaseDialogSheet() { private lateinit var packageManager: PackageManager private lateinit var currentPerms: List @@ -47,7 +43,6 @@ class PermissionBottomSheet : BottomSheetDialogFragment(R.layout.sheet_permissio override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - _binding = SheetPermissionsBinding.bind(view) packageManager = requireContext().packageManager currentPerms = try { @@ -95,11 +90,6 @@ class PermissionBottomSheet : BottomSheetDialogFragment(R.layout.sheet_permissio } } - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } - private fun getPermissionInfo(permissionName: String): PermissionInfo? { return try { packageManager.getPermissionInfo(permissionName, 0)