mobile_template 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. data/lib/mobile_template/version.rb +1 -1
  2. data/mobile_template.gemspec +1 -1
  3. data/templates/assets/Gemfile +1 -1
  4. data/templates/assets/source/javascripts/vendor/cordova.js +2106 -1975
  5. data/templates/assets/source/javascripts/vendor/jquery.js +614 -477
  6. data/templates/assets/source/javascripts/vendor/jquery.mobile.js +519 -378
  7. data/templates/assets/source/stylesheets/vendor/jquery.mobile.css.scss +683 -502
  8. data/templates/cordova_android/VERSION +1 -1
  9. data/templates/cordova_android/bin/create +5 -1
  10. data/templates/cordova_android/bin/templates/project/cordova/create +5 -0
  11. data/templates/cordova_android/bin/templates/project/cordova/debug +1 -1
  12. data/templates/cordova_android/bin/templates/project/cordova/templates/project/AndroidManifest.xml +18 -25
  13. data/templates/cordova_android/bin/templates/project/cordova/templates/project/assets/www/index.html +6 -6
  14. data/templates/cordova_android/framework/assets/js/cordova.android.js +2106 -1975
  15. data/templates/cordova_android/framework/assets/www/index.html +1 -1
  16. data/templates/cordova_android/framework/build.xml +2 -42
  17. data/templates/cordova_android/framework/project.properties +1 -1
  18. data/templates/cordova_android/framework/res/drawable/splash.png +0 -0
  19. data/templates/cordova_android/framework/res/drawable-hdpi/icon.png +0 -0
  20. data/templates/cordova_android/framework/res/drawable-ldpi/icon.png +0 -0
  21. data/templates/cordova_android/framework/res/drawable-mdpi/icon.png +0 -0
  22. data/templates/cordova_android/framework/res/xml/plugins.xml +2 -1
  23. data/templates/cordova_android/framework/src/com/phonegap/api/PluginManager.java +1 -0
  24. data/templates/cordova_android/framework/src/org/apache/cordova/AudioPlayer.java +24 -16
  25. data/templates/cordova_android/framework/src/org/apache/cordova/CameraLauncher.java +35 -10
  26. data/templates/cordova_android/framework/src/org/apache/cordova/ContactAccessor.java +2 -1
  27. data/templates/cordova_android/framework/src/org/apache/cordova/ContactAccessorSdk5.java +67 -65
  28. data/templates/cordova_android/framework/src/org/apache/cordova/ContactManager.java +51 -63
  29. data/templates/cordova_android/framework/src/org/apache/cordova/CordovaChromeClient.java +3 -0
  30. data/templates/cordova_android/framework/src/org/apache/cordova/CordovaWebViewClient.java +6 -2
  31. data/templates/cordova_android/framework/src/org/apache/cordova/Device.java +108 -108
  32. data/templates/cordova_android/framework/src/org/apache/cordova/DroidGap.java +110 -77
  33. data/templates/cordova_android/framework/src/org/apache/cordova/FileTransfer.java +90 -44
  34. data/templates/cordova_android/framework/src/org/apache/cordova/FileUtils.java +20 -20
  35. data/templates/cordova_android/framework/src/org/apache/cordova/LinearLayoutSoftKeyboardDetect.java +2 -2
  36. data/templates/cordova_android/framework/src/org/apache/cordova/NetworkManager.java +7 -8
  37. data/templates/cordova_android/framework/src/org/apache/cordova/Notification.java +2 -2
  38. data/templates/cordova_android/framework/src/org/apache/cordova/SplashScreen.java +23 -0
  39. data/templates/cordova_android/framework/src/org/apache/cordova/Storage.java +3 -3
  40. data/templates/cordova_android/framework/src/org/apache/cordova/api/CordovaInterface.java +2 -0
  41. data/templates/cordova_android/framework/src/org/apache/cordova/api/PluginEntry.java +119 -0
  42. data/templates/cordova_android/framework/src/org/apache/cordova/api/PluginManager.java +260 -258
  43. data/templates/cordova_android/framework/src/org/apache/cordova/api/PluginResult.java +2 -2
  44. data/templates/cordova_android/releasenotes.md +42 -0
  45. data/templates/cordova_android/test/.classpath +8 -0
  46. data/templates/cordova_android/test/.project +33 -0
  47. data/templates/cordova_android/test/AndroidManifest.xml +87 -0
  48. data/templates/cordova_android/test/README.md +23 -0
  49. data/templates/cordova_android/test/ant.properties +17 -0
  50. data/templates/cordova_android/test/assets/www/backbuttonmultipage/index.html +23 -0
  51. data/templates/cordova_android/test/assets/www/backbuttonmultipage/sample2.html +23 -0
  52. data/templates/cordova_android/test/assets/www/backbuttonmultipage/sample3.html +26 -0
  53. data/templates/cordova_android/test/assets/www/background/index.html +99 -0
  54. data/templates/cordova_android/test/assets/www/background/index2.html +98 -0
  55. data/templates/cordova_android/test/assets/www/cordova-1.6.0.js +4985 -0
  56. data/templates/cordova_android/test/assets/www/cordova.js +2 -0
  57. data/templates/cordova_android/test/assets/www/htmlnotfound/error.html +1 -0
  58. data/templates/cordova_android/test/assets/www/iframe/index.html +33 -0
  59. data/templates/cordova_android/test/assets/www/iframe/index2.html +24 -0
  60. data/templates/cordova_android/test/assets/www/index.html +47 -0
  61. data/templates/cordova_android/test/assets/www/jqmtabbackbutton/index.html +49 -0
  62. data/templates/cordova_android/test/assets/www/jqmtabbackbutton/tab1.html +29 -0
  63. data/templates/cordova_android/test/assets/www/jqmtabbackbutton/tab2.html +30 -0
  64. data/templates/cordova_android/test/assets/www/jqmtabbackbutton/tab3.html +30 -0
  65. data/templates/cordova_android/test/assets/www/lifecycle/index.html +108 -0
  66. data/templates/cordova_android/test/assets/www/lifecycle/index2.html +104 -0
  67. data/templates/cordova_android/test/assets/www/main.js +150 -0
  68. data/templates/cordova_android/test/assets/www/master.css +117 -0
  69. data/templates/cordova_android/test/assets/www/menus/index.html +29 -0
  70. data/templates/cordova_android/test/assets/www/splashscreen/index.html +22 -0
  71. data/templates/cordova_android/test/assets/www/userwebview/index.html +49 -0
  72. data/templates/cordova_android/test/assets/www/whitelist/index.html +29 -0
  73. data/templates/cordova_android/test/assets/www/whitelist/index2.html +23 -0
  74. data/templates/cordova_android/test/assets/www/xhr/index.html +48 -0
  75. data/templates/cordova_android/test/build.xml +85 -0
  76. data/templates/cordova_android/test/libs/cordova-1.6.0.jar +0 -0
  77. data/templates/cordova_android/test/project.properties +11 -0
  78. data/templates/cordova_android/{framework → test}/res/drawable/icon.png +0 -0
  79. data/templates/cordova_android/test/res/drawable/sandy.jpg +0 -0
  80. data/templates/cordova_android/test/res/drawable-hdpi/ic_launcher.png +0 -0
  81. data/templates/cordova_android/test/res/drawable-ldpi/ic_launcher.png +0 -0
  82. data/templates/cordova_android/test/res/drawable-mdpi/ic_launcher.png +0 -0
  83. data/templates/cordova_android/test/res/layout/main.xml +13 -0
  84. data/templates/cordova_android/test/res/values/strings.xml +4 -0
  85. data/templates/cordova_android/{bin/templates/project/cordova/templates/project → test}/res/xml/cordova.xml +0 -0
  86. data/templates/cordova_android/{bin/templates/project/cordova/templates/project → test}/res/xml/plugins.xml +1 -1
  87. data/templates/cordova_android/test/src/org/apache/cordova/test/ActivityPlugin.java +81 -0
  88. data/templates/cordova_android/test/src/org/apache/cordova/test/FixWebView.java +43 -0
  89. data/templates/cordova_android/test/src/org/apache/cordova/test/backbuttonmultipage.java +30 -0
  90. data/templates/cordova_android/test/src/org/apache/cordova/test/background.java +34 -0
  91. data/templates/cordova_android/test/src/org/apache/cordova/test/errorurl.java +32 -0
  92. data/templates/cordova_android/test/src/org/apache/cordova/test/htmlnotfound.java +31 -0
  93. data/templates/cordova_android/test/src/org/apache/cordova/test/iframe.java +30 -0
  94. data/templates/cordova_android/test/src/org/apache/cordova/test/jqmtabbackbutton.java +30 -0
  95. data/templates/cordova_android/test/src/org/apache/cordova/test/lifecycle.java +30 -0
  96. data/templates/cordova_android/test/src/org/apache/cordova/test/loading.java +31 -0
  97. data/templates/cordova_android/test/src/org/apache/cordova/test/menus.java +80 -0
  98. data/templates/cordova_android/test/src/org/apache/cordova/test/splashscreen.java +35 -0
  99. data/templates/cordova_android/test/src/org/apache/cordova/test/tests.java +32 -0
  100. data/templates/cordova_android/test/src/org/apache/cordova/test/timeout.java +34 -0
  101. data/templates/cordova_android/test/src/org/apache/cordova/test/userwebview.java +72 -0
  102. data/templates/cordova_android/test/src/org/apache/cordova/test/whitelist.java +51 -0
  103. data/templates/cordova_android/test/src/org/apache/cordova/test/xhr.java +30 -0
  104. metadata +83 -30
  105. data/templates/cordova_android/framework/assets/js/accelerometer.js +0 -137
  106. data/templates/cordova_android/framework/assets/js/app.js +0 -89
  107. data/templates/cordova_android/framework/assets/js/battery.js +0 -134
  108. data/templates/cordova_android/framework/assets/js/camera.js +0 -168
  109. data/templates/cordova_android/framework/assets/js/capture.js +0 -203
  110. data/templates/cordova_android/framework/assets/js/compass.js +0 -168
  111. data/templates/cordova_android/framework/assets/js/contact.js +0 -310
  112. data/templates/cordova_android/framework/assets/js/cordova.js.base +0 -924
  113. data/templates/cordova_android/framework/assets/js/crypto.js +0 -54
  114. data/templates/cordova_android/framework/assets/js/device.js +0 -83
  115. data/templates/cordova_android/framework/assets/js/file.js +0 -1082
  116. data/templates/cordova_android/framework/assets/js/filetransfer.js +0 -125
  117. data/templates/cordova_android/framework/assets/js/geolocation.js +0 -209
  118. data/templates/cordova_android/framework/assets/js/header.txt +0 -19
  119. data/templates/cordova_android/framework/assets/js/media.js +0 -233
  120. data/templates/cordova_android/framework/assets/js/network.js +0 -100
  121. data/templates/cordova_android/framework/assets/js/notification.js +0 -133
  122. data/templates/cordova_android/framework/assets/js/position.js +0 -100
  123. data/templates/cordova_android/framework/assets/js/storage.js +0 -439
@@ -94,7 +94,7 @@ public class FileTransfer extends Plugin {
94
94
  mimeType = getArgument(args, 4, "image/jpeg");
95
95
  JSONObject params = args.optJSONObject(5);
96
96
  boolean trustEveryone = args.optBoolean(6);
97
- boolean chunkedMode = args.optBoolean(7);
97
+ boolean chunkedMode = args.optBoolean(7) || args.isNull(7); //Always use chunked mode unless set to false as per API
98
98
  FileUploadResult r = upload(source, target, fileKey, fileName, mimeType, params, trustEveryone, chunkedMode);
99
99
  Log.d(LOG_TAG, "****** About to return a result from upload");
100
100
  return new PluginResult(PluginResult.Status.OK, r.toJSONObject());
@@ -225,7 +225,7 @@ public class FileTransfer extends Plugin {
225
225
  FileUploadResult result = new FileUploadResult();
226
226
 
227
227
  // Get a input stream of the file on the phone
228
- InputStream fileInputStream = getPathFromUri(file);
228
+ FileInputStream fileInputStream = (FileInputStream) getPathFromUri(file);
229
229
 
230
230
  HttpURLConnection conn = null;
231
231
  DataOutputStream dos = null;
@@ -276,7 +276,7 @@ public class FileTransfer extends Plugin {
276
276
  conn.setRequestMethod("POST");
277
277
  conn.setRequestProperty("Connection", "Keep-Alive");
278
278
  conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+BOUNDRY);
279
-
279
+
280
280
  // Handle the other headers
281
281
  try {
282
282
  JSONObject headers = params.getJSONObject("headers");
@@ -294,35 +294,54 @@ public class FileTransfer extends Plugin {
294
294
  if (cookie != null) {
295
295
  conn.setRequestProperty("Cookie", cookie);
296
296
  }
297
+
297
298
 
298
- // Should set this up as an option
299
- if (chunkedMode) {
300
- conn.setChunkedStreamingMode(maxBufferSize);
301
- }
302
-
303
- dos = new DataOutputStream( conn.getOutputStream() );
304
-
305
- // Send any extra parameters
299
+ /*
300
+ * Store the non-file portions of the multipart data as a string, so that we can add it
301
+ * to the contentSize, since it is part of the body of the HTTP request.
302
+ */
303
+ String extraParams = "";
306
304
  try {
307
305
  for (Iterator iter = params.keys(); iter.hasNext();) {
308
306
  Object key = iter.next();
309
307
  if(key.toString() != "headers")
310
308
  {
311
- dos.writeBytes(LINE_START + BOUNDRY + LINE_END);
312
- dos.writeBytes("Content-Disposition: form-data; name=\"" + key.toString() + "\";");
313
- dos.writeBytes(LINE_END + LINE_END);
314
- dos.write(params.getString(key.toString()).getBytes());
315
- dos.writeBytes(LINE_END);
309
+ extraParams += LINE_START + BOUNDRY + LINE_END;
310
+ extraParams += "Content-Disposition: form-data; name=\"" + key.toString() + "\";";
311
+ extraParams += LINE_END + LINE_END;
312
+ extraParams += params.getString(key.toString());
313
+ extraParams += LINE_END;
316
314
  }
317
315
  }
318
316
  } catch (JSONException e) {
319
317
  Log.e(LOG_TAG, e.getMessage(), e);
320
318
  }
319
+
320
+ extraParams += LINE_START + BOUNDRY + LINE_END;
321
+ extraParams += "Content-Disposition: form-data; name=\"" + fileKey + "\";" + " filename=\"";
322
+
323
+ String midParams = "\"" + LINE_END + "Content-Type: " + mimeType + LINE_END + LINE_END;
324
+ String tailParams = LINE_END + LINE_START + BOUNDRY + LINE_START + LINE_END;
325
+
326
+ // Should set this up as an option
327
+ if (chunkedMode) {
328
+ conn.setChunkedStreamingMode(maxBufferSize);
329
+ }
330
+ else
331
+ {
332
+ int stringLength = extraParams.length() + midParams.length() + tailParams.length() + fileName.getBytes("UTF-8").length;
333
+ Log.d(LOG_TAG, "String Length: " + stringLength);
334
+ int fixedLength = (int) fileInputStream.getChannel().size() + stringLength;
335
+ Log.d(LOG_TAG, "Content Length: " + fixedLength);
336
+ conn.setFixedLengthStreamingMode(fixedLength);
337
+ }
338
+
321
339
 
322
- dos.writeBytes(LINE_START + BOUNDRY + LINE_END);
323
- dos.writeBytes("Content-Disposition: form-data; name=\"" + fileKey + "\";" + " filename=\"" + fileName +"\"" + LINE_END);
324
- dos.writeBytes("Content-Type: " + mimeType + LINE_END);
325
- dos.writeBytes(LINE_END);
340
+ dos = new DataOutputStream( conn.getOutputStream() );
341
+ dos.writeBytes(extraParams);
342
+ //We don't want to chagne encoding, we just want this to write for all Unicode.
343
+ dos.write(fileName.getBytes("UTF-8"));
344
+ dos.writeBytes(midParams);
326
345
 
327
346
  // create a buffer of maximum size
328
347
  bytesAvailable = fileInputStream.available();
@@ -343,8 +362,7 @@ public class FileTransfer extends Plugin {
343
362
  }
344
363
 
345
364
  // send multipart form data necesssary after file data...
346
- dos.writeBytes(LINE_END);
347
- dos.writeBytes(LINE_START + BOUNDRY + LINE_START + LINE_END);
365
+ dos.writeBytes(tailParams);
348
366
 
349
367
  // close streams
350
368
  fileInputStream.close();
@@ -392,38 +410,53 @@ public class FileTransfer extends Plugin {
392
410
  */
393
411
  public JSONObject download(String source, String target) throws IOException {
394
412
  try {
395
- File file = new File(target);
413
+ File file = getFileFromPath(target);
396
414
 
397
415
  // create needed directories
398
416
  file.getParentFile().mkdirs();
399
417
 
400
418
  // connect to server
401
- URL url = new URL(source);
402
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
403
- connection.setRequestMethod("GET");
404
- connection.connect();
405
-
406
- Log.d(LOG_TAG, "Download file:" + url);
407
-
408
- InputStream inputStream = connection.getInputStream();
409
- byte[] buffer = new byte[1024];
410
- int bytesRead = 0;
411
-
412
- FileOutputStream outputStream = new FileOutputStream(file);
413
-
414
- // write bytes to file
415
- while ( (bytesRead = inputStream.read(buffer)) > 0 ) {
419
+ if(this.ctx.isUrlWhiteListed(source))
420
+ {
421
+ URL url = new URL(source);
422
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
423
+ connection.setRequestMethod("GET");
424
+
425
+ //Add cookie support
426
+ String cookie = CookieManager.getInstance().getCookie(source);
427
+ if(cookie != null)
428
+ {
429
+ connection.setRequestProperty("cookie", cookie);
430
+ }
431
+
432
+ connection.connect();
433
+
434
+ Log.d(LOG_TAG, "Download file:" + url);
435
+
436
+ InputStream inputStream = connection.getInputStream();
437
+ byte[] buffer = new byte[1024];
438
+ int bytesRead = 0;
439
+
440
+ FileOutputStream outputStream = new FileOutputStream(file);
441
+
442
+ // write bytes to file
443
+ while ( (bytesRead = inputStream.read(buffer)) > 0 ) {
416
444
  outputStream.write(buffer,0, bytesRead);
417
- }
445
+ }
418
446
 
419
- outputStream.close();
447
+ outputStream.close();
420
448
 
421
- Log.d(LOG_TAG, "Saved file: " + target);
449
+ Log.d(LOG_TAG, "Saved file: " + target);
422
450
 
423
- // create FileEntry object
424
- FileUtils fileUtil = new FileUtils();
451
+ // create FileEntry object
452
+ FileUtils fileUtil = new FileUtils();
425
453
 
426
- return fileUtil.getEntry(file);
454
+ return fileUtil.getEntry(file);
455
+ }
456
+ else
457
+ {
458
+ throw new IOException("Error: Unable to connect to domain");
459
+ }
427
460
  } catch (Exception e) {
428
461
  Log.d(LOG_TAG, e.getMessage(), e);
429
462
  throw new IOException("Error while downloading");
@@ -455,4 +488,17 @@ public class FileTransfer extends Plugin {
455
488
  }
456
489
  }
457
490
 
491
+ /**
492
+ * Get a File object from the passed in path
493
+ *
494
+ * @param path
495
+ * @return
496
+ */
497
+ private File getFileFromPath(String path) {
498
+ if (path.startsWith("file://")) {
499
+ return new File(path.substring(7));
500
+ } else {
501
+ return new File(path);
502
+ }
503
+ }
458
504
  }
@@ -142,8 +142,7 @@ public class FileUtils extends Plugin {
142
142
  return new PluginResult(status, obj);
143
143
  }
144
144
  else if (action.equals("getMetadata")) {
145
- JSONObject obj = getMetadata(args.getString(0));
146
- return new PluginResult(status, obj);
145
+ return new PluginResult(status, getMetadata(args.getString(0)));
147
146
  }
148
147
  else if (action.equals("getFileMetadata")) {
149
148
  JSONObject obj = getFileMetadata(args.getString(0));
@@ -254,7 +253,12 @@ public class FileUtils extends Plugin {
254
253
  URL testUrl = new URL(decoded);
255
254
 
256
255
  if (decoded.startsWith("file://")) {
257
- fp = new File(decoded.substring(7, decoded.length()));
256
+ int questionMark = decoded.indexOf("?");
257
+ if (questionMark < 0) {
258
+ fp = new File(decoded.substring(7, decoded.length()));
259
+ } else {
260
+ fp = new File(decoded.substring(7, questionMark));
261
+ }
258
262
  } else {
259
263
  fp = new File(decoded);
260
264
  }
@@ -759,21 +763,17 @@ public class FileUtils extends Plugin {
759
763
  * Look up metadata about this entry.
760
764
  *
761
765
  * @param filePath to entry
762
- * @return a Metadata object
766
+ * @return a long
763
767
  * @throws FileNotFoundException
764
- * @throws JSONException
765
768
  */
766
- private JSONObject getMetadata(String filePath) throws FileNotFoundException, JSONException {
769
+ private long getMetadata(String filePath) throws FileNotFoundException {
767
770
  File file = createFileObject(filePath);
768
771
 
769
772
  if (!file.exists()) {
770
773
  throw new FileNotFoundException("Failed to find file in getMetadata");
771
774
  }
772
775
 
773
- JSONObject metadata = new JSONObject();
774
- metadata.put("modificationTime", file.lastModified());
775
-
776
- return metadata;
776
+ return file.lastModified();
777
777
  }
778
778
 
779
779
  /**
@@ -973,23 +973,23 @@ public class FileUtils extends Plugin {
973
973
  /**/
974
974
  public long write(String filename, String data, int offset) throws FileNotFoundException, IOException {
975
975
  filename = stripFileProtocol(filename);
976
-
976
+
977
977
  boolean append = false;
978
978
  if (offset > 0) {
979
979
  this.truncateFile(filename, offset);
980
980
  append = true;
981
981
  }
982
982
 
983
- byte [] rawData = data.getBytes();
984
- ByteArrayInputStream in = new ByteArrayInputStream(rawData);
985
- FileOutputStream out = new FileOutputStream(filename, append);
986
- byte buff[] = new byte[rawData.length];
987
- in.read(buff, 0, buff.length);
988
- out.write(buff, 0, rawData.length);
989
- out.flush();
990
- out.close();
983
+ byte [] rawData = data.getBytes();
984
+ ByteArrayInputStream in = new ByteArrayInputStream(rawData);
985
+ FileOutputStream out = new FileOutputStream(filename, append);
986
+ byte buff[] = new byte[rawData.length];
987
+ in.read(buff, 0, buff.length);
988
+ out.write(buff, 0, rawData.length);
989
+ out.flush();
990
+ out.close();
991
991
 
992
- return data.length();
992
+ return rawData.length;
993
993
  }
994
994
 
995
995
  /**
@@ -87,13 +87,13 @@ public class LinearLayoutSoftKeyboardDetect extends LinearLayout {
87
87
  // gone away.
88
88
  else if (height > oldHeight) {
89
89
  if(app != null)
90
- app.sendJavascript("require('cordova').fireDocumentEvent('hidekeyboard');");
90
+ app.sendJavascript("cordova.fireDocumentEvent('hidekeyboard');");
91
91
  }
92
92
  // If the height as gotten smaller then we will assume the soft keyboard has
93
93
  // been displayed.
94
94
  else if (height < oldHeight) {
95
95
  if(app != null)
96
- app.sendJavascript("require('cordova').fireDocumentEvent('showkeyboard');");
96
+ app.sendJavascript("cordova.fireDocumentEvent('showkeyboard');");
97
97
  }
98
98
 
99
99
  // Update the old height for the next event
@@ -58,7 +58,7 @@ public class NetworkManager extends Plugin {
58
58
  public static final String LTE = "lte";
59
59
  public static final String UMB = "umb";
60
60
  public static final String HSPA_PLUS = "hspa+";
61
- // return types
61
+ // return type
62
62
  public static final String TYPE_UNKNOWN = "unknown";
63
63
  public static final String TYPE_ETHERNET = "ethernet";
64
64
  public static final String TYPE_WIFI = "wifi";
@@ -89,7 +89,7 @@ public class NetworkManager extends Plugin {
89
89
  */
90
90
  public void setContext(CordovaInterface ctx) {
91
91
  super.setContext(ctx);
92
- this.sockMan = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
92
+ this.sockMan = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
93
93
  this.connectionCallbackId = null;
94
94
 
95
95
  // We need to listen to connectivity events to update navigator.connection
@@ -98,7 +98,7 @@ public class NetworkManager extends Plugin {
98
98
  if (this.receiver == null) {
99
99
  this.receiver = new BroadcastReceiver() {
100
100
  @Override
101
- public void onReceive(Context context, Intent intent) {
101
+ public void onReceive(Context context, Intent intent) {
102
102
  updateConnectionInfo((NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO));
103
103
  }
104
104
  };
@@ -117,7 +117,7 @@ public class NetworkManager extends Plugin {
117
117
  */
118
118
  public PluginResult execute(String action, JSONArray args, String callbackId) {
119
119
  PluginResult.Status status = PluginResult.Status.INVALID_ACTION;
120
- String result = "Unsupported Operation: " + action;
120
+ String result = "Unsupported Operation: " + action;
121
121
 
122
122
  if (action.equals("getConnectionInfo")) {
123
123
  this.connectionCallbackId = callbackId;
@@ -137,8 +137,7 @@ public class NetworkManager extends Plugin {
137
137
  * @return T=returns value
138
138
  */
139
139
  public boolean isSynch(String action) {
140
- // All methods take a while, so always use async
141
- return false;
140
+ return true;
142
141
  }
143
142
 
144
143
  /**
@@ -182,7 +181,7 @@ public class NetworkManager extends Plugin {
182
181
  // If we are not connected to any network set type to none
183
182
  if (!info.isConnected()) {
184
183
  type = TYPE_NONE;
185
- }
184
+ }
186
185
  else {
187
186
  type = getType(info);
188
187
  }
@@ -212,7 +211,7 @@ public class NetworkManager extends Plugin {
212
211
  */
213
212
  private String getType(NetworkInfo info) {
214
213
  if (info != null) {
215
- String type = info.getTypeName();
214
+ String type = info.getTypeName();
216
215
 
217
216
  if (type.toLowerCase().equals(WIFI)) {
218
217
  return TYPE_WIFI;
@@ -233,7 +233,7 @@ public class Notification extends Plugin {
233
233
 
234
234
  // First button
235
235
  if (fButtons.length > 0) {
236
- dlg.setPositiveButton(fButtons[0],
236
+ dlg.setNegativeButton(fButtons[0],
237
237
  new AlertDialog.OnClickListener() {
238
238
  public void onClick(DialogInterface dialog, int which) {
239
239
  dialog.dismiss();
@@ -255,7 +255,7 @@ public class Notification extends Plugin {
255
255
 
256
256
  // Third button
257
257
  if (fButtons.length > 2) {
258
- dlg.setNegativeButton(fButtons[2],
258
+ dlg.setPositiveButton(fButtons[2],
259
259
  new AlertDialog.OnClickListener() {
260
260
  public void onClick(DialogInterface dialog, int which) {
261
261
  dialog.dismiss();
@@ -0,0 +1,23 @@
1
+ package org.apache.cordova;
2
+
3
+ import org.apache.cordova.api.Plugin;
4
+ import org.apache.cordova.api.PluginResult;
5
+ import org.json.JSONArray;
6
+
7
+ public class SplashScreen extends Plugin {
8
+
9
+ @Override
10
+ public PluginResult execute(String action, JSONArray args, String callbackId) {
11
+ PluginResult.Status status = PluginResult.Status.OK;
12
+ String result = "";
13
+
14
+ if (action.equals("hide")) {
15
+ ((DroidGap)this.ctx).removeSplashScreen();
16
+ }
17
+ else {
18
+ status = PluginResult.Status.INVALID_ACTION;
19
+ }
20
+ return new PluginResult(status, result);
21
+ }
22
+
23
+ }
@@ -162,7 +162,7 @@ public class Storage extends Plugin {
162
162
  try {
163
163
  if (isDDL(query)) {
164
164
  this.myDb.execSQL(query);
165
- this.sendJavascript("require('cordova/plugin/android/storage').completeQuery('" + tx_id + "', '');");
165
+ this.sendJavascript("cordova.require('cordova/plugin/android/storage').completeQuery('" + tx_id + "', '');");
166
166
  }
167
167
  else {
168
168
  Cursor myCursor = this.myDb.rawQuery(query, params);
@@ -175,7 +175,7 @@ public class Storage extends Plugin {
175
175
  System.out.println("Storage.executeSql(): Error=" + ex.getMessage());
176
176
 
177
177
  // Send error message back to JavaScript
178
- this.sendJavascript("require('cordova/plugin/android/storage').fail('" + ex.getMessage() + "','" + tx_id + "');");
178
+ this.sendJavascript("cordova.require('cordova/plugin/android/storage').fail('" + ex.getMessage() + "','" + tx_id + "');");
179
179
  }
180
180
  }
181
181
 
@@ -233,7 +233,7 @@ public class Storage extends Plugin {
233
233
  }
234
234
 
235
235
  // Let JavaScript know that there are no more rows
236
- this.sendJavascript("require('cordova/plugin/android/storage').completeQuery('" + tx_id + "', " + result + ");");
236
+ this.sendJavascript("cordova.require('cordova/plugin/android/storage').completeQuery('" + tx_id + "', " + result + ");");
237
237
  }
238
238
 
239
239
  }
@@ -141,5 +141,7 @@ public interface CordovaInterface {
141
141
  boolean clearHistory, HashMap<String, Object> params);
142
142
 
143
143
  public abstract Context getApplicationContext();
144
+
145
+ public abstract boolean isUrlWhiteListed(String source);
144
146
 
145
147
  }
@@ -0,0 +1,119 @@
1
+ /*
2
+ Licensed to the Apache Software Foundation (ASF) under one
3
+ or more contributor license agreements. See the NOTICE file
4
+ distributed with this work for additional information
5
+ regarding copyright ownership. The ASF licenses this file
6
+ to you under the Apache License, Version 2.0 (the
7
+ "License"); you may not use this file except in compliance
8
+ with the License. You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing,
13
+ software distributed under the License is distributed on an
14
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ KIND, either express or implied. See the License for the
16
+ specific language governing permissions and limitations
17
+ under the License.
18
+ */
19
+ package org.apache.cordova.api;
20
+
21
+ import android.webkit.WebView;
22
+
23
+ /**
24
+ * This class represents a service entry object.
25
+ */
26
+ public class PluginEntry {
27
+
28
+ /**
29
+ * The name of the service that this plugin implements
30
+ */
31
+ public String service = "";
32
+
33
+ /**
34
+ * The plugin class name that implements the service.
35
+ */
36
+ public String pluginClass = "";
37
+
38
+ /**
39
+ * The plugin object.
40
+ * Plugin objects are only created when they are called from JavaScript. (see PluginManager.exec)
41
+ * The exception is if the onload flag is set, then they are created when PluginManager is initialized.
42
+ */
43
+ public IPlugin plugin = null;
44
+
45
+ /**
46
+ * Flag that indicates the plugin object should be created when PluginManager is initialized.
47
+ */
48
+ public boolean onload = false;
49
+
50
+ /**
51
+ * Constructor
52
+ *
53
+ * @param service The name of the service
54
+ * @param pluginClass The plugin class name
55
+ * @param onload Create plugin object when HTML page is loaded
56
+ */
57
+ public PluginEntry(String service, String pluginClass, boolean onload) {
58
+ this.service = service;
59
+ this.pluginClass = pluginClass;
60
+ this.onload = onload;
61
+ }
62
+
63
+ /**
64
+ * Create plugin object.
65
+ * If plugin is already created, then just return it.
66
+ *
67
+ * @return The plugin object
68
+ */
69
+ @SuppressWarnings("unchecked")
70
+ public IPlugin createPlugin(WebView webView, CordovaInterface ctx) {
71
+ if (this.plugin != null) {
72
+ return this.plugin;
73
+ }
74
+ try {
75
+ Class c = getClassByName(this.pluginClass);
76
+ if (isCordovaPlugin(c)) {
77
+ this.plugin = (IPlugin) c.newInstance();
78
+ this.plugin.setContext(ctx);
79
+ this.plugin.setView(webView);
80
+ return plugin;
81
+ }
82
+ } catch (Exception e) {
83
+ e.printStackTrace();
84
+ System.out.println("Error adding plugin " + this.pluginClass + ".");
85
+ }
86
+ return null;
87
+ }
88
+
89
+ /**
90
+ * Get the class.
91
+ *
92
+ * @param clazz
93
+ * @return
94
+ * @throws ClassNotFoundException
95
+ */
96
+ @SuppressWarnings("unchecked")
97
+ private Class getClassByName(final String clazz) throws ClassNotFoundException {
98
+ Class c = null;
99
+ if (clazz != null) {
100
+ c = Class.forName(clazz);
101
+ }
102
+ return c;
103
+ }
104
+
105
+ /**
106
+ * Get the interfaces that a class implements and see if it implements the
107
+ * org.apache.cordova.api.Plugin interface.
108
+ *
109
+ * @param c The class to check the interfaces of.
110
+ * @return Boolean indicating if the class implements org.apache.cordova.api.Plugin
111
+ */
112
+ @SuppressWarnings("unchecked")
113
+ private boolean isCordovaPlugin(Class c) {
114
+ if (c != null) {
115
+ return org.apache.cordova.api.Plugin.class.isAssignableFrom(c) || org.apache.cordova.api.IPlugin.class.isAssignableFrom(c);
116
+ }
117
+ return false;
118
+ }
119
+ }