Ver código fonte

Refactor orientation logic to separate class (#811)

closes #661
Guy Carmeli 8 anos atrás
pai
commit
08dbe4dc35

+ 1
- 21
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java Ver arquivo

1
 package com.reactnativenavigation.bridge;
1
 package com.reactnativenavigation.bridge;
2
 
2
 
3
-import android.app.Activity;
4
-import android.content.res.Configuration;
5
-
6
 import com.facebook.react.bridge.Callback;
3
 import com.facebook.react.bridge.Callback;
7
 import com.facebook.react.bridge.Promise;
4
 import com.facebook.react.bridge.Promise;
8
 import com.facebook.react.bridge.ReactApplicationContext;
5
 import com.facebook.react.bridge.ReactApplicationContext;
227
 
224
 
228
     @ReactMethod
225
     @ReactMethod
229
     public void getOrientation(Promise promise) {
226
     public void getOrientation(Promise promise) {
230
-        Activity activity = getCurrentActivity();
231
-        if (activity != null) {
232
-            int orientation = getCurrentActivity().getResources().getConfiguration().orientation;
233
-            switch (orientation) {
234
-                case Configuration.ORIENTATION_PORTRAIT:
235
-                    promise.resolve("PORTRAIT");
236
-                    return;
237
-                case Configuration.ORIENTATION_LANDSCAPE:
238
-                    promise.resolve("LANDSCAPE");
239
-                    return;
240
-                case Configuration.ORIENTATION_UNDEFINED:
241
-                    promise.resolve("UNDEFINED");
242
-                    return;
243
-            }
244
-        } else {
245
-            promise.resolve("UNDEFINED");
246
-        }
227
+        NavigationCommandsHandler.getOrientation(promise);
247
     }
228
     }
248
-
249
 }
229
 }

+ 2
- 24
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java Ver arquivo

9
 import android.support.v7.app.AppCompatActivity;
9
 import android.support.v7.app.AppCompatActivity;
10
 import android.view.KeyEvent;
10
 import android.view.KeyEvent;
11
 
11
 
12
-import com.facebook.react.bridge.Arguments;
13
 import com.facebook.react.bridge.Callback;
12
 import com.facebook.react.bridge.Callback;
14
-import com.facebook.react.bridge.ReactContext;
15
-import com.facebook.react.bridge.WritableMap;
16
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
13
 import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
17
-import com.facebook.react.modules.core.DeviceEventManagerModule;
18
 import com.facebook.react.modules.core.PermissionAwareActivity;
14
 import com.facebook.react.modules.core.PermissionAwareActivity;
19
 import com.facebook.react.modules.core.PermissionListener;
15
 import com.facebook.react.modules.core.PermissionListener;
20
 import com.reactnativenavigation.NavigationApplication;
16
 import com.reactnativenavigation.NavigationApplication;
21
-import com.reactnativenavigation.bridge.EventEmitter;
22
-import com.reactnativenavigation.bridge.NavigationReactEventEmitter;
23
 import com.reactnativenavigation.events.Event;
17
 import com.reactnativenavigation.events.Event;
24
 import com.reactnativenavigation.events.EventBus;
18
 import com.reactnativenavigation.events.EventBus;
25
 import com.reactnativenavigation.events.JsDevReloadEvent;
19
 import com.reactnativenavigation.events.JsDevReloadEvent;
26
 import com.reactnativenavigation.events.ModalDismissedEvent;
20
 import com.reactnativenavigation.events.ModalDismissedEvent;
27
-import com.reactnativenavigation.events.OrientationChangedEvent;
28
 import com.reactnativenavigation.events.Subscriber;
21
 import com.reactnativenavigation.events.Subscriber;
29
 import com.reactnativenavigation.layouts.BottomTabsLayout;
22
 import com.reactnativenavigation.layouts.BottomTabsLayout;
30
 import com.reactnativenavigation.layouts.Layout;
23
 import com.reactnativenavigation.layouts.Layout;
39
 import com.reactnativenavigation.params.TitleBarButtonParams;
32
 import com.reactnativenavigation.params.TitleBarButtonParams;
40
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
33
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
41
 import com.reactnativenavigation.react.ReactGateway;
34
 import com.reactnativenavigation.react.ReactGateway;
35
+import com.reactnativenavigation.utils.Orientation;
42
 import com.reactnativenavigation.views.SideMenu.Side;
36
 import com.reactnativenavigation.views.SideMenu.Side;
43
 
37
 
44
 import java.util.List;
38
 import java.util.List;
197
 
191
 
198
     @Override
192
     @Override
199
     public void onConfigurationChanged(Configuration newConfig) {
193
     public void onConfigurationChanged(Configuration newConfig) {
200
-        EventEmitter eventEmitter = NavigationApplication.instance.getEventEmitter();
201
-        OrientationChangedEvent event = new OrientationChangedEvent();
202
-        WritableMap params = Arguments.createMap();
203
-
204
-        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
205
-            params.putString("orientation", "LANDSCAPE");
206
-        }
207
-
208
-        if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
209
-            params.putString("orientation", "PORTRAIT");
210
-        }
211
-
212
-        if (newConfig.orientation == Configuration.ORIENTATION_UNDEFINED) {
213
-            params.putString("orientation", "UNDEFINED");
214
-        }
215
-
216
-        eventEmitter.sendNavigatorEvent(event.getType(), params);
194
+        Orientation.onConfigurationChanged(newConfig);
217
         NavigationApplication.instance.getActivityCallbacks().onConfigurationChanged(newConfig);
195
         NavigationApplication.instance.getActivityCallbacks().onConfigurationChanged(newConfig);
218
         super.onConfigurationChanged(newConfig);
196
         super.onConfigurationChanged(newConfig);
219
     }
197
     }

+ 10
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationCommandsHandler.java Ver arquivo

4
 import android.os.Bundle;
4
 import android.os.Bundle;
5
 
5
 
6
 import com.facebook.react.bridge.Callback;
6
 import com.facebook.react.bridge.Callback;
7
+import com.facebook.react.bridge.Promise;
7
 import com.reactnativenavigation.NavigationApplication;
8
 import com.reactnativenavigation.NavigationApplication;
8
 import com.reactnativenavigation.params.ActivityParams;
9
 import com.reactnativenavigation.params.ActivityParams;
9
 import com.reactnativenavigation.params.ContextualMenuParams;
10
 import com.reactnativenavigation.params.ContextualMenuParams;
15
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
16
 import com.reactnativenavigation.params.TitleBarLeftButtonParams;
16
 import com.reactnativenavigation.params.parsers.ActivityParamsParser;
17
 import com.reactnativenavigation.params.parsers.ActivityParamsParser;
17
 import com.reactnativenavigation.params.parsers.ScreenParamsParser;
18
 import com.reactnativenavigation.params.parsers.ScreenParamsParser;
19
+import com.reactnativenavigation.utils.Orientation;
18
 import com.reactnativenavigation.views.SideMenu.Side;
20
 import com.reactnativenavigation.views.SideMenu.Side;
19
 
21
 
20
 import java.util.List;
22
 import java.util.List;
420
             }
422
             }
421
         });
423
         });
422
     }
424
     }
425
+
426
+    public static void getOrientation(Promise promise) {
427
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
428
+        if (currentActivity == null) {
429
+            return;
430
+        }
431
+        promise.resolve(Orientation.get(currentActivity));
432
+    }
423
 }
433
 }

+ 0
- 9
android/app/src/main/java/com/reactnativenavigation/events/OrientationChangedEvent.java Ver arquivo

1
-package com.reactnativenavigation.events;
2
-
3
-public class OrientationChangedEvent implements Event {
4
-    public static final String TYPE = "OrientationChanged";
5
-    @Override
6
-    public String getType() {
7
-        return TYPE;
8
-    }
9
-}

+ 31
- 0
android/app/src/main/java/com/reactnativenavigation/utils/Orientation.java Ver arquivo

1
+package com.reactnativenavigation.utils;
2
+
3
+import android.content.res.Configuration;
4
+
5
+import com.facebook.react.bridge.Arguments;
6
+import com.facebook.react.bridge.WritableMap;
7
+import com.reactnativenavigation.NavigationApplication;
8
+import com.reactnativenavigation.controllers.NavigationActivity;
9
+
10
+public class Orientation {
11
+    public static String get(NavigationActivity currentActivity) {
12
+        return getOrientation(currentActivity.getResources().getConfiguration().orientation);
13
+    }
14
+
15
+    public static void onConfigurationChanged(Configuration newConfig) {
16
+        WritableMap params = Arguments.createMap();
17
+        params.putString("orientation", getOrientation(newConfig.orientation));
18
+        NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("orientationChanged", params);
19
+    }
20
+
21
+    private static String getOrientation(int orientation) {
22
+        switch (orientation) {
23
+            case Configuration.ORIENTATION_PORTRAIT:
24
+                return "PORTRAIT";
25
+            case Configuration.ORIENTATION_LANDSCAPE:
26
+                return "LANDSCAPE";
27
+            default:
28
+                return "UNDEFINED";
29
+        }
30
+    }
31
+}