@lodev09/react-native-true-sheet 3.7.1 → 3.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3,7 +3,6 @@ package com.lodev09.truesheet
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.view.View
|
|
5
5
|
import android.view.ViewGroup
|
|
6
|
-
import android.view.ViewStructure
|
|
7
6
|
import android.view.accessibility.AccessibilityEvent
|
|
8
7
|
import androidx.annotation.UiThread
|
|
9
8
|
import com.facebook.react.bridge.LifecycleEventListener
|
|
@@ -32,10 +31,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
32
31
|
TrueSheetViewControllerDelegate,
|
|
33
32
|
TrueSheetContainerViewDelegate {
|
|
34
33
|
|
|
35
|
-
companion object {
|
|
36
|
-
const val TAG_NAME = "TrueSheet"
|
|
37
|
-
}
|
|
38
|
-
|
|
39
34
|
// ==================== Properties ====================
|
|
40
35
|
|
|
41
36
|
internal val viewController: TrueSheetViewController = TrueSheetViewController(reactContext)
|
|
@@ -200,7 +195,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
200
195
|
if (viewController.dimmed == dimmed) return
|
|
201
196
|
viewController.dimmed = dimmed
|
|
202
197
|
if (viewController.isPresented) {
|
|
203
|
-
viewController.setupDimmedBackground(
|
|
198
|
+
viewController.setupDimmedBackground()
|
|
204
199
|
viewController.updateDimAmount()
|
|
205
200
|
}
|
|
206
201
|
}
|
|
@@ -209,7 +204,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
209
204
|
if (viewController.dimmedDetentIndex == index) return
|
|
210
205
|
viewController.dimmedDetentIndex = index
|
|
211
206
|
if (viewController.isPresented) {
|
|
212
|
-
viewController.setupDimmedBackground(
|
|
207
|
+
viewController.setupDimmedBackground()
|
|
213
208
|
viewController.updateDimAmount()
|
|
214
209
|
}
|
|
215
210
|
}
|
|
@@ -492,6 +487,10 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
492
487
|
dismissAll(animated = true) {}
|
|
493
488
|
}
|
|
494
489
|
|
|
490
|
+
override fun viewControllerDidDetectScreenDismiss() {
|
|
491
|
+
resetTranslation()
|
|
492
|
+
}
|
|
493
|
+
|
|
495
494
|
// ==================== TrueSheetContainerViewDelegate ====================
|
|
496
495
|
|
|
497
496
|
override fun containerViewContentDidChangeSize(width: Int, height: Int) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
package com.lodev09.truesheet
|
|
2
2
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
|
-
import android.graphics.Bitmap
|
|
5
4
|
import android.graphics.Canvas
|
|
6
5
|
import android.os.Build
|
|
7
6
|
import android.view.MotionEvent
|
|
@@ -11,10 +10,8 @@ import android.view.accessibility.AccessibilityNodeInfo
|
|
|
11
10
|
import android.widget.ImageView
|
|
12
11
|
import androidx.activity.OnBackPressedCallback
|
|
13
12
|
import androidx.appcompat.app.AppCompatActivity
|
|
14
|
-
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
|
15
13
|
import androidx.core.graphics.createBitmap
|
|
16
14
|
import androidx.core.view.isNotEmpty
|
|
17
|
-
import androidx.core.view.isVisible
|
|
18
15
|
import com.facebook.react.R
|
|
19
16
|
import com.facebook.react.uimanager.JSPointerDispatcher
|
|
20
17
|
import com.facebook.react.uimanager.JSTouchDispatcher
|
|
@@ -67,6 +64,7 @@ interface TrueSheetViewControllerDelegate {
|
|
|
67
64
|
fun viewControllerDidBlur()
|
|
68
65
|
fun viewControllerDidBackPress()
|
|
69
66
|
fun viewControllerDidDetectScreenDisappear()
|
|
67
|
+
fun viewControllerDidDetectScreenDismiss()
|
|
70
68
|
}
|
|
71
69
|
|
|
72
70
|
// =============================================================================
|
|
@@ -90,8 +88,6 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
90
88
|
TrueSheetBottomSheetViewDelegate {
|
|
91
89
|
|
|
92
90
|
companion object {
|
|
93
|
-
const val TAG_NAME = "TrueSheet"
|
|
94
|
-
|
|
95
91
|
private const val DEFAULT_MAX_WIDTH = 640 // dp
|
|
96
92
|
private const val DEFAULT_CORNER_RADIUS = 16 // dp
|
|
97
93
|
private const val TRANSLATE_ANIMATION_DURATION = 200L
|
|
@@ -234,11 +230,15 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
234
230
|
get() = ScreenUtils.getRealScreenHeight(reactContext)
|
|
235
231
|
|
|
236
232
|
// Content Measurements
|
|
233
|
+
// Cached values used during dismiss when container is unmounted
|
|
234
|
+
private var cachedContentHeight: Int = 0
|
|
235
|
+
private var cachedHeaderHeight: Int = 0
|
|
236
|
+
|
|
237
237
|
override val contentHeight: Int
|
|
238
|
-
get() = containerView?.contentHeight ?:
|
|
238
|
+
get() = containerView?.contentHeight ?: cachedContentHeight
|
|
239
239
|
|
|
240
240
|
override val headerHeight: Int
|
|
241
|
-
get() = containerView?.headerHeight ?:
|
|
241
|
+
get() = containerView?.headerHeight ?: cachedHeaderHeight
|
|
242
242
|
|
|
243
243
|
// Insets
|
|
244
244
|
// Target keyboard height used for detent calculations
|
|
@@ -266,9 +266,10 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
266
266
|
override val contentBottomInset: Int
|
|
267
267
|
get() = if (insetAdjustment == "automatic") bottomInset else 0
|
|
268
268
|
|
|
269
|
+
@Suppress("KotlinConstantConditions", "SimplifyBooleanWithConstants")
|
|
269
270
|
private val edgeToEdgeEnabled: Boolean
|
|
270
271
|
get() {
|
|
271
|
-
val defaultEnabled =
|
|
272
|
+
val defaultEnabled = Build.VERSION.SDK_INT >= 36
|
|
272
273
|
return BuildConfig.EDGE_TO_EDGE_ENABLED || defaultEnabled
|
|
273
274
|
}
|
|
274
275
|
|
|
@@ -340,6 +341,8 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
340
341
|
isPresented = false
|
|
341
342
|
isSheetVisible = false
|
|
342
343
|
wasHiddenByModal = false
|
|
344
|
+
cachedContentHeight = 0
|
|
345
|
+
cachedHeaderHeight = 0
|
|
343
346
|
isPresentAnimating = false
|
|
344
347
|
lastEmittedPositionPx = -1
|
|
345
348
|
detentIndexBeforeKeyboard = -1
|
|
@@ -539,7 +542,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
539
542
|
|
|
540
543
|
if (detentInfo.index != currentDetentIndex) {
|
|
541
544
|
currentDetentIndex = detentInfo.index
|
|
542
|
-
setupDimmedBackground(
|
|
545
|
+
setupDimmedBackground()
|
|
543
546
|
delegate?.viewControllerDidChangeDetent(detentInfo.index, detentInfo.position, detent)
|
|
544
547
|
}
|
|
545
548
|
|
|
@@ -574,6 +577,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
574
577
|
onModalWillDismiss = {
|
|
575
578
|
if (isPresented && wasHiddenByModal && isTopmostSheet) {
|
|
576
579
|
showAfterModal()
|
|
580
|
+
delegate?.viewControllerDidDetectScreenDismiss()
|
|
577
581
|
}
|
|
578
582
|
},
|
|
579
583
|
onModalDidDismiss = {
|
|
@@ -659,7 +663,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
659
663
|
}
|
|
660
664
|
|
|
661
665
|
if (isPresented) {
|
|
662
|
-
setupDimmedBackground(
|
|
666
|
+
setupDimmedBackground()
|
|
663
667
|
setStateForDetentIndex(detentIndex)
|
|
664
668
|
} else {
|
|
665
669
|
shouldAnimatePresent = animated
|
|
@@ -672,7 +676,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
672
676
|
emitWillPresentEvents()
|
|
673
677
|
|
|
674
678
|
setupSheetDetents()
|
|
675
|
-
setupDimmedBackground(
|
|
679
|
+
setupDimmedBackground()
|
|
676
680
|
setupKeyboardObserver()
|
|
677
681
|
setupModalObserver()
|
|
678
682
|
setupBackCallback()
|
|
@@ -703,6 +707,8 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
703
707
|
|
|
704
708
|
// Create layout params with behavior
|
|
705
709
|
val params = sheet.createLayoutParams()
|
|
710
|
+
|
|
711
|
+
@Suppress("UNCHECKED_CAST")
|
|
706
712
|
val behavior = params.behavior as BottomSheetBehavior<TrueSheetBottomSheetView>
|
|
707
713
|
|
|
708
714
|
// Configure behavior
|
|
@@ -786,6 +792,11 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
786
792
|
return
|
|
787
793
|
}
|
|
788
794
|
|
|
795
|
+
containerView?.let {
|
|
796
|
+
cachedContentHeight = it.contentHeight
|
|
797
|
+
cachedHeaderHeight = it.headerHeight
|
|
798
|
+
}
|
|
799
|
+
|
|
789
800
|
interactionState = InteractionState.Reconfiguring
|
|
790
801
|
|
|
791
802
|
behavior.isFitToContents = false
|
|
@@ -857,7 +868,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
857
868
|
// MARK: - Dimmed Background
|
|
858
869
|
// =============================================================================
|
|
859
870
|
|
|
860
|
-
fun setupDimmedBackground(
|
|
871
|
+
fun setupDimmedBackground() {
|
|
861
872
|
val coordinator = this.coordinatorLayout ?: run {
|
|
862
873
|
RNLog.e(reactContext, "TrueSheet: coordinatorLayout is null in setupDimmedBackground")
|
|
863
874
|
return
|
|
@@ -896,6 +907,8 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
|
|
|
896
907
|
|
|
897
908
|
fun updateDimAmount(sheetTop: Int? = null, animated: Boolean = false) {
|
|
898
909
|
if (!dimmed) return
|
|
910
|
+
if (contentHeight == 0) return
|
|
911
|
+
|
|
899
912
|
val keyboardOffset = if (isDismissing) 0 else currentKeyboardInset
|
|
900
913
|
val top = (sheetTop ?: sheetView?.top ?: return) + keyboardOffset
|
|
901
914
|
|
|
@@ -18,16 +18,16 @@ object TrueSheetStackManager {
|
|
|
18
18
|
*/
|
|
19
19
|
private fun getParentSheetAt(index: Int, rootContainer: ViewGroup?): TrueSheetView? {
|
|
20
20
|
if (index <= 0) return null
|
|
21
|
-
return presentedSheetStack[index - 1].takeIf {
|
|
21
|
+
return presentedSheetStack[index - 1].takeIf { it.rootContainerView == rootContainer }
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* Returns the topmost presented and visible sheet
|
|
25
|
+
* Returns the topmost presented and visible sheet.
|
|
26
26
|
* Must be called within synchronized block.
|
|
27
27
|
*/
|
|
28
28
|
private fun findTopmostSheet(): TrueSheetView? =
|
|
29
29
|
presentedSheetStack.lastOrNull {
|
|
30
|
-
it.viewController.isPresented && it.viewController.isSheetVisible
|
|
30
|
+
it.viewController.isPresented && it.viewController.isSheetVisible
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/**
|
package/package.json
CHANGED