Skip to content

Commit

Permalink
Feature/view lifecycle (wix#798)
Browse files Browse the repository at this point in the history
* Adds iOS callback for viewWillAppear/didAppear e.t.c.

* Adds in screen events on Android

* Fixed issue with rightButtons getting ignored in preference for empty Screen buttons

* Android screen lifecycle

This commit is contains a few changes and enhancements to the PR made by simon:

* Use getEventEmitter instead of sendNavigatorEvent
* Dispatch willDisappear and didDisappear events when pushing screens
* Dispatch willAppear and didAppear events when popping screen
  • Loading branch information
simonmitchell authored and guyca committed Feb 26, 2017
1 parent 687b80b commit d1febd3
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import android.widget.RelativeLayout;

import com.facebook.react.bridge.Callback;
import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.animation.VisibilityAnimator;
import com.reactnativenavigation.events.ContextualMenuHiddenEvent;
import com.reactnativenavigation.events.Event;
Expand Down Expand Up @@ -218,19 +219,27 @@ private void setButtonColorFromScreen(List<TitleBarButtonParams> titleBarButtonP
public abstract void setOnDisplayListener(OnDisplayListener onContentViewDisplayedListener);

public void show() {
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willAppear", screenParams.getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didAppear", screenParams.getNavigatorEventId());
screenAnimator.show(screenParams.animateScreenTransitions);
}

public void show(boolean animated) {
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willAppear", screenParams.getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didAppear", screenParams.getNavigatorEventId());
screenAnimator.show(animated);
}

public void show(boolean animated, Runnable onAnimationEnd) {
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willAppear", screenParams.getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didAppear", screenParams.getNavigatorEventId());
setStyle();
screenAnimator.show(animated, onAnimationEnd);
}

public void hide(boolean animated, Runnable onAnimatedEnd) {
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willDisappear", screenParams.getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didDisappear", screenParams.getNavigatorEventId());
screenAnimator.hide(animated, onAnimatedEnd);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,15 @@ private void pushScreenToVisibleStack(LayoutParams layoutParams,
@Nullable final Screen.OnDisplayListener onDisplay) {
nextScreen.setVisibility(View.INVISIBLE);
addScreen(nextScreen, layoutParams);
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willDisappear", previousScreen.getNavigatorEventId());
nextScreen.setOnDisplayListener(new Screen.OnDisplayListener() {
@Override
public void onDisplay() {
nextScreen.show(nextScreen.screenParams.animateScreenTransitions, new Runnable() {
@Override
public void run() {
if (onDisplay != null) onDisplay.onDisplay();
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didDisappear", previousScreen.getNavigatorEventId());
parent.removeView(previousScreen);
}
});
Expand Down Expand Up @@ -196,6 +198,8 @@ public Screen peek() {

private void readdPrevious(Screen previous) {
previous.setVisibility(View.VISIBLE);
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willAppear", previous.getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didAppear", previous.getNavigatorEventId());
parent.addView(previous, 0);
}

Expand Down Expand Up @@ -347,9 +351,13 @@ public void show() {
isStackVisible = true;
stack.peek().setStyle();
stack.peek().setVisibility(View.VISIBLE);
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willAppear", stack.peek().getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didAppear", stack.peek().getNavigatorEventId());
}

public void hide() {
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("willDisappear", stack.peek().getNavigatorEventId());
NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("didDisappear", stack.peek().getNavigatorEventId());
isStackVisible = false;
stack.peek().setVisibility(View.INVISIBLE);
}
Expand Down
34 changes: 32 additions & 2 deletions ios/RCCViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#import <React/RCTRootView.h>
#import "RCCManager.h"
#import <React/RCTConvert.h>
#import <React/RCTEventDispatcher.h>
#import "RCCExternalViewControllerProtocol.h"
#import "RCTHelpers.h"
#import "RCCTitleViewHelper.h"
Expand Down Expand Up @@ -173,17 +174,46 @@ -(void)onCancelReactTouches
}
}

- (void)sendScreenChangedEvent:(NSString *)eventName
{
if ([self.view isKindOfClass:[RCTRootView class]]){

RCTRootView *rootView = (RCTRootView *)self.view;

if (rootView.appProperties && rootView.appProperties[@"navigatorEventID"]) {

[[[RCCManager sharedInstance] getBridge].eventDispatcher sendAppEventWithName:rootView.appProperties[@"navigatorEventID"] body:@
{
@"type": @"ScreenChangedEvent",
@"method": eventName
}];
}
}
}

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self sendScreenChangedEvent:@"didAppear"];
}

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

[self sendScreenChangedEvent:@"willAppear"];
[self setStyleOnAppear];
}

- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[self sendScreenChangedEvent:@"didDisappear"];
}

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];

[self sendScreenChangedEvent:@"willDisappear"];
[self setStyleOnDisappear];
}

Expand Down

0 comments on commit d1febd3

Please sign in to comment.