kopia lustrzana https://github.com/ryukoposting/Signal-Android
Update window insets logic for gallery and review screens.
rodzic
d413f0041b
commit
0d8ff0ead0
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
Ładowanie…
Reference in New Issue