Update window insets logic for gallery and review screens.

fork-5.53.8
Alex Hart 2022-09-29 11:17:07 -03:00 zatwierdzone przez GitHub
rodzic d413f0041b
commit 0d8ff0ead0
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 56 dodań i 15 usunięć

Wyświetl plik

@ -109,13 +109,19 @@ enum class CameraDisplay(
return (cameraCaptureButtonSize - cameraCaptureImageButtonSize) / 2
}
/**
* Get the camera display type given the current window metrics. Note that this
* will automatically invert the aspect ratio in the case of a non-portrait orientation,
* since we fix camera to portrait.
*/
@JvmStatic
fun getDisplay(activity: Activity): CameraDisplay {
val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate()
val windowMetrics = windowMetricsCalculator.computeCurrentWindowMetrics(activity)
val width = windowMetrics.bounds.width()
val height = windowMetrics.bounds.height()
val aspectRatio = width.toFloat() / height
val winAr = width.toFloat() / height
val aspectRatio = if (winAr > 1f) 1 / winAr else winAr
return when {
aspectRatio <= DISPLAY_20_9.aspectRatio -> DISPLAY_20_9

Wyświetl plik

@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.View
import androidx.activity.OnBackPressedCallback
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
@ -18,6 +19,7 @@ import org.thoughtcrime.securesms.databinding.V2MediaGalleryFragmentBinding
import org.thoughtcrime.securesms.mediasend.Media
import org.thoughtcrime.securesms.mediasend.MediaRepository
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.fragments.requireListener
@ -53,12 +55,7 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
callbacks = requireListener()
val binding = V2MediaGalleryFragmentBinding.bind(view)
binding.root.setPadding(
0,
0,
0,
ViewUtil.getNavigationBarHeight(view)
)
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
binding.mediaGalleryToolbar.updateLayoutParams<ConstraintLayout.LayoutParams> {
topMargin = ViewUtil.getStatusBarHeight(view)

Wyświetl plik

@ -43,7 +43,7 @@ import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.util.LifecycleDisposable
import org.thoughtcrime.securesms.util.MediaUtil
import org.thoughtcrime.securesms.util.ViewUtil
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
import org.thoughtcrime.securesms.util.fragments.requireListener
import org.thoughtcrime.securesms.util.views.TouchInterceptingFrameLayout
@ -88,17 +88,12 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
postponeEnterTransition()
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
disposables.bindTo(viewLifecycleOwner)
callback = requireListener()
view.setPadding(
0,
ViewUtil.getStatusBarHeight(view),
0,
ViewUtil.getNavigationBarHeight(view)
)
drawToolButton = view.findViewById(R.id.draw_tool)
cropAndRotateButton = view.findViewById(R.id.crop_and_rotate_tool)
qualityButton = view.findViewById(R.id.quality_selector)

Wyświetl plik

@ -0,0 +1,43 @@
package org.thoughtcrime.securesms.util
import android.view.View
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
object SystemWindowInsetsSetter {
/**
* Updates the view whenever a layout occurs to properly set the system bar insets. setPadding is safe here because it will only trigger an extra layout
* call IF the values actually changed.
*/
fun attach(view: View, lifecycleOwner: LifecycleOwner, @WindowInsetsCompat.Type.InsetsType insetType: Int = WindowInsetsCompat.Type.systemBars()) {
val listener = view.doOnEachLayout {
val insets = ViewCompat.getRootWindowInsets(view)?.getInsets(insetType)
if (insets != null) {
view.setPadding(
insets.left,
insets.top,
insets.right,
insets.bottom
)
} else {
view.setPadding(
0,
ViewUtil.getStatusBarHeight(view),
0,
ViewUtil.getNavigationBarHeight(view)
)
}
}
val lifecycleObserver = object : DefaultLifecycleObserver {
override fun onDestroy(owner: LifecycleOwner) {
view.removeOnLayoutChangeListener(listener)
}
}
lifecycleOwner.lifecycle.addObserver(lifecycleObserver)
}
}