소스 검색

Initial setButtons implementation

Guy Carmeli 8 년 전
부모
커밋
3ea4cfa850

+ 8
- 1
android/app/src/main/java/com/reactnativenavigation/bridge/NavigationReactModule.java 파일 보기

3
 import com.facebook.react.bridge.ReactApplicationContext;
3
 import com.facebook.react.bridge.ReactApplicationContext;
4
 import com.facebook.react.bridge.ReactContextBaseJavaModule;
4
 import com.facebook.react.bridge.ReactContextBaseJavaModule;
5
 import com.facebook.react.bridge.ReactMethod;
5
 import com.facebook.react.bridge.ReactMethod;
6
+import com.facebook.react.bridge.ReadableArray;
6
 import com.facebook.react.bridge.ReadableMap;
7
 import com.facebook.react.bridge.ReadableMap;
7
 import com.reactnativenavigation.controllers.NavigationCommandsHandler;
8
 import com.reactnativenavigation.controllers.NavigationCommandsHandler;
9
+import com.reactnativenavigation.params.TitleBarButtonParams;
10
+import com.reactnativenavigation.params.parsers.TitleBarButtonParamsParser;
11
+
12
+import java.util.List;
8
 
13
 
9
 /**
14
 /**
10
  * The basic abstract components we will expose:
15
  * The basic abstract components we will expose:
39
     }
44
     }
40
 
45
 
41
     @ReactMethod
46
     @ReactMethod
42
-    public void setScreenTitleBarButtons(final ReadableMap params) {
47
+    public void setScreenTitleBarButtons(String screenInstanceId, String navigatorEventId, ReadableArray buttons) {
48
+        List<TitleBarButtonParams> titleBarButtons = TitleBarButtonParamsParser.parse(BundleConverter.toBundle(buttons));
49
+        NavigationCommandsHandler.setScreenTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
43
     }
50
     }
44
 
51
 
45
     @ReactMethod
52
     @ReactMethod

+ 7
- 0
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationActivity.java 파일 보기

12
 import com.reactnativenavigation.layouts.LayoutFactory;
12
 import com.reactnativenavigation.layouts.LayoutFactory;
13
 import com.reactnativenavigation.params.ActivityParams;
13
 import com.reactnativenavigation.params.ActivityParams;
14
 import com.reactnativenavigation.params.ScreenParams;
14
 import com.reactnativenavigation.params.ScreenParams;
15
+import com.reactnativenavigation.params.TitleBarButtonParams;
15
 import com.reactnativenavigation.react.JsDevReloadHandler;
16
 import com.reactnativenavigation.react.JsDevReloadHandler;
16
 import com.reactnativenavigation.react.NavigationReactInstance;
17
 import com.reactnativenavigation.react.NavigationReactInstance;
17
 import com.reactnativenavigation.react.RedboxPermission;
18
 import com.reactnativenavigation.react.RedboxPermission;
18
 
19
 
20
+import java.util.List;
21
+
19
 public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler, NavigationReactInstance.OnJsDevReloadListener {
22
 public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler, NavigationReactInstance.OnJsDevReloadListener {
20
 
23
 
21
     /**
24
     /**
135
         layout.setTitleBarTitle(screenInstanceId, title);
138
         layout.setTitleBarTitle(screenInstanceId, title);
136
     }
139
     }
137
 
140
 
141
+    public void setTitleBarButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
142
+        layout.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
143
+    }
144
+
138
     void showModal(ScreenParams screenParams) {
145
     void showModal(ScreenParams screenParams) {
139
         modalController.showModal(screenParams);
146
         modalController.showModal(screenParams);
140
     }
147
     }

+ 18
- 1
android/app/src/main/java/com/reactnativenavigation/controllers/NavigationCommandsHandler.java 파일 보기

6
 import com.reactnativenavigation.NavigationApplication;
6
 import com.reactnativenavigation.NavigationApplication;
7
 import com.reactnativenavigation.params.ActivityParams;
7
 import com.reactnativenavigation.params.ActivityParams;
8
 import com.reactnativenavigation.params.ScreenParams;
8
 import com.reactnativenavigation.params.ScreenParams;
9
+import com.reactnativenavigation.params.TitleBarButtonParams;
9
 import com.reactnativenavigation.params.parsers.ActivityParamsParser;
10
 import com.reactnativenavigation.params.parsers.ActivityParamsParser;
10
 import com.reactnativenavigation.params.parsers.ScreenParamsParser;
11
 import com.reactnativenavigation.params.parsers.ScreenParamsParser;
11
 
12
 
13
+import java.util.List;
14
+
12
 public class NavigationCommandsHandler {
15
 public class NavigationCommandsHandler {
13
 
16
 
14
     private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
17
     private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
118
         });
121
         });
119
     }
122
     }
120
 
123
 
121
-
122
     public static void showModal(Bundle params) {
124
     public static void showModal(Bundle params) {
123
         final NavigationActivity currentActivity = NavigationActivity.currentActivity;
125
         final NavigationActivity currentActivity = NavigationActivity.currentActivity;
124
         if (currentActivity == null) {
126
         if (currentActivity == null) {
132
             public void run() {
134
             public void run() {
133
                 currentActivity.showModal(screenParams);
135
                 currentActivity.showModal(screenParams);
134
             }
136
             }
137
+        });
138
+    }
139
+
140
+    public static void setScreenTitleBarButtons(final String screenInstanceId, final String navigatorEventId, final List<TitleBarButtonParams> titleBarButtons) {
141
+        final NavigationActivity currentActivity = NavigationActivity.currentActivity;
142
+        if (currentActivity == null) {
143
+            return;
135
         }
144
         }
145
+
146
+        NavigationApplication.instance.runOnMainThread(new Runnable() {
147
+            @Override
148
+            public void run() {
149
+                currentActivity.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
150
+            }
151
+        });
152
+    }
136
 }
153
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/Layout.java 파일 보기

1
 package com.reactnativenavigation.layouts;
1
 package com.reactnativenavigation.layouts;
2
 
2
 
3
 import com.reactnativenavigation.params.ScreenParams;
3
 import com.reactnativenavigation.params.ScreenParams;
4
+import com.reactnativenavigation.params.TitleBarButtonParams;
5
+
6
+import java.util.List;
4
 
7
 
5
 public interface Layout {
8
 public interface Layout {
6
     boolean onBackPressed();
9
     boolean onBackPressed();
20
     void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated);
23
     void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated);
21
 
24
 
22
     void setTitleBarTitle(String screenInstanceId, String title);
25
     void setTitleBarTitle(String screenInstanceId, String title);
26
+
27
+    void setTitleBarButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons);
23
 }
28
 }

+ 7
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/Screen.java 파일 보기

11
 import com.reactnativenavigation.animation.VisibilityAnimator;
11
 import com.reactnativenavigation.animation.VisibilityAnimator;
12
 import com.reactnativenavigation.params.ScreenParams;
12
 import com.reactnativenavigation.params.ScreenParams;
13
 import com.reactnativenavigation.params.ScreenStyleParams;
13
 import com.reactnativenavigation.params.ScreenStyleParams;
14
+import com.reactnativenavigation.params.TitleBarButtonParams;
14
 import com.reactnativenavigation.utils.SdkSupports;
15
 import com.reactnativenavigation.utils.SdkSupports;
15
 import com.reactnativenavigation.utils.ViewUtils;
16
 import com.reactnativenavigation.utils.ViewUtils;
16
 import com.reactnativenavigation.views.ScrollDirectionListener;
17
 import com.reactnativenavigation.views.ScrollDirectionListener;
17
 import com.reactnativenavigation.views.TopBar;
18
 import com.reactnativenavigation.views.TopBar;
18
 
19
 
20
+import java.util.List;
21
+
19
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
22
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
20
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
23
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
21
 
24
 
119
     public void setTitleBarTitle(String title) {
122
     public void setTitleBarTitle(String title) {
120
         topBar.setTitle(title);
123
         topBar.setTitle(title);
121
     }
124
     }
125
+
126
+    public void setTitleBarButtons(String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
127
+        topBar.setTitleBarButtons(navigatorEventId, titleBarButtons);
128
+    }
122
 }
129
 }

+ 9
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/ScreenStack.java 파일 보기

5
 import android.widget.FrameLayout;
5
 import android.widget.FrameLayout;
6
 
6
 
7
 import com.reactnativenavigation.params.ScreenParams;
7
 import com.reactnativenavigation.params.ScreenParams;
8
+import com.reactnativenavigation.params.TitleBarButtonParams;
8
 
9
 
10
+import java.util.List;
9
 import java.util.Stack;
11
 import java.util.Stack;
10
 
12
 
11
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
13
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
113
         }
115
         }
114
     }
116
     }
115
 
117
 
118
+    public void setTitleBarButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
119
+        Screen screen = findScreenByScreenInstanceId(screenInstanceId);
120
+        if (screen != null) {
121
+            screen.setTitleBarButtons(navigatorEventId, titleBarButtons);
122
+        }
123
+    }
124
+
116
 
125
 
117
     //    /**
126
     //    /**
118
 //     * Remove the ScreenStack from {@code parent} while preventing all child react views from getting unmounted
127
 //     * Remove the ScreenStack from {@code parent} while preventing all child react views from getting unmounted

+ 8
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/SingleScreenLayout.java 파일 보기

4
 import android.widget.FrameLayout;
4
 import android.widget.FrameLayout;
5
 
5
 
6
 import com.reactnativenavigation.params.ScreenParams;
6
 import com.reactnativenavigation.params.ScreenParams;
7
+import com.reactnativenavigation.params.TitleBarButtonParams;
8
+
9
+import java.util.List;
7
 
10
 
8
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
11
 import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
9
 
12
 
76
     public void setTitleBarTitle(String screenInstanceId, String title) {
79
     public void setTitleBarTitle(String screenInstanceId, String title) {
77
         stack.setTitleBarTitle(screenInstanceId, title);
80
         stack.setTitleBarTitle(screenInstanceId, title);
78
     }
81
     }
82
+
83
+    @Override
84
+    public void setTitleBarButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
85
+        stack.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
86
+    }
79
 }
87
 }

+ 4
- 0
android/app/src/main/java/com/reactnativenavigation/views/TopBar.java 파일 보기

36
         setVisibility(styleParams.topBarHidden ? GONE : VISIBLE);
36
         setVisibility(styleParams.topBarHidden ? GONE : VISIBLE);
37
         titleBar.setVisibility(styleParams.titleBarHidden ? GONE : VISIBLE);
37
         titleBar.setVisibility(styleParams.titleBarHidden ? GONE : VISIBLE);
38
     }
38
     }
39
+
40
+    public void setTitleBarButtons(String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
41
+        titleBar.setButtons(titleBarButtons, navigatorEventId);
42
+    }
39
 }
43
 }

+ 11
- 11
src/deprecated/platformSpecificDeprecated.android.js 파일 보기

138
 }
138
 }
139
 
139
 
140
 function navigatorSetButtons(navigator, navigatorEventID, params) {
140
 function navigatorSetButtons(navigator, navigatorEventID, params) {
141
-  //if (params.rightButtons) {
142
-  //  params.rightButtons.forEach(function(button) {
143
-  //    if (button.icon) {
144
-  //      const icon = resolveAssetSource(button.icon);
145
-  //      if (icon) {
146
-  //        button.icon = icon.uri;
147
-  //      }
148
-  //    }
149
-  //  });
150
-  //}
151
-  //RctActivity.setNavigatorButtons(params);
141
+  if (params.rightButtons) {
142
+   params.rightButtons.forEach(function(button) {
143
+     if (button.icon) {
144
+       const icon = resolveAssetSource(button.icon);
145
+       if (icon) {
146
+         button.icon = icon.uri;
147
+       }
148
+     }
149
+   });
150
+  }
151
+  newPlatformSpecific.setScreenTitleBarButtons(navigator.screenInstanceID, navigatorEventID, params.rightButtons);
152
 }
152
 }
153
 
153
 
154
 function navigatorSetTabBadge(navigator, params) {
154
 function navigatorSetTabBadge(navigator, params) {

+ 6
- 1
src/platformSpecific.android.js 파일 보기

40
   NativeModules.NavigationReactModule.setScreenTitleBarTitle(screenInstanceID, title);
40
   NativeModules.NavigationReactModule.setScreenTitleBarTitle(screenInstanceID, title);
41
 }
41
 }
42
 
42
 
43
+function setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons) {
44
+  NativeModules.NavigationReactModule.setScreenTitleBarButtons(screenInstanceID, navigatorEventID, buttons);
45
+}
46
+
43
 module.exports = {
47
 module.exports = {
44
   startApp,
48
   startApp,
45
   push,
49
   push,
47
   popToRoot,
51
   popToRoot,
48
   newStack,
52
   newStack,
49
   toggleTopBarVisible,
53
   toggleTopBarVisible,
50
-  setScreenTitleBarTitle
54
+  setScreenTitleBarTitle,
55
+  setScreenTitleBarButtons
51
 };
56
 };