rhodes 2.2.4.beta.1 → 2.2.5.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (188) hide show
  1. data/CHANGELOG +10 -0
  2. data/Rakefile +119 -3
  3. data/lib/build/jake.rb +15 -1
  4. data/lib/framework/dateME.rb +6 -1
  5. data/lib/framework/rho/render.rb +18 -15
  6. data/lib/framework/rho/rho.rb +105 -43
  7. data/lib/framework/rho/rhoapplication.rb +1 -1
  8. data/lib/framework/rho/rhocontact.rb +41 -13
  9. data/lib/framework/rho/rhocontroller.rb +10 -1
  10. data/lib/framework/rho/rhoevent_c.rb +6 -1
  11. data/lib/framework/rho/rhosupport.rb +1 -1
  12. data/lib/framework/rhodes.rb +1 -1
  13. data/lib/framework/rholang/rhomsg_de.rb +1 -1
  14. data/lib/framework/rholang/rhomsg_es.rb +1 -1
  15. data/lib/framework/rholang/rhomsg_it.rb +28 -0
  16. data/lib/framework/rhom/rhom.rb +6 -0
  17. data/lib/framework/rhom/rhom_model.rb +14 -7
  18. data/lib/framework/rhom/rhom_object_factory.rb +121 -56
  19. data/lib/framework/version.rb +1 -1
  20. data/lib/rhodes.rb +1 -1
  21. data/platform/android/Rhodes/AndroidManifest.full.xml +62 -0
  22. data/platform/android/Rhodes/AndroidManifest.xml +3 -34
  23. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +17 -2
  24. data/platform/android/Rhodes/jni/src/alert.cpp +16 -0
  25. data/platform/android/Rhodes/jni/src/callbacks.cpp +27 -3
  26. data/platform/android/Rhodes/jni/src/nativebar.cpp +3 -0
  27. data/platform/android/Rhodes/jni/src/nativeview.cpp +131 -1
  28. data/platform/android/Rhodes/jni/src/phonebook.cpp +102 -41
  29. data/platform/android/Rhodes/jni/src/rhodes.cpp +113 -32
  30. data/platform/android/Rhodes/jni/src/ringtones.cpp +1 -1
  31. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Capabilities.java +1 -0
  32. data/platform/android/Rhodes/src/com/rhomobile/rhodes/Rhodes.java +9 -8
  33. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +184 -49
  34. data/platform/android/Rhodes/src/com/rhomobile/rhodes/SplashScreen.java +49 -25
  35. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +104 -57
  36. data/platform/android/Rhodes/src/com/rhomobile/rhodes/event/EventStore.java +36 -2
  37. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +24 -14
  38. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocationImpl.java +7 -8
  39. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +185 -3
  40. data/platform/android/Rhodes/src/com/rhomobile/rhodes/nativeview/RhoNativeViewManager.java +54 -1
  41. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Contact.java +107 -14
  42. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorNew.java +72 -24
  43. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/ContactAccessorOld.java +22 -21
  44. data/platform/android/Rhodes/src/com/rhomobile/rhodes/phonebook/Phonebook.java +91 -11
  45. data/platform/android/Rhodes/src/com/rhomobile/rhodes/util/PerformOnUiThread.java +10 -0
  46. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/ChromeClientNew.java +11 -0
  47. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebSettingsNew.java +10 -0
  48. data/platform/android/build/android.rake +50 -9
  49. data/platform/android/build/librhocommon_build.files +1 -0
  50. data/platform/bb/Hsqldb/src/org/hsqldb/Parser.java +3 -2
  51. data/platform/bb/Hsqldb/src/org/hsqldb/SchemaManager.java +3 -1
  52. data/platform/bb/Hsqldb/src/org/hsqldb/Session.java +7 -0
  53. data/platform/bb/Hsqldb/src/org/hsqldb/Tokenizer.java +2 -2
  54. data/platform/bb/RubyVM/RubyVM.jdp +1 -0
  55. data/platform/bb/RubyVM/src/com/rho/AppBuildConfig.java +22 -0
  56. data/platform/bb/RubyVM/src/com/rho/RhoRuby.java +5 -0
  57. data/platform/bb/RubyVM/src/com/rho/net/RhoConnection.java +1 -1
  58. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +51 -4
  59. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +21 -10
  60. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +82 -33
  61. data/platform/bb/RubyVM/src/com/rho/sync/SyncThread.java +59 -6
  62. data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyFloat_Methods.java +5 -0
  63. data/platform/bb/RubyVM/src/com/xruby/GeneratedMethods/RubyString_Methods.java +19 -7
  64. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/ArrayPacker.java +1 -1
  65. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyFloat.java +5 -0
  66. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyString.java +55 -11
  67. data/platform/bb/RubyVM/src/com/xruby/runtime/builtin/RubyTime.java +18 -2
  68. data/platform/bb/RubyVM/src/com/xruby/runtime/lang/RubyKernelModule.java +8 -5
  69. data/platform/bb/RubyVM/src/j2me/lang/CharacterMe.java +1 -1
  70. data/platform/bb/RubyVM/src/j2me/util/StringParser.java +2 -0
  71. data/platform/bb/build/RubyVM_build.files +1 -0
  72. data/platform/bb/build/bb.rake +21 -2
  73. data/platform/bb/rhodes/platform/4.7/com/rho/RhoMainScreen.java +3 -3
  74. data/platform/bb/rhodes/platform/common/com/rho/RhoMainScreen.java +1 -1
  75. data/platform/bb/rhodes/src/com/rho/RhoRubyHelper.java +1 -2
  76. data/platform/bb/rhodes/src/com/rho/net/NetworkAccess.java +15 -16
  77. data/platform/bb/rhodes/src/com/rho/rubyext/RhoCalendar.java +4 -0
  78. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +58 -0
  79. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +90 -4
  80. data/platform/iphone/Classes/AppManager/AppManager.m +43 -5
  81. data/platform/iphone/Classes/Event/Event.h +2 -0
  82. data/platform/iphone/Classes/Event/Event.m +12 -1
  83. data/platform/iphone/Classes/GeoLocation/LocationController.m +9 -3
  84. data/platform/iphone/Classes/MapView/MapViewController.m +20 -9
  85. data/platform/iphone/Classes/NativeBar.m +27 -0
  86. data/platform/iphone/Classes/Phonebook/phonebook.m +17 -0
  87. data/platform/iphone/Classes/RhoAlert.m +61 -1
  88. data/platform/iphone/Classes/RhoMainView.h +1 -0
  89. data/platform/iphone/Classes/Rhodes.h +2 -0
  90. data/platform/iphone/Classes/Rhodes.m +108 -1
  91. data/platform/iphone/Classes/SimpleMainView.h +4 -0
  92. data/platform/iphone/Classes/SimpleMainView.m +30 -3
  93. data/platform/iphone/Classes/SplashViewController.m +3 -1
  94. data/platform/iphone/Classes/TabbedMainView.h +2 -0
  95. data/platform/iphone/Classes/TabbedMainView.m +63 -11
  96. data/platform/iphone/Classes/rho/net/NetRequestImpl.m +26 -0
  97. data/platform/iphone/Info.plist +12 -1
  98. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +8 -0
  99. data/platform/iphone/rbuild/iphone.rake +181 -25
  100. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +5 -5
  101. data/platform/shared/common/IRhoThreadImpl.h +1 -1
  102. data/platform/shared/common/PosixThreadImpl.cpp +5 -3
  103. data/platform/shared/common/PosixThreadImpl.h +1 -1
  104. data/platform/shared/common/RhoFilePath.h +11 -0
  105. data/platform/shared/common/RhoNativeViewManager.h +17 -0
  106. data/platform/shared/common/RhoThread.h +1 -1
  107. data/platform/shared/common/RhodesApp.cpp +29 -8
  108. data/platform/shared/common/ThreadQueue.cpp +5 -3
  109. data/platform/shared/common/ThreadQueue.h +2 -1
  110. data/platform/shared/common/app_build_configs.c +25 -0
  111. data/platform/shared/common/app_build_configs.h +11 -0
  112. data/platform/shared/net/AsyncHttp.cpp +5 -5
  113. data/platform/shared/net/CURLNetRequest.cpp +25 -7
  114. data/platform/shared/net/CURLNetRequest.h +2 -1
  115. data/platform/shared/net/HttpServer.cpp +28 -0
  116. data/platform/shared/ruby/ext/nativebar/nativebar.i +3 -0
  117. data/platform/shared/ruby/ext/nativebar/nativebar_wrap.c +26 -1
  118. data/platform/shared/ruby/ext/rho/rhoruby.c +6 -0
  119. data/platform/shared/ruby/ext/rho/rhoruby.h +1 -0
  120. data/platform/shared/ruby/ext/rho/rhosupport.c +15 -2
  121. data/platform/shared/ruby/ext/syncengine/syncengine.i +14 -2
  122. data/platform/shared/ruby/ext/syncengine/syncengine_wrap.c +97 -2
  123. data/platform/shared/ruby/ext/system/system.i +13 -0
  124. data/platform/shared/ruby/ext/system/system_wrap.c +104 -1
  125. data/platform/shared/rubyext/RhoAppAdapter.cpp +7 -0
  126. data/platform/shared/sync/SyncEngine.cpp +43 -3
  127. data/platform/shared/sync/SyncEngine.h +13 -0
  128. data/platform/shared/sync/SyncNotify.cpp +41 -23
  129. data/platform/shared/sync/SyncNotify.h +18 -4
  130. data/platform/shared/sync/SyncSource.cpp +52 -14
  131. data/platform/shared/sync/SyncSource.h +1 -0
  132. data/platform/shared/sync/SyncThread.cpp +29 -9
  133. data/platform/shared/sync/SyncThread.h +4 -2
  134. data/platform/wm/RhoLib/RhoLib.vcproj +8 -0
  135. data/platform/wm/build/build_inf.js +15 -9
  136. data/platform/wm/build/wm.rake +10 -5
  137. data/platform/wm/rhodes/Alert.cpp +10 -0
  138. data/platform/wm/rhodes/Alert.h +3 -3
  139. data/platform/wm/rhodes/MainWindow.cpp +171 -26
  140. data/platform/wm/rhodes/MainWindow.h +23 -1
  141. data/platform/wm/rhodes/MetaHandler.cpp +192 -0
  142. data/platform/wm/rhodes/MetaHandler.h +31 -0
  143. data/platform/wm/rhodes/RhoNativeViewManager.cpp +126 -0
  144. data/platform/wm/rhodes/RhoNativeViewManagerWM.h +20 -0
  145. data/platform/wm/rhodes/Rhodes.cpp +91 -2
  146. data/platform/wm/rhodes/Rhodes.rc +15 -6
  147. data/platform/wm/rhodes/SyncStatusDlg.cpp +32 -0
  148. data/platform/wm/rhodes/SyncStatusDlg.h +29 -0
  149. data/platform/wm/rhodes/resource.h +5 -2
  150. data/platform/wm/rhodes/rho/common/RhoThreadImpl.cpp +3 -1
  151. data/platform/wm/rhodes/rho/common/RhoThreadImpl.h +1 -1
  152. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +146 -14
  153. data/platform/wm/rhodes/rhodes.vcproj +28 -0
  154. data/rakefile.rb +119 -3
  155. data/res/build-tools/iphonesim/README +58 -0
  156. data/res/build-tools/iphonesim/Source/iPhoneSimulator.h +43 -0
  157. data/res/build-tools/iphonesim/Source/iPhoneSimulator.m +224 -0
  158. data/res/build-tools/iphonesim/Source/main.m +52 -0
  159. data/res/build-tools/iphonesim/Source/nsprintf.h +3 -0
  160. data/res/build-tools/iphonesim/Source/nsprintf.m +42 -0
  161. data/res/build-tools/iphonesim/build/Release/iphonesim +0 -0
  162. data/res/build-tools/iphonesim/iPhoneSimulatorRemoteClient/iPhoneSimulatorRemoteClient.h +124 -0
  163. data/res/build-tools/iphonesim/iphonesim.xcodeproj/project.pbxproj +261 -0
  164. data/res/build-tools/iphonesim/iphonesim_Prefix.pch +7 -0
  165. data/res/generators/rhogen.rb +5 -0
  166. data/res/generators/templates/application/app/layout.erb +7 -13
  167. data/res/generators/templates/application/app/loading.png +0 -0
  168. data/res/generators/templates/application/build.yml +3 -0
  169. data/res/generators/templates/application/icon/icon114.png +0 -0
  170. data/res/generators/templates/application/icon/icon57.png +0 -0
  171. data/res/generators/templates/application/icon/icon72.png +0 -0
  172. data/res/generators/templates/application/public/css/iphone.css +96 -0
  173. data/res/generators/templates/application/public/images/backButton.png +0 -0
  174. data/res/generators/templates/application/public/jqtouch/jqtouch.js +2 -1
  175. data/res/generators/templates/application/rhoconfig.txt +2 -0
  176. data/rhodes.gemspec +1 -1
  177. data/spec/phone_spec/app/spec/array_pack_spec.rb +108 -0
  178. data/spec/phone_spec/app/spec/bulksync_spec.rb +1 -0
  179. data/spec/phone_spec/app/spec/date_spec.rb +27 -0
  180. data/spec/phone_spec/app/spec/fixtures/classes.rb +91 -0
  181. data/spec/phone_spec/app/spec/lstrip_spec.rb +57 -0
  182. data/spec/phone_spec/app/spec/rho_spec.rb +50 -19
  183. data/spec/phone_spec/app/spec/rhom_object_spec.rb +78 -0
  184. data/spec/phone_spec/app/spec/rstrip_spec.rb +51 -0
  185. data/spec/phone_spec/app/spec/strip_spec.rb +50 -0
  186. data/spec/phone_spec/app/spec/syncengine_spec.rb +46 -3
  187. data/spec/phone_spec/app/spec_runner.rb +6 -0
  188. metadata +34 -4
@@ -35,8 +35,6 @@ jfieldID getJNIClassStaticField(JNIEnv *env, jclass cls, const char *name, const
35
35
  jmethodID getJNIClassMethod(JNIEnv *env, jclass cls, const char *name, const char *signature);
36
36
  jmethodID getJNIClassStaticMethod(JNIEnv *env, jclass cls, const char *name, const char *signature);
37
37
 
38
- VALUE convertJavaMapToRubyHash(jobject objMap);
39
-
40
38
  #define RHO_NOT_IMPLEMENTED RAWLOG_ERROR3("WARNING: Call not implemented function: \"%s\" (defined here: %s:%d)", __PRETTY_FUNCTION__, __FILE__, __LINE__)
41
39
 
42
40
  #define RHO_LOG_CALLBACK RAWLOG_INFO1("Callback \"%s\" called", __PRETTY_FUNCTION__)
@@ -62,5 +60,22 @@ public:
62
60
  jobject createObject(rho_param *p);
63
61
  };
64
62
 
63
+ namespace details
64
+ {
65
+
66
+ template <>
67
+ struct rho_cast_helper<VALUE, jobject>
68
+ {
69
+ VALUE operator()(JNIEnv *env, jobject obj);
70
+ };
71
+
72
+ template <>
73
+ struct rho_cast_helper<jobject, VALUE>
74
+ {
75
+ jobject operator()(JNIEnv *env, VALUE value);
76
+ };
77
+
78
+ } // namespace details
79
+
65
80
  #endif // RHO_JNI_RHODES_57d3a700b706402190ead97fd1383bee
66
81
 
@@ -15,6 +15,22 @@ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_alert_Alert_doCallback
15
15
  rho_cast<std::string>(env, id).c_str(), rho_cast<std::string>(env, title).c_str());
16
16
  }
17
17
 
18
+ RHO_GLOBAL void alert_show_status(const char* szMessage, const char* szHide)
19
+ {
20
+ JNIEnv *env = jnienv();
21
+ jclass cls = getJNIClass(RHODES_JAVA_CLASS_ALERT);
22
+ if (!cls) return;
23
+ jmethodID mid = getJNIClassStaticMethod(env, cls, "showStatusPopup", "(Ljava/lang/String;Ljava/lang/String;)V");
24
+ if (!mid) return;
25
+
26
+ RAWLOG_INFO("alert_show_status");
27
+
28
+ jstring strMsg = rho_cast<jstring>(szMessage);
29
+ jstring strHide = rho_cast<jstring>(szHide);
30
+ env->CallStaticVoidMethod(cls, mid, strMsg, strHide);
31
+ env->DeleteLocalRef(strMsg);
32
+ }
33
+
18
34
  RHO_GLOBAL void alert_show_popup(rho_param *p)
19
35
  {
20
36
  JNIEnv *env = jnienv();
@@ -68,6 +68,11 @@ RHO_GLOBAL void rho_net_impl_network_indicator(int enable)
68
68
  // No GUI indicator on Android
69
69
  }
70
70
 
71
+ RHO_GLOBAL int rho_net_ping_network(const char* szHost)
72
+ {
73
+ return 0;
74
+ }
75
+
71
76
  RHO_GLOBAL void *rho_nativethread_start()
72
77
  {
73
78
  JNIEnv *env;
@@ -187,10 +192,9 @@ RHO_GLOBAL void rho_sys_run_app(const char *appname, VALUE params)
187
192
  JNIEnv *env = jnienv();
188
193
  jclass cls = getJNIClass(RHODES_JAVA_CLASS_RHODES_SERVICE);
189
194
  if (!cls) return;
190
- jmethodID mid = getJNIClassStaticMethod(env, cls, "runApplication", "(Ljava/lang/String;Ljava/util/Map;)V");
195
+ jmethodID mid = getJNIClassStaticMethod(env, cls, "runApplication", "(Ljava/lang/String;Ljava/lang/Object;)V");
191
196
  if (!mid) return;
192
- // TODO: convert ruby hash (params) to java map (jParams)
193
- jobject jParams = NULL;
197
+ jobject jParams = rho_cast<jobject>(env, params);
194
198
  env->CallStaticVoidMethod(cls, mid, env->NewStringUTF(appname), jParams);
195
199
  }
196
200
 
@@ -203,3 +207,23 @@ RHO_GLOBAL void rho_sys_open_url(const char *url)
203
207
  if (!mid) return;
204
208
  env->CallStaticVoidMethod(cls, mid, env->NewStringUTF(url));
205
209
  }
210
+
211
+ RHO_GLOBAL int rho_sys_is_app_installed(const char *appname)
212
+ {
213
+ JNIEnv *env = jnienv();
214
+ jclass cls = getJNIClass(RHODES_JAVA_CLASS_RHODES_SERVICE);
215
+ if (!cls) return 0;
216
+ jmethodID mid = getJNIClassStaticMethod(env, cls, "isAppInstalled", "(Ljava/lang/String;)Z");
217
+ if (!mid) return 0;
218
+ return (int)env->CallStaticBooleanMethod(cls, mid, env->NewStringUTF(appname));
219
+ }
220
+
221
+ RHO_GLOBAL void rho_sys_app_uninstall(const char *appname)
222
+ {
223
+ JNIEnv *env = jnienv();
224
+ jclass cls = getJNIClass(RHODES_JAVA_CLASS_RHODES_SERVICE);
225
+ if (!cls) return;
226
+ jmethodID mid = getJNIClassStaticMethod(env, cls, "uninstallApplication", "(Ljava/lang/String;)V");
227
+ if (!mid) return;
228
+ env->CallStaticVoidMethod(cls, mid, env->NewStringUTF(appname));
229
+ }
@@ -60,3 +60,6 @@ RHO_GLOBAL VALUE nativebar_started()
60
60
 
61
61
  return rho_ruby_create_boolean(env->CallStaticBooleanMethod(cls, mid));
62
62
  }
63
+
64
+ RHO_GLOBAL void nativebar_set_tab_badge(int index,char *val) {
65
+ }
@@ -6,16 +6,100 @@
6
6
 
7
7
 
8
8
  #include <stdlib.h>
9
+ #include <strings.h>
9
10
 
10
11
 
11
- #import <RhoNativeViewManager.h>
12
+ #undef DEFAULT_LOGCATEGORY
13
+ #define DEFAULT_LOGCATEGORY "NativeView"
12
14
 
15
+ #define logging_enable false
16
+
17
+
18
+
19
+ #include <RhoNativeViewManager.h>
20
+
21
+
22
+ class RhoNativeViewHolder{
23
+ public :
24
+ RhoNativeViewHolder() {
25
+ factory = NULL;
26
+ next = NULL;
27
+ viewtype = NULL;
28
+ }
29
+ virtual ~RhoNativeViewHolder() {
30
+ if (viewtype != NULL) {
31
+ delete viewtype;
32
+ }
33
+ }
34
+ void setViewType(const char* viewtypename) {
35
+ viewtype = new char[strlen(viewtypename)+2];
36
+ strcpy(viewtype, viewtypename);
37
+ }
38
+ bool isApplicable(const char* viewtypename) {
39
+ return (strcmp(viewtype, viewtypename) == 0);
40
+ }
41
+ char* viewtype;
42
+ NativeViewFactory* factory;
43
+ RhoNativeViewHolder* next;
44
+ };
45
+
46
+ static RhoNativeViewHolder* first = NULL;
47
+
48
+
49
+ static void addRhoNativeViewHolder(RhoNativeViewHolder* holder) {
50
+ if (first == NULL) {
51
+ first = holder;
52
+ holder->next = NULL;
53
+ }
54
+ else {
55
+ holder->next = first;
56
+ first = holder;
57
+ }
58
+ }
59
+
60
+ static void removeRhoNativeViewHolder(RhoNativeViewHolder* holder) {
61
+ RhoNativeViewHolder* p = first;
62
+ RhoNativeViewHolder* prev = NULL;
63
+ while (p != NULL) {
64
+ if (p == holder) {
65
+ RhoNativeViewHolder* next = p->next;
66
+ if (prev != NULL) {
67
+ prev->next = next;
68
+ }
69
+ if (first == p) {
70
+ first = NULL;
71
+ }
72
+ delete p;
73
+ }
74
+ prev = p;
75
+ p = p->next;
76
+ }
77
+ }
78
+
79
+ static RhoNativeViewHolder* getHolderByViewTypeName(const char* name) {
80
+ RhoNativeViewHolder* p = first;
81
+ while (p != NULL) {
82
+ if (p->isApplicable(name)) {
83
+ return p;
84
+ }
85
+ p = p->next;
86
+ }
87
+ return NULL;
88
+ }
13
89
 
14
90
 
15
91
  void RhoNativeViewManager::registerViewType(const char* viewType, NativeViewFactory* factory) {
92
+ RhoNativeViewHolder* holder = new RhoNativeViewHolder();
93
+ holder->factory = factory;
94
+ holder->setViewType(viewType);
95
+ addRhoNativeViewHolder(holder);
16
96
  }
17
97
 
18
98
  void RhoNativeViewManager::unregisterViewType(const char* viewType) {
99
+ RhoNativeViewHolder* holder = getHolderByViewTypeName(viewType);
100
+ if (holder != NULL) {
101
+ removeRhoNativeViewHolder(holder);
102
+ }
19
103
  }
20
104
 
21
105
  // that function return native object used for display Web content :
@@ -32,4 +116,50 @@ void* RhoNativeViewManager::getWebViewObject(int tab_index) {
32
116
  }
33
117
 
34
118
 
119
+ RHO_GLOBAL jobject JNICALL Java_com_rhomobile_rhodes_nativeview_RhoNativeViewManager_getViewByHandle
120
+ (JNIEnv *env, jclass, jlong handle) {
121
+ NativeView* p = (NativeView*)handle;
122
+ if (p == NULL) {
123
+ return NULL;
124
+ }
125
+ return (jobject)(p->getView());
126
+ }
127
+
128
+ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_nativeview_RhoNativeViewManager_navigateByHandle
129
+ (JNIEnv *env, jclass, jlong handle, jstring url) {
130
+ if (logging_enable) RAWLOG_INFO("navigateByHandle() START");
131
+
132
+ NativeView* p = (NativeView*)handle;
133
+ if (p != NULL) {
134
+ if (logging_enable) RAWLOG_INFO("navigateByHandle() handle not NULL");
135
+ p->navigate(rho_cast<std::string>(url).c_str());
136
+ }
137
+ if (logging_enable) RAWLOG_INFO("navigateByHandle() FINISH");
138
+ }
139
+
140
+ RHO_GLOBAL jlong JNICALL Java_com_rhomobile_rhodes_nativeview_RhoNativeViewManager_getFactoryHandleByViewType
141
+ (JNIEnv *env, jclass, jstring viewtype) {
142
+ const char* s_viewtype = rho_cast<std::string>(viewtype).c_str();
143
+ RhoNativeViewHolder* nvh = getHolderByViewTypeName(s_viewtype);
144
+ return (jlong)((unsigned long int)nvh);
145
+ }
146
+
147
+ RHO_GLOBAL jlong JNICALL Java_com_rhomobile_rhodes_nativeview_RhoNativeViewManager_getViewHandleByFactoryHandle
148
+ (JNIEnv *env, jclass, jlong factory_h) {
149
+ RhoNativeViewHolder* holder = (RhoNativeViewHolder*)factory_h;
150
+ if (holder == NULL) {
151
+ return 0;
152
+ }
153
+ return (jlong)((unsigned long int)holder->factory->getNativeView((const char*)holder->viewtype));
154
+ }
155
+
156
+ RHO_GLOBAL void JNICALL Java_com_rhomobile_rhodes_nativeview_RhoNativeViewManager_destroyByHandle
157
+ (JNIEnv *env, jclass, jlong factory_h, jlong view_h) {
158
+ RhoNativeViewHolder* holder = (RhoNativeViewHolder*)factory_h;
159
+ NativeView* nv = (NativeView*)view_h;
160
+ if ((holder == NULL) || (nv == NULL)) {
161
+ return;
162
+ }
163
+ holder->factory->destroyNativeView(nv);
164
+ }
35
165
 
@@ -1,8 +1,27 @@
1
1
  #include "rhodes/JNIRhodes.h"
2
2
 
3
+ #include <android/log.h>
4
+ #include <logging/RhoLogConf.h>
5
+
3
6
  #undef DEFAULT_LOGCATEGORY
4
7
  #define DEFAULT_LOGCATEGORY "Phonebook"
5
8
 
9
+ #define logging_enable false
10
+
11
+
12
+ #define PB_FIELDS_COUNT 8
13
+
14
+ static const char* field_names[PB_FIELDS_COUNT] = {
15
+ "id", // 0
16
+ "first_name", // 1
17
+ "last_name", // 2
18
+ "mobile_number", // 3
19
+ "home_number", // 4
20
+ "business_number", // 5
21
+ "email_address", // 6
22
+ "company_name" // 7
23
+ };
24
+
6
25
  RHO_GLOBAL void* openPhonebook()
7
26
  {
8
27
  JNIEnv *env = jnienv();
@@ -32,52 +51,34 @@ RHO_GLOBAL void closePhonebook(void* pb)
32
51
 
33
52
  static VALUE createHashFromContact(jobject contactObj)
34
53
  {
54
+ if (logging_enable) RAWLOG_INFO("createHashFromContact() START");
35
55
  JNIEnv *env = jnienv();
36
56
  jclass contactCls = getJNIClass(RHODES_JAVA_CLASS_CONTACT);
37
57
  if (!contactCls) return Qnil;
38
58
  jclass fieldCls = getJNIClass(RHODES_JAVA_CLASS_CONTACT_FIELD);
39
59
  if (!fieldCls) return Qnil;
40
60
 
41
- jmethodID contactMoveToBeginMID = getJNIClassMethod(env, contactCls, "moveToBegin", "()V");
42
- if (!contactMoveToBeginMID) return Qnil;
43
- jmethodID hasNextMID = getJNIClassMethod(env, contactCls, "hasNext", "()Z");
44
- if (!hasNextMID) return Qnil;
45
- jmethodID nextMID = getJNIClassMethod(env, contactCls, "next", "()Ljava/lang/Object;");
46
- if (!nextMID) return Qnil;
47
- jmethodID getKeyMID = getJNIClassMethod(env, fieldCls, "getKey", "()Ljava/lang/String;");
48
- if (!getKeyMID) return Qnil;
49
- jmethodID getValueMID = getJNIClassMethod(env, fieldCls, "getValue", "()Ljava/lang/String;");
50
- if (!getValueMID) return Qnil;
61
+ jmethodID contactGetFieldMID = getJNIClassMethod(env, contactCls, "getField", "(I)Ljava/lang/String;");
62
+ if (!contactGetFieldMID) return Qnil;
51
63
 
52
64
  CHoldRubyValue contactHash(rho_ruby_createHash());
53
65
  // contact.moveToBegin();
54
- env->CallVoidMethod(contactObj, contactMoveToBeginMID);
55
-
56
- // while(contact.hasNext())
57
- while(env->CallBooleanMethod(contactObj, hasNextMID))
58
- {
59
- // Contact.Field entry = (Contact.Field)contact.next();
60
- jobject entryObj = env->CallObjectMethod(contactObj, nextMID);
61
- if (!entryObj) return Qnil;
62
- // String key = entry.getKey();
63
- jstring keyObj = (jstring)env->CallObjectMethod(entryObj, getKeyMID);
64
- if (!keyObj) return Qnil;
65
- // String value = entry.getValue();
66
- jstring valueObj = (jstring)env->CallObjectMethod(entryObj, getValueMID);
67
- if (!valueObj) return Qnil;
68
-
69
- addStrToHash(contactHash, rho_cast<std::string>(keyObj).c_str(), rho_cast<std::string>(valueObj).c_str());
70
-
71
- env->DeleteLocalRef(valueObj);
72
- env->DeleteLocalRef(keyObj);
73
- env->DeleteLocalRef(entryObj);
74
- }
75
66
 
67
+ int i;
68
+ for (i = 0; i < PB_FIELDS_COUNT; i++) {
69
+ jstring value = (jstring)env->CallObjectMethod(contactObj, contactGetFieldMID, i);
70
+ if (value != NULL) {
71
+ addStrToHash(contactHash, field_names[i], rho_cast<std::string>(value).c_str());
72
+ }
73
+ env->DeleteLocalRef(value);
74
+ }
75
+ if (logging_enable) RAWLOG_INFO("createHashFromContact() FINISH");
76
76
  return contactHash;
77
77
  }
78
78
 
79
79
  RHO_GLOBAL VALUE getallPhonebookRecords(void* pb)
80
80
  {
81
+ if (logging_enable) RAWLOG_INFO("getallPhonebookRecords() START");
81
82
  jobject phonebookObj = (jobject)pb;
82
83
 
83
84
  JNIEnv *env = jnienv();
@@ -87,6 +88,9 @@ RHO_GLOBAL VALUE getallPhonebookRecords(void* pb)
87
88
  jclass contactCls = getJNIClass(RHODES_JAVA_CLASS_CONTACT);
88
89
  if (!contactCls) return Qnil;
89
90
 
91
+ jmethodID phonebookPrepareFullListMID = getJNIClassMethod(env, phonebookCls, "prepareFullList", "()V");
92
+ if (!phonebookPrepareFullListMID) return Qnil;
93
+
90
94
  jmethodID phonebookMoveToBeginMID = getJNIClassMethod(env, phonebookCls, "moveToBegin", "()V");
91
95
  if (!phonebookMoveToBeginMID) return Qnil;
92
96
  jmethodID hasNextMID = getJNIClassMethod(env, phonebookCls, "hasNext", "()Z");
@@ -96,9 +100,16 @@ RHO_GLOBAL VALUE getallPhonebookRecords(void* pb)
96
100
  jmethodID contactIdMID = getJNIClassMethod(env, contactCls, "id", "()Ljava/lang/String;");
97
101
  if (!contactIdMID) return Qnil;
98
102
 
103
+ jmethodID contactGetFieldMID = getJNIClassMethod(env, contactCls, "getField", "(I)Ljava/lang/String;");
104
+ if (!contactGetFieldMID) return Qnil;
105
+
106
+
107
+ env->CallVoidMethod(phonebookObj, phonebookPrepareFullListMID);
108
+
99
109
  // pb.moveToBegin();
100
110
  env->CallVoidMethod(phonebookObj, phonebookMoveToBeginMID);
101
111
 
112
+
102
113
  VALUE valGc = rho_ruby_disable_gc();
103
114
  CHoldRubyValue hash(rho_ruby_createHash());
104
115
  // while(pb.hasNext())
@@ -111,18 +122,33 @@ RHO_GLOBAL VALUE getallPhonebookRecords(void* pb)
111
122
  jstring idObj = (jstring)env->CallObjectMethod(contactObj, contactIdMID);
112
123
  if (!idObj) return Qnil;
113
124
 
114
- addHashToHash(hash, rho_cast<std::string>(idObj).c_str(), createHashFromContact(contactObj));
125
+ //addHashToHash(hash, rho_cast<std::string>(idObj).c_str(), createHashFromContact(contactObj));
126
+ CHoldRubyValue contactHash(rho_ruby_createHash());
127
+ // contact.moveToBegin();
128
+
129
+ int i;
130
+ for (i = 0; i < PB_FIELDS_COUNT; i++) {
131
+ jstring value = (jstring)env->CallObjectMethod(contactObj, contactGetFieldMID, i);
132
+ if (value != NULL) {
133
+ addStrToHash(contactHash, field_names[i], rho_cast<std::string>(value).c_str());
134
+ env->DeleteLocalRef(value);
135
+ }
136
+ }
137
+
138
+ addHashToHash(hash, rho_cast<std::string>(idObj).c_str(), contactHash);
115
139
 
116
140
  env->DeleteLocalRef(idObj);
117
141
  env->DeleteLocalRef(contactObj);
118
142
  }
119
143
 
120
144
  rho_ruby_enable_gc(valGc);
145
+ if (logging_enable) RAWLOG_INFO("getallPhonebookRecords() FINISH");
121
146
  return hash;
122
147
  }
123
148
 
124
149
  RHO_GLOBAL void* openPhonebookRecord(void* pb, char* id)
125
150
  {
151
+ if (logging_enable) RAWLOG_INFO("openPhonebookRecord() START");
126
152
  JNIEnv *env = jnienv();
127
153
  jobject obj = (jobject)pb;
128
154
  jclass cls = getJNIClass(RHODES_JAVA_CLASS_PHONEBOOK);
@@ -136,32 +162,50 @@ RHO_GLOBAL void* openPhonebookRecord(void* pb, char* id)
136
162
  if (!recordObj) return NULL;
137
163
  jobject retval = env->NewGlobalRef(recordObj);
138
164
  env->DeleteLocalRef(recordObj);
165
+ if (logging_enable) RAWLOG_INFO("openPhonebookRecord() FINISH");
139
166
  if (!retval) return NULL;
140
167
  return retval;
141
168
  }
142
169
 
143
170
  RHO_GLOBAL VALUE getPhonebookRecord(void* pb, char* id)
144
171
  {
172
+ if (logging_enable) RAWLOG_INFO("getPhonebookRecord() START");
145
173
  jobject recordObj = (jobject)openPhonebookRecord(pb, id);
146
- if (!recordObj)
174
+ if (!recordObj) {
175
+ if (logging_enable) RAWLOG_INFO("getPhonebookRecord() FINISH return NIL");
147
176
  return Qnil;
177
+ }
148
178
  VALUE retval = createHashFromContact(recordObj);
149
179
  jnienv()->DeleteGlobalRef(recordObj);
180
+ if (logging_enable) RAWLOG_INFO("getPhonebookRecord() FINISH");
150
181
  return retval;
151
182
  }
152
183
 
153
184
  static VALUE getRecord(void *pb, const char *name)
154
185
  {
186
+ if (logging_enable) RAWLOG_INFO("getRecord() START");
155
187
  jobject obj = (jobject)pb;
156
188
  JNIEnv *env = jnienv();
189
+ if (!env) {
190
+ if (logging_enable) RAWLOG_INFO("getRecord() FINISH return NIL0");
191
+ return Qnil;
192
+ }
157
193
  jclass cls = getJNIClass(RHODES_JAVA_CLASS_PHONEBOOK);
158
- if (!cls) return Qnil;
194
+ if (!cls) {
195
+ if (logging_enable) RAWLOG_INFO("getRecord() FINISH return NIL1");
196
+ return Qnil;
197
+ }
159
198
  jmethodID mid = getJNIClassMethod(env, cls, name, "()Lcom/rhomobile/rhodes/phonebook/Contact;");
160
- if (!mid) return Qnil;
161
-
199
+ if (!mid) {
200
+ if (logging_enable) RAWLOG_INFO("getRecord() FINISH return NIL2");
201
+ return Qnil;
202
+ }
162
203
  jobject recordObj = env->CallObjectMethod(obj, mid);
163
- if (!recordObj)
204
+ if (!recordObj) {
205
+ if (logging_enable) RAWLOG_INFO("getRecord() FINISH return NIL");
164
206
  return Qnil;
207
+ }
208
+ if (logging_enable) RAWLOG_INFO("getRecord() FINISH");
165
209
  return createHashFromContact(recordObj);
166
210
  }
167
211
 
@@ -189,19 +233,36 @@ RHO_GLOBAL void* createRecord(void* pb)
189
233
  return obj;
190
234
  }
191
235
 
236
+ int get_value_index_by_name(char* name) {
237
+ int i;
238
+ for (i = 0; i < PB_FIELDS_COUNT; i++) {
239
+ if (strcmp(name, field_names[i]) == 0) {
240
+ return i;
241
+ }
242
+ }
243
+ return -1;
244
+ }
245
+
192
246
  RHO_GLOBAL int setRecordValue(void* record, char* property, char* value)
193
247
  {
194
248
  jobject contactObj = (jobject)record;
195
249
  JNIEnv *env = jnienv();
196
250
  jclass contactCls = getJNIClass(RHODES_JAVA_CLASS_CONTACT);
197
251
  if (!contactCls) return 0;
198
- jmethodID mid = getJNIClassMethod(env, contactCls, "setField", "(Ljava/lang/String;Ljava/lang/String;)V");
252
+ jmethodID mid = getJNIClassMethod(env, contactCls, "setField", "(ILjava/lang/String;)V");
199
253
  if (!mid) return 0;
200
254
 
201
- jstring objProperty = rho_cast<jstring>(property);
255
+ //jstring objProperty = rho_cast<jstring>(property);
202
256
  jstring objValue = rho_cast<jstring>(value);
203
- env->CallVoidMethod(contactObj, mid, objProperty, objValue);
204
- env->DeleteLocalRef(objProperty);
257
+
258
+ int index = get_value_index_by_name(property);
259
+ if (index >= 0) {
260
+ env->CallVoidMethod(contactObj, mid, index, objValue);
261
+ }
262
+ else {
263
+ RAWLOG_ERROR("Phonebook.cpp invalid property name for Contact Record");
264
+ }
265
+ //env->DeleteLocalRef(objProperty);
205
266
  env->DeleteLocalRef(objValue);
206
267
  return 1;
207
268
  }