From 662d77cb7ec4e489b4e04e283ce5e0860391e33d Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Mon, 12 Sep 2022 17:40:22 -0400 Subject: [PATCH 1/6] Adds min height to space sheet --- .../features/spaces/SpaceListBottomSheet.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt index 910f8c5379..866d2d81a7 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt @@ -16,10 +16,14 @@ package im.vector.app.features.spaces +import android.app.Dialog import android.os.Bundle +import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.annotation.FloatRange +import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import im.vector.app.R import im.vector.app.core.extensions.replaceChildFragment @@ -37,6 +41,21 @@ class SpaceListBottomSheet : BottomSheetDialogFragment() { return binding.root } + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return super.onCreateDialog(savedInstanceState).apply { + (this as BottomSheetDialog).setPeekHeightAsScreenPercentage(0.75f) + } + } + + @Suppress("DEPRECATION") + private fun BottomSheetDialog.setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { + val displayMetrics = DisplayMetrics() + window?.windowManager?.defaultDisplay?.getMetrics(displayMetrics) + val height = displayMetrics.heightPixels + behavior.setPeekHeight((height * percentage).toInt(), true) + } + companion object { const val TAG = "SpacesBottomSheet" } From 8fc201121ddace119aab8113dc240b7bfc449db6 Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Mon, 12 Sep 2022 17:44:59 -0400 Subject: [PATCH 2/6] Adds min height to new chat --- .../app/core/extensions/BottomSheetDialog.kt | 29 +++++++++++++++++++ .../home/room/list/home/NewChatBottomSheet.kt | 9 ++++++ .../features/spaces/SpaceListBottomSheet.kt | 9 +----- 3 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt diff --git a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt new file mode 100644 index 0000000000..ab55d95573 --- /dev/null +++ b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 New Vector Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package im.vector.app.core.extensions + +import android.util.DisplayMetrics +import androidx.annotation.FloatRange +import com.google.android.material.bottomsheet.BottomSheetDialog + +@Suppress("DEPRECATION") +fun BottomSheetDialog.setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { + val displayMetrics = DisplayMetrics() + window?.windowManager?.defaultDisplay?.getMetrics(displayMetrics) + val height = displayMetrics.heightPixels + behavior.setPeekHeight((height * percentage).toInt(), true) +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt index 05b86f7393..4db47e53b8 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt @@ -16,12 +16,15 @@ package im.vector.app.features.home.room.list.home +import android.app.Dialog import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint +import im.vector.app.core.extensions.setPeekHeightAsScreenPercentage import im.vector.app.databinding.FragmentNewChatBottomSheetBinding import im.vector.app.features.navigation.Navigator import javax.inject.Inject @@ -53,6 +56,12 @@ class NewChatBottomSheet @Inject constructor() : BottomSheetDialogFragment() { } } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + return super.onCreateDialog(savedInstanceState).apply { + (this as BottomSheetDialog).setPeekHeightAsScreenPercentage(0.5f) + } + } + companion object { const val TAG = "NewChatBottomSheet" } diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt index 866d2d81a7..5bb450c5b4 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt @@ -27,6 +27,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import im.vector.app.R import im.vector.app.core.extensions.replaceChildFragment +import im.vector.app.core.extensions.setPeekHeightAsScreenPercentage import im.vector.app.databinding.FragmentSpacesBottomSheetBinding class SpaceListBottomSheet : BottomSheetDialogFragment() { @@ -48,14 +49,6 @@ class SpaceListBottomSheet : BottomSheetDialogFragment() { } } - @Suppress("DEPRECATION") - private fun BottomSheetDialog.setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { - val displayMetrics = DisplayMetrics() - window?.windowManager?.defaultDisplay?.getMetrics(displayMetrics) - val height = displayMetrics.heightPixels - behavior.setPeekHeight((height * percentage).toInt(), true) - } - companion object { const val TAG = "SpacesBottomSheet" } From 55c60c9a40dfecd0929353da6477c7b4cb2bab1b Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Mon, 12 Sep 2022 17:49:06 -0400 Subject: [PATCH 3/6] Adds changelog file --- changelog.d/7103.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/7103.bugfix diff --git a/changelog.d/7103.bugfix b/changelog.d/7103.bugfix new file mode 100644 index 0000000000..12a07b79e5 --- /dev/null +++ b/changelog.d/7103.bugfix @@ -0,0 +1 @@ +Fixes space list and new chat bottom sheets showing too small in New App Layout (especially evident in landscape) From 85f16e8dfa3748a6eae89bcc1dab8faa0bd0d132 Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Tue, 13 Sep 2022 16:21:36 -0400 Subject: [PATCH 4/6] Adds API 30 compatible method --- .../app/core/extensions/BottomSheetDialog.kt | 20 ++++++++++++++++++- .../features/spaces/SpaceListBottomSheet.kt | 3 --- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt index ab55d95573..3b5cab7a80 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt @@ -16,13 +16,31 @@ package im.vector.app.core.extensions +import android.os.Build import android.util.DisplayMetrics import androidx.annotation.FloatRange +import androidx.annotation.RequiresApi import com.google.android.material.bottomsheet.BottomSheetDialog -@Suppress("DEPRECATION") fun BottomSheetDialog.setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + setPeekHeightPostApi30(percentage) + } else { + setPeekHeightPreApi30(percentage) + } +} + +@RequiresApi(Build.VERSION_CODES.R) +private fun BottomSheetDialog.setPeekHeightPostApi30(percentage: Float) { + window?.windowManager?.currentWindowMetrics?.let { windowMetrics -> + val height = windowMetrics.bounds.height() + behavior.setPeekHeight((height * percentage).toInt(), true) + } +} + +private fun BottomSheetDialog.setPeekHeightPreApi30(percentage: Float) { val displayMetrics = DisplayMetrics() + @Suppress("DEPRECATION") window?.windowManager?.defaultDisplay?.getMetrics(displayMetrics) val height = displayMetrics.heightPixels behavior.setPeekHeight((height * percentage).toInt(), true) diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt index 5bb450c5b4..c28d877f30 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt @@ -18,11 +18,9 @@ package im.vector.app.features.spaces import android.app.Dialog import android.os.Bundle -import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.annotation.FloatRange import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import im.vector.app.R @@ -42,7 +40,6 @@ class SpaceListBottomSheet : BottomSheetDialogFragment() { return binding.root } - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return super.onCreateDialog(savedInstanceState).apply { (this as BottomSheetDialog).setPeekHeightAsScreenPercentage(0.75f) From e0f327e8f657ba1db42e2c6b4602966a0b33fa74 Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Wed, 14 Sep 2022 09:37:42 -0400 Subject: [PATCH 5/6] Removes unneeded code in BottomSheetDialog.kt --- .../app/core/extensions/BottomSheetDialog.kt | 27 +++---------------- 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt index 3b5cab7a80..63264c2602 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt @@ -16,32 +16,11 @@ package im.vector.app.core.extensions -import android.os.Build -import android.util.DisplayMetrics import androidx.annotation.FloatRange -import androidx.annotation.RequiresApi import com.google.android.material.bottomsheet.BottomSheetDialog +import io.github.hyuwah.draggableviewlib.Utils.getScreenHeight fun BottomSheetDialog.setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - setPeekHeightPostApi30(percentage) - } else { - setPeekHeightPreApi30(percentage) - } -} - -@RequiresApi(Build.VERSION_CODES.R) -private fun BottomSheetDialog.setPeekHeightPostApi30(percentage: Float) { - window?.windowManager?.currentWindowMetrics?.let { windowMetrics -> - val height = windowMetrics.bounds.height() - behavior.setPeekHeight((height * percentage).toInt(), true) - } -} - -private fun BottomSheetDialog.setPeekHeightPreApi30(percentage: Float) { - val displayMetrics = DisplayMetrics() - @Suppress("DEPRECATION") - window?.windowManager?.defaultDisplay?.getMetrics(displayMetrics) - val height = displayMetrics.heightPixels - behavior.setPeekHeight((height * percentage).toInt(), true) + val screenHeight = getScreenHeight(context) + behavior.setPeekHeight((screenHeight * percentage).toInt(), true) } From f4b5cfc71fdb853ef9e4501f17fbd22d4075667a Mon Sep 17 00:00:00 2001 From: ericdecanini Date: Wed, 14 Sep 2022 09:46:00 -0400 Subject: [PATCH 6/6] Makes bottom sheets inherit VectorBaseBottomSheetDialogFragment --- .../app/core/extensions/BottomSheetDialog.kt | 26 ------------------- .../VectorBaseBottomSheetDialogFragment.kt | 9 +++++++ .../home/room/list/home/NewChatBottomSheet.kt | 22 +++++++--------- .../features/spaces/SpaceListBottomSheet.kt | 16 +++++------- 4 files changed, 26 insertions(+), 47 deletions(-) delete mode 100644 vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt diff --git a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt b/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt deleted file mode 100644 index 63264c2602..0000000000 --- a/vector/src/main/java/im/vector/app/core/extensions/BottomSheetDialog.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2022 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.app.core.extensions - -import androidx.annotation.FloatRange -import com.google.android.material.bottomsheet.BottomSheetDialog -import io.github.hyuwah.draggableviewlib.Utils.getScreenHeight - -fun BottomSheetDialog.setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { - val screenHeight = getScreenHeight(context) - behavior.setPeekHeight((screenHeight * percentage).toInt(), true) -} diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt index ddc281fdd1..ec6f3288f8 100644 --- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt @@ -25,6 +25,7 @@ import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import androidx.annotation.CallSuper +import androidx.annotation.FloatRange import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.viewbinding.ViewBinding @@ -39,6 +40,7 @@ import im.vector.app.core.extensions.toMvRxBundle import im.vector.app.core.utils.DimensionConverter import im.vector.app.features.analytics.AnalyticsTracker import im.vector.app.features.analytics.plan.MobileScreen +import io.github.hyuwah.draggableviewlib.Utils import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import reactivecircus.flowbinding.android.view.clicks @@ -165,6 +167,13 @@ abstract class VectorBaseBottomSheetDialogFragment : BottomShe forceExpandState() } + protected fun setPeekHeightAsScreenPercentage(@FloatRange(from = 0.0, to = 1.0) percentage: Float) { + context?.let { + val screenHeight = Utils.getScreenHeight(it) + bottomSheetBehavior?.setPeekHeight((screenHeight * percentage).toInt(), true) + } + } + protected fun forceExpandState() { if (showExpanded) { // Force the bottom sheet to be expanded diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt index 4db47e53b8..4f1b235b4b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/home/NewChatBottomSheet.kt @@ -21,44 +21,42 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.bottomsheet.BottomSheetDialogFragment import dagger.hilt.android.AndroidEntryPoint -import im.vector.app.core.extensions.setPeekHeightAsScreenPercentage +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.databinding.FragmentNewChatBottomSheetBinding import im.vector.app.features.navigation.Navigator import javax.inject.Inject @AndroidEntryPoint -class NewChatBottomSheet @Inject constructor() : BottomSheetDialogFragment() { +class NewChatBottomSheet @Inject constructor() : VectorBaseBottomSheetDialogFragment() { @Inject lateinit var navigator: Navigator - private lateinit var binding: FragmentNewChatBottomSheetBinding + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentNewChatBottomSheetBinding { + return FragmentNewChatBottomSheetBinding.inflate(inflater, container, false) + } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - binding = FragmentNewChatBottomSheetBinding.inflate(inflater, container, false) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { initFABs() - return binding.root } private fun initFABs() { - binding.startChat.setOnClickListener { + views.startChat.debouncedClicks { navigator.openCreateDirectRoom(requireActivity()) } - binding.createRoom.setOnClickListener { + views.createRoom.debouncedClicks { navigator.openCreateRoom(requireActivity()) } - binding.exploreRooms.setOnClickListener { + views.exploreRooms.debouncedClicks { navigator.openRoomDirectory(requireContext()) } } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return super.onCreateDialog(savedInstanceState).apply { - (this as BottomSheetDialog).setPeekHeightAsScreenPercentage(0.5f) + setPeekHeightAsScreenPercentage(0.5f) } } diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt index c28d877f30..4787aed8ae 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListBottomSheet.kt @@ -21,28 +21,26 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.bottomsheet.BottomSheetDialogFragment import im.vector.app.R import im.vector.app.core.extensions.replaceChildFragment -import im.vector.app.core.extensions.setPeekHeightAsScreenPercentage +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.databinding.FragmentSpacesBottomSheetBinding -class SpaceListBottomSheet : BottomSheetDialogFragment() { +class SpaceListBottomSheet : VectorBaseBottomSheetDialogFragment() { - private lateinit var binding: FragmentSpacesBottomSheetBinding + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentSpacesBottomSheetBinding { + return FragmentSpacesBottomSheetBinding.inflate(inflater, container, false) + } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - binding = FragmentSpacesBottomSheetBinding.inflate(inflater, container, false) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { if (savedInstanceState == null) { replaceChildFragment(R.id.space_list, SpaceListFragment::class.java) } - return binding.root } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return super.onCreateDialog(savedInstanceState).apply { - (this as BottomSheetDialog).setPeekHeightAsScreenPercentage(0.75f) + setPeekHeightAsScreenPercentage(0.75f) } }