rhodes 2.1.0 → 2.2.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,5 +1,7 @@
1
- package rhomobile;
1
+ package com.rho.rubyext;
2
2
 
3
+ import com.rho.RhoEmptyLogger;
4
+ import com.rho.RhoLogger;
3
5
  import com.xruby.runtime.builtin.RubyArray;
4
6
  import com.xruby.runtime.builtin.RubyString;
5
7
  import com.xruby.runtime.builtin.RubyHash;
@@ -10,6 +12,8 @@ import javax.microedition.pim.*;
10
12
 
11
13
  //@RubyLevelClass(name="Phonebook")
12
14
  public class RhoPhonebook extends RubyBasic {
15
+ private static final RhoLogger LOG = RhoLogger.RHO_STRIP_LOG ? new RhoEmptyLogger() :
16
+ new RhoLogger("Phonebook");
13
17
 
14
18
  private ContactList m_contactList;
15
19
 
@@ -339,13 +343,6 @@ public class RhoPhonebook extends RubyBasic {
339
343
  return RubyConstant.QTRUE;
340
344
  }
341
345
 
342
- public static RubyValue getfirstPhonebookRecord(RubyValue arg0) {
343
- return RubyConstant.QNIL;
344
- }
345
- public static RubyValue getnextPhonebookRecord(RubyValue arg0) {
346
- return RubyConstant.QNIL;
347
- }
348
-
349
346
  public static void initMethods( RubyClass klass){
350
347
  klass.defineAllocMethod(new RubyNoArgMethod(){
351
348
  protected RubyValue run(RubyValue receiver, RubyBlock block ) {
@@ -353,63 +350,123 @@ public class RhoPhonebook extends RubyBasic {
353
350
  });
354
351
 
355
352
  klass.getSingletonClass().defineMethod("openPhonebook", new RubyNoArgMethod() {
356
- protected RubyValue run(RubyValue receiver, RubyBlock block) {
357
- return RhoPhonebook.openPhonebook();
353
+ protected RubyValue run(RubyValue receiver, RubyBlock block)
354
+ {
355
+ try {
356
+ return RhoPhonebook.openPhonebook();
357
+ } catch(Exception e) {
358
+ LOG.ERROR("openPhonebook failed", e);
359
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
360
+ }
361
+
358
362
  }
359
363
  });
360
364
  klass.getSingletonClass().defineMethod("closePhonebook", new RubyOneArgMethod() {
361
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
362
- return RhoPhonebook.closePhonebook(arg0);
365
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block)
366
+ {
367
+ try {
368
+ return RhoPhonebook.closePhonebook(arg0);
369
+ } catch(Exception e) {
370
+ LOG.ERROR("closePhonebook failed", e);
371
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
372
+ }
373
+
363
374
  }
364
375
  });
365
376
  klass.getSingletonClass().defineMethod("getallPhonebookRecords", new RubyOneArgMethod() {
366
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
367
- return RhoPhonebook.getallPhonebookRecords(arg0);
377
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block)
378
+ {
379
+ try {
380
+ return RhoPhonebook.getallPhonebookRecords(arg0);
381
+ } catch(Exception e) {
382
+ LOG.ERROR("getallPhonebookRecords failed", e);
383
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
384
+ }
385
+
368
386
  }
369
387
  });
370
388
  klass.getSingletonClass().defineMethod("openPhonebookRecord", new RubyTwoArgMethod() {
371
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block) {
372
- return RhoPhonebook.openPhonebookRecord(arg0, arg1);
389
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block)
390
+ {
391
+ try {
392
+ return RhoPhonebook.openPhonebookRecord(arg0, arg1);
393
+ } catch(Exception e) {
394
+ LOG.ERROR("openPhonebookRecord failed", e);
395
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
396
+ }
397
+
373
398
  }
374
399
  });
375
400
  klass.getSingletonClass().defineMethod("getPhonebookRecord", new RubyTwoArgMethod() {
376
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block) {
377
- return RhoPhonebook.getPhonebookRecord(arg0, arg1);
378
- }
379
- });
380
- klass.getSingletonClass().defineMethod("getfirstPhonebookRecord", new RubyOneArgMethod() {
381
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
382
- return RhoPhonebook.getfirstPhonebookRecord(arg0);
383
- }
384
- });
385
- klass.getSingletonClass().defineMethod("getnextPhonebookRecord", new RubyOneArgMethod() {
386
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
387
- return RhoPhonebook.getnextPhonebookRecord(arg0);
401
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block)
402
+ {
403
+ try {
404
+ return RhoPhonebook.getPhonebookRecord(arg0, arg1);
405
+ } catch(Exception e) {
406
+ LOG.ERROR("getPhonebookRecord failed", e);
407
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
408
+ }
409
+
388
410
  }
389
411
  });
390
412
  klass.getSingletonClass().defineMethod("createRecord", new RubyOneArgMethod() {
391
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
392
- return RhoPhonebook.createRecord(arg0);
413
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block)
414
+ {
415
+ try {
416
+ return RhoPhonebook.createRecord(arg0);
417
+ } catch(Exception e) {
418
+ LOG.ERROR("createRecord failed", e);
419
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
420
+ }
421
+
393
422
  }
394
423
  });
395
424
  klass.getSingletonClass().defineMethod("setRecordValue", new RubyVarArgMethod() {
396
- protected RubyValue run(RubyValue receiver, RubyArray ar, RubyBlock block) {
397
- return RhoPhonebook.setRecordValue(ar);
425
+ protected RubyValue run(RubyValue receiver, RubyArray ar, RubyBlock block)
426
+ {
427
+ try {
428
+ return RhoPhonebook.setRecordValue(ar);
429
+ } catch(Exception e) {
430
+ LOG.ERROR("setRecordValue failed", e);
431
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
432
+ }
433
+
398
434
  }
399
435
  });
400
436
  klass.getSingletonClass().defineMethod("addRecord", new RubyTwoArgMethod() {
401
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block) {
402
- return RhoPhonebook.addRecord(arg0, arg1);
437
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block)
438
+ {
439
+ try {
440
+ return RhoPhonebook.addRecord(arg0, arg1);
441
+ } catch(Exception e) {
442
+ LOG.ERROR("addRecord failed", e);
443
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
444
+ }
445
+
403
446
  }
404
447
  });
405
448
  klass.getSingletonClass().defineMethod("saveRecord", new RubyTwoArgMethod() {
406
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block) {
407
- return RhoPhonebook.saveRecord(arg0, arg1);
449
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block)
450
+ {
451
+ try {
452
+ return RhoPhonebook.saveRecord(arg0, arg1);
453
+ } catch(Exception e) {
454
+ LOG.ERROR("saveRecord failed", e);
455
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
456
+ }
457
+
408
458
  }
409
459
  });
410
460
  klass.getSingletonClass().defineMethod("deleteRecord", new RubyTwoArgMethod() {
411
- protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block) {
412
- return RhoPhonebook.deleteRecord(arg0, arg1);
461
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyValue arg1, RubyBlock block)
462
+ {
463
+ try {
464
+ return RhoPhonebook.deleteRecord(arg0, arg1);
465
+ } catch(Exception e) {
466
+ LOG.ERROR("deleteRecord failed", e);
467
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
468
+ }
469
+
413
470
  }
414
471
  });
415
472
 
@@ -13,6 +13,7 @@ import com.xruby.runtime.builtin.ObjectFactory;
13
13
  import com.xruby.runtime.lang.*;
14
14
  import com.rho.RhoRubyHelper;
15
15
  import net.rim.device.api.system.DeviceInfo;
16
+ import net.rim.device.api.system.Backlight;
16
17
 
17
18
  public class System {
18
19
 
@@ -109,12 +110,32 @@ public class System {
109
110
  });
110
111
  klass.getSingletonClass().defineMethod("exit", new RubyNoArgMethod() {
111
112
  protected RubyValue run(RubyValue receiver, RubyBlock block) {
112
- synchronized(RhodesApplication.getInstance().getEventLock()) {
113
+ //synchronized(RhodesApplication.getInstance().getEventLock()) {
113
114
  RhodesApplication.getInstance().close();
114
115
  return RubyConstant.QNIL;
116
+ //}
117
+ }
118
+ });
119
+
120
+ klass.getSingletonClass().defineMethod( "set_sleeping", new RubyOneArgMethod(){
121
+ protected RubyValue run(RubyValue receiver, RubyValue arg1, RubyBlock block )
122
+ {
123
+ try {
124
+ RubyValue ret = !Backlight.isEnabled() ? RubyConstant.QTRUE : RubyConstant.QFALSE;
125
+
126
+ if ( arg1 != RubyConstant.QTRUE )
127
+ Backlight.enable(true, 255);
128
+ else
129
+ Backlight.enable(false, Backlight.getTimeoutDefault());
130
+
131
+ return ret;
132
+ } catch(Exception e) {
133
+ LOG.ERROR("set_sleeping failed", e);
134
+ throw (e instanceof RubyException ? (RubyException)e : new RubyException(e.getMessage()));
115
135
  }
116
136
  }
117
137
  });
138
+
118
139
  }
119
140
 
120
141
  //@RubyLevelMethod(name="get_property", module=true)
@@ -46,6 +46,26 @@ public class PushListeningThread extends Thread {
46
46
  }
47
47
  }
48
48
 
49
+ public static boolean isMDSPushEnabled()
50
+ {
51
+ if ( !RhoConf.getInstance().isExist("push_options") )
52
+ return true;
53
+
54
+ String strOptions = RhoConf.getInstance().getString("push_options");
55
+
56
+ return strOptions.indexOf("mds") >= 0;
57
+ }
58
+
59
+ public static boolean isPushServiceEnabled()
60
+ {
61
+ if ( !RhoConf.getInstance().isExist("push_options") )
62
+ return true;
63
+
64
+ String strOptions = RhoConf.getInstance().getString("push_options");
65
+
66
+ return strOptions.indexOf("push_service") >= 0;
67
+ }
68
+
49
69
  public void run()
50
70
  {
51
71
 
@@ -179,7 +199,7 @@ public class PushListeningThread extends Thread {
179
199
  }
180
200
  }
181
201
 
182
- private String[] split(String original, String separator) {
202
+ private static String[] split(String original, String separator) {
183
203
  Vector nodes = new Vector();
184
204
  // Parse nodes into vector
185
205
  int index = original.indexOf(separator);
@@ -202,7 +222,7 @@ public class PushListeningThread extends Thread {
202
222
  return result;
203
223
  }
204
224
 
205
- private String[] splitOnce(String original, String separator) {
225
+ private static String[] splitOnce(String original, String separator) {
206
226
  String[] result;
207
227
  int index = original.indexOf(separator);
208
228
  if (index>=0) {
@@ -216,19 +236,19 @@ public class PushListeningThread extends Thread {
216
236
  return result;
217
237
  }
218
238
 
219
- private void showPopup(String message) {
239
+ private static void showPopup(String message) {
220
240
  com.rho.rubyext.Alert.showPopup(message);
221
241
  }
222
242
 
223
- private void vibrate(String duration) {
243
+ private static void vibrate(String duration) {
224
244
  com.rho.rubyext.Alert.vibrate(duration);
225
245
  }
226
246
 
227
- private void play_file(String file_name, String media_type) {
247
+ private static void play_file(String file_name, String media_type) {
228
248
  com.rho.rubyext.Alert.play_file(file_name, media_type);
229
249
  }
230
250
 
231
- private void processPushMessage(final byte[] data, int nLen)
251
+ public static void processPushMessage(final byte[] data, int nLen)
232
252
  {
233
253
  /* Application.getApplication().invokeLater(new Runnable()
234
254
  {
@@ -52,7 +52,7 @@ import com.xruby.runtime.lang.RubyProgram;
52
52
  /**
53
53
  *
54
54
  */
55
- final public class RhodesApplication extends UiApplication implements SystemListener, ISyncStatusListener//, FileSystemListener
55
+ final public class RhodesApplication extends RhodesApplicationPlatform implements SystemListener, ISyncStatusListener
56
56
  {
57
57
  // Menu Labels
58
58
  public static final String LABEL_HOME = "Home";
@@ -69,6 +69,7 @@ final public class RhodesApplication extends UiApplication implements SystemList
69
69
  private static final RhoLogger LOG = RhoLogger.RHO_STRIP_LOG ? new RhoEmptyLogger() :
70
70
  new RhoLogger("RhodesApplication");
71
71
 
72
+
72
73
  class CKeyListener implements KeyListener{
73
74
 
74
75
  public boolean keyChar(char key, int status, int time) {
@@ -402,6 +403,7 @@ final public class RhodesApplication extends UiApplication implements SystemList
402
403
  void doClose(){
403
404
  LOG.TRACE("Rhodes DO CLOSE ***--------------------------***");
404
405
 
406
+ onPlatformClose();
405
407
  if ( _pushListeningThread != null )
406
408
  _pushListeningThread.stop();
407
409
 
@@ -512,6 +514,8 @@ final public class RhodesApplication extends UiApplication implements SystemList
512
514
  navigateHome();
513
515
  }
514
516
 
517
+ onPlatformActivate();
518
+
515
519
  LOG.TRACE("Rhodes end activate ***--------------------------***");
516
520
  }
517
521
 
@@ -1001,10 +1005,11 @@ final public class RhodesApplication extends UiApplication implements SystemList
1001
1005
 
1002
1006
  try {
1003
1007
  RhoClassFactory.getNetworkAccess().configure();
1008
+
1004
1009
  } catch(IOException exc) {
1005
1010
  LOG.ERROR(exc.getMessage());
1006
1011
  }
1007
-
1012
+
1008
1013
  PrimaryResourceFetchThread.Create(this);
1009
1014
  LOG.INFO("RHODES STARTUP COMPLETED: ***----------------------------------*** " );
1010
1015
 
@@ -1154,8 +1159,14 @@ final public class RhodesApplication extends UiApplication implements SystemList
1154
1159
  navigateUrl(strStartPage);
1155
1160
  }
1156
1161
 
1157
- public void close() {
1158
- _mainScreen.close();
1162
+ public void close()
1163
+ {
1164
+ this.invokeLater(new Runnable() {
1165
+ public void run()
1166
+ {
1167
+ _mainScreen.close();
1168
+ }
1169
+ });
1159
1170
  }
1160
1171
 
1161
1172
  public void processConnection(HttpConnection connection, Object e)
@@ -1209,10 +1220,13 @@ final public class RhodesApplication extends UiApplication implements SystemList
1209
1220
  return;
1210
1221
  }
1211
1222
 
1212
- if (com.rho.Capabilities.ENABLE_PUSH)
1223
+ if ( com.rho.Capabilities.ENABLE_PUSH )
1213
1224
  {
1214
- _pushListeningThread = new PushListeningThread();
1215
- _pushListeningThread.start();
1225
+ if ( PushListeningThread.isMDSPushEnabled() )
1226
+ {
1227
+ _pushListeningThread = new PushListeningThread();
1228
+ _pushListeningThread.start();
1229
+ }
1216
1230
  }
1217
1231
 
1218
1232
  while( !m_bExit )
@@ -0,0 +1,528 @@
1
+ package rhomobile.bluetooth;
2
+
3
+ import rhomobile.RhodesApplication;
4
+
5
+ import net.rim.device.api.bluetooth.BluetoothSerialPort;
6
+ import net.rim.device.api.bluetooth.BluetoothSerialPortInfo;
7
+ import net.rim.device.api.io.http.HttpHeaders;
8
+ import net.rim.device.api.system.DeviceInfo;
9
+ import net.rim.device.api.ui.UiApplication;
10
+ import net.rim.device.api.ui.container.MainScreen;
11
+
12
+ import com.rho.RhoEmptyLogger;
13
+ import com.rho.RhoLogger;
14
+ import com.xruby.runtime.builtin.ObjectFactory;
15
+ import com.xruby.runtime.builtin.RubyArray;
16
+ import com.xruby.runtime.builtin.RubyFixnum;
17
+ import com.xruby.runtime.builtin.RubyInteger;
18
+ import com.xruby.runtime.builtin.RubyString;
19
+ import com.xruby.runtime.lang.*;
20
+
21
+
22
+ public class BluetoothManager /*extends RubyBasic*/ implements BluetoothScreen.BluetoothScreenCallback, BluetoothPort.BluetoothPortListener {
23
+
24
+ private static final RhoLogger LOG = RhoLogger.RHO_STRIP_LOG ? new RhoEmptyLogger() :
25
+ new RhoLogger("Bluetooth");
26
+
27
+
28
+ public static String BT_OK = "OK";
29
+ public static String BT_CANCEL = "CANCEL";
30
+ public static String BT_ERROR = "ERROR";
31
+
32
+ public static String BT_ROLE_SERVER = "ROLE_SERVER";
33
+ public static String BT_ROLE_CLIENT = "ROLE_CLIENT";
34
+
35
+ public static String BT_SESSION_INPUT_DATA_RECEIVED = "SESSION_INPUT_DATA_RECEIVED";
36
+ public static String BT_SESSION_DISCONNECT = "SESSION_DISCONNECT";
37
+
38
+ private static BluetoothManager ourBluetoothManager = null;
39
+
40
+ private String mCreateSessionCallback = null;
41
+ private String mSessionCallback = null;
42
+ private String mConnectedDeviceName = null;
43
+ private String mLocalDeviceName = null;
44
+ private BluetoothScreen mScreen = null;
45
+ private BluetoothSerialPortInfo[] mDevices = null;
46
+ private BluetoothPort mPort = null;
47
+
48
+
49
+
50
+ public static void rhoLogInfo(String msg) {
51
+ LOG.INFO(msg);
52
+ //LOG.ERROR(msg);
53
+ }
54
+
55
+ public static void rhoLogError(String msg) {
56
+ LOG.ERROR(msg);
57
+ }
58
+
59
+ public static BluetoothManager getInstance() {
60
+ if (ourBluetoothManager == null) {
61
+ ourBluetoothManager = new BluetoothManager();
62
+ ourBluetoothManager.init();
63
+ }
64
+ return ourBluetoothManager;
65
+ }
66
+
67
+ private void init() {
68
+ mLocalDeviceName = "Blackberry device";//DeviceInfo.getDeviceName();
69
+ mScreen = null;
70
+ mPort = null;
71
+ }
72
+
73
+ private void freeAll() {
74
+ if (mScreen != null) {
75
+ rhoPopScreen(mScreen);
76
+ mScreen = null;
77
+ }
78
+ }
79
+
80
+ public static void rhoPushScreen(MainScreen screen) {
81
+ RhodesApplication app = (RhodesApplication)UiApplication.getUiApplication();
82
+ final MainScreen scr = screen;
83
+ app.invokeLater(new Runnable()
84
+ {
85
+ public void run()
86
+ {
87
+ UiApplication app = UiApplication.getUiApplication();
88
+ app.pushScreen(scr);
89
+ app.requestForeground();
90
+ }
91
+ });
92
+ }
93
+
94
+ public static void rhoPopScreen(MainScreen screen) {
95
+ RhodesApplication app = (RhodesApplication)UiApplication.getUiApplication();
96
+ final MainScreen scr = screen;
97
+ app.invokeLater(new Runnable()
98
+ {
99
+ public void run()
100
+ {
101
+ UiApplication app = UiApplication.getUiApplication();
102
+ app.popScreen(scr);
103
+ app.requestForeground();
104
+ }
105
+ });
106
+ }
107
+
108
+ public void closeBluetoothScreenSilent() {
109
+ RhodesApplication app = (RhodesApplication)UiApplication.getUiApplication();
110
+ final BluetoothScreen scr = mScreen;
111
+ mScreen = null;
112
+ if (scr != null) {
113
+ app.invokeLater(new Runnable()
114
+ {
115
+ public void run()
116
+ {
117
+ if (scr != null) {
118
+ scr.closeSilent();
119
+ }
120
+ }
121
+ });
122
+ }
123
+ }
124
+
125
+ // BluetoothScreenCallback
126
+ public void onBluetoothScreenCancel() {
127
+ rhoLogInfo("onBluetoothScreenCancel()");
128
+ if (mPort != null) {
129
+ mPort.disconnect();
130
+ mPort = null;
131
+ }
132
+ fireCreateSessionCallback(BT_CANCEL, "");
133
+ mScreen = null;
134
+ }
135
+
136
+ // BluetoothScreenCallback
137
+ public void onBluetoothScreenSelect(int index) {
138
+ rhoLogInfo("onBluetoothScreenSelect("+String.valueOf(index)+")");
139
+ UiApplication app = UiApplication.getUiApplication();
140
+ final int i = index;
141
+ app.invokeLater(new Runnable()
142
+ {
143
+ public void run()
144
+ {
145
+ getInstance().mPort = new BluetoothPort(mDevices[i], getInstance());
146
+ }
147
+ });
148
+ mScreen = null;
149
+ }
150
+
151
+ // BluetoothPortListener
152
+ public void onBluetoothPortDisconnect() {
153
+ fireSessionCallback(mPort.getConnectedDeviceName(), BT_SESSION_DISCONNECT);
154
+ }
155
+
156
+ // BluetoothPortListener
157
+ public void onBluetoothPortError() {
158
+ fireSessionCallback(mPort.getConnectedDeviceName(), BT_ERROR);
159
+ }
160
+
161
+ // BluetoothPortListener
162
+ public void onBluetoothPortDataReceived() {
163
+ fireSessionCallback(mPort.getConnectedDeviceName(), BT_SESSION_INPUT_DATA_RECEIVED);
164
+ }
165
+
166
+ // BluetoothPortListener
167
+ public void onBluetoothPortConnected(boolean success) {
168
+ if (success) {
169
+ fireCreateSessionCallback(BT_OK, mPort.getConnectedDeviceName());
170
+ }
171
+ else {
172
+ fireCreateSessionCallback(BT_ERROR, mPort.getConnectedDeviceName());
173
+ }
174
+ closeBluetoothScreenSilent();
175
+ }
176
+
177
+ private void fireCreateSessionCallback(String status, String connected_device_name) {
178
+ String body = "&status=";
179
+ body += status;
180
+ body += "&connected_device_name=";
181
+ body += connected_device_name;
182
+ if (mCreateSessionCallback != null) {
183
+ rhoLogInfo("fire Create Session Callback status="+status+", connected_device_name="+connected_device_name);
184
+ fireRhodeCallback(mCreateSessionCallback, body);
185
+ }
186
+ else {
187
+ rhoLogError("fire Create Session Callback ERROR - Create Session callback not defined");
188
+ }
189
+ }
190
+
191
+ private void fireSessionCallback(String connected_device_name, String event_type) {
192
+ String body = "&connected_device_name=";
193
+ body += connected_device_name;
194
+ body += "&event_type=";
195
+ body += event_type;
196
+ if (mSessionCallback != null) {
197
+ rhoLogInfo("fire Session Callback connected_device_name="+connected_device_name+", event="+event_type);
198
+ fireRhodeCallback(mSessionCallback, body);
199
+ }
200
+ else {
201
+ rhoLogError("fire Session Callback ERROR - Session callback not defined");
202
+ }
203
+ }
204
+
205
+ private void fireRhodeCallback(String callback_url, String body) {
206
+ RhodesApplication app = (RhodesApplication)UiApplication.getUiApplication();
207
+ HttpHeaders headers = new HttpHeaders();
208
+ headers.addProperty("Content-Type", "application/x-www-form-urlencoded");
209
+ app.postUrl(callback_url, body, headers);
210
+ }
211
+
212
+
213
+ public static int is_bluetooth_available() {
214
+ return BluetoothSerialPort.isSupported()?1:0;
215
+ }
216
+
217
+ public static void off_bluetooth() {
218
+ rhoLogInfo("off_bluetooth()");
219
+ getInstance().freeAll();
220
+ ourBluetoothManager = null;
221
+ }
222
+
223
+ public static void set_device_name(String device_name) {
224
+ getInstance().mLocalDeviceName = device_name;
225
+ }
226
+
227
+ public static String get_device_name() {
228
+ return getInstance().mLocalDeviceName;
229
+ }
230
+ public static String get_last_error() {
231
+ return BT_OK;
232
+ }
233
+
234
+ public static String create_session(String role, String callback_url) {
235
+ rhoLogInfo("create_session("+role+", "+callback_url+")");
236
+ getInstance().mCreateSessionCallback = callback_url;
237
+ if (BT_ROLE_CLIENT.equals(role)) {
238
+ // client
239
+ if (is_bluetooth_available() != 0) {
240
+ getInstance().mDevices = BluetoothSerialPort.getSerialPortInfo();
241
+ int count = getInstance().mDevices.length;
242
+ String devices[] = new String[count];
243
+ int i;
244
+ for (i = 0; i < count; i++) {
245
+ devices[i] = getInstance().mDevices[i].getDeviceName();
246
+ }
247
+ getInstance().mScreen = new BluetoothScreen(BluetoothScreen.BLUETOOTH_SCREEN_TYPE_CLIENT, devices, getInstance());
248
+ }
249
+ else {
250
+ getInstance().mScreen = new BluetoothScreen(BluetoothScreen.BLUETOOTH_SCREEN_TYPE_UNSUPPORTED, null, getInstance());
251
+ }
252
+ rhoPushScreen(getInstance().mScreen);
253
+ }
254
+ else {
255
+ // server
256
+ if (is_bluetooth_available() != 0) {
257
+ getInstance().mPort = new BluetoothPort(null, getInstance());
258
+ getInstance().mScreen = new BluetoothScreen(BluetoothScreen.BLUETOOTH_SCREEN_TYPE_SERVER, null, getInstance());
259
+ rhoPushScreen(getInstance().mScreen);
260
+ getInstance().mPort.startListenThread();
261
+ }
262
+ else {
263
+ getInstance().mScreen = new BluetoothScreen(BluetoothScreen.BLUETOOTH_SCREEN_TYPE_UNSUPPORTED, null, getInstance());
264
+ rhoPushScreen(getInstance().mScreen);
265
+ }
266
+ }
267
+ return BT_OK;
268
+ }
269
+
270
+ public static void session_set_callback(String connected_device_name, String callback_url) {
271
+ rhoLogInfo("session_set_callback("+connected_device_name+", "+callback_url+")");
272
+ getInstance().mSessionCallback = callback_url;
273
+ }
274
+
275
+ public static void session_disconnect(String connected_device_name) {
276
+ rhoLogInfo("session_disconnect("+connected_device_name+")");
277
+ if (getInstance().mPort != null) {
278
+ getInstance().mPort.disconnect();
279
+ getInstance().mPort = null;
280
+ }
281
+ else {
282
+ getInstance().fireSessionCallback("", BT_ERROR);
283
+ }
284
+ }
285
+
286
+ public static int session_get_status(String connected_device_name) {
287
+ rhoLogInfo("session_get_status("+connected_device_name+")");
288
+ if (getInstance().mPort != null) {
289
+ int status = getInstance().mPort.getStatus();
290
+ rhoLogInfo("session_get_status() return = "+String.valueOf(status));
291
+ return status;
292
+ }
293
+ else {
294
+ getInstance().fireSessionCallback("", BT_ERROR);
295
+ }
296
+ return 0;
297
+ }
298
+
299
+ public static String session_read_string(String connected_device_name) {
300
+ rhoLogInfo("session_read_string("+connected_device_name+")");
301
+ if (getInstance().mPort != null) {
302
+ byte[] data = getInstance().mPort.readData();
303
+ String str = new String(data,0,data.length);
304
+ rhoLogInfo("session_read_string() return = ["+str+"]");
305
+ return str;
306
+ }
307
+ else {
308
+ getInstance().fireSessionCallback("", BT_ERROR);
309
+ }
310
+ return "";
311
+ }
312
+
313
+ public static void session_write_string(String connected_device_name, String str) {
314
+ rhoLogInfo("session_write_string("+connected_device_name+", "+str+")");
315
+ if (getInstance().mPort != null) {
316
+ byte[] data = str.getBytes();
317
+ getInstance().mPort.writeData(data);
318
+ }
319
+ else {
320
+ getInstance().fireSessionCallback("", BT_ERROR);
321
+ }
322
+ }
323
+
324
+ public static byte[] session_read_data(String connected_device_name) {
325
+ rhoLogInfo("session_read_data()");
326
+ if (getInstance().mPort != null) {
327
+ return getInstance().mPort.readData();
328
+ }
329
+ else {
330
+ getInstance().fireSessionCallback("", BT_ERROR);
331
+ }
332
+ byte[] m = new byte[0];
333
+ return m;
334
+ }
335
+
336
+ public static void session_write_data(String connected_device_name, byte[] data) {
337
+ rhoLogInfo("session_write_data()");
338
+ if (getInstance().mPort != null) {
339
+ getInstance().mPort.writeData(data);
340
+ }
341
+ else {
342
+ getInstance().fireSessionCallback("", BT_ERROR);
343
+ }
344
+ }
345
+
346
+
347
+ public static void initMethods(RubyClass klass) {
348
+
349
+ klass.getSingletonClass().defineMethod("is_bluetooth_available", new RubyNoArgMethod() {
350
+ protected RubyValue run(RubyValue receiver, RubyBlock block) {
351
+ RubyValue res = RubyConstant.QFALSE;
352
+ if (is_bluetooth_available() != 0) {
353
+ res = RubyConstant.QTRUE;
354
+ }
355
+ return res;
356
+ }
357
+ });
358
+ klass.getSingletonClass().defineMethod("off_bluetooth", new RubyNoArgMethod() {
359
+ protected RubyValue run(RubyValue receiver, RubyBlock block) {
360
+ off_bluetooth();
361
+ return RubyConstant.QNIL;
362
+ }
363
+ });
364
+
365
+ klass.getSingletonClass().defineMethod("set_device_name", new RubyOneArgMethod() {
366
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
367
+ if ( arg0 instanceof RubyString )
368
+ {
369
+ String device_name = arg0.toString();
370
+ set_device_name(device_name);
371
+ }
372
+ else {
373
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.set_device_name: wrong argument type.Should be String");
374
+ }
375
+ return RubyConstant.QNIL;
376
+ }
377
+ });
378
+ klass.getSingletonClass().defineMethod("get_device_name", new RubyNoArgMethod() {
379
+ protected RubyValue run(RubyValue receiver, RubyBlock block) {
380
+ return ObjectFactory.createString(get_device_name());
381
+ }
382
+ });
383
+ klass.getSingletonClass().defineMethod("get_last_error", new RubyNoArgMethod() {
384
+ protected RubyValue run(RubyValue receiver, RubyBlock block) {
385
+ return ObjectFactory.createString(get_last_error());
386
+ }
387
+ });
388
+ klass.getSingletonClass().defineMethod("create_session", new RubyTwoArgMethod() {
389
+ protected RubyValue run(RubyValue receiver, RubyValue arg1, RubyValue arg2, RubyBlock block) {
390
+ if ( (arg1 instanceof RubyString) && (arg2 instanceof RubyString) )
391
+ {
392
+ String role = arg1.toString();
393
+ String callback_url = arg2.toString();
394
+ return ObjectFactory.createString(create_session(role, callback_url));
395
+ }
396
+ else {
397
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.create_session: wrong argument type.Should be String");
398
+ }
399
+ }
400
+ });
401
+
402
+ klass.getSingletonClass().defineMethod("session_set_callback", new RubyTwoArgMethod() {
403
+ protected RubyValue run(RubyValue receiver, RubyValue arg1, RubyValue arg2, RubyBlock block) {
404
+ if ( (arg1 instanceof RubyString) && (arg2 instanceof RubyString) )
405
+ {
406
+ String connected_device_name = arg1.toString();
407
+ String callback_url = arg2.toString();
408
+ session_set_callback(connected_device_name, callback_url);
409
+ }
410
+ else {
411
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_set_callback: wrong argument type.Should be String");
412
+ }
413
+ return RubyConstant.QNIL;
414
+ }
415
+ });
416
+ klass.getSingletonClass().defineMethod("session_disconnect", new RubyOneArgMethod() {
417
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
418
+ if ( arg0 instanceof RubyString )
419
+ {
420
+ String connected_device_name = arg0.toString();
421
+ session_disconnect(connected_device_name);
422
+ }
423
+ else {
424
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_disconnect: wrong argument type.Should be String");
425
+ }
426
+ return RubyConstant.QNIL;
427
+ }
428
+ });
429
+ klass.getSingletonClass().defineMethod("session_get_status", new RubyOneArgMethod() {
430
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
431
+ if ( arg0 instanceof RubyString )
432
+ {
433
+ String connected_device_name = arg0.toString();
434
+ int status = session_get_status(connected_device_name);
435
+ return ObjectFactory.createInteger(status);
436
+ }
437
+ else {
438
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_get_status: wrong argument type.Should be String");
439
+ }
440
+ }
441
+ });
442
+ klass.getSingletonClass().defineMethod("session_read_string", new RubyOneArgMethod() {
443
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
444
+ if ( arg0 instanceof RubyString )
445
+ {
446
+ String connected_device_name = arg0.toString();
447
+ String str = session_read_string(connected_device_name);
448
+ return ObjectFactory.createString(str);
449
+ }
450
+ else {
451
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_read_string: wrong argument type.Should be String");
452
+ }
453
+ }
454
+ });
455
+ klass.getSingletonClass().defineMethod("session_write_string", new RubyTwoArgMethod() {
456
+ protected RubyValue run(RubyValue receiver, RubyValue arg1, RubyValue arg2, RubyBlock block) {
457
+ if ( (arg1 instanceof RubyString) && (arg2 instanceof RubyString) )
458
+ {
459
+ String connected_device_name = arg1.toString();
460
+ String str = arg2.toString();
461
+ session_write_string(connected_device_name, str);
462
+ }
463
+ else {
464
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_write_string: wrong argument type.Should be String");
465
+ }
466
+ return RubyConstant.QNIL;
467
+ }
468
+ });
469
+ klass.getSingletonClass().defineMethod("session_read_data", new RubyOneArgMethod() {
470
+ protected RubyValue run(RubyValue receiver, RubyValue arg0, RubyBlock block) {
471
+ if ( arg0 instanceof RubyString )
472
+ {
473
+ String connected_device_name = arg0.toString();
474
+ byte[] data = session_read_data(connected_device_name);
475
+ RubyArray ruby_ar = ObjectFactory.createArray(data.length, data.length, false);
476
+ int i;
477
+ for (i = 0; i < data.length; i++) {
478
+ ruby_ar.and(ObjectFactory.createFixnum(data[i]));
479
+ }
480
+ return ruby_ar;
481
+ }
482
+ else {
483
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in session_read_data: wrong argument type.Should be String");
484
+ }
485
+ }
486
+ });
487
+ klass.getSingletonClass().defineMethod("session_write_data", new RubyTwoArgMethod() {
488
+ protected RubyValue run(RubyValue receiver, RubyValue arg1, RubyValue arg2, RubyBlock block) {
489
+ if ( (arg1 instanceof RubyString) && (arg2 instanceof RubyArray) )
490
+ {
491
+ String connected_device_name = arg1.toString();
492
+ RubyArray ruby_ar = (RubyArray)arg2;
493
+ int i;
494
+ byte[] data = new byte[ruby_ar.size()];
495
+ for (i = 0; i < ruby_ar.size(); i++) {
496
+ RubyValue num = ruby_ar.get(i);
497
+ int b = 0;
498
+ if (num instanceof RubyFixnum) {
499
+ RubyFixnum rv = (RubyFixnum)num;
500
+ b = rv.toInt();
501
+ }
502
+ else {
503
+ if (num instanceof RubyInteger) {
504
+ RubyInteger rv = (RubyInteger)num;
505
+ b = rv.toInt();
506
+ }
507
+ else {
508
+ if (num instanceof RubySymbol) {
509
+ RubySymbol rv = (RubySymbol)num;
510
+ b = rv.toInt();
511
+ }
512
+ else {
513
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_write_data: wrong argument type.Should be Array of Fixnums or Integers");
514
+ }
515
+ }
516
+ }
517
+ data[i] = (byte)b;
518
+ }
519
+ session_write_data(connected_device_name, data);
520
+ }
521
+ else {
522
+ throw new RubyException(RubyRuntime.ArgumentErrorClass, "in RhoBluetooth.session_write_data: wrong argument type.Should be String second should be Array");
523
+ }
524
+ return RubyConstant.QNIL;
525
+ }
526
+ });
527
+ }
528
+ }