Skip to content

Commit 262f7f9

Browse files
committed
app lifecycle
1 parent cf86cbf commit 262f7f9

File tree

8 files changed

+87
-47
lines changed

8 files changed

+87
-47
lines changed

jsconfig.json

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"compilerOptions": {
3+
"allowJs": true,
4+
"allowSyntheticDefaultImports": true
5+
},
6+
"exclude": [
7+
"node_modules"
8+
]
9+
}

lib/android/app/build.gradle

+23
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
apply plugin: 'com.android.library'
22
apply from: '../prepare-robolectric.gradle'
3+
apply plugin: 'jacoco'
34

45
android {
56
compileSdkVersion 25
@@ -40,10 +41,32 @@ android {
4041
println "see report at file://${t.reports.html.destination}/index.html"
4142
}
4243
}
44+
jacoco {
45+
includeNoLocationClasses = true
46+
}
4347
}
4448
}
4549
}
4650

51+
task unitTest(type: JacocoReport, dependsOn: 'testDebugUnitTest') {
52+
reports {
53+
xml.enabled = false
54+
html.enabled = true
55+
}
56+
57+
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
58+
def debugTree = fileTree(dir: "${buildDir}/intermediates/classes/debug", excludes: fileFilter)
59+
def mainSrc = "${project.projectDir}/src/main/java"
60+
61+
sourceDirectories = files([mainSrc])
62+
classDirectories = files([debugTree])
63+
executionData = files("${buildDir}/jacoco/testDebugUnitTest.exec")
64+
65+
doLast {
66+
println "See code coverage at file://${jacoco.reportsDir}/unitTest/html/index.html"
67+
}
68+
}
69+
4770
dependencies {
4871
compile fileTree(include: ['*.jar'], dir: 'libs')
4972
compile 'com.android.support:design:25.1.1'

lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java

+25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.reactnativenavigation;
22

3+
import android.os.Bundle;
34
import android.support.annotation.Nullable;
45
import android.support.v7.app.AppCompatActivity;
56
import android.view.View;
@@ -9,6 +10,30 @@
910
public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
1011
private View contentView;
1112

13+
@Override
14+
protected void onCreate(@Nullable Bundle savedInstanceState) {
15+
super.onCreate(savedInstanceState);
16+
NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityCreated(this);
17+
}
18+
19+
@Override
20+
protected void onResume() {
21+
super.onResume();
22+
NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityResumed(this, this);
23+
}
24+
25+
@Override
26+
protected void onPause() {
27+
super.onPause();
28+
NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityPaused(this);
29+
}
30+
31+
@Override
32+
protected void onDestroy() {
33+
super.onDestroy();
34+
NavigationApplication.instance.getConfig().activityLifecycleDelegate.onActivityDestroyed(this);
35+
}
36+
1237
@Override
1338
public void setContentView(View contentView) {
1439
super.setContentView(contentView);

lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java

-40
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package com.reactnativenavigation;
22

3-
import android.app.Activity;
43
import android.app.Application;
5-
import android.os.Bundle;
64

75
import com.facebook.react.ReactApplication;
86
import com.facebook.react.ReactNativeHost;
9-
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
107
import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
118
import com.reactnativenavigation.react.DevPermissionRequestImpl;
129
import com.reactnativenavigation.react.NavigationReactNativeHost;
@@ -26,43 +23,6 @@ public void onCreate() {
2623
super.onCreate();
2724
instance = this;
2825
config = createConfig();
29-
30-
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
31-
@Override
32-
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
33-
getConfig().activityLifecycleDelegate.onActivityCreated(activity);
34-
}
35-
36-
@Override
37-
public void onActivityStarted(Activity activity) {
38-
39-
}
40-
41-
@Override
42-
public void onActivityResumed(Activity activity) {
43-
getConfig().activityLifecycleDelegate.onActivityResumed(activity, (DefaultHardwareBackBtnHandler) activity);
44-
}
45-
46-
@Override
47-
public void onActivityPaused(Activity activity) {
48-
getConfig().activityLifecycleDelegate.onActivityPaused(activity);
49-
}
50-
51-
@Override
52-
public void onActivityStopped(Activity activity) {
53-
54-
}
55-
56-
@Override
57-
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
58-
59-
}
60-
61-
@Override
62-
public void onActivityDestroyed(Activity activity) {
63-
getConfig().activityLifecycleDelegate.onActivityDestroyed(activity);
64-
}
65-
});
6626
}
6727

6828
public final Config getConfig() {

lib/android/app/src/test/java/com/reactnativenavigation/NavigationActivityTest.java

+28-1
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,22 @@
22

33
import android.view.View;
44

5+
import com.reactnativenavigation.controllers.ActivityLifecycleDelegate;
6+
57
import org.junit.Test;
68
import org.robolectric.Robolectric;
79
import org.robolectric.android.controller.ActivityController;
810

911
import static org.assertj.core.api.Java6Assertions.assertThat;
12+
import static org.mockito.Mockito.mock;
13+
import static org.mockito.Mockito.times;
14+
import static org.mockito.Mockito.verify;
15+
import static org.mockito.Mockito.verifyNoMoreInteractions;
16+
import static org.mockito.Mockito.verifyZeroInteractions;
1017

1118
public class NavigationActivityTest extends BaseTest {
1219

20+
1321
@Test
1422
public void holdsContentView() throws Exception {
1523
NavigationActivity activity = Robolectric.setupActivity(NavigationActivity.class);
@@ -22,6 +30,25 @@ public void holdsContentView() throws Exception {
2230
@Test
2331
public void reportsLifecycleEventsToDelegate() throws Exception {
2432
ActivityController<NavigationActivity> activityController = Robolectric.buildActivity(NavigationActivity.class);
33+
NavigationApplication.instance.getConfig().activityLifecycleDelegate = mock(ActivityLifecycleDelegate.class);
34+
ActivityLifecycleDelegate activityLifecycleDelegate = NavigationApplication.instance.getConfig().activityLifecycleDelegate;
35+
36+
verifyZeroInteractions(activityLifecycleDelegate);
37+
2538
activityController.create();
39+
verify(activityLifecycleDelegate, times(1)).onActivityCreated(activityController.get());
40+
verifyNoMoreInteractions(activityLifecycleDelegate);
41+
42+
activityController.resume();
43+
verify(activityLifecycleDelegate, times(1)).onActivityResumed(activityController.get(), activityController.get());
44+
verifyNoMoreInteractions(activityLifecycleDelegate);
45+
46+
activityController.pause();
47+
verify(activityLifecycleDelegate, times(1)).onActivityPaused(activityController.get());
48+
verifyNoMoreInteractions(activityLifecycleDelegate);
49+
50+
activityController.destroy();
51+
verify(activityLifecycleDelegate, times(1)).onActivityDestroyed(activityController.get());
52+
verifyNoMoreInteractions(activityLifecycleDelegate);
2653
}
27-
}
54+
}

lib/android/app/src/test/java/com/reactnativenavigation/controllers/NavigationActivityLifecycleHandlerTest.java

-4
This file was deleted.

playground/android/gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@
1717
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
1818
# org.gradle.parallel=true
1919

20-
android.useDeprecatedNdk=true
20+
android.useDeprecatedNdk=false

scripts/test.unit.android.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ const exec = require('shell-utils').exec;
22
run();
33

44
function run() {
5-
exec.execSync(`cd lib/android && ./gradlew clean testDebugUnitTest`);
5+
exec.execSync(`cd lib/android && ./gradlew clean unitTest`);
66
}

0 commit comments

Comments
 (0)