rhodes 2.1.0 → 2.2.0.beta.1

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 (241) hide show
  1. data/CHANGELOG +7 -0
  2. data/README.textile +4 -5
  3. data/Rakefile +8 -1
  4. data/lib/build/jake.rb +22 -16
  5. data/lib/extensions/rhoxml/rexml/cdata.rb +67 -0
  6. data/lib/extensions/rhoxml/rexml/document.rb +2 -116
  7. data/lib/extensions/rhoxml/rexml/element.rb +1 -1
  8. data/lib/extensions/rhoxml/rexml/text.rb +117 -0
  9. data/lib/framework/rho/render.rb +19 -11
  10. data/lib/framework/rho/rho.rb +17 -10
  11. data/lib/framework/rho/rhobluetooth.rb +103 -0
  12. data/lib/framework/rho/rhocontroller.rb +2 -0
  13. data/lib/framework/rho/rhoevent.rb +43 -0
  14. data/lib/framework/rho/rhoevent_bb.rb +80 -0
  15. data/lib/framework/rho/rhoevent_c.rb +47 -0
  16. data/lib/framework/rhodes.rb +2 -2
  17. data/lib/framework/rhom/rhom_db_adapter.rb +2 -1
  18. data/lib/framework/rhom/rhom_model.rb +9 -3
  19. data/lib/framework/rhom/rhom_object_factory.rb +46 -22
  20. data/lib/framework/rhom/rhom_source.rb +12 -10
  21. data/lib/framework/version.rb +2 -2
  22. data/lib/rhodes.rb +2 -2
  23. data/platform/android/Rhodes/AndroidManifest.xml +23 -2
  24. data/platform/android/Rhodes/gen/com/rhomobile/rhodes/R.java +54 -38
  25. data/platform/android/Rhodes/jni/include/rhodes.h +3 -0
  26. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +2 -2
  27. data/platform/android/Rhodes/jni/include/rhodes/details/rhojava.inc +4 -0
  28. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +16 -0
  29. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_bluetooth_RhoBluetoothManager.h +21 -0
  30. data/platform/android/Rhodes/jni/src/bluetooth.cpp +169 -0
  31. data/platform/android/Rhodes/jni/src/callbacks.cpp +10 -0
  32. data/platform/android/Rhodes/jni/src/event.cpp +429 -0
  33. data/platform/android/Rhodes/jni/src/fileapi.cpp +51 -1
  34. data/platform/android/Rhodes/jni/src/rhodes.cpp +16 -0
  35. data/platform/android/Rhodes/jni/src/sslimpl.cpp +3 -0
  36. data/platform/android/Rhodes/res/layout/bt_device_list.xml +42 -0
  37. data/platform/android/Rhodes/res/layout/bt_device_name.xml +7 -0
  38. data/platform/android/Rhodes/res/values/strings.xml +8 -0
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java +14 -0
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +2 -0
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Push.java +7 -0
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +58 -0
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java +53 -0
  44. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +8 -0
  45. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +144 -3
  46. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/IRhoBluetoothManager.java +66 -0
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java +201 -0
  48. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManager.java +139 -0
  49. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java +401 -0
  50. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerOld.java +136 -0
  51. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothSession.java +457 -0
  52. data/platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/UUIDHelper.java +71 -0
  53. data/platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java +12 -7
  54. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java +19 -0
  55. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +261 -0
  56. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +4 -2
  57. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java +2 -2
  58. data/platform/android/Rhodes/src/com/rhomobile/rhodes/uri/MailUriHandler.java +10 -2
  59. data/platform/android/build/RhodesSRC_build.files +33 -22
  60. data/platform/android/build/android.rake +198 -27
  61. data/platform/android/build/librhodes_build.files +3 -1
  62. data/platform/android/build/libruby_build.files +4 -1
  63. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBResult.java +2 -2
  64. data/platform/bb/Hsqldb/src/com/rho/db/HsqlDBRowResult.java +1 -1
  65. data/platform/bb/Hsqldb/src/org/hsqldb/Expression.java +7 -4
  66. data/platform/bb/Hsqldb/src/org/hsqldb/Like.java +3 -3
  67. data/platform/bb/Hsqldb/src/org/hsqldb/Table.java +3 -1
  68. data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +1 -1
  69. data/platform/bb/RubyVM/RubyVM.jdp +1 -0
  70. data/platform/bb/RubyVM/src/com/rho/RhoConf.java +108 -1
  71. data/platform/bb/RubyVM/src/com/rho/RhoLogConf.java +7 -1
  72. data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +7 -4
  73. data/platform/bb/RubyVM/src/com/rho/ThreadQueue.java +7 -1
  74. data/platform/bb/RubyVM/src/com/rho/net/AsyncHttp.java +1 -1
  75. data/platform/bb/RubyVM/src/com/rho/net/NetRequest.java +21 -23
  76. data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +19 -10
  77. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +8 -0
  78. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +3 -0
  79. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +14 -17
  80. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFile.java +7 -5
  81. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RhoSupport.java +2 -0
  82. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyRuntime.java +10 -1
  83. data/platform/bb/RubyVM/src/j2me/io/File.java +7 -6
  84. data/platform/bb/build/RubyVM_build.files +412 -412
  85. data/platform/bb/build/bb.rake +42 -18
  86. data/platform/bb/build/hsqldb_build.files +151 -151
  87. data/platform/bb/build/rhodes_build.files +44 -40
  88. data/platform/bb/rhodes/platform/5.0/com/rho/BrowserAdapter5.java +2 -0
  89. data/platform/bb/rhodes/platform/5.0/com/rho/RhodesApplicationPlatform.java +237 -0
  90. data/platform/bb/rhodes/platform/common/com/rho/RhodesApplicationPlatform.java +14 -0
  91. data/platform/bb/rhodes/rhodes.jdp +6 -1
  92. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +7 -1
  93. data/platform/bb/rhodes/src/com/rho/RhodesApplicationPlatform.java +14 -0
  94. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +62 -76
  95. data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +660 -0
  96. data/platform/bb/rhodes/src/{rhomobile → com/rho/rubyext}/RhoPhonebook.java +95 -38
  97. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +22 -1
  98. data/platform/bb/rhodes/src/rhomobile/PushListeningThread.java +26 -6
  99. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -7
  100. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothManager.java +528 -0
  101. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothPort.java +281 -0
  102. data/platform/bb/rhodes/src/rhomobile/bluetooth/BluetoothScreen.java +119 -0
  103. data/platform/bb/rhodes/src/rhomobile/camera/CameraFilesListener.java +2 -2
  104. data/platform/iphone/Classes/AppManager/AppManager.m +70 -7
  105. data/platform/iphone/Classes/Bluetooth/Bluetooth.h +72 -0
  106. data/platform/iphone/Classes/Bluetooth/Bluetooth.m +414 -0
  107. data/platform/iphone/Classes/Event/Event.h +12 -0
  108. data/platform/iphone/Classes/Event/Event.m +300 -0
  109. data/platform/iphone/Classes/LogOptionsController.h +2 -1
  110. data/platform/iphone/Classes/LogOptionsController.m +1 -1
  111. data/platform/iphone/Classes/LogViewController.h +2 -1
  112. data/platform/iphone/Classes/MapView/MapViewController.h +2 -1
  113. data/platform/iphone/Classes/RhoViewController.h +16 -0
  114. data/platform/iphone/Classes/RhoViewController.m +20 -0
  115. data/platform/iphone/Classes/Rhodes.h +12 -0
  116. data/platform/iphone/Classes/Rhodes.m +34 -6
  117. data/platform/iphone/Classes/Signature/SignatureViewController.h +2 -2
  118. data/platform/iphone/Classes/Signature/SignatureViewController.m +0 -10
  119. data/platform/iphone/Classes/SimpleMainView.h +2 -2
  120. data/platform/iphone/Classes/SimpleMainView.m +5 -14
  121. data/platform/iphone/Classes/SplashViewController.h +2 -2
  122. data/platform/iphone/Classes/TabbedMainView.h +2 -2
  123. data/platform/iphone/Classes/TabbedMainView.m +5 -10
  124. data/platform/iphone/Info.plist +5 -5
  125. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +39 -0
  126. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +47 -4
  127. data/platform/osx/Rhodes Debugger/NoodleLineNumberView.m +3 -2
  128. data/platform/shared/common/AutoPointer.h +3 -0
  129. data/platform/shared/common/RhoConf.cpp +2 -1
  130. data/platform/shared/common/RhoThread.h +1 -1
  131. data/platform/shared/common/RhoTime.h +3 -3
  132. data/platform/shared/common/RhodesApp.cpp +75 -23
  133. data/platform/shared/common/RhodesApp.h +4 -0
  134. data/platform/shared/common/RhodesAppBase.h +2 -0
  135. data/platform/shared/common/ThreadQueue.cpp +23 -18
  136. data/platform/shared/common/ThreadQueue.h +2 -0
  137. data/platform/shared/db/res/db/syncdb.schema +39 -39
  138. data/platform/shared/logging/RhoLogConf.cpp +58 -3
  139. data/platform/shared/logging/RhoLogConf.h +3 -1
  140. data/platform/shared/net/CURLNetRequest.cpp +17 -6
  141. data/platform/shared/net/HttpServer.cpp +125 -25
  142. data/platform/shared/net/HttpServer.h +4 -3
  143. data/platform/shared/ruby/ext/bluetooth/bluetooth.i +56 -0
  144. data/platform/shared/ruby/ext/bluetooth/bluetooth_wrap.c +2563 -0
  145. data/platform/shared/ruby/ext/calendar/calendar.i +28 -0
  146. data/platform/shared/ruby/ext/calendar/calendar_wrap.c +2251 -0
  147. data/platform/shared/ruby/ext/calendar/event.h +41 -0
  148. data/platform/shared/ruby/ext/calendar/event.i +28 -0
  149. data/platform/shared/ruby/ext/calendar/event_wrap.c +2151 -0
  150. data/platform/shared/ruby/ext/rho/rhoruby.c +103 -3
  151. data/platform/shared/ruby/ext/rho/rhoruby.h +16 -2
  152. data/platform/shared/ruby/ext/rhoconf/rhoconf.i +12 -0
  153. data/platform/shared/ruby/ext/rhoconf/rhoconf_wrap.c +101 -0
  154. data/platform/shared/ruby/ext/system/system.i +14 -0
  155. data/platform/shared/ruby/ext/system/system_wrap.c +2568 -2208
  156. data/platform/shared/ruby/main.c +8 -0
  157. data/platform/shared/rubyext/GeoLocation.cpp +6 -3
  158. data/platform/shared/rubyext/System.cpp +14 -0
  159. data/platform/shared/sync/SyncEngine.cpp +9 -1
  160. data/platform/shared/sync/SyncNotify.cpp +16 -8
  161. data/platform/shared/sync/SyncNotify.h +1 -0
  162. data/platform/shared/sync/SyncThread.cpp +7 -12
  163. data/platform/shared/sync/SyncThread.h +5 -3
  164. data/platform/wm/build/wm.rake +7 -1
  165. data/platform/wm/rhodes/Alert.cpp +1 -1
  166. data/platform/wm/rhodes/MainWindow.cpp +28 -0
  167. data/platform/wm/rhodes/MainWindow.h +9 -0
  168. data/platform/wm/rhodes/OutlookApp.cpp +72 -0
  169. data/platform/wm/rhodes/OutlookApp.h +22 -0
  170. data/platform/wm/rhodes/Rhodes.cpp +8 -0
  171. data/platform/wm/rhodes/Rhodes.rc +31 -0
  172. data/platform/wm/rhodes/bluetooth/Bluetooth.cpp +1274 -0
  173. data/platform/wm/rhodes/bluetooth/Bluetooth.h +321 -0
  174. data/platform/wm/rhodes/phonebook/NativeAddressBook.cpp +37 -70
  175. data/platform/wm/rhodes/phonebook/NativeAddressBook.h +0 -4
  176. data/platform/wm/rhodes/resource.h +8 -1
  177. data/platform/wm/rhodes/rho/net/NetRequest.cpp +4 -0
  178. data/platform/wm/rhodes/rho/net/NetRequestImpl.cpp +6 -4
  179. data/platform/wm/rhodes/rho/rubyext/calendar.cpp +487 -0
  180. data/platform/wm/rhodes/rhodes.vcproj +28 -11
  181. data/platform/wm/rhodes/stdafx.h +1 -0
  182. data/platform/wm/rubylib/rubylib.vcproj +32 -0
  183. data/rakefile.rb +8 -1
  184. data/res/generators/templates/application/Rakefile +1 -1
  185. data/res/generators/templates/application/app/layout.erb +4 -1
  186. data/res/generators/templates/application/build.yml +0 -1
  187. data/res/generators/templates/application/public/css/iphone.css +2 -2
  188. data/res/generators/templates/application/public/jqtouch/jqtouch-iphone.css +9 -0
  189. data/res/generators/templates/application/public/jqtouch/jqtouch.css +1 -5
  190. data/res/generators/templates/application/public/jqtouch/jqtouch.js +3 -2
  191. data/rhodes.gemspec +1 -1
  192. data/spec/perfomance_spec/app/Benchmark/benchmark.rb +4 -0
  193. data/spec/perfomance_spec/app/Benchmark/bulk_results.erb +13 -0
  194. data/spec/perfomance_spec/app/Benchmark/controller.rb +178 -0
  195. data/spec/perfomance_spec/app/Benchmark/create_results.erb +13 -0
  196. data/spec/perfomance_spec/app/Benchmark/customers.erb +35 -0
  197. data/spec/perfomance_spec/app/Benchmark/index.erb +9 -0
  198. data/spec/perfomance_spec/app/Benchmark/products.erb +25 -0
  199. data/spec/perfomance_spec/app/Benchmark/search_results.erb +13 -0
  200. data/spec/perfomance_spec/app/Customer/customer.rb +6 -0
  201. data/spec/perfomance_spec/app/Perftest/index.erb +5 -0
  202. data/spec/perfomance_spec/app/Product/index.erb +25 -0
  203. data/spec/perfomance_spec/app/Product/product.rb +6 -0
  204. data/spec/perfomance_spec/app/helpers/application_helper.rb +126 -0
  205. data/spec/perfomance_spec/app/helpers/browser_helper.rb +18 -0
  206. data/spec/perfomance_spec/rhoconfig.txt +1 -1
  207. data/spec/phone_spec/app/Account_s/account_s.rb +5 -2
  208. data/spec/phone_spec/app/Case/case.rb +1 -0
  209. data/spec/phone_spec/app/Case_s/case_s.rb +2 -0
  210. data/spec/phone_spec/app/Data/perftest.json +35 -0
  211. data/spec/phone_spec/app/Data/testCDATA.xml +11 -0
  212. data/spec/phone_spec/app/Product/product.rb +1 -1
  213. data/spec/phone_spec/app/{Spec → spec}/asynchttp_spec.rb +66 -17
  214. data/spec/phone_spec/app/{Spec → spec}/barcode_spec.rb +0 -0
  215. data/spec/phone_spec/app/{Spec → spec}/blobsync_spec.rb +0 -0
  216. data/spec/phone_spec/app/{Spec → spec}/bsearch_spec.rb +0 -0
  217. data/spec/phone_spec/app/{Spec → spec}/bulksync_spec.rb +0 -0
  218. data/spec/phone_spec/app/{Spec → spec}/contacts_spec.rb +0 -0
  219. data/spec/phone_spec/app/{Spec → spec}/crypt_spec.rb +0 -0
  220. data/spec/phone_spec/app/{Spec → spec}/date_spec.rb +0 -0
  221. data/spec/phone_spec/app/spec/events_spec.rb +199 -0
  222. data/spec/phone_spec/app/{Spec → spec}/fixtures/client_info.txt +0 -0
  223. data/spec/phone_spec/app/{Spec → spec}/fixtures/object_values.txt +0 -0
  224. data/spec/phone_spec/app/{Spec → spec}/json_spec.rb +11 -2
  225. data/spec/phone_spec/app/{Spec → spec}/mapview_spec.rb +0 -0
  226. data/spec/phone_spec/app/{Spec → spec}/nativebar_spec.rb +0 -0
  227. data/spec/phone_spec/app/{Spec → spec}/navbar_spec.rb +0 -0
  228. data/spec/phone_spec/app/{Spec → spec}/pagination/fixtures/object_values.txt +0 -0
  229. data/spec/phone_spec/app/{Spec → spec}/rho_controller_spec.rb +5 -0
  230. data/spec/phone_spec/app/{Spec → spec}/rho_spec.rb +48 -0
  231. data/spec/phone_spec/app/{Spec → spec}/rhofile_spec.rb +9 -6
  232. data/spec/phone_spec/app/{Spec → spec}/rhom_object_spec.rb +188 -9
  233. data/spec/phone_spec/app/{Spec → spec}/syncengine_spec.rb +0 -0
  234. data/spec/phone_spec/app/{Spec → spec}/xml_spec.rb +15 -0
  235. data/spec/phone_spec/app/{Spec → spec}/xruby_spec.rb +0 -0
  236. data/spec/phone_spec/app/spec_runner.rb +4 -1
  237. data/spec/phone_spec/build.yml +2 -1
  238. metadata +95 -31
  239. data/platform/bb/rhodes/platform/5.0/com/rho/RhoMainScreen.java +0 -36
  240. data/platform/bb/rhodes/platform/6.0/com/rho/BrowserAdapter5.java +0 -155
  241. data/platform/bb/rhodes/platform/6.0/com/rho/RhoMainScreen.java +0 -36
@@ -20,6 +20,8 @@
20
20
  */
21
21
  package com.rhomobile.rhodes.uri;
22
22
 
23
+ import java.util.Map;
24
+
23
25
  import com.rhomobile.rhodes.Logger;
24
26
 
25
27
  import android.content.Context;
@@ -38,8 +40,7 @@ public class MailUriHandler implements UriHandler {
38
40
  }
39
41
 
40
42
  public boolean handle(String url) {
41
- Uri uri = Uri.parse(url);
42
- if (!uri.getScheme().equals("mailto"))
43
+ if (!MailTo.isMailTo(url))
43
44
  return false;
44
45
 
45
46
  Logger.D(TAG, "This is 'mailto' uri, handle it");
@@ -52,12 +53,19 @@ public class MailUriHandler implements UriHandler {
52
53
  String s = muri.getTo();
53
54
  if (s != null) intent.putExtra(Intent.EXTRA_EMAIL, new String[]{s});
54
55
 
56
+ s = muri.getCc();
57
+ if (s != null) intent.putExtra(Intent.EXTRA_CC, new String[]{s});
58
+
55
59
  s = muri.getSubject();
56
60
  if (s != null) intent.putExtra(Intent.EXTRA_SUBJECT, s);
57
61
 
58
62
  s = muri.getBody();
59
63
  if (s != null) intent.putExtra(Intent.EXTRA_TEXT, s);
60
64
 
65
+ Map<String,String> headers = muri.getHeaders();
66
+ s = headers.get("bcc");
67
+ if (s != null) intent.putExtra(Intent.EXTRA_BCC, new String[]{s});
68
+
61
69
  ctx.startActivity(Intent.createChooser(intent, "Send e-mail..."));
62
70
  return true;
63
71
  }
@@ -1,50 +1,59 @@
1
- platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java
2
- platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java
3
- platform/android/Rhodes/src/com/rhomobile/rhodes/HttpLog.java
4
- platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
5
- platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
6
- platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java
7
- platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkConnectivityListener.java
8
- platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkStateTracker.java
9
- platform/android/Rhodes/src/com/rhomobile/rhodes/RhoActivity.java
10
- platform/android/Rhodes/src/com/rhomobile/rhodes/RhoConf.java
11
- platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
12
- platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java
13
- platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
14
- platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java
15
- platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
16
- platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
17
- platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java
18
- platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java
19
1
  platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java
2
+ platform/android/Rhodes/src/com/rhomobile/rhodes/AndroidR.java
3
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/IRhoBluetoothManager.java
4
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothDeviceListActivity.java
5
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManager.java
6
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerNew.java
7
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothManagerOld.java
8
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/RhoBluetoothSession.java
9
+ platform/android/Rhodes/src/com/rhomobile/rhodes/bluetooth/UUIDHelper.java
20
10
  platform/android/Rhodes/src/com/rhomobile/rhodes/camera/Camera.java
21
11
  platform/android/Rhodes/src/com/rhomobile/rhodes/camera/FileList.java
22
- platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java
23
12
  platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCaptureCallback.java
13
+ platform/android/Rhodes/src/com/rhomobile/rhodes/camera/ImageCapture.java
24
14
  platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePicker.java
25
15
  platform/android/Rhodes/src/com/rhomobile/rhodes/datetime/DateTimePickerScreen.java
16
+ platform/android/Rhodes/src/com/rhomobile/rhodes/event/Event.java
17
+ platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java
26
18
  platform/android/Rhodes/src/com/rhomobile/rhodes/file/RhoFileApi.java
27
- platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java
28
19
  platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java
20
+ platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java
21
+ platform/android/Rhodes/src/com/rhomobile/rhodes/HttpLog.java
22
+ platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
29
23
  platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/MainView.java
30
24
  platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java
31
25
  platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/TabbedMainView.java
32
26
  platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/Annotation.java
33
27
  platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/AnnotationsOverlay.java
34
28
  platform/android/Rhodes/src/com/rhomobile/rhodes/mapview/MapView.java
35
- platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java
29
+ platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
30
+ platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java
31
+ platform/android/Rhodes/src/com/rhomobile/rhodes/NavBar.java
32
+ platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkConnectivityListener.java
33
+ platform/android/Rhodes/src/com/rhomobile/rhodes/NetworkStateTracker.java
36
34
  platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessor.java
37
35
  platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java
38
36
  platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java
39
37
  platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactField.java
38
+ platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java
40
39
  platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java
40
+ platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java
41
+ platform/android/Rhodes/src/com/rhomobile/rhodes/PushService.java
42
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RhoActivity.java
43
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RhoConf.java
44
+ platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java
45
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java
46
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RhoLogConf.java
47
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RhoMenu.java
48
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RingtoneManager.java
41
49
  platform/android/Rhodes/src/com/rhomobile/rhodes/signature/ImageCapture.java
42
50
  platform/android/Rhodes/src/com/rhomobile/rhodes/signature/Signature.java
43
51
  platform/android/Rhodes/src/com/rhomobile/rhodes/signature/SignatureView.java
44
52
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSockAddr.java
45
- platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocket.java
46
53
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocketImpl.java
54
+ platform/android/Rhodes/src/com/rhomobile/rhodes/socket/RhoSocket.java
47
55
  platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java
56
+ platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java
48
57
  platform/android/Rhodes/src/com/rhomobile/rhodes/ui/AboutDialog.java
49
58
  platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogOptionsDialog.java
50
59
  platform/android/Rhodes/src/com/rhomobile/rhodes/ui/LogViewDialog.java
@@ -54,8 +63,10 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/uri/TelUriHandler.java
54
63
  platform/android/Rhodes/src/com/rhomobile/rhodes/uri/UriHandler.java
55
64
  platform/android/Rhodes/src/com/rhomobile/rhodes/uri/VideoUriHandler.java
56
65
  platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java
66
+ platform/android/Rhodes/src/com/rhomobile/rhodes/Utils.java
57
67
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java
58
68
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientOld.java
69
+ platform/android/Rhodes/src/com/rhomobile/rhodes/WebView.java
59
70
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettings.java
60
71
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java
61
72
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsOld.java
@@ -20,6 +20,8 @@ def get_api_level(version)
20
20
  ANDROID_MARKET_VERSION_TO_API_LEVEL[version]
21
21
  end
22
22
 
23
+ JAVA_PACKAGE_NAME = 'com.rhomobile.rhodes'
24
+
23
25
  # Here is place were android platform should be specified.
24
26
  # For complete list of android API levels and its mapping to
25
27
  # market names (such as "Android-1.5" etc) see output of
@@ -34,9 +36,55 @@ ANDROID_PERMISSIONS = {
34
36
  'phone' => ['CALL_PHONE', 'READ_PHONE_STATE'],
35
37
  'pim' => ['READ_CONTACTS', 'WRITE_CONTACTS', 'GET_ACCOUNTS'],
36
38
  'record_audio' => 'RECORD_AUDIO',
37
- 'vibrate' => 'VIBRATE'
39
+ 'vibrate' => 'VIBRATE',
40
+ 'bluetooth' => ['BLUETOOTH_ADMIN', 'BLUETOOTH'],
41
+ 'calendar' => ['READ_CALENDAR', 'WRITE_CALENDAR'],
42
+ 'push' => proc do |manifest| add_push(manifest) end
38
43
  }
39
44
 
45
+ def add_push(manifest)
46
+ element = REXML::Element.new('permission')
47
+ element.add_attribute('android:name', "#{$app_package_name}.permission.C2D_MESSAGE")
48
+ element.add_attribute('android:protectionLevel', 'signature')
49
+ manifest.add element
50
+
51
+ element = REXML::Element.new('uses-permission')
52
+ element.add_attribute('android:name', "#{$app_package_name}.permission.C2D_MESSAGE")
53
+ manifest.add element
54
+
55
+ element = REXML::Element.new('uses-permission')
56
+ element.add_attribute('android:name', "com.google.android.c2dm.permission.RECEIVE")
57
+ manifest.add element
58
+
59
+ receiver = REXML::Element.new('receiver')
60
+ receiver.add_attribute('android:name', "#{JAVA_PACKAGE_NAME}.PushReceiver")
61
+ receiver.add_attribute('android:permission', "com.google.android.c2dm.permission.SEND")
62
+
63
+ action = REXML::Element.new('action')
64
+ action.add_attribute('android:name', "com.google.android.c2dm.intent.RECEIVE")
65
+ category = REXML::Element.new('category')
66
+ category.add_attribute('android:name', $app_package_name)
67
+
68
+ ie = REXML::Element.new('intent-filter')
69
+ ie.add_element(action)
70
+ ie.add_element(category)
71
+ receiver.add_element(ie)
72
+
73
+ action = REXML::Element.new('action')
74
+ action.add_attribute('android:name', "com.google.android.c2dm.intent.REGISTRATION")
75
+ category = REXML::Element.new('category')
76
+ category.add_attribute('android:name', $app_package_name)
77
+
78
+ ie = REXML::Element.new('intent-filter')
79
+ ie.add_element(action)
80
+ ie.add_element(category)
81
+ receiver.add_element(ie)
82
+
83
+ manifest.elements.each('application') do |app|
84
+ app.add receiver
85
+ end
86
+ end
87
+
40
88
  def set_app_name_android(newname)
41
89
  puts "set_app_name"
42
90
  $stdout.flush
@@ -80,10 +128,15 @@ def set_app_name_android(newname)
80
128
 
81
129
  doc.elements.delete "manifest/application/uses-library[@android:name='com.google.android.maps']" unless $use_geomapping
82
130
 
83
- caps = ['INTERNET', 'PERSISTENT_ACTIVITY']
131
+ caps_proc = []
132
+ caps = ['INTERNET', 'PERSISTENT_ACTIVITY', 'WAKE_LOCK']
84
133
  $app_config["capabilities"].each do |cap|
85
134
  cap = ANDROID_PERMISSIONS[cap]
86
135
  next if cap.nil?
136
+ if cap.is_a? Proc
137
+ caps_proc << cap
138
+ next
139
+ end
87
140
  cap = [cap] if cap.is_a? String
88
141
  cap = [] unless cap.is_a? Array
89
142
  caps += cap
@@ -97,6 +150,14 @@ def set_app_name_android(newname)
97
150
  element.add_attribute('android:minSdkVersion', ANDROID_API_LEVEL.to_s)
98
151
  manifest.add element
99
152
 
153
+ # Clear C2DM stuff
154
+ doc.elements.delete "manifest/application/receiver[@android:name='com.rhomobile.rhodes.PushReceiver']"
155
+ manifest.elements.each('permission') do |e|
156
+ name = e.attribute('name', 'android')
157
+ next if name.nil?
158
+ manifest.delete(e) if name.to_s =~ /\.C2D_MESSAGE$/
159
+ end
160
+
100
161
  manifest.elements.each('uses-permission') { |e| manifest.delete e }
101
162
  caps.sort.each do |cap|
102
163
  element = REXML::Element.new('uses-permission')
@@ -104,6 +165,10 @@ def set_app_name_android(newname)
104
165
  manifest.add element
105
166
  end
106
167
 
168
+ caps_proc.each do |p|
169
+ p.call manifest
170
+ end
171
+
107
172
  File.open($appmanifest, "w") { |f| doc.write f, 2 }
108
173
 
109
174
  buf = File.new($rho_android_r,"r").read.gsub(/^\s*import com\.rhomobile\..*\.R;\s*$/,"\nimport #{$app_package_name}.R;\n")
@@ -158,6 +223,16 @@ namespace "config" do
158
223
  exit 1
159
224
  end
160
225
 
226
+ errfmt = "WARNING!!! Path to Android %s contain spaces! It will not work because of the Google toolchain restrictions. Move it to another location and reconfigure rhodes."
227
+ if $androidsdkpath =~ /\s/
228
+ puts(errfmt % "SDK")
229
+ exit 1
230
+ end
231
+ if $androidndkpath =~ /\s/
232
+ puts(errfmt % "NDK")
233
+ exit 1
234
+ end
235
+
161
236
  $java = $config["env"]["paths"]["java"]
162
237
  $androidpath = Jake.get_absolute $config["build"]["androidpath"]
163
238
  $bindir = File.join($app_path, "bin")
@@ -187,6 +262,7 @@ namespace "config" do
187
262
  $app_rjava_dir = File.join $tmpdir
188
263
  $app_native_libs_java = File.join $tmpdir, "NativeLibraries.java"
189
264
  $app_capabilities_java = File.join $tmpdir, "Capabilities.java"
265
+ $app_push_java = File.join $tmpdir, "Push.java"
190
266
 
191
267
  if RUBY_PLATFORM =~ /(win|w)32$/
192
268
  $emulator = #"cmd /c " +
@@ -194,7 +270,6 @@ namespace "config" do
194
270
  $bat_ext = ".bat"
195
271
  $exe_ext = ".exe"
196
272
  $path_separator = ";"
197
- $rubypath = "res/build-tools/RhoRuby.exe"
198
273
 
199
274
  # Add PATH to cygwin1.dll
200
275
  ENV['CYGWIN'] = 'nodosfilewarning'
@@ -209,11 +284,6 @@ namespace "config" do
209
284
  $exe_ext = ""
210
285
  $path_separator = ":"
211
286
  # TODO: add ruby executable for Linux
212
- if RUBY_PLATFORM =~ /darwin/
213
- $rubypath = "res/build-tools/RubyMac"
214
- else
215
- $rubypath = "res/build-tools/rubylinux"
216
- end
217
287
  end
218
288
 
219
289
  puts "+++ Looking for platform..." if USE_TRACES
@@ -271,7 +341,7 @@ namespace "config" do
271
341
  $keystore = nil
272
342
  $keystore = $app_config["android"]["production"]["certificate"] if !$app_config["android"].nil? and !$app_config["android"]["production"].nil?
273
343
  $keystore = $config["android"]["production"]["certificate"] if $keystore.nil? and !$config["android"].nil? and !$config["android"]["production"].nil?
274
- $keystore = File.join(File.expand_path('~'), ".rhomobile", "keystore") if $keystore.nil?
344
+ $keystore = File.expand_path(File.join(ENV['HOME'], ".rhomobile", "keystore")) if $keystore.nil?
275
345
 
276
346
  $storepass = nil
277
347
  $storepass = $app_config["android"]["production"]["password"] if !$app_config["android"].nil? and !$app_config["android"]["production"].nil?
@@ -388,6 +458,11 @@ namespace "config" do
388
458
  end
389
459
  $app_config["capabilities"].map! { |cap| cap.is_a?(String) ? cap : nil }.delete_if { |cap| cap.nil? }
390
460
 
461
+ $push_sender = nil
462
+ $push_sender = $config["android"]["push"]["sender"] if !$config["android"].nil? and !$config["android"]["push"].nil?
463
+ $push_sender = $app_config["android"]["push"]["sender"] if !$app_config["android"].nil? and !$app_config["android"]["push"].nil?
464
+ $push_sender = "support@rhomobile.com" if $push_sender.nil?
465
+
391
466
  mkdir_p $bindir if not File.exists? $bindir
392
467
  mkdir_p $rhobindir if not File.exists? $rhobindir
393
468
  mkdir_p $targetdir if not File.exists? $targetdir
@@ -661,9 +736,9 @@ namespace "build" do
661
736
 
662
737
  gapi_already_enabled = false
663
738
  caps_already_enabled = {}
664
- ANDROID_PERMISSIONS.keys.each do |k|
665
- caps_already_enabled[k] = false
666
- end
739
+ #ANDROID_PERMISSIONS.keys.each do |k|
740
+ # caps_already_enabled[k] = false
741
+ #end
667
742
  if File.file? genconfig_h
668
743
  File.open(genconfig_h, 'r') do |f|
669
744
  while line = f.gets
@@ -671,8 +746,16 @@ namespace "build" do
671
746
  gapi_already_enabled = true
672
747
  else
673
748
  ANDROID_PERMISSIONS.keys.each do |k|
674
- re = /^\s*#\s*define\s+RHO_CAP_#{k.upcase}_ENABLED\s+true\s*$/
675
- caps_already_enabled[k] = true if line =~ re
749
+ if line =~ /^\s*#\s*define\s+RHO_CAP_#{k.upcase}_ENABLED\s+(.*)\s*$/
750
+ value = $1.strip
751
+ if value == 'true'
752
+ caps_already_enabled[k] = true
753
+ elsif value == 'false'
754
+ caps_already_enabled[k] = false
755
+ else
756
+ raise "Unknown value for the RHO_CAP_#{k.upcase}_ENABLED: #{value}"
757
+ end
758
+ end
676
759
  end
677
760
  end
678
761
  end
@@ -686,7 +769,7 @@ namespace "build" do
686
769
  caps_enabled = {}
687
770
  ANDROID_PERMISSIONS.keys.each do |k|
688
771
  caps_enabled[k] = $app_config["capabilities"].index(k) != nil
689
- regenerate = true if caps_enabled[k] != caps_already_enabled[k]
772
+ regenerate = true if caps_already_enabled[k].nil? or caps_enabled[k] != caps_already_enabled[k]
690
773
  end
691
774
 
692
775
  if regenerate
@@ -735,18 +818,28 @@ namespace "build" do
735
818
 
736
819
  # Generate Capabilities.java
737
820
  File.open($app_capabilities_java, "w") do |f|
738
- f.puts "package com.rhomobile.rhodes;"
821
+ f.puts "package #{JAVA_PACKAGE_NAME};"
739
822
  f.puts "public class Capabilities {"
740
823
  ANDROID_PERMISSIONS.keys.sort.each do |k|
741
824
  f.puts " public static boolean #{k.upcase}_ENABLED = true;"
742
825
  end
743
826
  f.puts "}"
744
827
  end
828
+
829
+ # Generate Push.java
830
+ puts "app_push_java: #{$app_push_java.inspect}"
831
+ File.open($app_push_java, "w") do |f|
832
+ f.puts "package #{JAVA_PACKAGE_NAME};"
833
+ f.puts "public class Push {"
834
+ f.puts " public static final String SENDER = \"#{$push_sender}\";"
835
+ f.puts "};"
836
+ end
837
+
745
838
  end
746
839
 
747
840
  task :gen_java_ext => "config:android" do
748
841
  File.open($app_native_libs_java, "w") do |f|
749
- f.puts "package com.rhomobile.rhodes;"
842
+ f.puts "package #{JAVA_PACKAGE_NAME};"
750
843
  f.puts "public class NativeLibraries {"
751
844
  f.puts " public static void load() {"
752
845
  f.puts " // Load native .so libraries"
@@ -864,11 +957,12 @@ namespace "build" do
864
957
  lines << $app_android_r
865
958
  lines << $app_native_libs_java
866
959
  lines << $app_capabilities_java
960
+ lines << $app_push_java
867
961
  if File.exists? File.join($extensionsdir, "ext_build.files")
868
962
  puts 'ext_build.files found ! Addditional files for compilation :'
869
963
  File.open(File.join($extensionsdir, "ext_build.files")) do |f|
870
964
  while line = f.gets
871
- puts 'java file : ' + line
965
+ puts 'java file : ' + line
872
966
  lines << line
873
967
  end
874
968
  end
@@ -906,6 +1000,13 @@ namespace "build" do
906
1000
  end
907
1001
 
908
1002
  files = []
1003
+ Dir.glob(File.join($extensionsdir, "*.jar")).each do |f|
1004
+ puts Jake.run($jarbin, ["xf", f], File.join($tmpdir, "Rhodes"))
1005
+ unless $?.success?
1006
+ puts "Error running jar (xf)"
1007
+ exit 1
1008
+ end
1009
+ end
909
1010
  Dir.glob(File.join($tmpdir, "Rhodes", "*")).each do |f|
910
1011
  relpath = Pathname.new(f).relative_path_from(Pathname.new(File.join($tmpdir, "Rhodes"))).to_s
911
1012
  files << relpath
@@ -1159,7 +1260,7 @@ def run_application (target_flag)
1159
1260
  args << "-a"
1160
1261
  args << "android.intent.action.MAIN"
1161
1262
  args << "-n"
1162
- args << $app_package_name + "/com.rhomobile.rhodes.Rhodes"
1263
+ args << $app_package_name + "/#{JAVA_PACKAGE_NAME}.Rhodes"
1163
1264
  Jake.run($adb, args)
1164
1265
  end
1165
1266
 
@@ -1181,6 +1282,21 @@ namespace "run" do
1181
1282
  log_name = $app_path + '/RhoLog.txt'
1182
1283
  File.delete(log_name) if File.exist?(log_name)
1183
1284
 
1285
+ # Failsafe to prevent eternal hangs
1286
+ Thread.new {
1287
+ sleep 1000
1288
+
1289
+ if RUBY_PLATFORM =~ /darwin/
1290
+ # OS X:
1291
+ `killall -9 adb`
1292
+ `killall -9 emulator`
1293
+ else
1294
+ # Windows
1295
+ `taskkill /F /IM adb.exe`
1296
+ `taskkill /F /IM emulator.exe`
1297
+ end
1298
+ }
1299
+
1184
1300
  load_app_and_run
1185
1301
 
1186
1302
  Jake.before_run_spec
@@ -1212,19 +1328,31 @@ namespace "run" do
1212
1328
  sleep(5) unless end_spec
1213
1329
  end
1214
1330
 
1215
- #TODO: stop app
1216
1331
  Jake.process_spec_results(start)
1217
1332
 
1333
+ # stop app
1334
+ if RUBY_PLATFORM =~ /darwin/
1335
+ # OS X:
1336
+ `killall -9 adb`
1337
+ `killall -9 emulator`
1338
+ else
1339
+ # Windows
1340
+ `taskkill /F /IM adb.exe`
1341
+ `taskkill /F /IM emulator.exe`
1342
+ end
1343
+
1218
1344
  $stdout.flush
1219
1345
 
1220
1346
  end
1221
1347
 
1222
1348
  task :phone_spec do
1223
- Jake.run_spec_app('android','phone_spec')
1349
+ exit 1 if Jake.run_spec_app('android','phone_spec')
1350
+ exit 0
1224
1351
  end
1225
1352
 
1226
1353
  task :framework_spec do
1227
- Jake.run_spec_app('android','framework_spec')
1354
+ exit 1 if Jake.run_spec_app('android','framework_spec')
1355
+ exit 0
1228
1356
  end
1229
1357
 
1230
1358
  task :emulator => "device:android:debug" do
@@ -1234,7 +1362,13 @@ namespace "run" do
1234
1362
 
1235
1363
  def run_emulator
1236
1364
  apkfile = Jake.get_absolute $targetdir + "/" + $appname + "-debug.apk"
1237
- puts `"#{$adb}" start-server`
1365
+
1366
+ Jake.run($adb, ['kill-server'])
1367
+ #Jake.run($adb, ['start-server'])
1368
+ #adb_start_server = $adb + ' start-server'
1369
+ Thread.new { Jake.run($adb, ['start-server']) }
1370
+ puts 'Sleep for 5 sec. waiting for "adb start-server"'
1371
+ sleep 5
1238
1372
 
1239
1373
  createavd = "\"#{$androidbin}\" create avd --name #{$avdname} --target #{$avdtarget} --sdcard 32M --skin HVGA"
1240
1374
  system(createavd) unless File.directory?( File.join(ENV['HOME'], ".android", "avd", "#{$avdname}.avd" ) )
@@ -1249,12 +1383,49 @@ namespace "run" do
1249
1383
  end
1250
1384
 
1251
1385
  running = is_emulator_running
1252
- Thread.new { system("\"#{$emulator}\" -avd #{$avdname}") } unless running
1253
1386
 
1254
- puts "Waiting for emulator to get started" unless running
1255
- puts "Emulator is up and running" if running
1387
+ if !running
1388
+ # Start the emulator, check on it every 5 seconds until it's running
1389
+ Thread.new { system("\"#{$emulator}\" -avd #{$avdname}") }
1390
+ puts "Waiting up to 180 seconds for emulator..."
1391
+ startedWaiting = Time.now
1392
+ adbRestarts = 1
1393
+ while (Time.now - startedWaiting < 180 )
1394
+ sleep 5
1395
+ now = Time.now
1396
+ emulatorState = ""
1397
+ Jake.run2($adb,["-e", "get-state"],{:system => false, :hideerrors => :false}) do |line|
1398
+ puts "RET: " + line
1399
+ emulatorState += line
1400
+ end
1401
+ if emulatorState =~ /unknown/
1402
+ printf("%.2fs: ",(now - startedWaiting))
1403
+ if (now - startedWaiting) > (60 * adbRestarts)
1404
+ # Restart the adb server every 60 seconds to prevent eternal waiting
1405
+ puts "Appears hung, restarting adb server"
1406
+ Jake.run($adb, ['kill-server'])
1407
+ Thread.new { Jake.run($adb, ['start-server']) }
1408
+ adbRestarts += 1
1409
+ else
1410
+ puts "Still waiting..."
1411
+ end
1412
+ else
1413
+ puts "Success"
1414
+ puts "Device is ready after " + (Time.now - startedWaiting).to_s + " seconds"
1415
+ break
1416
+ end
1417
+ end
1418
+
1419
+ if !is_emulator_running
1420
+ puts "Emulator still isn't up and running, giving up"
1421
+ exit 1
1422
+ end
1423
+
1424
+ else
1425
+ puts "Emulator is up and running"
1426
+ end
1427
+
1256
1428
  $stdout.flush
1257
- puts `"#{$adb}" -e wait-for-device`
1258
1429
  end
1259
1430
 
1260
1431
  def load_app_and_run