mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 12:23:58 +01:00
fix: preserve existing margins when adding new insets
This commit is contained in:
parent
238bd8c672
commit
e43aa9c043
3 changed files with 73 additions and 5 deletions
|
|
@ -48,6 +48,7 @@ import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Compani
|
|||
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_ZOOM
|
||||
import fr.free.nrw.commons.utils.DialogUtil
|
||||
import fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL
|
||||
import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomInsets
|
||||
import fr.free.nrw.commons.utils.handleGeoCoordinates
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.schedulers.Schedulers
|
||||
|
|
@ -474,6 +475,7 @@ class LocationPickerActivity : BaseActivity(), LocationPermissionCallback {
|
|||
*/
|
||||
private fun addPlaceSelectedButton() {
|
||||
placeSelectedButton = findViewById(R.id.location_chosen_button)
|
||||
applyEdgeToEdgeBottomInsets(placeSelectedButton)
|
||||
placeSelectedButton.setOnClickListener { placeSelected() }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,21 +1,64 @@
|
|||
package fr.free.nrw.commons.utils
|
||||
|
||||
import androidx.core.graphics.Insets
|
||||
import android.view.View
|
||||
import android.view.ViewGroup.MarginLayoutParams
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.core.view.marginBottom
|
||||
import androidx.core.view.marginLeft
|
||||
import androidx.core.view.marginRight
|
||||
import androidx.core.view.marginTop
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import fr.free.nrw.commons.R
|
||||
|
||||
fun View.applyEdgeToEdgeInsets(
|
||||
typeMask: Int = WindowInsetsCompat.Type.systemBars(),
|
||||
block: MarginLayoutParams.(Insets) -> Unit
|
||||
block: MarginLayoutParams.(InsetsAccumulator) -> Unit
|
||||
) {
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { v, windowInsets ->
|
||||
ViewCompat.setOnApplyWindowInsetsListener(this) { view, windowInsets ->
|
||||
val insets = windowInsets.getInsets(typeMask)
|
||||
|
||||
v.updateLayoutParams<MarginLayoutParams> {
|
||||
apply { block(insets) }
|
||||
val initialTop = if (view.getTag(R.id.initial_margin_top) != null) {
|
||||
view.getTag(R.id.initial_margin_top) as Int
|
||||
} else {
|
||||
view.setTag(R.id.initial_margin_top, view.marginTop)
|
||||
view.marginTop
|
||||
}
|
||||
|
||||
val initialBottom = if (view.getTag(R.id.initial_margin_bottom) != null) {
|
||||
view.getTag(R.id.initial_margin_bottom) as Int
|
||||
} else {
|
||||
view.setTag(R.id.initial_margin_bottom, view.marginBottom)
|
||||
view.marginBottom
|
||||
}
|
||||
|
||||
val initialLeft = if (view.getTag(R.id.initial_margin_left) != null) {
|
||||
view.getTag(R.id.initial_margin_left) as Int
|
||||
} else {
|
||||
view.setTag(R.id.initial_margin_left, view.marginLeft)
|
||||
view.marginLeft
|
||||
}
|
||||
|
||||
val initialRight = if (view.getTag(R.id.initial_margin_right) != null) {
|
||||
view.getTag(R.id.initial_margin_right) as Int
|
||||
} else {
|
||||
view.setTag(R.id.initial_margin_right, view.marginRight)
|
||||
view.marginRight
|
||||
}
|
||||
|
||||
val accumulator = InsetsAccumulator(
|
||||
initialTop,
|
||||
insets.top,
|
||||
initialBottom,
|
||||
insets.bottom,
|
||||
initialLeft,
|
||||
insets.left,
|
||||
initialRight,
|
||||
insets.right
|
||||
)
|
||||
|
||||
view.updateLayoutParams<MarginLayoutParams> {
|
||||
apply { block(accumulator) }
|
||||
}
|
||||
|
||||
WindowInsetsCompat.CONSUMED
|
||||
|
|
@ -40,3 +83,19 @@ fun applyEdgeToEdgeBottomInsets(view: View) = view.applyEdgeToEdgeInsets { inset
|
|||
rightMargin = insets.right
|
||||
bottomMargin = insets.bottom
|
||||
}
|
||||
|
||||
data class InsetsAccumulator(
|
||||
private val initialTop: Int,
|
||||
private val insetTop: Int,
|
||||
private val initialBottom: Int,
|
||||
private val insetBottom: Int,
|
||||
private val initialLeft: Int,
|
||||
private val insetLeft: Int,
|
||||
private val initialRight: Int,
|
||||
private val insetRight: Int
|
||||
) {
|
||||
val top = initialTop + insetTop
|
||||
val bottom = initialBottom + insetBottom
|
||||
val left = initialLeft + insetLeft
|
||||
val right = initialRight + insetRight
|
||||
}
|
||||
7
app/src/main/res/values/ids.xml
Normal file
7
app/src/main/res/values/ids.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<item name="initial_margin_top" type="id" />
|
||||
<item name="initial_margin_bottom" type="id" />
|
||||
<item name="initial_margin_left" type="id" />
|
||||
<item name="initial_margin_right" type="id" />
|
||||
</resources>
|
||||
Loading…
Add table
Add a link
Reference in a new issue