Merge pull request #424 from Microsoft/add-resume-listener-immediate

Add resume listener for immediate installs
This commit is contained in:
Geoffrey Goh
2016-07-11 16:52:14 -07:00
committed by GitHub

View File

@@ -102,7 +102,11 @@ public class CodePushNativeModule extends ReactContextBaseJavaModule {
mCodePush.clearDebugCacheIfNeeded();
final Activity currentActivity = getCurrentActivity();
if (!ReactActivity.class.isInstance(currentActivity)) {
if (currentActivity == null) {
// The currentActivity can be null if it is backgrounded / destroyed, so we simply
// no-op to prevent any null pointer exceptions.
return;
} else if (!ReactActivity.class.isInstance(currentActivity)) {
// Our preferred reload logic relies on the user's Activity inheriting
// from the core ReactActivity class, so if it doesn't, we fallback
// early to our legacy behavior.
@@ -379,7 +383,12 @@ public class CodePushNativeModule extends ReactContextBaseJavaModule {
mSettingsManager.savePendingUpdate(pendingHash, /* isLoading */false);
}
if (installMode == CodePushInstallMode.ON_NEXT_RESUME.getValue()) {
if (installMode == CodePushInstallMode.ON_NEXT_RESUME.getValue() ||
// We also add the resume listener if the installMode is IMMEDIATE, because
// if the current activity is backgrounded, we want to reload the bundle when
// it comes back into the foreground.
installMode == CodePushInstallMode.IMMEDIATE.getValue()) {
// Store the minimum duration on the native module as an instance
// variable instead of relying on a closure below, so that any
// subsequent resume-based installs could override it.
@@ -392,15 +401,19 @@ public class CodePushNativeModule extends ReactContextBaseJavaModule {
@Override
public void onHostResume() {
// Determine how long the app was in the background and ensure
// that it meets the minimum duration amount of time.
long durationInBackground = 0;
if (lastPausedDate != null) {
durationInBackground = (new Date().getTime() - lastPausedDate.getTime()) / 1000;
}
if (durationInBackground >= CodePushNativeModule.this.mMinimumBackgroundDuration) {
if (installMode == CodePushInstallMode.IMMEDIATE.getValue()) {
loadBundle();
} else {
// Determine how long the app was in the background and ensure
// that it meets the minimum duration amount of time.
long durationInBackground = 0;
if (lastPausedDate != null) {
durationInBackground = (new Date().getTime() - lastPausedDate.getTime()) / 1000;
}
if (durationInBackground >= CodePushNativeModule.this.mMinimumBackgroundDuration) {
loadBundle();
}
}
}