|
@@ -1,6 +1,7 @@
|
1
|
1
|
package com.th3rdwave.safeareacontext;
|
2
|
2
|
|
3
|
3
|
import android.content.Context;
|
|
4
|
+import android.graphics.Rect;
|
4
|
5
|
import android.os.Build;
|
5
|
6
|
import android.view.Surface;
|
6
|
7
|
import android.view.View;
|
|
@@ -65,16 +66,21 @@ public class SafeAreaView extends ReactViewGroup implements ViewTreeObserver.OnG
|
65
|
66
|
View contentView = rootView.findViewById(android.R.id.content);
|
66
|
67
|
float windowWidth = rootView.getWidth();
|
67
|
68
|
float windowHeight = rootView.getHeight();
|
68
|
|
- int[] windowLocation = new int[2];
|
69
|
|
- contentView.getLocationInWindow(windowLocation);
|
70
|
|
- windowInsets.top = Math.max(windowInsets.top - windowLocation[1], 0);
|
71
|
|
- windowInsets.left = Math.max(windowInsets.left - windowLocation[0], 0);
|
72
|
|
- windowInsets.bottom = Math.max(windowLocation[1] + contentView.getHeight() + windowInsets.bottom - windowHeight, 0);
|
73
|
|
- windowInsets.right = Math.max(windowLocation[0] + contentView.getWidth() + windowInsets.right - windowWidth, 0);
|
|
69
|
+ Rect visibleRect = new Rect();
|
|
70
|
+ contentView.getGlobalVisibleRect(visibleRect);
|
|
71
|
+
|
|
72
|
+ windowInsets.top = Math.max(windowInsets.top - visibleRect.top, 0);
|
|
73
|
+ windowInsets.left = Math.max(windowInsets.left - visibleRect.left, 0);
|
|
74
|
+ windowInsets.bottom = Math.max(visibleRect.top + contentView.getHeight() + windowInsets.bottom - windowHeight, 0);
|
|
75
|
+ windowInsets.right = Math.max(visibleRect.left + contentView.getWidth() + windowInsets.right - windowWidth, 0);
|
74
|
76
|
return windowInsets;
|
75
|
77
|
}
|
76
|
78
|
|
77
|
79
|
private void maybeUpdateInsets() {
|
|
80
|
+ if (!isAttachedToWindow()) {
|
|
81
|
+ return;
|
|
82
|
+ }
|
|
83
|
+
|
78
|
84
|
EdgeInsets edgeInsets = getSafeAreaInsets();
|
79
|
85
|
if (mLastInsets == null || !mLastInsets.equalsToEdgeInsets(edgeInsets)) {
|
80
|
86
|
Assertions.assertNotNull(mInsetsChangeListener).onInsetsChange(this, edgeInsets);
|
|
@@ -86,7 +92,7 @@ public class SafeAreaView extends ReactViewGroup implements ViewTreeObserver.OnG
|
86
|
92
|
protected void onAttachedToWindow() {
|
87
|
93
|
super.onAttachedToWindow();
|
88
|
94
|
|
89
|
|
- getRootView().getViewTreeObserver().addOnGlobalLayoutListener(this);
|
|
95
|
+ getViewTreeObserver().addOnGlobalLayoutListener(this);
|
90
|
96
|
maybeUpdateInsets();
|
91
|
97
|
}
|
92
|
98
|
|
|
@@ -94,7 +100,7 @@ public class SafeAreaView extends ReactViewGroup implements ViewTreeObserver.OnG
|
94
|
100
|
protected void onDetachedFromWindow() {
|
95
|
101
|
super.onDetachedFromWindow();
|
96
|
102
|
|
97
|
|
- getRootView().getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
|
103
|
+ getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
98
|
104
|
}
|
99
|
105
|
|
100
|
106
|
@Override
|