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.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_ZOOM
|
||||||
import fr.free.nrw.commons.utils.DialogUtil
|
import fr.free.nrw.commons.utils.DialogUtil
|
||||||
import fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL
|
import fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL
|
||||||
|
import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomInsets
|
||||||
import fr.free.nrw.commons.utils.handleGeoCoordinates
|
import fr.free.nrw.commons.utils.handleGeoCoordinates
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
|
@ -474,6 +475,7 @@ class LocationPickerActivity : BaseActivity(), LocationPermissionCallback {
|
||||||
*/
|
*/
|
||||||
private fun addPlaceSelectedButton() {
|
private fun addPlaceSelectedButton() {
|
||||||
placeSelectedButton = findViewById(R.id.location_chosen_button)
|
placeSelectedButton = findViewById(R.id.location_chosen_button)
|
||||||
|
applyEdgeToEdgeBottomInsets(placeSelectedButton)
|
||||||
placeSelectedButton.setOnClickListener { placeSelected() }
|
placeSelectedButton.setOnClickListener { placeSelected() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,64 @@
|
||||||
package fr.free.nrw.commons.utils
|
package fr.free.nrw.commons.utils
|
||||||
|
|
||||||
import androidx.core.graphics.Insets
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup.MarginLayoutParams
|
import android.view.ViewGroup.MarginLayoutParams
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
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 androidx.core.view.updateLayoutParams
|
||||||
|
import fr.free.nrw.commons.R
|
||||||
|
|
||||||
fun View.applyEdgeToEdgeInsets(
|
fun View.applyEdgeToEdgeInsets(
|
||||||
typeMask: Int = WindowInsetsCompat.Type.systemBars(),
|
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)
|
val insets = windowInsets.getInsets(typeMask)
|
||||||
|
|
||||||
v.updateLayoutParams<MarginLayoutParams> {
|
val initialTop = if (view.getTag(R.id.initial_margin_top) != null) {
|
||||||
apply { block(insets) }
|
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
|
WindowInsetsCompat.CONSUMED
|
||||||
|
|
@ -40,3 +83,19 @@ fun applyEdgeToEdgeBottomInsets(view: View) = view.applyEdgeToEdgeInsets { inset
|
||||||
rightMargin = insets.right
|
rightMargin = insets.right
|
||||||
bottomMargin = insets.bottom
|
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