1
- package com .microsoft .reactnativecodepush ;
1
+ package com .microsoft .codepush . react ;
2
2
3
3
import com .facebook .react .ReactPackage ;
4
- import com .facebook .react .bridge .Callback ;
5
4
import com .facebook .react .bridge .JavaScriptModule ;
6
5
import com .facebook .react .bridge .LifecycleEventListener ;
7
6
import com .facebook .react .bridge .NativeModule ;
8
7
import com .facebook .react .bridge .ReactApplicationContext ;
9
8
import com .facebook .react .bridge .ReactContextBaseJavaModule ;
10
9
import com .facebook .react .bridge .ReactMethod ;
10
+ import com .facebook .react .bridge .Promise ;
11
11
import com .facebook .react .bridge .ReadableMap ;
12
12
import com .facebook .react .bridge .WritableMap ;
13
13
import com .facebook .react .bridge .WritableNativeMap ;
19
19
import android .content .Context ;
20
20
import android .content .Intent ;
21
21
import android .content .SharedPreferences ;
22
+ import android .content .pm .PackageInfo ;
23
+ import android .content .pm .PackageManager ;
22
24
23
25
import org .json .JSONException ;
24
26
import org .json .JSONObject ;
35
37
36
38
public class CodePush {
37
39
38
- private String deploymentKey ;
39
-
40
40
private boolean resumablePendingUpdateAvailable = false ;
41
41
private boolean didUpdate = false ;
42
42
private Timer timer ;
@@ -55,7 +55,12 @@ public class CodePush {
55
55
private CodePushPackage codePushPackage ;
56
56
private CodePushReactPackage codePushReactPackage ;
57
57
private CodePushNativeModule codePushNativeModule ;
58
- private CodePushConfig codePushConfig ;
58
+
59
+ // Config properties.
60
+ private String deploymentKey ;
61
+ private String appVersion ;
62
+ private int buildVersion ;
63
+ private final String serverUrl = "https://codepush.azurewebsites.net/" ;
59
64
60
65
private Activity mainActivity ;
61
66
private Context applicationContext ;
@@ -66,7 +71,17 @@ public CodePush(String deploymentKey, Activity mainActivity) {
66
71
this .codePushPackage = new CodePushPackage (mainActivity .getFilesDir ().getAbsolutePath ());
67
72
this .mainActivity = mainActivity ;
68
73
this .applicationContext = mainActivity .getApplicationContext ();
69
- this .codePushConfig = new CodePushConfig (deploymentKey , this .applicationContext );
74
+ this .deploymentKey = deploymentKey ;
75
+
76
+ PackageInfo pInfo = null ;
77
+ try {
78
+ pInfo = applicationContext .getPackageManager ().getPackageInfo (applicationContext .getPackageName (), 0 );
79
+ appVersion = pInfo .versionName ;
80
+ buildVersion = pInfo .versionCode ;
81
+ } catch (PackageManager .NameNotFoundException e ) {
82
+ throw new CodePushUnknownException ("Unable to get package info for " + applicationContext .getPackageName (), e );
83
+ }
84
+
70
85
checkForPendingUpdate (/*needsRestart*/ false );
71
86
}
72
87
@@ -113,12 +128,14 @@ private void checkForPendingUpdate(boolean needsRestart) {
113
128
JSONObject pendingUpdateJSON = new JSONObject (pendingUpdateString );
114
129
String pendingHash = pendingUpdateJSON .getString (PENDING_UPDATE_HASH_KEY );
115
130
String currentHash = codePushPackage .getCurrentPackageHash ();
116
- if (pendingHash .equals (currentHash )) {
117
- int rollbackTimeout = pendingUpdateJSON .getInt (PENDING_UPDATE_ROLLBACK_TIMEOUT_KEY );
118
- initializeUpdateWithRollbackTimeout (rollbackTimeout , needsRestart );
119
-
120
- settings .edit ().remove (PENDING_UPDATE_KEY ).commit ();
131
+ if (!pendingHash .equals (currentHash )) {
132
+ throw new CodePushUnknownException ("Pending hash " + pendingHash +
133
+ " and current hash " + currentHash + " are different" );
121
134
}
135
+
136
+ int rollbackTimeout = pendingUpdateJSON .getInt (PENDING_UPDATE_ROLLBACK_TIMEOUT_KEY );
137
+ initializeUpdateWithRollbackTimeout (rollbackTimeout , needsRestart );
138
+ settings .edit ().remove (PENDING_UPDATE_KEY ).commit ();
122
139
} catch (JSONException e ) {
123
140
// Should not happen.
124
141
throw new CodePushUnknownException ("Unable to parse pending update metadata " +
@@ -136,16 +153,6 @@ private void checkForPendingUpdateDuringResume() {
136
153
}
137
154
}
138
155
139
- private WritableMap constantsToExport () {
140
- // Export the values of the CodePushInstallMode enum
141
- // so that the script-side can easily stay in sync
142
- WritableMap map = new WritableNativeMap ();
143
- map .putInt ("codePushInstallModeImmediate" , CodePushInstallMode .IMMEDIATE .getValue ());
144
- map .putInt ("codePushInstallModeOnNextRestart" , CodePushInstallMode .ON_NEXT_RESTART .getValue ());
145
- map .putInt ("codePushInstallModeOnNextResume" , CodePushInstallMode .ON_NEXT_RESUME .getValue ());
146
- return map ;
147
- }
148
-
149
156
private void initializeUpdateWithRollbackTimeout (int rollbackTimeout , boolean needsRestart ) {
150
157
didUpdate = true ;
151
158
@@ -248,15 +255,13 @@ public void run() {
248
255
private class CodePushNativeModule extends ReactContextBaseJavaModule {
249
256
250
257
private void loadBundle () {
251
- String assetsBundleFileUrl = CodePush .this .getBundleUrl (CodePush .this .assetsBundleFileName );
252
258
Intent intent = mainActivity .getIntent ();
253
259
mainActivity .finish ();
254
260
mainActivity .startActivity (intent );
255
261
}
256
262
257
263
@ ReactMethod
258
- public void installUpdate (ReadableMap updatePackage , int rollbackTimeout , int installMode ,
259
- Callback resolve , Callback reject ) {
264
+ public void installUpdate (ReadableMap updatePackage , int rollbackTimeout , int installMode , Promise promise ) {
260
265
try {
261
266
codePushPackage .installPackage (updatePackage );
262
267
if (installMode != CodePushInstallMode .IMMEDIATE .getValue ()) {
@@ -268,15 +273,15 @@ public void installUpdate(ReadableMap updatePackage, int rollbackTimeout, int in
268
273
savePendingUpdate (pendingHash , rollbackTimeout );
269
274
}
270
275
}
271
- resolve . invoke ("" );
276
+ promise . resolve ("" );
272
277
} catch (IOException e ) {
273
278
e .printStackTrace ();
274
- reject . invoke (e .getMessage ());
279
+ promise . reject (e .getMessage ());
275
280
}
276
281
}
277
282
278
283
@ ReactMethod
279
- public void downloadUpdate (final ReadableMap updatePackage , final Callback resolve , final Callback reject ) {
284
+ public void downloadUpdate (final ReadableMap updatePackage , final Promise promise ) {
280
285
try {
281
286
codePushPackage .downloadPackage (applicationContext , updatePackage , new DownloadProgressCallback () {
282
287
@ Override
@@ -288,51 +293,56 @@ public void call(DownloadProgress downloadProgress) {
288
293
});
289
294
290
295
WritableMap newPackage = codePushPackage .getPackage (CodePushUtils .tryGetString (updatePackage , codePushPackage .PACKAGE_HASH_KEY ));
291
- resolve . invoke (newPackage );
296
+ promise . resolve (newPackage );
292
297
} catch (IOException e ) {
293
298
e .printStackTrace ();
294
- reject . invoke (e .getMessage ());
299
+ promise . reject (e .getMessage ());
295
300
}
296
301
}
297
302
298
303
@ ReactMethod
299
- public void getConfiguration (Callback resolve , Callback reject ) {
300
- resolve .invoke (codePushConfig .getConfiguration ());
304
+ public void getConfiguration (Promise promise ) {
305
+ WritableNativeMap configMap = new WritableNativeMap ();
306
+ configMap .putString ("appVersion" , appVersion );
307
+ configMap .putInt ("buildVersion" , buildVersion );
308
+ configMap .putString ("deploymentKey" , deploymentKey );
309
+ configMap .putString ("serverUrl" , serverUrl );
310
+ promise .resolve (configMap );
301
311
}
302
312
303
313
@ ReactMethod
304
- public void getCurrentPackage (Callback resolve , Callback reject ) {
314
+ public void getCurrentPackage (Promise promise ) {
305
315
try {
306
- resolve . invoke (codePushPackage .getCurrentPackage ());
316
+ promise . resolve (codePushPackage .getCurrentPackage ());
307
317
} catch (IOException e ) {
308
318
e .printStackTrace ();
309
- reject . invoke (e .getMessage ());
319
+ promise . reject (e .getMessage ());
310
320
}
311
321
}
312
322
313
323
@ ReactMethod
314
- public void isFailedUpdate (String packageHash , Callback resolve , Callback reject ) {
315
- resolve . invoke (isFailedHash (packageHash ));
324
+ public void isFailedUpdate (String packageHash , Promise promise ) {
325
+ promise . resolve (isFailedHash (packageHash ));
316
326
}
317
327
318
328
@ ReactMethod
319
- public void isFirstRun (String packageHash , Callback resolve , Callback reject ) {
329
+ public void isFirstRun (String packageHash , Promise promise ) {
320
330
try {
321
331
boolean isFirstRun = didUpdate
322
332
&& packageHash != null
323
333
&& packageHash .length () > 0
324
334
&& packageHash .equals (codePushPackage .getCurrentPackageHash ());
325
- resolve . invoke (isFirstRun );
335
+ promise . resolve (isFirstRun );
326
336
} catch (IOException e ) {
327
337
e .printStackTrace ();
328
- reject . invoke (e .getMessage ());
338
+ promise . reject (e .getMessage ());
329
339
}
330
340
}
331
341
332
342
@ ReactMethod
333
- public void notifyApplicationReady (Callback resolve , Callback reject ) {
343
+ public void notifyApplicationReady (Promise promise ) {
334
344
cancelRollbackTimer ();
335
- resolve . invoke ("" );
345
+ promise . resolve ("" );
336
346
}
337
347
338
348
@ ReactMethod
0 commit comments