@@ -178,13 +178,10 @@ public String getBundleUrl(String assetsBundleFileName) {
178
178
}
179
179
}
180
180
181
- private String getPackageStatusReportIdentifier (WritableMap updatePackage ) {
182
- // Because deploymentKeys can be dynamically switched, we use a
183
- // combination of the deploymentKey and label as the packageIdentifier.
184
- String deploymentKey = CodePushUtils .tryGetString (updatePackage , DEPLOYMENT_KEY_KEY );
185
- String label = CodePushUtils .tryGetString (updatePackage , LABEL_KEY );
186
- if (deploymentKey != null && label != null ) {
187
- return deploymentKey + ":" + label ;
181
+ private String getDeploymentKeyFromStatusReportIdentifier (String statusReportIdentifier ) {
182
+ String [] parsedIdentifier = statusReportIdentifier .split (":" );
183
+ if (parsedIdentifier .length > 0 ) {
184
+ return parsedIdentifier [0 ];
188
185
} else {
189
186
return null ;
190
187
}
@@ -208,6 +205,18 @@ private JSONArray getFailedUpdates() {
208
205
}
209
206
}
210
207
208
+ private String getPackageStatusReportIdentifier (WritableMap updatePackage ) {
209
+ // Because deploymentKeys can be dynamically switched, we use a
210
+ // combination of the deploymentKey and label as the packageIdentifier.
211
+ String deploymentKey = CodePushUtils .tryGetString (updatePackage , DEPLOYMENT_KEY_KEY );
212
+ String label = CodePushUtils .tryGetString (updatePackage , LABEL_KEY );
213
+ if (deploymentKey != null && label != null ) {
214
+ return deploymentKey + ":" + label ;
215
+ } else {
216
+ return null ;
217
+ }
218
+ }
219
+
211
220
private JSONObject getPendingUpdate () {
212
221
SharedPreferences settings = applicationContext .getSharedPreferences (CODE_PUSH_PREFERENCES , 0 );
213
222
String pendingUpdateString = settings .getString (PENDING_UPDATE_KEY , null );
@@ -226,6 +235,20 @@ private JSONObject getPendingUpdate() {
226
235
}
227
236
}
228
237
238
+ private String getPreviousStatusReportIdentifier () {
239
+ SharedPreferences settings = applicationContext .getSharedPreferences (CODE_PUSH_PREFERENCES , 0 );
240
+ return settings .getString (LAST_DEPLOYMENT_REPORT_KEY , null );
241
+ }
242
+
243
+ private String getVersionLabelFromStatusReportIdentifier (String statusReportIdentifier ) {
244
+ String [] parsedIdentifier = statusReportIdentifier .split (":" );
245
+ if (parsedIdentifier .length > 1 ) {
246
+ return parsedIdentifier [1 ];
247
+ } else {
248
+ return null ;
249
+ }
250
+ }
251
+
229
252
public ReactPackage getReactPackage () {
230
253
if (codePushReactPackage == null ) {
231
254
codePushReactPackage = new CodePushReactPackage ();
@@ -262,16 +285,6 @@ private void initializeUpdateAfterRestart() {
262
285
}
263
286
}
264
287
265
- private boolean isDeploymentStatusNotYetReported (String appVersionOrPackageIdentifier ) {
266
- SharedPreferences settings = applicationContext .getSharedPreferences (CODE_PUSH_PREFERENCES , 0 );
267
- String lastDeploymentReportIdentifier = settings .getString (LAST_DEPLOYMENT_REPORT_KEY , null );
268
- if (lastDeploymentReportIdentifier == null ) {
269
- return true ;
270
- } else {
271
- return !lastDeploymentReportIdentifier .equals (appVersionOrPackageIdentifier );
272
- }
273
- }
274
-
275
288
private boolean isFailedHash (String packageHash ) {
276
289
JSONArray failedUpdates = getFailedUpdates ();
277
290
if (packageHash != null ) {
@@ -306,6 +319,10 @@ private boolean isPendingUpdate(String packageHash) {
306
319
}
307
320
}
308
321
322
+ private boolean isStatusReportIdentifierCodePushLabel (String statusReportIdentifier ) {
323
+ return statusReportIdentifier != null && statusReportIdentifier .contains (":" );
324
+ }
325
+
309
326
private void recordDeploymentStatusReported (String appVersionOrPackageIdentifier ) {
310
327
SharedPreferences settings = applicationContext .getSharedPreferences (CODE_PUSH_PREFERENCES , 0 );
311
328
settings .edit ().putString (LAST_DEPLOYMENT_REPORT_KEY , appVersionOrPackageIdentifier ).commit ();
@@ -465,7 +482,8 @@ public void getNewStatusReport(Promise promise) {
465
482
JSONObject lastFailedPackageJSON = failedUpdates .getJSONObject (failedUpdates .length () - 1 );
466
483
WritableMap lastFailedPackage = CodePushUtils .convertJsonObjectToWriteable (lastFailedPackageJSON );
467
484
String lastFailedPackageIdentifier = getPackageStatusReportIdentifier (lastFailedPackage );
468
- if (lastFailedPackage != null && isDeploymentStatusNotYetReported (lastFailedPackageIdentifier )) {
485
+ String previousStatusReportIdentifier = getPreviousStatusReportIdentifier ();
486
+ if (lastFailedPackage != null && (previousStatusReportIdentifier == null || !previousStatusReportIdentifier .equals (lastFailedPackageIdentifier ))) {
469
487
recordDeploymentStatusReported (lastFailedPackageIdentifier );
470
488
WritableNativeMap reportMap = new WritableNativeMap ();
471
489
reportMap .putMap ("package" , lastFailedPackage );
@@ -482,24 +500,65 @@ public void getNewStatusReport(Promise promise) {
482
500
WritableMap currentPackage = codePushPackage .getCurrentPackage ();
483
501
if (currentPackage != null ) {
484
502
String currentPackageIdentifier = getPackageStatusReportIdentifier (currentPackage );
485
- if (currentPackageIdentifier != null && isDeploymentStatusNotYetReported (currentPackageIdentifier )) {
486
- recordDeploymentStatusReported (currentPackageIdentifier );
487
- WritableNativeMap reportMap = new WritableNativeMap ();
488
- reportMap .putMap ("package" , currentPackage );
489
- reportMap .putString ("status" , DEPLOYMENT_SUCCEEDED_STATUS );
490
- promise .resolve (reportMap );
491
- return ;
503
+ String previousStatusReportIdentifier = getPreviousStatusReportIdentifier ();
504
+ if (currentPackageIdentifier != null ) {
505
+ if (previousStatusReportIdentifier == null ) {
506
+ recordDeploymentStatusReported (currentPackageIdentifier );
507
+ WritableNativeMap reportMap = new WritableNativeMap ();
508
+ reportMap .putMap ("package" , currentPackage );
509
+ reportMap .putString ("status" , DEPLOYMENT_SUCCEEDED_STATUS );
510
+ promise .resolve (reportMap );
511
+ return ;
512
+ } else if (!previousStatusReportIdentifier .equals (currentPackageIdentifier )) {
513
+ recordDeploymentStatusReported (currentPackageIdentifier );
514
+ if (isStatusReportIdentifierCodePushLabel (previousStatusReportIdentifier )) {
515
+ String fromDeploymentKey = getDeploymentKeyFromStatusReportIdentifier (previousStatusReportIdentifier );
516
+ String fromLabel = getVersionLabelFromStatusReportIdentifier (previousStatusReportIdentifier );
517
+ WritableNativeMap reportMap = new WritableNativeMap ();
518
+ reportMap .putMap ("package" , currentPackage );
519
+ reportMap .putString ("status" , DEPLOYMENT_SUCCEEDED_STATUS );
520
+ reportMap .putString ("fromDeploymentKey" , fromDeploymentKey );
521
+ reportMap .putString ("fromLabelOrAppVersion" , fromLabel );
522
+ promise .resolve (reportMap );
523
+ } else {
524
+ // Previous status report was with a binary app version.
525
+ WritableNativeMap reportMap = new WritableNativeMap ();
526
+ reportMap .putMap ("package" , currentPackage );
527
+ reportMap .putString ("status" , DEPLOYMENT_SUCCEEDED_STATUS );
528
+ reportMap .putString ("fromLabelOrAppVersion" , previousStatusReportIdentifier );
529
+ promise .resolve (reportMap );
530
+ }
531
+ return ;
532
+ }
492
533
}
493
534
}
494
535
} else if (isRunningBinaryVersion ) {
495
536
// Check if the current appVersion has been reported.
496
- String binaryIdentifier = "" + getBinaryResourcesModifiedTime ();
497
- if (isDeploymentStatusNotYetReported ( binaryIdentifier ) ) {
498
- recordDeploymentStatusReported (binaryIdentifier );
537
+ String previousStatusReportIdentifier = getPreviousStatusReportIdentifier ();
538
+ if (previousStatusReportIdentifier == null ) {
539
+ recordDeploymentStatusReported (appVersion );
499
540
WritableNativeMap reportMap = new WritableNativeMap ();
500
541
reportMap .putString ("appVersion" , appVersion );
501
542
promise .resolve (reportMap );
502
543
return ;
544
+ } else if (!previousStatusReportIdentifier .equals (appVersion )) {
545
+ recordDeploymentStatusReported (appVersion );
546
+ if (isStatusReportIdentifierCodePushLabel (previousStatusReportIdentifier )) {
547
+ String fromDeploymentKey = getDeploymentKeyFromStatusReportIdentifier (previousStatusReportIdentifier );
548
+ String fromLabel = getVersionLabelFromStatusReportIdentifier (previousStatusReportIdentifier );
549
+ WritableNativeMap reportMap = new WritableNativeMap ();
550
+ reportMap .putString ("appVersion" , appVersion );
551
+ reportMap .putString ("fromDeploymentKey" , fromDeploymentKey );
552
+ reportMap .putString ("fromLabelOrAppVersion" , fromLabel );
553
+ promise .resolve (reportMap );
554
+ } else {
555
+ // Previous status report was with a binary app version.
556
+ WritableNativeMap reportMap = new WritableNativeMap ();
557
+ reportMap .putString ("appVersion" , appVersion );
558
+ reportMap .putString ("fromLabelOrAppVersion" , previousStatusReportIdentifier );
559
+ promise .resolve (reportMap );
560
+ }
561
+ return ;
503
562
}
504
563
}
505
564
0 commit comments