Преглед на файлове

Added back, getNavigatorID

Yedidya Kennard преди 9 години
родител
ревизия
1302152190

+ 11
- 7
android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java Целия файл

191
         super.onDestroy();
191
         super.onDestroy();
192
 
192
 
193
         // Destroy react instance manager only if there are no resumed react activities
193
         // Destroy react instance manager only if there are no resumed react activities
194
-        Activity activity = ContextProvider.getActivityContext();
195
-        if (mReactInstanceManager != null && !(activity instanceof BaseReactActivity)) {
194
+        BaseReactActivity activity = ContextProvider.getActivityContext();
195
+        if (mReactInstanceManager != null ) {
196
             Log.i(TAG, "Destroying ReactInstanceManager");
196
             Log.i(TAG, "Destroying ReactInstanceManager");
197
             mReactInstanceManager.onDestroy();
197
             mReactInstanceManager.onDestroy();
198
         } else {
198
         } else {
204
 
204
 
205
     public abstract Screen pop(String navID);
205
     public abstract Screen pop(String navID);
206
 
206
 
207
+    public abstract String getActiveNavigatorID();
208
+
207
     @Override
209
     @Override
208
     public boolean onCreateOptionsMenu(Menu menu) {
210
     public boolean onCreateOptionsMenu(Menu menu) {
209
         mMenu = menu;
211
         mMenu = menu;
252
 
254
 
253
     @Override
255
     @Override
254
     public void onBackPressed() {
256
     public void onBackPressed() {
255
-        if (mReactInstanceManager != null)
256
-            mReactInstanceManager.onBackPressed();
257
-        //TODO uncomment and add current navID
258
-         else //if(pop() == null)
259
-            super.onBackPressed();
257
+
258
+        if(pop(getActiveNavigatorID()) == null) {
259
+            if (mReactInstanceManager != null)
260
+                mReactInstanceManager.onBackPressed();
261
+            else
262
+                super.onBackPressed();
263
+        }
260
     }
264
     }
261
 
265
 
262
     @Override
266
     @Override

+ 6
- 0
android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java Целия файл

65
         return null;
65
         return null;
66
         //TODO
66
         //TODO
67
     }
67
     }
68
+
69
+    @Override
70
+    public String getActiveNavigatorID() {
71
+        return null;
72
+        //TODO
73
+    }
68
 }
74
 }

+ 7
- 0
android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java Целия файл

18
     private Toolbar mToolbar;
18
     private Toolbar mToolbar;
19
     private FrameLayout mContentFrame;
19
     private FrameLayout mContentFrame;
20
     private ScreenStack screenStack;
20
     private ScreenStack screenStack;
21
+    private String navID;
21
 
22
 
22
     @Override
23
     @Override
23
     protected void handleOnCreate() {
24
     protected void handleOnCreate() {
28
         mContentFrame = (FrameLayout) findViewById(R.id.contentFrame);
29
         mContentFrame = (FrameLayout) findViewById(R.id.contentFrame);
29
 
30
 
30
         Screen screen = (Screen) getIntent().getSerializableExtra(EXTRA_SCREEN);
31
         Screen screen = (Screen) getIntent().getSerializableExtra(EXTRA_SCREEN);
32
+        navID = screen.navigatorId;
31
         setupToolbar(screen.title);
33
         setupToolbar(screen.title);
32
 
34
 
33
         screenStack = new ScreenStack(this);
35
         screenStack = new ScreenStack(this);
48
     public Screen pop(String navID) {
50
     public Screen pop(String navID) {
49
         return screenStack.pop();
51
         return screenStack.pop();
50
     }
52
     }
53
+
54
+    @Override
55
+    public String getActiveNavigatorID() {
56
+        return navID;
57
+    }
51
 }
58
 }

+ 5
- 0
android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java Целия файл

69
         mToolbar.handleOnCreateOptionsMenuAsync();
69
         mToolbar.handleOnCreateOptionsMenuAsync();
70
         return ret;
70
         return ret;
71
     }
71
     }
72
+
73
+    @Override
74
+    public String getActiveNavigatorID() {
75
+        return adapter.getNavID(mViewPager.getCurrentItem());
76
+    }
72
 }
77
 }

+ 11
- 3
android/app/src/main/java/com/reactnativenavigation/adapters/ViewPagerAdapter.java Целия файл

13
 import com.reactnativenavigation.activities.BaseReactActivity;
13
 import com.reactnativenavigation.activities.BaseReactActivity;
14
 import com.reactnativenavigation.core.RctManager;
14
 import com.reactnativenavigation.core.RctManager;
15
 import com.reactnativenavigation.core.objects.Screen;
15
 import com.reactnativenavigation.core.objects.Screen;
16
+import com.reactnativenavigation.views.RnnToolBar;
16
 import com.reactnativenavigation.views.ScreenStack;
17
 import com.reactnativenavigation.views.ScreenStack;
17
 
18
 
18
 import java.util.ArrayList;
19
 import java.util.ArrayList;
28
 
29
 
29
     private BaseReactActivity mContext;
30
     private BaseReactActivity mContext;
30
     private ViewPager mViewPager;
31
     private ViewPager mViewPager;
31
-    private Toolbar mToolbar;
32
+    private RnnToolBar mToolbar;
32
     private final ReactInstanceManager mReactInstanceManager;
33
     private final ReactInstanceManager mReactInstanceManager;
33
     private final ArrayList<ScreenStack> screenStacks;
34
     private final ArrayList<ScreenStack> screenStacks;
35
+    private final ArrayList<String> navIDs;
34
     private final Map<String, ScreenStack> stacksByNavId;
36
     private final Map<String, ScreenStack> stacksByNavId;
35
 
37
 
36
 
38
 
37
-    public ViewPagerAdapter(BaseReactActivity context, ViewPager viewPager, Toolbar toolbar,
39
+    public ViewPagerAdapter(BaseReactActivity context, ViewPager viewPager, RnnToolBar toolbar,
38
                             ArrayList<Screen> screens) {
40
                             ArrayList<Screen> screens) {
39
         mContext = context;
41
         mContext = context;
40
         mViewPager = viewPager;
42
         mViewPager = viewPager;
41
         mToolbar = toolbar;
43
         mToolbar = toolbar;
42
         screenStacks = new ArrayList<>();
44
         screenStacks = new ArrayList<>();
45
+        navIDs = new ArrayList<>();
43
         stacksByNavId  = new HashMap<>();
46
         stacksByNavId  = new HashMap<>();
44
         for(Screen screen: screens){
47
         for(Screen screen: screens){
45
             ScreenStack stack = new ScreenStack(context);
48
             ScreenStack stack = new ScreenStack(context);
46
             stack.push(screen);
49
             stack.push(screen);
47
             screenStacks.add(stack);
50
             screenStacks.add(stack);
51
+            navIDs.add(screen.navigatorId);
48
             stacksByNavId.put(screen.navigatorId, stack);
52
             stacksByNavId.put(screen.navigatorId, stack);
49
         }
53
         }
50
         mReactInstanceManager = RctManager.getInstance().getReactInstanceManager();
54
         mReactInstanceManager = RctManager.getInstance().getReactInstanceManager();
100
         Screen screen = screenStacks.get(position).peek();
104
         Screen screen = screenStacks.get(position).peek();
101
         params.putString(Screen.KEY_NAVIGATOR_EVENT_ID, screen.navigatorEventId);
105
         params.putString(Screen.KEY_NAVIGATOR_EVENT_ID, screen.navigatorEventId);
102
 
106
 
103
-//        mToolbar.setupToolbarButtonsAsync(mScreens.get(position));
107
+        mToolbar.setupToolbarButtonsAsync(screenStacks.get(position).peek());
104
 
108
 
105
         RctManager.getInstance().sendEvent(EVENT_ON_TAB_SELECTED, screen.navigatorEventId, params);
109
         RctManager.getInstance().sendEvent(EVENT_ON_TAB_SELECTED, screen.navigatorEventId, params);
106
     }
110
     }
114
     public void onTabReselected(TabLayout.Tab tab) {
118
     public void onTabReselected(TabLayout.Tab tab) {
115
 
119
 
116
     }
120
     }
121
+
122
+    public String getNavID(int position) {
123
+        return navIDs.get(position);
124
+    }
117
 }
125
 }

+ 2
- 0
android/app/src/main/java/com/reactnativenavigation/modules/RctActivityModule.java Целия файл

34
 
34
 
35
     @ReactMethod
35
     @ReactMethod
36
     public void startTabBasedApp(ReadableArray screens) {
36
     public void startTabBasedApp(ReadableArray screens) {
37
+        Log.e("START", "NEW_TAB");
37
         Activity context = ContextProvider.getActivityContext();
38
         Activity context = ContextProvider.getActivityContext();
38
         if (context != null && !context.isFinishing()) {
39
         if (context != null && !context.isFinishing()) {
39
             Intent intent = new Intent(context, TabActivity.class);
40
             Intent intent = new Intent(context, TabActivity.class);
54
 
55
 
55
     @ReactMethod
56
     @ReactMethod
56
     public void startSingleScreenApp(ReadableMap screen) {
57
     public void startSingleScreenApp(ReadableMap screen) {
58
+        Log.e("START", "NEW_SINGLE");
57
         BaseReactActivity context = ContextProvider.getActivityContext();
59
         BaseReactActivity context = ContextProvider.getActivityContext();
58
         if (context != null && !context.isFinishing()) {
60
         if (context != null && !context.isFinishing()) {
59
             Intent intent = new Intent(context, SingleScreenActivity.class);
61
             Intent intent = new Intent(context, SingleScreenActivity.class);

+ 9
- 5
android/app/src/main/java/com/reactnativenavigation/views/ScreenStack.java Целия файл

11
 
11
 
12
 import java.util.Stack;
12
 import java.util.Stack;
13
 
13
 
14
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
14
+import static android.view.ViewGroup.LayoutParams.*;
15
 
15
 
16
 public class ScreenStack extends FrameLayout {
16
 public class ScreenStack extends FrameLayout {
17
 
17
 
37
 
37
 
38
     public void push(Screen screen){
38
     public void push(Screen screen){
39
         View oldView = null;
39
         View oldView = null;
40
-        if(!stack.isEmpty())
40
+        if(!stack.isEmpty()) {
41
             oldView = stack.peek().view;
41
             oldView = stack.peek().view;
42
+        }
42
         RctView view = new RctView(reactActivity, mReactInstanceManager, screen);
43
         RctView view = new RctView(reactActivity, mReactInstanceManager, screen);
43
         addView(view, MATCH_PARENT, MATCH_PARENT);
44
         addView(view, MATCH_PARENT, MATCH_PARENT);
44
-        if(oldView!=null)
45
+        if(oldView!=null) {
45
             removeView(oldView);
46
             removeView(oldView);
47
+        }
46
         stack.push(new ScreenView(screen, view));
48
         stack.push(new ScreenView(screen, view));
47
     }
49
     }
48
 
50
 
49
     public Screen pop(){
51
     public Screen pop(){
50
         //TODO maybe return null if size is 1?
52
         //TODO maybe return null if size is 1?
51
-        if(stack.isEmpty())
53
+        if(stack.isEmpty()) {
52
             return null;
54
             return null;
55
+        }
53
         ScreenView popped = stack.pop();
56
         ScreenView popped = stack.pop();
54
-        if(!stack.isEmpty());
57
+        if(!stack.isEmpty()) {
55
             addView(stack.peek().view, 0);
58
             addView(stack.peek().view, 0);
59
+        }
56
         removeView(popped.view);
60
         removeView(popped.view);
57
         return popped.screen;
61
         return popped.screen;
58
     }
62
     }