From 8c2f5011ef1b209df6179d67679389e1ad303ca8 Mon Sep 17 00:00:00 2001 From: machiav3lli Date: Thu, 27 Jan 2022 01:59:18 +0100 Subject: [PATCH] Update: Abstract FullscreenBottomSheetDialogFragment from RepositorySheet --- .../FullscreenBottomSheetDialogFragment.kt | 35 +++++++++++++++++++ .../droidify/ui/fragments/RepositorySheetX.kt | 31 +++------------- 2 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 src/main/kotlin/com/looker/droidify/ui/fragments/FullscreenBottomSheetDialogFragment.kt diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/FullscreenBottomSheetDialogFragment.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/FullscreenBottomSheetDialogFragment.kt new file mode 100644 index 00000000..597e9647 --- /dev/null +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/FullscreenBottomSheetDialogFragment.kt @@ -0,0 +1,35 @@ +package com.looker.droidify.ui.fragments + +import android.app.Dialog +import android.os.Bundle +import android.view.View +import android.view.WindowManager +import com.google.android.material.bottomsheet.BottomSheetBehavior +import com.google.android.material.bottomsheet.BottomSheetDialog +import com.google.android.material.bottomsheet.BottomSheetDialogFragment + +abstract class FullscreenBottomSheetDialogFragment() : BottomSheetDialogFragment() { + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val sheet = super.onCreateDialog(savedInstanceState) as BottomSheetDialog + sheet.setOnShowListener { + val parentLayout = + sheet.findViewById(com.google.android.material.R.id.design_bottom_sheet) + parentLayout?.let { view -> + val behaviour = BottomSheetBehavior.from(view) + val layoutParams = view.layoutParams + layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT + view.layoutParams = layoutParams + behaviour.state = BottomSheetBehavior.STATE_EXPANDED + } + } + return sheet + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupLayout() + } + + protected abstract fun setupLayout() + protected abstract fun updateSheet() +} diff --git a/src/main/kotlin/com/looker/droidify/ui/fragments/RepositorySheetX.kt b/src/main/kotlin/com/looker/droidify/ui/fragments/RepositorySheetX.kt index eb765d9d..0d11e097 100644 --- a/src/main/kotlin/com/looker/droidify/ui/fragments/RepositorySheetX.kt +++ b/src/main/kotlin/com/looker/droidify/ui/fragments/RepositorySheetX.kt @@ -1,6 +1,5 @@ package com.looker.droidify.ui.fragments -import android.app.Dialog import android.os.Bundle import android.text.SpannableStringBuilder import android.text.format.DateUtils @@ -9,11 +8,7 @@ import android.text.style.TypefaceSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.WindowManager import androidx.fragment.app.viewModels -import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.looker.droidify.EXTRA_REPOSITORY_ID import com.looker.droidify.R import com.looker.droidify.databinding.SheetRepositoryBinding @@ -28,7 +23,7 @@ import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.util.* -class RepositorySheetX() : BottomSheetDialogFragment() { +class RepositorySheetX() : FullscreenBottomSheetDialogFragment() { private lateinit var binding: SheetRepositoryBinding val viewModel: RepositoryViewModelX by viewModels { RepositoryViewModelX.Factory((requireActivity() as PrefsActivityX).db, repositoryId) @@ -45,23 +40,6 @@ class RepositorySheetX() : BottomSheetDialogFragment() { private val syncConnection = Connection(SyncService::class.java) - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val sheet = super.onCreateDialog(savedInstanceState) - sheet.setOnShowListener { - val bsd = it as BottomSheetDialog - val parentLayout = - bsd.findViewById(com.google.android.material.R.id.design_bottom_sheet) - parentLayout?.let { view -> - val behaviour = BottomSheetBehavior.from(view) - val layoutParams = view.layoutParams - layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT - view.layoutParams = layoutParams - behaviour.state = BottomSheetBehavior.STATE_EXPANDED - } - } - return sheet - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -72,9 +50,8 @@ class RepositorySheetX() : BottomSheetDialogFragment() { return binding.root } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - viewModel.repo.observe(viewLifecycleOwner) { updateRepositoryView() } + override fun setupLayout() { + viewModel.repo.observe(viewLifecycleOwner) { updateSheet() } binding.delete.setOnClickListener { MessageDialog(MessageDialog.Message.DeleteRepositoryConfirm).show( childFragmentManager @@ -87,7 +64,7 @@ class RepositorySheetX() : BottomSheetDialogFragment() { syncConnection.unbind(requireContext()) } - private fun updateRepositoryView() { + override fun updateSheet() { val repository = viewModel.repo.value?.trueData if (repository == null) {