12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package com.th3rdwave.safeareacontext;
-
- import android.app.Activity;
- import android.view.View;
- import android.view.ViewGroup;
-
- import com.facebook.react.bridge.ReactApplicationContext;
- import com.facebook.react.common.MapBuilder;
- import com.facebook.react.uimanager.ThemedReactContext;
- import com.facebook.react.uimanager.UIManagerModule;
- import com.facebook.react.uimanager.ViewGroupManager;
- import com.facebook.react.uimanager.events.EventDispatcher;
-
- import java.util.Map;
-
- import android.support.annotation.NonNull;
- import android.support.annotation.Nullable;
-
- public class SafeAreaViewManager extends ViewGroupManager<SafeAreaView> {
- private final ReactApplicationContext mContext;
-
- public SafeAreaViewManager(ReactApplicationContext context) {
- super();
-
- mContext = context;
- }
-
- @Override
- @NonNull
- public String getName() {
- return "RNCSafeAreaView";
- }
-
- @Override
- @NonNull
- public SafeAreaView createViewInstance(@NonNull ThemedReactContext context) {
- return new SafeAreaView(context);
- }
-
- @Override
- protected void addEventEmitters(@NonNull ThemedReactContext reactContext, @NonNull final SafeAreaView view) {
- final EventDispatcher dispatcher =
- reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher();
- view.setOnInsetsChangeListener(new SafeAreaView.OnInsetsChangeListener() {
- @Override
- public void onInsetsChange(SafeAreaView view, EdgeInsets insets, Rect frame) {
- dispatcher.dispatchEvent(new InsetsChangeEvent(view.getId(), insets, frame));
- }
- });
- }
-
- @Override
- public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
- return MapBuilder.<String, Object>builder()
- .put(InsetsChangeEvent.EVENT_NAME, MapBuilder.of("registrationName", "onInsetsChange"))
- .build();
- }
-
- @Nullable
- @Override
- public Map<String, Object> getExportedViewConstants() {
- Activity activity = mContext.getCurrentActivity();
- if (activity == null) {
- return null;
- }
-
- ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
- if (decorView == null) {
- return null;
- }
-
- View contentView = decorView.findViewById(android.R.id.content);
- EdgeInsets insets = SafeAreaUtils.getSafeAreaInsets(decorView, contentView);
- Rect frame = SafeAreaUtils.getFrame(decorView, contentView);
- if (insets == null || frame == null) {
- return null;
- }
- return MapBuilder.<String, Object>of(
- "initialWindowMetrics",
- MapBuilder.<String, Object>of(
- "insets",
- SerializationUtils.edgeInsetsToJavaMap(insets),
- "frame",
- SerializationUtils.rectToJavaMap(frame)));
-
- }
- }
|