No Description

SafeAreaViewManager.java 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.th3rdwave.safeareacontext;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.view.View;
  5. import android.view.WindowManager;
  6. import com.facebook.react.bridge.ReactApplicationContext;
  7. import com.facebook.react.common.MapBuilder;
  8. import com.facebook.react.uimanager.ThemedReactContext;
  9. import com.facebook.react.uimanager.UIManagerModule;
  10. import com.facebook.react.uimanager.ViewGroupManager;
  11. import com.facebook.react.uimanager.events.EventDispatcher;
  12. import java.util.Map;
  13. import androidx.annotation.NonNull;
  14. import androidx.annotation.Nullable;
  15. public class SafeAreaViewManager extends ViewGroupManager<SafeAreaView> {
  16. private final ReactApplicationContext mContext;
  17. private final WindowManager mWindowManager;
  18. public SafeAreaViewManager(ReactApplicationContext context) {
  19. super();
  20. mContext = context;
  21. mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
  22. }
  23. @Override
  24. @NonNull
  25. public String getName() {
  26. return "RNCSafeAreaView";
  27. }
  28. @Override
  29. @NonNull
  30. public SafeAreaView createViewInstance(@NonNull ThemedReactContext context) {
  31. return new SafeAreaView(context, mWindowManager);
  32. }
  33. @Override
  34. protected void addEventEmitters(@NonNull ThemedReactContext reactContext, @NonNull final SafeAreaView view) {
  35. final EventDispatcher dispatcher =
  36. reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher();
  37. view.setOnInsetsChangeListener(new SafeAreaView.OnInsetsChangeListener() {
  38. @Override
  39. public void onInsetsChange(SafeAreaView view, EdgeInsets insets) {
  40. dispatcher.dispatchEvent(new InsetsChangeEvent(view.getId(), insets));
  41. }
  42. });
  43. }
  44. @Override
  45. public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
  46. return MapBuilder.<String, Object>builder()
  47. .put(InsetsChangeEvent.EVENT_NAME, MapBuilder.of("registrationName", "onInsetsChange"))
  48. .build();
  49. }
  50. @Nullable
  51. @Override
  52. public Map<String, Object> getExportedViewConstants() {
  53. Activity activity = mContext.getCurrentActivity();
  54. if (activity == null) {
  55. return null;
  56. }
  57. View decorView = activity.getWindow().getDecorView();
  58. if (decorView == null) {
  59. return null;
  60. }
  61. EdgeInsets insets = SafeAreaUtils.getSafeAreaInsets(mWindowManager, decorView);
  62. if (insets == null) {
  63. return null;
  64. }
  65. return MapBuilder.<String, Object>of(
  66. "initialWindowSafeAreaInsets",
  67. SafeAreaUtils.edgeInsetsToJavaMap(insets));
  68. }
  69. }