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
|
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
|
@JvmStatic
|
||||||
fun getDisplay(activity: Activity): CameraDisplay {
|
fun getDisplay(activity: Activity): CameraDisplay {
|
||||||
val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate()
|
val windowMetricsCalculator = WindowMetricsCalculator.getOrCreate()
|
||||||
val windowMetrics = windowMetricsCalculator.computeCurrentWindowMetrics(activity)
|
val windowMetrics = windowMetricsCalculator.computeCurrentWindowMetrics(activity)
|
||||||
val width = windowMetrics.bounds.width()
|
val width = windowMetrics.bounds.width()
|
||||||
val height = windowMetrics.bounds.height()
|
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 {
|
return when {
|
||||||
aspectRatio <= DISPLAY_20_9.aspectRatio -> DISPLAY_20_9
|
aspectRatio <= DISPLAY_20_9.aspectRatio -> DISPLAY_20_9
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.OnBackPressedCallback
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.updateLayoutParams
|
import androidx.core.view.updateLayoutParams
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
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.Media
|
||||||
import org.thoughtcrime.securesms.mediasend.MediaRepository
|
import org.thoughtcrime.securesms.mediasend.MediaRepository
|
||||||
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
import org.thoughtcrime.securesms.util.Material3OnScrollHelper
|
||||||
|
import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil
|
import org.thoughtcrime.securesms.util.ViewUtil
|
||||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||||
import org.thoughtcrime.securesms.util.fragments.requireListener
|
import org.thoughtcrime.securesms.util.fragments.requireListener
|
||||||
|
@ -53,12 +55,7 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
|
||||||
callbacks = requireListener()
|
callbacks = requireListener()
|
||||||
val binding = V2MediaGalleryFragmentBinding.bind(view)
|
val binding = V2MediaGalleryFragmentBinding.bind(view)
|
||||||
|
|
||||||
binding.root.setPadding(
|
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner, WindowInsetsCompat.Type.navigationBars())
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
ViewUtil.getNavigationBarHeight(view)
|
|
||||||
)
|
|
||||||
|
|
||||||
binding.mediaGalleryToolbar.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
binding.mediaGalleryToolbar.updateLayoutParams<ConstraintLayout.LayoutParams> {
|
||||||
topMargin = ViewUtil.getStatusBarHeight(view)
|
topMargin = ViewUtil.getStatusBarHeight(view)
|
||||||
|
|
|
@ -43,7 +43,7 @@ import org.thoughtcrime.securesms.permissions.Permissions
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
import org.thoughtcrime.securesms.util.LifecycleDisposable
|
||||||
import org.thoughtcrime.securesms.util.MediaUtil
|
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.adapter.mapping.MappingAdapter
|
||||||
import org.thoughtcrime.securesms.util.fragments.requireListener
|
import org.thoughtcrime.securesms.util.fragments.requireListener
|
||||||
import org.thoughtcrime.securesms.util.views.TouchInterceptingFrameLayout
|
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?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
postponeEnterTransition()
|
postponeEnterTransition()
|
||||||
|
|
||||||
|
SystemWindowInsetsSetter.attach(view, viewLifecycleOwner)
|
||||||
|
|
||||||
disposables.bindTo(viewLifecycleOwner)
|
disposables.bindTo(viewLifecycleOwner)
|
||||||
|
|
||||||
callback = requireListener()
|
callback = requireListener()
|
||||||
|
|
||||||
view.setPadding(
|
|
||||||
0,
|
|
||||||
ViewUtil.getStatusBarHeight(view),
|
|
||||||
0,
|
|
||||||
ViewUtil.getNavigationBarHeight(view)
|
|
||||||
)
|
|
||||||
|
|
||||||
drawToolButton = view.findViewById(R.id.draw_tool)
|
drawToolButton = view.findViewById(R.id.draw_tool)
|
||||||
cropAndRotateButton = view.findViewById(R.id.crop_and_rotate_tool)
|
cropAndRotateButton = view.findViewById(R.id.crop_and_rotate_tool)
|
||||||
qualityButton = view.findViewById(R.id.quality_selector)
|
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