Guy Carmeli 8 vuotta sitten
vanhempi
commit
f811087714

+ 68
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/BaseLayout.java Näytä tiedosto

1
+package com.reactnativenavigation.layouts;
2
+
3
+import android.content.Context;
4
+import android.view.animation.Animation;
5
+import android.view.animation.AnimationUtils;
6
+import android.widget.FrameLayout;
7
+
8
+import com.reactnativenavigation.R;
9
+import com.reactnativenavigation.core.objects.Screen;
10
+import com.reactnativenavigation.views.RctView;
11
+import com.reactnativenavigation.views.RnnToolBar;
12
+import com.reactnativenavigation.views.ScreenStack;
13
+
14
+public abstract class BaseLayout extends FrameLayout implements Layout {
15
+
16
+    private OnScreenPoppedListener onScreenPoppedListener;
17
+
18
+    private RnnToolBar toolBar;
19
+    private ScreenStack screenStack;
20
+
21
+    public BaseLayout(Context context, Screen initialScreen) {
22
+        super(context);
23
+        toolBar = (RnnToolBar) findViewById(R.id.toolbar);
24
+        screenStack = (ScreenStack) findViewById(R.id.screenStack);
25
+
26
+        toolBar.update(initialScreen);
27
+        addInitialScreen(initialScreen);
28
+    }
29
+
30
+    private void addInitialScreen(Screen screen) {
31
+        screenStack.push(screen, new RctView.OnDisplayedListener() {
32
+            @Override
33
+            public void onDisplayed() {
34
+                Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.slide_up);
35
+                setAnimation(animation);
36
+                animate();
37
+            }
38
+        });
39
+    }
40
+
41
+    @Override
42
+    public void push(Screen screen) {
43
+        screenStack.push(screen);
44
+    }
45
+
46
+    @Override
47
+    public Screen pop() {
48
+        Screen popped = screenStack.pop();
49
+        if (onScreenPoppedListener != null) {
50
+            onScreenPoppedListener.onScreenPopped(popped);
51
+        }
52
+        return popped;
53
+    }
54
+
55
+    @Override
56
+    public int getScreenCount() {
57
+        return screenStack.getStackSize();
58
+    }
59
+
60
+    @Override
61
+    public void removeAllReactViews() {
62
+        screenStack.removeAllReactViews();
63
+    }
64
+
65
+    public void setOnScreenPoppedListener(OnScreenPoppedListener onScreenPoppedListener) {
66
+        this.onScreenPoppedListener = onScreenPoppedListener;
67
+    }
68
+}

+ 8
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/Layout.java Näytä tiedosto

1
 package com.reactnativenavigation.layouts;
1
 package com.reactnativenavigation.layouts;
2
 
2
 
3
+import com.reactnativenavigation.core.objects.Screen;
4
+
3
 public interface Layout {
5
 public interface Layout {
4
     boolean onBackPressed();
6
     boolean onBackPressed();
5
 
7
 
6
     void onDestroy();
8
     void onDestroy();
7
 
9
 
8
     void removeAllReactViews();
10
     void removeAllReactViews();
11
+
12
+    void push(Screen screen);
13
+
14
+    Screen pop();
15
+
16
+    int getScreenCount();
9
 }
17
 }

+ 8
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/OnScreenPoppedListener.java Näytä tiedosto

1
+package com.reactnativenavigation.layouts;
2
+
3
+import com.reactnativenavigation.core.objects.Screen;
4
+
5
+public interface OnScreenPoppedListener {
6
+
7
+    void onScreenPopped(Screen popped);
8
+}

+ 22
- 0
android/app/src/main/java/com/reactnativenavigation/layouts/SomethingLayout.java Näytä tiedosto

1
+package com.reactnativenavigation.layouts;
2
+
3
+import android.content.Context;
4
+
5
+import com.reactnativenavigation.core.objects.Screen;
6
+
7
+public class SomethingLayout extends BaseLayout {
8
+
9
+    public SomethingLayout(Context context, Screen initialScreen) {
10
+        super(context, initialScreen);
11
+    }
12
+
13
+    @Override
14
+    public boolean onBackPressed() {
15
+        return false;
16
+    }
17
+
18
+    @Override
19
+    public void onDestroy() {
20
+
21
+    }
22
+}

+ 21
- 40
android/app/src/main/java/com/reactnativenavigation/modal/RnnModal.java Näytä tiedosto

5
 import android.content.Context;
5
 import android.content.Context;
6
 import android.content.DialogInterface;
6
 import android.content.DialogInterface;
7
 import android.support.annotation.Nullable;
7
 import android.support.annotation.Nullable;
8
-import android.view.LayoutInflater;
9
 import android.view.View;
8
 import android.view.View;
10
 import android.view.Window;
9
 import android.view.Window;
11
 import android.view.WindowManager;
10
 import android.view.WindowManager;
12
-import android.view.animation.Animation;
13
-import android.view.animation.AnimationUtils;
14
 
11
 
15
 import com.reactnativenavigation.R;
12
 import com.reactnativenavigation.R;
16
 import com.reactnativenavigation.activities.BaseReactActivity;
13
 import com.reactnativenavigation.activities.BaseReactActivity;
17
 import com.reactnativenavigation.controllers.ModalController;
14
 import com.reactnativenavigation.controllers.ModalController;
18
 import com.reactnativenavigation.core.objects.Screen;
15
 import com.reactnativenavigation.core.objects.Screen;
16
+import com.reactnativenavigation.layouts.Layout;
17
+import com.reactnativenavigation.layouts.OnScreenPoppedListener;
19
 import com.reactnativenavigation.utils.ContextProvider;
18
 import com.reactnativenavigation.utils.ContextProvider;
20
 import com.reactnativenavigation.utils.SdkSupports;
19
 import com.reactnativenavigation.utils.SdkSupports;
21
 import com.reactnativenavigation.utils.StyleHelper;
20
 import com.reactnativenavigation.utils.StyleHelper;
22
-import com.reactnativenavigation.views.RctView;
23
-import com.reactnativenavigation.views.RnnToolBar;
24
-import com.reactnativenavigation.views.ScreenStack;
25
 
21
 
26
-public class RnnModal extends Dialog implements DialogInterface.OnDismissListener {
22
+public class RnnModal extends Dialog implements DialogInterface.OnDismissListener, OnScreenPoppedListener {
27
 
23
 
28
-    private ScreenStack mScreenStack;
29
-    private View mContentView;
30
-    private RnnToolBar mToolBar;
24
+    private Layout contentView;
31
 
25
 
32
-    public RnnModal(BaseReactActivity context, Screen screen) {
26
+    public RnnModal(Context context, ModalController modalController, Screen screen) {
33
         super(context, R.style.Modal);
27
         super(context, R.style.Modal);
34
-        ModalController.getInstance().add(this);
28
+        modalController.add(this);
35
         init(context, screen);
29
         init(context, screen);
36
     }
30
     }
37
 
31
 
38
     @SuppressLint("InflateParams")
32
     @SuppressLint("InflateParams")
39
     private void init(final Context context, Screen screen) {
33
     private void init(final Context context, Screen screen) {
40
         requestWindowFeature(Window.FEATURE_NO_TITLE);
34
         requestWindowFeature(Window.FEATURE_NO_TITLE);
41
-        mContentView = LayoutInflater.from(context).inflate(R.layout.modal_layout, null, false);
42
-        mToolBar = (RnnToolBar) mContentView.findViewById(R.id.toolbar);
43
-        mScreenStack = (ScreenStack) mContentView.findViewById(R.id.screenStack);
44
-        setContentView(mContentView);
45
-        mToolBar.update(screen);
46
-        mScreenStack.push(screen, new RctView.OnDisplayedListener() {
47
-            @Override
48
-            public void onDisplayed() {
49
-                Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
50
-                mContentView.setAnimation(animation);
51
-                mContentView.animate();
52
-            }
53
-        });
35
+        contentView = null;
36
+        setContentView((View) contentView);
54
 
37
 
55
-        // Set navigation colors
56
-        if (SdkSupports.lollipop()) {
57
-            Window window = getWindow();
58
-            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
59
-            StyleHelper.setWindowStyle(window, context.getApplicationContext(), screen);
60
-        }
38
+//        // Set navigation colors
39
+//        if (SdkSupports.lollipop()) {
40
+//            Window window = getWindow();
41
+//            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
42
+//            StyleHelper.setWindowStyle(window, context.getApplicationContext(), screen);
43
+//        }
61
         setOnDismissListener(this);
44
         setOnDismissListener(this);
62
     }
45
     }
63
 
46
 
64
     public void push(Screen screen) {
47
     public void push(Screen screen) {
65
-        mScreenStack.push(screen);
66
-        mToolBar.update(screen);
48
+        contentView.push(screen);
67
     }
49
     }
68
 
50
 
69
     public Screen pop() {
51
     public Screen pop() {
70
-        Screen popped = mScreenStack.pop();
71
-        if (mScreenStack.isEmpty()) {
52
+        return contentView.pop();
53
+    }
54
+
55
+    @Override
56
+    public void onScreenPopped(Screen popped) {
57
+        if (contentView.getScreenCount() == 0) {
72
             dismiss();
58
             dismiss();
73
         }
59
         }
74
-        Screen currentScreen = getCurrentScreen();
75
-        if (currentScreen != null) {
76
-            mToolBar.update(currentScreen);
77
-        }
78
-        return popped;
79
     }
60
     }
80
 
61
 
81
     @Nullable
62
     @Nullable