diff --git a/config.gradle b/config.gradle index 52934e3..d9cb9c6 100644 --- a/config.gradle +++ b/config.gradle @@ -8,21 +8,21 @@ ext { buildTools = "30.0.2" //version - vCode = 3 - vName = "1.0.3" + vCode = 4 + vName = "1.0.4" //gradle gradleVersion = '4.1.2' //kotlin - kotlinVersion = '1.4.30' + kotlinVersion = '1.4.31' kotlinCoroutinesVersion = '1.3.9' kotlixExtVersion = '1.3.2' - kotlinCoroutinesAndroidVersion = '1.4.2' + kotlinCoroutinesAndroidVersion = '1.4.3' //android x xVersion = '1.2.0' xMaterial = '1.3.0' xExif = '1.3.2' - xFragment = '1.3.1' + xFragment = '1.3.3' } \ No newline at end of file diff --git a/mad-base/src/main/java/ru/wearemad/mad_base/collection/CollectionExt.kt b/mad-base/src/main/java/ru/wearemad/mad_base/collection/CollectionExt.kt index f5b9f4b..ada8043 100644 --- a/mad-base/src/main/java/ru/wearemad/mad_base/collection/CollectionExt.kt +++ b/mad-base/src/main/java/ru/wearemad/mad_base/collection/CollectionExt.kt @@ -1,5 +1,22 @@ package ru.wearemad.mad_base.collection +@JvmName("copyImmutableListAndReplaceItem") +fun List.copyListAndReplaceItem( + predicate: (T) -> Boolean, + duplicator: (T) -> T, + action: (T) -> Unit = {} +): List { + val newList = this.toMutableList() + val itemPosition = newList.indexOfFirst(predicate) + if (itemPosition != -1) { + val copiedItem = duplicator(newList[itemPosition]) + action(copiedItem) + newList.removeAt(itemPosition) + newList.add(itemPosition, copiedItem) + } + return newList +} + fun MutableList.copyListAndReplaceItem( predicate: (T) -> Boolean, duplicator: (T) -> T, diff --git a/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/FragmentExt.kt b/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/FragmentExt.kt index 5c7a5f1..9c0ae3b 100644 --- a/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/FragmentExt.kt +++ b/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/FragmentExt.kt @@ -3,6 +3,7 @@ package ru.wearemad.mad_base.common_ext import android.view.View import androidx.annotation.ColorRes import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager import com.google.android.material.bottomsheet.BottomSheetDialogFragment fun Fragment.resColor(@ColorRes color: Int): Int = requireContext().resColor(color) @@ -20,4 +21,26 @@ fun BottomSheetDialogFragment.setTopRoundedBgWithColor( parentView.roundTopCorners(cornersDp) parentView.setBackgroundColor(resColor(color)) } -} \ No newline at end of file +} + +val Fragment.isLastFragment: Boolean + get() { + var lastFragment = activity + ?.supportFragmentManager + ?.findLastFragment() + if (this == lastFragment) { + return true + } + var parent = this.parentFragment + while (parent != null && parent.isLastFragment) { + lastFragment = parent.childFragmentManager.findLastFragment() + if (this == lastFragment) { + return true + } + parent = parent.parentFragment + } + return false + } + +private fun FragmentManager.findLastFragment(): Fragment? = + fragments.lastOrNull { it::class.java.simpleName != "SupportRequestManagerFragment" } \ No newline at end of file diff --git a/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/ViewExt.kt b/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/ViewExt.kt index f47782a..b47a95f 100644 --- a/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/ViewExt.kt +++ b/mad-base/src/main/java/ru/wearemad/mad_base/common_ext/ViewExt.kt @@ -4,9 +4,15 @@ import android.content.Context import android.content.res.ColorStateList import android.graphics.Outline import android.view.View +import android.view.ViewGroup import android.view.ViewOutlineProvider import android.view.inputmethod.InputMethodManager import androidx.annotation.ColorRes +import androidx.annotation.Px +import androidx.core.view.marginBottom +import androidx.core.view.marginLeft +import androidx.core.view.marginRight +import androidx.core.view.marginTop import com.google.android.material.shape.MaterialShapeDrawable import com.google.android.material.shape.ShapeAppearanceModel @@ -54,6 +60,30 @@ fun View.setRoundedBgWithColor( } } +fun View.updateMargins( + @Px top: Int = marginTop, + @Px bottom: Int = marginBottom, + @Px left: Int = marginLeft, + @Px right: Int = marginRight +) { + layoutParams = (layoutParams as? ViewGroup.MarginLayoutParams)?.apply { + setMargins( + left, top, right, bottom + ) + } +} + +fun View.updateAllMargins( + @Px margin: Int +) { + updateMargins( + top = margin, + bottom = margin, + left = margin, + right = margin, + ) +} + fun View.hideKeyboard() { val token = windowToken ?: return val manager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?