rhodes 5.5.0.3 → 5.5.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/lib/commonAPI/coreapi/ext/platform/android/src/com/rho/notification/NotificationSingleton.java +20 -8
  4. data/lib/commonAPI/coreapi/ext/platform/iphone/cpp_based_impl/SystemImpl.mm +1 -2
  5. data/lib/commonAPI/coreapi/ext/system.xml +1 -1
  6. data/platform/android/build/android.rake +1 -0
  7. data/platform/iphone/Classes/AppManager/AppManager.m +44 -3
  8. data/platform/iphone/Classes/NativeView/RhoNativeViewManager.mm +4 -3
  9. data/platform/iphone/Classes/NativeView/RhoNativeViewManagerOC.h +1 -1
  10. data/platform/iphone/Classes/RhoMainView.h +8 -2
  11. data/platform/iphone/Classes/RhoUIWebView.h +75 -0
  12. data/platform/iphone/Classes/RhoUIWebView.m +142 -0
  13. data/platform/iphone/Classes/RhoWKWebView.h +87 -0
  14. data/platform/iphone/Classes/RhoWKWebView.m +187 -0
  15. data/platform/iphone/Classes/RhoWebView.h +72 -0
  16. data/platform/iphone/Classes/RhoWebViewFabrique.h +35 -0
  17. data/platform/iphone/Classes/RhoWebViewFabrique.m +87 -0
  18. data/platform/iphone/Classes/Rhodes.m +17 -6
  19. data/platform/iphone/Classes/Signature.old/SignatureDelegate.m +11 -4
  20. data/platform/iphone/Classes/Signature/SignatureDelegate.m +3 -4
  21. data/platform/iphone/Classes/SimpleMainView.h +7 -5
  22. data/platform/iphone/Classes/SimpleMainView.m +174 -179
  23. data/platform/iphone/Classes/SplitView/RightViewController.h +2 -2
  24. data/platform/iphone/Classes/SplitView/RightViewController.m +9 -10
  25. data/platform/iphone/Classes/SplitView/SplittedMainView.h +2 -3
  26. data/platform/iphone/Classes/SplitView/SplittedMainView.m +10 -7
  27. data/platform/iphone/Classes/TabbedMainView.h +2 -1
  28. data/platform/iphone/Classes/TabbedMainView.m +13 -10
  29. data/platform/iphone/Classes/URLProtocol/CRhoURLProtocol.m +21 -5
  30. data/platform/iphone/Classes/WebView.m +1 -1
  31. data/platform/iphone/RhoAppBaseLib/RhoAppBaseLib.xcodeproj/project.pbxproj +40 -3
  32. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +4 -0
  33. data/platform/iphone/rbuild/iphone.rake +51 -0
  34. data/platform/shared/common/RhoNativeViewManager.h +9 -9
  35. data/platform/shared/common/RhodesApp.cpp +13 -1
  36. data/platform/shared/net/HttpServer.cpp +12 -2
  37. data/platform/shared/qt/rhodes/ExternalWebView.ui +11 -2
  38. data/platform/shared/qt/rhodes/QtMainWindow.cpp +9 -7
  39. data/platform/shared/qt/rhodes/QtMainWindow.ui +13 -4
  40. data/platform/shared/qt/rhodes/qkineticscroller.cpp +1245 -0
  41. data/platform/shared/qt/rhodes/qkineticscroller.h +165 -0
  42. data/platform/shared/qt/rhodes/qkineticscroller_p.h +168 -0
  43. data/platform/shared/qt/rhodes/qtflickgesture.cpp +696 -0
  44. data/platform/shared/qt/rhodes/qtflickgesture_p.h +107 -0
  45. data/platform/shared/qt/rhodes/qtscroller.cpp +2080 -0
  46. data/platform/shared/qt/rhodes/qtscroller.h +138 -0
  47. data/platform/shared/qt/rhodes/qtscroller_p.h +205 -0
  48. data/platform/shared/qt/rhodes/qtscrollerfilter.cpp +350 -0
  49. data/platform/shared/qt/rhodes/qtscrollerfilter_p.h +110 -0
  50. data/platform/shared/qt/rhodes/qtscrollerproperties.cpp +412 -0
  51. data/platform/shared/qt/rhodes/qtscrollerproperties.h +135 -0
  52. data/platform/shared/qt/rhodes/qtscrollerproperties_p.h +90 -0
  53. data/platform/shared/qt/rhodes/qtscrollevent.cpp +190 -0
  54. data/platform/shared/qt/rhodes/qtscrollevent.h +100 -0
  55. data/platform/shared/qt/rhodes/qtscrollevent_p.h +33 -0
  56. data/platform/shared/qt/rhodes/qwebviewkineticscroller.cpp +347 -0
  57. data/platform/shared/qt/rhodes/qwebviewkineticscroller.h +90 -0
  58. data/platform/shared/qt/rhodes/qwebviewselectionsuppressor.h +113 -0
  59. data/platform/shared/qt/rhodes/rhodes.pro +19 -0
  60. data/res/generators/rhogen.rb +307 -15
  61. data/res/generators/templates/application/app/Settings/err_sync.erb +12 -6
  62. data/res/generators/templates/application/app/Settings/home.erb +32 -17
  63. data/res/generators/templates/application/app/Settings/index.erb +55 -26
  64. data/res/generators/templates/application/app/Settings/javascript_index.html +111 -0
  65. data/res/generators/templates/application/app/Settings/javascript_login.html +65 -0
  66. data/res/generators/templates/application/app/Settings/login.erb +25 -19
  67. data/res/generators/templates/application/app/Settings/reset.erb +18 -9
  68. data/res/generators/templates/application/app/Settings/wait.erb +10 -7
  69. data/res/generators/templates/application/app/index.erb +32 -20
  70. data/res/generators/templates/application/app/javascript_index.html +66 -0
  71. data/res/generators/templates/application/app/javascript_index.js +250 -0
  72. data/res/generators/templates/application/app/layout.erb +12 -67
  73. data/res/generators/templates/application/javascript_build.yml +41 -0
  74. data/res/generators/templates/application/javascript_rhoconfig.txt +123 -0
  75. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap-theme.css +587 -0
  76. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap-theme.css.map +1 -0
  77. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap-theme.min.css +6 -0
  78. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap-theme.min.css.map +1 -0
  79. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap.css +6757 -0
  80. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap.css.map +1 -0
  81. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap.min.css +6 -0
  82. data/res/generators/templates/application/public/bootstrap-3.3.7/css/bootstrap.min.css.map +1 -0
  83. data/res/generators/templates/application/public/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot +0 -0
  84. data/res/generators/templates/application/public/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg +288 -0
  85. data/res/generators/templates/application/public/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf +0 -0
  86. data/res/generators/templates/application/public/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff +0 -0
  87. data/res/generators/templates/application/public/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2 +0 -0
  88. data/res/generators/templates/application/public/bootstrap-3.3.7/js/bootstrap.js +2377 -0
  89. data/res/generators/templates/application/public/bootstrap-3.3.7/js/bootstrap.min.js +7 -0
  90. data/res/generators/templates/application/public/bootstrap-3.3.7/js/npm.js +13 -0
  91. data/res/generators/templates/application/public/css/style.css +3 -0
  92. data/res/generators/templates/application/public/jquery/jquery-3.1.1.min.js +4 -0
  93. data/res/generators/templates/application/public/jquery/jquery-3.1.1.min.map +1 -0
  94. data/res/generators/templates/application/rhoconfig.txt +16 -0
  95. data/res/generators/templates/iphone_project/Bremen7.xcodeproj/project.pbxproj +4 -0
  96. data/res/generators/templates/model/edit.erb +22 -21
  97. data/res/generators/templates/model/index.erb +24 -22
  98. data/res/generators/templates/model/javascript_edit.html +65 -0
  99. data/res/generators/templates/model/javascript_index.html +56 -0
  100. data/res/generators/templates/model/javascript_index.js +83 -0
  101. data/res/generators/templates/model/javascript_model.js +16 -0
  102. data/res/generators/templates/model/javascript_new.html +64 -0
  103. data/res/generators/templates/model/javascript_show.html +66 -0
  104. data/res/generators/templates/model/new.erb +22 -19
  105. data/res/generators/templates/model/show.erb +22 -14
  106. data/res/prebuild_base_app/app/index.erb +31 -18
  107. data/res/prebuild_base_app/app/layout.erb +11 -56
  108. data/version +1 -1
  109. metadata +59 -24
  110. data/res/generators/templates/application/public/css/android.css +0 -418
  111. data/res/generators/templates/application/public/css/iphone.css +0 -378
  112. data/res/generators/templates/application/public/css/jqmobile-patch.css +0 -62
  113. data/res/generators/templates/application/public/css/re_webkit.css +0 -736
  114. data/res/generators/templates/application/public/css/re_webkit_flat.css +0 -753
  115. data/res/generators/templates/application/public/css/windows_mobile.css +0 -327
  116. data/res/generators/templates/application/public/jqmobile/images/ajax-loader.gif +0 -0
  117. data/res/generators/templates/application/public/jqmobile/images/icon-search-black.png +0 -0
  118. data/res/generators/templates/application/public/jqmobile/images/icons-18-black.png +0 -0
  119. data/res/generators/templates/application/public/jqmobile/images/icons-18-white.png +0 -0
  120. data/res/generators/templates/application/public/jqmobile/images/icons-36-black.png +0 -0
  121. data/res/generators/templates/application/public/jqmobile/images/icons-36-white.png +0 -0
  122. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.4.5.min.css +0 -3
  123. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.4.5.min.js +0 -10
  124. data/res/generators/templates/application/public/jqmobile/jquery.mobile-1.4.5.min.map +0 -1
  125. data/res/generators/templates/application/public/jqmobile/jquery.mobile.structure-1.4.5.min.css +0 -3
  126. data/res/generators/templates/application/public/jqmobile/jquery.mobile.theme-1.4.5.min.css +0 -3
  127. data/res/generators/templates/application/public/jquery/jquery-1.9.1.min.js +0 -5
  128. data/res/generators/templates/application/public/jquery/jquery-1.9.1.min.map +0 -1
  129. data/res/generators/templates/application/public/js/application.js +0 -1
  130. data/res/generators/templates/application/public/js/jqmobile-patch.js +0 -466
  131. data/res/generators/templates/application/public/js/syncengine.js +0 -504
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fefb632e42b9675b28aa6a3a099b8cbf67e76a7
4
- data.tar.gz: e76d92596810baaeb2c52cb82d2c37aff0fd709e
3
+ metadata.gz: 4b6a8fe4921a90ac277e6260888c303d0be2894d
4
+ data.tar.gz: f40242f22db04f9cad0845e3c6c3bd937ca8be79
5
5
  SHA512:
6
- metadata.gz: 7558439b9d27ba3f40ccea3fbe90c57649258a33d299fb8c6539e8be7ea1a331787255d3bae489b71d5a100eab409638b68f482e84b0588412dc6978a9caee84
7
- data.tar.gz: 775316f2f7e9ff1723dbc58dcb91204ca7e5004c4fb2df49f663d854054b07f358026e47f35e7b8b029570ebf907b3b321562b36e4b9469b0661d949f7f63a83
6
+ metadata.gz: 16e08d6a447f5df244cf071ff824b7b5178cc8ee33002236e4e83b7840e54bc74520ecb958c548c9cbd88a82e39a09e5fada56fa6a21c439ab56b1cd92132429
7
+ data.tar.gz: 5eaa670bce2d1496314a456f4c651973694002bf4c291e6fb7e4ebd73d3a397fcb5e6249c68c65a8fb6d0189d57a3af197495c20304ce7d4656263543baf5308
data/README.md CHANGED
@@ -1,3 +1,13 @@
1
+ # Current state of Rhomobile solution
2
+
3
+ Currently Rhomobile solution supported and improved by TAU Technologies (partner of Zebra Technologies).
4
+ For questions on commercial support contact [contact mail](mailto:info@tau-technologies.com) or reach out to the [TAU Technologies website](http://www.tau-technologies.com).
5
+
6
+ Current actual version is Rhomobile Suite 5.5. [Download RMS 5.5](http://rhomobile.tau-technologies.com/index.html)
7
+
8
+ Actual documentation located on [RMS 5.5 documentation](http://docs.tau-technologies.com/en/5.5/home)
9
+
10
+
1
11
  # RhoMobile Open Source Documentation
2
12
 
3
13
  This page contains links to documentation and source-code repositories for the RhoMobile Suite, which has been released by Zebra Technologies to the open source community.
@@ -37,6 +37,7 @@ import com.rho.notification.INotificationSingleton;
37
37
  import com.rhomobile.rhodes.Logger;
38
38
  import com.rhomobile.rhodes.R;
39
39
  import com.rhomobile.rhodes.RhodesActivity;
40
+ import com.rhomobile.rhodes.RhodesService;
40
41
  import com.rhomobile.rhodes.RhodesApplication;
41
42
  import com.rhomobile.rhodes.api.IMethodResult;
42
43
  import com.rhomobile.rhodes.api.MethodResult;
@@ -212,15 +213,26 @@ public class NotificationSingleton implements INotificationSingleton
212
213
 
213
214
  if (duration != 0)
214
215
  {
215
- Activity activity = RhodesActivity.safeGetInstance();
216
- if(vibrator != null) vibrator.cancel();
217
- vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
218
-
219
- if ( duration > 15000 ) {
220
- duration = 15000;
216
+ Context context = null;
217
+ try {
218
+ context = RhodesService.getContext();
219
+ }
220
+ catch (IllegalStateException e) {
221
+ context = null;
222
+ Logger.D(TAG, "Rhodes main Service (com.rhomobile.rhodes.RhodesService) is not run !!!");
223
+ }
224
+ if (context != null) {
225
+ if(vibrator != null) vibrator.cancel();
226
+ vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
227
+
228
+ if ( duration > 15000 ) {
229
+ duration = 15000;
230
+ }
231
+ vibrator.vibrate(duration > 0 ? duration : 1000);
232
+ }
233
+ else {
234
+ Logger.D(TAG, "Can not vibrate, because can not get Rhodes main Context !!!");
221
235
  }
222
-
223
- vibrator.vibrate(duration > 0 ? duration : 1000);
224
236
  }
225
237
  }
226
238
 
@@ -138,8 +138,7 @@ namespace rho {
138
138
 
139
139
  void SystemImplIphone::getPhoneId(rho::apiGenerator::CMethodResult& result)
140
140
  {
141
- //getIphoneProperty("phone_id", result);
142
- result.set("");
141
+ getIphoneProperty("phone_id", result);
143
142
  }
144
143
 
145
144
  void SystemImplIphone::getDeviceName(rho::apiGenerator::CMethodResult& result)
@@ -98,7 +98,7 @@ Be sure to review the [Ruby API Usage](/guide/api_ruby) guide for important info
98
98
  </PROPERTY>
99
99
  <PROPERTY name="phoneId" type="STRING" readOnly="true">
100
100
  <DESC>Hardware based ID. It depends on capabilities configured for an application and has to remain same even across application uninstall/install.</DESC>
101
- <PLATFORM>WM, CE, Android</PLATFORM>
101
+ <PLATFORM>WM, CE, iOS, Android</PLATFORM>
102
102
  </PROPERTY>
103
103
  <PROPERTY name="deviceName" type="STRING" readOnly="true">
104
104
  <DESC>Name of device application running on. Examples: '9000' (BB), 'iPhone', 'dream' (Android). In Consumer Android device, name of the Industrial Design along with manufacturer name shall be shown. </DESC>
@@ -1901,6 +1901,7 @@ namespace "build" do
1901
1901
  #next
1902
1902
  end
1903
1903
 
1904
+ next if ((!package) or (package.empty?))
1904
1905
 
1905
1906
  r_dir = File.join $tmpdir, 'gen', package.split('.')
1906
1907
  mkdir_p r_dir
@@ -48,6 +48,8 @@
48
48
  #import "common/app_build_configs.h"
49
49
 
50
50
  #include <sys/xattr.h>
51
+ #include <sys/types.h>
52
+ #include <sys/sysctl.h>
51
53
 
52
54
  #undef DEFAULT_LOGCATEGORY
53
55
  #define DEFAULT_LOGCATEGORY "RhodesApp"
@@ -419,8 +421,9 @@ BOOL isPathIsSymLink(NSFileManager *fileManager, NSString* path) {
419
421
  }
420
422
  }
421
423
  }
422
-
424
+ NSLog(@"Create rhodes logging and rhoconfig.txt loading");
423
425
  rho_logconf_Init_with_separate_user_path(rho_native_rhopath(), rho_native_rhopath(), "", rho_native_rhouserpath());
426
+ NSLog(@"Create rhodes app");
424
427
  rho_rhodesapp_create_with_separate_user_path(rho_native_rhopath(), rho_native_rhouserpath());
425
428
  RAWLOG_INFO("Rhodes started");
426
429
  }
@@ -765,6 +768,8 @@ static const double RHO_IPHONE4_PPI = 326.0;
765
768
  // http://www.apple.com/ipad/specs/
766
769
  static const double RHO_IPAD_PPI = 132.0;
767
770
  static const double RHO_NEW_IPAD_PPI = 264.0;
771
+ static const double RHO_IPAD_MINI_PPI = 163.0;
772
+ static const double RHO_IPAD_MINI_RETINA_PPI = 326.0;
768
773
 
769
774
  static float get_scale() {
770
775
  float scales = 1;//[[UIScreen mainScreen] scale];
@@ -787,6 +792,24 @@ int rho_sysimpl_get_property_iphone(char* szPropName, NSObject** resValue)
787
792
  {
788
793
  if (strcasecmp("platform", szPropName) == 0)
789
794
  {*resValue = [NSString stringWithUTF8String:"APPLE"]; return 1;}
795
+ else if (strcasecmp("phone_id", szPropName) == 0){
796
+ NSString* uniqueIdentifier = nil;
797
+ if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
798
+ // iOS 6+
799
+ uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
800
+ } else {
801
+ // before iOS 6, so just generate an identifier and store it
802
+ uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"];
803
+ if( !uniqueIdentifier ) {
804
+ CFUUIDRef uuid = CFUUIDCreate(NULL);
805
+ uniqueIdentifier = (NSString*)CFUUIDCreateString(NULL, uuid);
806
+ CFRelease(uuid);
807
+ [[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"];
808
+ }
809
+ }
810
+ *resValue = uniqueIdentifier;
811
+ return 1;
812
+ }
790
813
  else if (strcasecmp("locale", szPropName) == 0)
791
814
  {*resValue = rho_sys_get_locale_iphone(); return 1; }
792
815
  else if (strcasecmp("country", szPropName) == 0) {
@@ -835,8 +858,26 @@ int rho_sysimpl_get_property_iphone(char* szPropName, NSObject** resValue)
835
858
  strcasecmp("ppi_y", szPropName) == 0) {
836
859
  #ifdef __IPHONE_3_2
837
860
  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
838
- if (get_scale() > 1.2) {
839
- *resValue = [NSNumber numberWithDouble:RHO_NEW_IPAD_PPI];
861
+
862
+ //Fix DPI issue on Ipad Mini
863
+ //get the device model name
864
+ size_t size;
865
+ sysctlbyname("hw.machine", NULL, &size, NULL, 0);
866
+ char *machine = malloc(size);
867
+ sysctlbyname("hw.machine", machine, &size, NULL, 0);
868
+ NSString *platform = [NSString stringWithUTF8String:machine];
869
+ free(machine);
870
+
871
+ // IPad Mini
872
+ if([platform isEqualToString:@"iPad2,5"] || [platform isEqualToString:@"iPad2,6"] || [platform isEqualToString:@"iPad2,7"]){
873
+ *resValue = [NSNumber numberWithDouble:RHO_IPAD_MINI_PPI];
874
+ }
875
+ // IPad Mini Retina
876
+ else if ([platform isEqualToString:@"iPad4,4"] || [platform isEqualToString:@"iPad4,5"] || [platform isEqualToString:@"iPad4,6"] || [platform isEqualToString:@"iPad4,7"] || [platform isEqualToString:@"iPad4,8"] || [platform isEqualToString:@"iPad4,9"] || [platform isEqualToString:@"iPad5,1"] || [platform isEqualToString:@"iPad5,2"]) {
877
+ *resValue = [NSNumber numberWithDouble:RHO_IPAD_MINI_RETINA_PPI];
878
+ }
879
+ else if (get_scale() > 1.2) {
880
+ *resValue = [NSNumber numberWithDouble:RHO_NEW_IPAD_PPI];
840
881
  }
841
882
  else {
842
883
  *resValue = [NSNumber numberWithDouble:RHO_IPAD_PPI];
@@ -269,8 +269,9 @@ static RhoNativeViewManagerOC *instance = NULL;
269
269
  [sharedInstance.mProviders removeObjectForKey:viewType];
270
270
  }
271
271
 
272
- +(UIWebView*)getWebViewObject:(int)tab_index {
273
- return [[[Rhodes sharedInstance] mainView] getWebView:tab_index];
272
+ // UIView* for iPhone - ATTENTION !!! Now method return CONTAINER VIEW for WebView. For UIWebView is [UIWebView scrollView]. For WkWebView is [WKWebView scrollView] !!!
273
+ +(UIView*)getWebViewObject:(int)tab_index {
274
+ return [[[[Rhodes sharedInstance] mainView] getRhoWebView:tab_index] containerView];
274
275
  }
275
276
 
276
277
 
@@ -428,7 +429,7 @@ void RhoNativeViewManager::unregisterViewType(const char* viewType) {
428
429
  }
429
430
 
430
431
  // that function return native object used for display Web content :
431
- // UIWebView* for iPhone
432
+ // // UIView* for iPhone - ATTENTION !!! Now method return CONTAINER VIEW for WebView. For UIWebView is [UIWebView scrollView]. For WkWebView is [WKWebView scrollView] !!!
432
433
  // jobject for Android - jobect is android.webkit.WebView class type
433
434
  // HWND for Windows Mobile
434
435
  void* RhoNativeViewManager::getWebViewObject(int tab_index) {
@@ -66,7 +66,7 @@
66
66
 
67
67
  +(void)registerViewType:(NSString*)viewType factory:(id)factory;
68
68
  +(void)unregisterViewType:(NSString*)viewType;
69
- +(UIWebView*)getWebViewObject:(int)tab_index;
69
+ +(UIView*)getWebViewObject:(int)tab_index;
70
70
 
71
71
  +(int)create_native_view:(NSString*)viewType tab_index:(int)tab_index params:(VALUE)params;
72
72
  +(void)navigate_native_view:(int)nv_id message:(NSString*)message;
@@ -25,12 +25,18 @@
25
25
  *------------------------------------------------------------------------*/
26
26
 
27
27
  #import <UIKit/UIKit.h>
28
+ #import "RhoWebView.h"
29
+
30
+
31
+ #define RHO_TAG_WEBVIEW 1
32
+ #define RHO_TAG_TOOLBAR 2
33
+ #define RHO_TAG_NAVBAR 3
28
34
 
29
35
  @protocol RhoMainView
30
36
 
31
37
  - (UIView*)view;
32
38
 
33
- - (UIWebView*)detachWebView;
39
+ - (id<RhoWebView,NSObject>)detachRhoWebView;
34
40
 
35
41
  - (void)loadHTMLString:(NSString*)data;
36
42
 
@@ -51,7 +57,7 @@
51
57
  - (void)addNavBar:(NSString*)title left:(NSArray*)left right:(NSArray*)right;
52
58
  - (void)removeNavBar;
53
59
 
54
- - (UIWebView*)getWebView:(int)tab_index;
60
+ - (id<RhoWebView,NSObject>)getRhoWebView:(int)tab_index;
55
61
 
56
62
  -(void)openNativeView:(UIView*)nv_view tab_index:(int)tab_index;
57
63
  -(void)closeNativeView:(int)tab_index;
@@ -0,0 +1,75 @@
1
+ /*------------------------------------------------------------------------
2
+ * (The MIT License)
3
+ *
4
+ * Copyright (c) 2008-2016 TAU Technologies, Inc.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in
14
+ * all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ * THE SOFTWARE.
23
+ *
24
+ * http://tau-technologies.com
25
+ *------------------------------------------------------------------------*/
26
+
27
+ #import <UIKit/UIKit.h>
28
+ #import "RhoWebView.h"
29
+
30
+ @interface RhoUIWebView : NSObject<RhoWebView, UIWebViewDelegate> {
31
+ UIWebView *webview;
32
+ id<RhoWebViewDelegate,NSObject> delegate;
33
+ }
34
+
35
+ @property (nonatomic,retain) UIWebView *webview;
36
+ @property (nonatomic,retain) id<RhoWebViewDelegate,NSObject> delegate;
37
+
38
+ - (id)initWithFrame:(CGRect)frame;
39
+
40
+ - (void) setupDelegate:(id<RhoWebViewDelegate,NSObject>)delegate;
41
+
42
+ - (UIView*)view;
43
+
44
+ - (UIView*)containerView;
45
+
46
+ - (NSString*)currentLocation;
47
+
48
+ // UIWebView
49
+
50
+ - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
51
+
52
+ - (void)loadRequest:(NSURLRequest *)request;
53
+
54
+ - (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
55
+
56
+ - (void)stopLoading;
57
+
58
+ - (void)reload;
59
+
60
+ - (void)goBack;
61
+
62
+ - (void)goForward;
63
+
64
+
65
+ // UIWebViewDelegate
66
+
67
+ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
68
+
69
+ - (void)webViewDidStartLoad:(UIWebView *)webView;
70
+
71
+ - (void)webViewDidFinishLoad:(UIWebView *)webView;
72
+
73
+ - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
74
+
75
+ @end
@@ -0,0 +1,142 @@
1
+ /*------------------------------------------------------------------------
2
+ * (The MIT License)
3
+ *
4
+ * Copyright (c) 2008-2016 TAU Technologies, Inc.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in
14
+ * all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ * THE SOFTWARE.
23
+ *
24
+ * http://tau-technologies.com
25
+ *------------------------------------------------------------------------*/
26
+
27
+ #import "RhoUIWebView.h"
28
+ #import "RhoMainView.h"
29
+
30
+ #include "logging/RhoLog.h"
31
+ #include "common/RhoConf.h"
32
+
33
+
34
+ #undef DEFAULT_LOGCATEGORY
35
+ #define DEFAULT_LOGCATEGORY "RhoUIWebView"
36
+
37
+
38
+ @implementation RhoUIWebView
39
+
40
+ @synthesize webview, delegate;
41
+
42
+
43
+ - (id)initWithFrame:(CGRect)frame {
44
+ [self init];
45
+ UIWebView* w = [[UIWebView alloc] initWithFrame:frame];
46
+ w.scalesPageToFit = YES;
47
+ if ( !rho_conf_getBool("WebView.enableBounce") )
48
+ [[w scrollView] setBounces:NO];
49
+ w.userInteractionEnabled = YES;
50
+ w.multipleTouchEnabled = YES;
51
+ w.clipsToBounds = NO;
52
+ w.dataDetectorTypes = UIDataDetectorTypeNone;
53
+ w.delegate = self;
54
+ w.autoresizesSubviews = YES;
55
+ //w.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
56
+ w.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
57
+ w.tag = RHO_TAG_WEBVIEW;
58
+ //assert([w retainCount] == 1);
59
+ self.webview = w;
60
+
61
+
62
+
63
+ return self;
64
+ }
65
+
66
+ - (UIView*)view {
67
+ return self.webview;
68
+ }
69
+
70
+ - (NSString*)currentLocation {
71
+ return [[webview.request mainDocumentURL] absoluteString];
72
+ }
73
+
74
+ - (void) setupDelegate:(id<RhoWebViewDelegate,NSObject>)delegate {
75
+ self.delegate = delegate;
76
+ }
77
+
78
+ - (UIView*)containerView {
79
+ return self.webview.scrollView;
80
+ }
81
+
82
+
83
+
84
+
85
+ //UIWebView
86
+
87
+ - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script {
88
+ return [webview stringByEvaluatingJavaScriptFromString:script];
89
+ }
90
+
91
+ - (void)loadRequest:(NSURLRequest *)request {
92
+ [webview loadRequest:request];
93
+ }
94
+
95
+ - (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL {
96
+ [webview loadHTMLString:string baseURL:baseURL];
97
+ }
98
+
99
+ - (void)stopLoading {
100
+ [webview stopLoading];
101
+ }
102
+
103
+ - (void)reload {
104
+ [webview reload];
105
+ }
106
+
107
+ - (void)goBack {
108
+ [webview goBack];
109
+ }
110
+
111
+ - (void)goForward {
112
+ [webview goForward];
113
+ }
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+ // UIWebViewDelegate
122
+
123
+ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
124
+ if (delegate != nil) {
125
+ return [delegate shouldStartLoadWithRequest:self request:request navigationType:navigationType];
126
+ }
127
+ return YES;
128
+ }
129
+
130
+ - (void)webViewDidStartLoad:(UIWebView *)webView {
131
+ [delegate webViewDidStartLoad:self];
132
+ }
133
+
134
+ - (void)webViewDidFinishLoad:(UIWebView *)webView {
135
+ [delegate webViewDidFinishLoad:self];
136
+ }
137
+
138
+ - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
139
+ [delegate didFailLoadWithError:self error:error];
140
+ }
141
+
142
+ @end