No Description

SafeAreaView.java 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package com.th3rdwave.safeareacontext;
  2. import android.content.Context;
  3. import android.graphics.Rect;
  4. import android.os.Build;
  5. import android.view.Surface;
  6. import android.view.View;
  7. import android.view.ViewTreeObserver;
  8. import android.view.WindowInsets;
  9. import android.view.WindowManager;
  10. import com.facebook.infer.annotation.Assertions;
  11. import com.facebook.react.views.view.ReactViewGroup;
  12. import androidx.annotation.Nullable;
  13. public class SafeAreaView extends ReactViewGroup implements ViewTreeObserver.OnGlobalLayoutListener {
  14. public interface OnInsetsChangeListener {
  15. void onInsetsChange(SafeAreaView view, EdgeInsets insets);
  16. }
  17. private @Nullable OnInsetsChangeListener mInsetsChangeListener;
  18. private final WindowManager mWindowManager;
  19. private @Nullable EdgeInsets mLastInsets;
  20. public SafeAreaView(Context context, WindowManager windowManager) {
  21. super(context);
  22. mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  23. }
  24. private void maybeUpdateInsets() {
  25. EdgeInsets edgeInsets = SafeAreaUtils.getSafeAreaInsets(mWindowManager, getRootView());
  26. if (edgeInsets != null && (mLastInsets == null || !mLastInsets.equalsToEdgeInsets(edgeInsets))) {
  27. Assertions.assertNotNull(mInsetsChangeListener).onInsetsChange(this, edgeInsets);
  28. mLastInsets = edgeInsets;
  29. }
  30. }
  31. @Override
  32. protected void onAttachedToWindow() {
  33. super.onAttachedToWindow();
  34. getViewTreeObserver().addOnGlobalLayoutListener(this);
  35. maybeUpdateInsets();
  36. }
  37. @Override
  38. protected void onDetachedFromWindow() {
  39. super.onDetachedFromWindow();
  40. getViewTreeObserver().removeOnGlobalLayoutListener(this);
  41. }
  42. @Override
  43. public void onGlobalLayout() {
  44. maybeUpdateInsets();
  45. }
  46. public void setOnInsetsChangeListener(OnInsetsChangeListener listener) {
  47. mInsetsChangeListener = listener;
  48. }
  49. }