rhodes 7.5.1 → 7.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +319 -0
  3. data/README.md +3 -15
  4. data/Rakefile +3 -0
  5. data/appveyor.yml +37 -32
  6. data/azure-pipelines.yml +1 -1
  7. data/bin/rhodes-setup +22 -8
  8. data/extensions/emdk3-manager/ext/platform/android/src/com/rho/emdk3/EMDK3Extension.java +14 -5
  9. data/extensions/instrumentation/ext/platform/android/src/com/rho/instrumentation/Instrumentation.java +29 -15
  10. data/extensions/rhoconnect-push/ext/rhoconnect-push/platform/android/src/com/rhomobile/rhoelements/ans/ANSManager.java +1 -1
  11. data/extensions/rhoelementsext/ext/rhoelementsext/platform/android/rhoelements_temp/src/com/rho/rhoelements/ElementsCore.java +12 -9
  12. data/extensions/rhoelementsext/ext/rhoelementsext/platform/android/rhoelements_temp/src/com/rho/rhoelements/graphics/BatteryIndicator.java +2 -2
  13. data/lib/commonAPI/barcode/ext/platform/qt/Barcode.pro +1 -1
  14. data/lib/commonAPI/barcode/ext/platform/qt/Barcode.pro.erb +2 -2
  15. data/lib/commonAPI/barcode/ext/platform/qt/src/qzxing/QZXing.pri +9 -21
  16. data/lib/commonAPI/barcode/ext.yml +1 -0
  17. data/lib/commonAPI/bluetooth/ext/platform/qt/Bluetooth.pro +1 -1
  18. data/lib/commonAPI/bluetooth/ext/platform/qt/Bluetooth.pro.erb +1 -1
  19. data/lib/commonAPI/bluetooth/ext/platform/qt/src/bluetooth/bluetoothhelper.h +1 -1
  20. data/lib/commonAPI/coreapi/RhoSystemApi.rb +6 -0
  21. data/lib/commonAPI/coreapi/ext/Intent.xml +4 -0
  22. data/lib/commonAPI/coreapi/ext/platform/android/src/com/rho/intent/IntentSingleton.java +6 -0
  23. data/lib/commonAPI/coreapi/ext/platform/android/src/com/rho/notification/Notification.java +2 -1
  24. data/lib/commonAPI/coreapi/ext/platform/android/src/com/rho/notification/NotificationScheduler.java +1 -1
  25. data/lib/commonAPI/coreapi/ext/platform/android/src/com/rho/webview/WebViewSingleton.java +40 -27
  26. data/lib/commonAPI/coreapi/ext/platform/iphone/cpp_based_impl/SystemImpl.mm +5 -6
  27. data/lib/commonAPI/coreapi/ext/platform/iphone/impl/Intent.h +1 -1
  28. data/lib/commonAPI/coreapi/ext/platform/iphone/impl/Intent.m +3 -1
  29. data/lib/commonAPI/coreapi/ext/platform/iphone/impl/NotificationSingleton.h +2 -1
  30. data/lib/commonAPI/coreapi/ext/platform/iphone/impl/NotificationSingleton.m +10 -0
  31. data/lib/commonAPI/coreapi/ext/platform/wm/src/IntentImpl.cpp +3 -0
  32. data/lib/commonAPI/coreapi/ext/shared/SystemImplBase.cpp +13 -0
  33. data/lib/commonAPI/coreapi/ext/shared/SystemImplBase.h +2 -0
  34. data/lib/commonAPI/coreapi/ext/system.xml +3 -0
  35. data/lib/commonAPI/mediacapture/ext/platform/android/ApplicationCameraActivity.erb +2 -2
  36. data/lib/commonAPI/mediacapture/ext/platform/android/ApplicationFileProvider.erb +1 -1
  37. data/lib/commonAPI/mediacapture/ext/platform/android/ext_java.files +1 -0
  38. data/lib/commonAPI/mediacapture/ext/platform/android/src/com/rho/camera/CameraObject.java +8 -4
  39. data/lib/commonAPI/mediacapture/ext/platform/android/src/com/rho/camera/CameraRhoListener.java +8 -0
  40. data/lib/commonAPI/mediacapture/ext/platform/android/src/com/rho/mediacapture/RhoCameraFileProvider.java +6 -0
  41. data/lib/commonAPI/mediacapture/ext/platform/qt/MediaCapture.pro.erb +1 -1
  42. data/lib/commonAPI/mediacapture/ext/platform/qt/Mediacapture.pro +1 -1
  43. data/lib/commonAPI/signature/ext/platform/iphone/impl/readme.txt +7 -0
  44. data/lib/commonAPI/signature/ext/platform/qt/Signature.pro +3 -10
  45. data/lib/commonAPI/signature/ext/platform/qt/Signature.pro.erb +2 -2
  46. data/lib/extensions/fcm-push/ext/iphone/Podfile +15 -2
  47. data/lib/extensions/fcm-push/ext/iphone/fcm-push.xcodeproj/project.pbxproj +6 -7
  48. data/lib/extensions/nfc/ext/platform/android/src/com/rhomobile/nfc/Nfc.java +2 -1
  49. data/lib/extensions/serialport/ext/serialport.pro +1 -1
  50. data/platform/android/Rhodes/jni/include/rhodes/JNIRhodes.h +1 -0
  51. data/platform/android/Rhodes/jni/src/fileapi.cpp +4 -0
  52. data/platform/android/Rhodes/res/drawable/baseline_check_24.xml +5 -0
  53. data/platform/android/Rhodes/res/drawable/baseline_check_240.xml +5 -0
  54. data/platform/android/Rhodes/res/drawable/baseline_close_24.xml +5 -0
  55. data/platform/android/Rhodes/res/drawable/baseline_close_240.xml +5 -0
  56. data/platform/android/Rhodes/res/layout/overlay_layout.xml +39 -0
  57. data/platform/android/Rhodes/res/layout/perrmission_alert_dialog.xml +267 -0
  58. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +183 -66
  59. data/platform/android/Rhodes/src/com/rhomobile/rhodes/LocalFileProvider.java +38 -6
  60. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoFileProvider.java +32 -0
  61. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +529 -89
  62. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +26 -4
  63. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +256 -160
  64. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/AbstractRhoExtension.java +14 -3
  65. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/IRhoExtManager.java +4 -0
  66. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/IRhoExtension.java +5 -4
  67. data/platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/RhoExtManagerImpl.java +79 -38
  68. data/platform/android/Rhodes/src/com/rhomobile/rhodes/geolocation/GeoLocation.java +6 -1
  69. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/CallReceiver.java +22 -0
  70. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/IKioskMode.java +11 -0
  71. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/KioskManager.java +18 -0
  72. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/MyAccessibilityService.java +230 -0
  73. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/MyNotificationListenerService.java +16 -0
  74. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/MyOverlayService.java +197 -0
  75. data/platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/PermissionManager.java +232 -0
  76. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +34 -8
  77. data/platform/android/Rhodes/src/com/rhomobile/rhodes/permissioncheck/CheckDrawable.java +53 -0
  78. data/platform/android/Rhodes/src/com/rhomobile/rhodes/permissioncheck/PermissionListGenerate.java +366 -0
  79. data/platform/android/Rhodes/src/com/rhomobile/rhodes/rhodes.iml +11 -0
  80. data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java +1 -0
  81. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/GoogleWebView.java +782 -41
  82. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoInputConnectionWrapper.java +146 -0
  83. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoInputListener.java +21 -0
  84. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoWebViewClient.java +92 -32
  85. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/TauWebViewOptions.java +118 -0
  86. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/WebSettingsProviderBase.java +18 -17
  87. data/platform/android/Rhodes/src/com/rhomobile/rhodes/webview/WebSettingsProviderEclairMR1.java +4 -4
  88. data/platform/android/build/RhodesSRC_build.files +13 -0
  89. data/platform/android/build/android-repack.rake +8 -1
  90. data/platform/android/build/android.rake +118 -51
  91. data/platform/android/build/android_tools.rb +1 -1
  92. data/platform/android/build/androidcommon.rb +13 -7
  93. data/platform/android/build/config.yml +4 -1
  94. data/platform/android/build/manifest_generator.rb +14 -10
  95. data/platform/android/build/maven_deps_extractor.rb +7 -1
  96. data/platform/android/build/ndkwrapper.rb +12 -0
  97. data/platform/android/proguard/proguard-base-rules.pro +5 -0
  98. data/platform/android/proguard/proguard.jar +0 -0
  99. data/platform/iphone/Classes/RhoAppBaseLib-Bridging-Header.h +4 -0
  100. data/platform/iphone/Classes/RhoAppBaseStandaloneLib-Bridging-Header.h +4 -0
  101. data/platform/iphone/Classes/RhoCryptAESGCM.swift +105 -0
  102. data/platform/iphone/Classes/RhoUIWebView.h +1 -1
  103. data/platform/iphone/Classes/RhoUIWebView.m +1 -1
  104. data/platform/iphone/Classes/RhoWKWebView.h +1 -1
  105. data/platform/iphone/Classes/RhoWKWebView.mm +32 -4
  106. data/platform/iphone/Classes/RhoWebView.h +1 -1
  107. data/platform/iphone/Classes/RhoWebViewFabrique.m +7 -1
  108. data/platform/iphone/Classes/SimpleMainView.m +5 -5
  109. data/platform/iphone/Classes/URLProtocol/CRhoURLProtocol.m +21 -10
  110. data/platform/iphone/Classes/rho/net/IPhoneNetRequest.mm +4 -0
  111. data/platform/iphone/Framework/RhoApplication/RhoApplication.xcodeproj/project.pbxproj +1 -1
  112. data/platform/iphone/Framework/Rhodes/Rhodes.xcodeproj/project.pbxproj +1 -1
  113. data/platform/iphone/RhoAppBaseLib/RhoAppBaseLib.xcodeproj/project.pbxproj +46 -1
  114. data/platform/iphone/RhoLib/RhoLib.xcodeproj/project.pbxproj +1 -1
  115. data/platform/iphone/curl/curl.xcodeproj/project.pbxproj +4 -1
  116. data/platform/iphone/rbuild/iphone.rake +9 -8
  117. data/platform/iphone/rhoextlib/rhoextlib.xcodeproj/project.pbxproj +4 -1
  118. data/platform/iphone/rhorubylib/rhorubylib.xcodeproj/project.pbxproj +1 -1
  119. data/platform/iphone/rhosynclib/rhosynclib.xcodeproj/project.pbxproj +1 -1
  120. data/platform/osx/bin/RhoSimulator/RhoSimulator.app.zip +0 -0
  121. data/platform/sailfish/build/{harbour-SailfishRhodes.pro.erb → SailfishRhodes.pro.erb} +10 -17
  122. data/platform/sailfish/build/rhodes.pro.erb +7 -17
  123. data/platform/sailfish/build/rpm/SailfishRhodes.desktop.erb +12 -0
  124. data/platform/sailfish/build/rpm/SailfishRhodes.erb +2 -0
  125. data/platform/sailfish/build/rpm/SailfishRhodes.spec.erb +43 -0
  126. data/platform/sailfish/build/rubylib.pro.erb +29 -29
  127. data/platform/sailfish/build/sailfish.rake +188 -180
  128. data/platform/sailfish/keys/regular_cert.pem +14 -0
  129. data/platform/sailfish/keys/regular_key.pem +4 -0
  130. data/platform/shared/common/RhodesApp.cpp +33 -9
  131. data/platform/shared/common/iphone/RhoCryptImpl.mm +130 -54
  132. data/platform/shared/qt/RhoSimulator.pro +1 -1
  133. data/platform/shared/qt/rhodes/rhodes.pro +4 -11
  134. data/platform/shared/qt/sailfish/SailfishRhodes.desktop +3 -4
  135. data/platform/shared/qt/sailfish/SailfishRhodes.pro +9 -10
  136. data/platform/shared/qt/sailfish/icons/108x108/108x108.png +0 -0
  137. data/platform/shared/qt/sailfish/privileges/sailfishrhodes +2 -0
  138. data/platform/shared/qt/sailfish/qml/pages/FirstPageWK.qml +7 -11
  139. data/platform/shared/qt/sailfish/qml/{harbour-sailfishrhodes.qml → sailfishrhodes.qml} +1 -1
  140. data/platform/shared/qt/sailfish/rpm/sailfishrhodes.spec +80 -0
  141. data/platform/shared/qt/sailfish/rpm/{harbour-sailfishrhodes.yaml → sailfishrhodes.yaml} +2 -2
  142. data/platform/shared/qt/sailfish/src/QtMainWindow.cpp +1 -1
  143. data/platform/shared/qt/sailfish/src/QtMainWindow.h +1 -1
  144. data/platform/shared/qt/sailfish/src/main.cpp +6 -38
  145. data/platform/shared/qt/sailfish/src/rootdelegate.h +2 -14
  146. data/platform/shared/ruby/aurora/ruby/config.h +386 -0
  147. data/platform/shared/ruby/aurora/ruby/constdefs.c +5866 -0
  148. data/platform/shared/ruby/aurora/ruby/constdefs.h +1788 -0
  149. data/platform/shared/sqlite/crypto.c +14 -0
  150. data/platform/win32/RhoSimulator/RhoSimulator.exe +0 -0
  151. data/platform/win32/build/rhodes.nsi +3 -3
  152. data/platform/win32/build/win32.rake +1 -1
  153. data/rakefile.rb +3 -0
  154. data/res/build-tools/iphonesim/build/Release/iphonesim_8 +4 -4
  155. data/res/generators/templates/application/AndroidManifest.erb +26 -5
  156. data/res/generators/templates/application/build.yml +14 -10
  157. data/res/generators/templates/application/resources/android/res/xml/provider_paths.xml +4 -0
  158. data/res/generators/templates/application/rhoconfig.txt +10 -1
  159. data/res/generators/templates/iphone_project/Bremen8.xcodeproj/project.pbxproj +24 -1
  160. data/res/generators/templates/iphone_project/Classes/SimpleSwiftClass.swift +20 -0
  161. data/res/generators/templates/iphone_project/Classes/rhorunner-Bridging-Header.h +4 -0
  162. data/rhobuild.yml.example +3 -3
  163. data/rhodes.gemspec +4 -2
  164. data/version +1 -1
  165. metadata +81 -26
  166. data/platform/sailfish/build/rho_build.cmd.erb +0 -14
  167. data/platform/sailfish/build/rho_clean.cmd.erb +0 -14
  168. data/platform/sailfish/build/rho_deploy.cmd.erb +0 -15
  169. data/platform/sailfish/build/rho_rpm.cmd.erb +0 -14
  170. data/platform/sailfish/build/rho_rpmvalidation.cmd.erb +0 -14
  171. data/platform/sailfish/build/rpm/harbour-SailfishRhodes.desktop.erb +0 -7
  172. data/platform/sailfish/build/rpm/harbour-SailfishRhodes.erb +0 -2
  173. data/platform/sailfish/build/rpm/harbour-SailfishRhodes.yaml.erb +0 -37
  174. data/platform/shared/qt/sailfish/harbour-sailfishrhodes.desktop +0 -6
  175. data/platform/shared/qt/sailfish/icons/108x108/harbour-sailfishrhodes.png +0 -0
  176. data/platform/shared/qt/sailfish/privileges/harbour-sailfishrhodes +0 -2
  177. data/platform/shared/qt/sailfish/qml/pages/FirstPageWE.qml +0 -236
  178. /data/platform/shared/qt/sailfish/icons/128x128/{harbour-sailfishrhodes.png → sailfishrhodes.png} +0 -0
  179. /data/platform/shared/qt/sailfish/icons/172x172/{harbour-sailfishrhodes.png → sailfishrhodes.png} +0 -0
  180. /data/platform/shared/qt/sailfish/icons/86x86/{harbour-sailfishrhodes.png → sailfishrhodes.png} +0 -0
@@ -0,0 +1,146 @@
1
+ package com.rhomobile.rhodes.webview;
2
+
3
+ import com.rhomobile.rhodes.Logger;
4
+ import com.rhomobile.rhodes.RhodesActivity;
5
+ import com.rhomobile.rhodes.mapview.TouchHandler;
6
+
7
+ import android.content.Context;
8
+ import android.inputmethodservice.InputMethodService;
9
+ import android.view.inputmethod.InputConnection;
10
+ import android.view.inputmethod.InputConnectionWrapper;
11
+ import android.os.Looper;
12
+ import android.os.Handler;
13
+ import android.util.Log;
14
+ import android.view.KeyEvent;
15
+ import android.view.inputmethod.ExtractedTextRequest;
16
+ import android.view.inputmethod.ExtractedText;
17
+
18
+ import android.widget.Toast;
19
+
20
+
21
+
22
+
23
+ public class RhoInputConnectionWrapper extends InputConnectionWrapper {
24
+
25
+ private String TAG = RhoInputConnectionWrapper.class.getSimpleName();
26
+
27
+ public RhoInputConnectionWrapper (InputConnection target){
28
+ super(target, true);
29
+ }
30
+
31
+ @Override
32
+ public boolean commitText(CharSequence text, int newCursorPosition) {
33
+ Logger.T(this.TAG, "================================commitText================================");
34
+ Logger.T(this.TAG, text.toString());
35
+ Logger.T(this.TAG, "================================");
36
+
37
+ playSound();
38
+
39
+ return super.commitText(text, newCursorPosition);
40
+ }
41
+
42
+ @Override
43
+ public boolean sendKeyEvent(KeyEvent event) {
44
+ Logger.T(this.TAG, "================================sendKeyEvent================================");
45
+ Logger.T(this.TAG, event.toString());
46
+ Logger.T(this.TAG, "================================");
47
+ playSound();
48
+
49
+ return super.sendKeyEvent(event);
50
+ }
51
+
52
+ private void playSound(){
53
+ RhoInputListener.IRhoInputListener listener = RhoInputListener.getListener();
54
+ if (listener != null) {
55
+ listener.onTextInput();
56
+ }
57
+ }
58
+
59
+
60
+ //region compulsory methods
61
+
62
+ @Override
63
+ public Handler getHandler() {
64
+ Logger.T(this.TAG, ".getHandler()");
65
+ Handler h = null;
66
+ try {
67
+ h = super.getHandler();
68
+ }
69
+ catch (Exception ex) {
70
+ Logger.E(this.TAG, ".getHandler() ERROR = "+ex.getMessage());
71
+ }
72
+ if (h == null) {
73
+ h = new Handler(Looper.getMainLooper());
74
+ }
75
+ return h;
76
+ }
77
+
78
+ @Override
79
+ public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {
80
+ Logger.T(this.TAG, ".getExtractedText()");
81
+ try {
82
+ return super.getExtractedText(request, flags);
83
+ } catch (Exception e){
84
+ Logger.E(this.TAG, e.toString());
85
+ }
86
+ return null;
87
+ }
88
+
89
+ @Override
90
+ public boolean finishComposingText() {
91
+ Logger.T(this.TAG, ".finishComposingText()");
92
+
93
+ try{
94
+ return super.finishComposingText();
95
+ } catch (Exception e){
96
+ Logger.E(this.TAG, e.toString());
97
+ }
98
+ return false;
99
+ }
100
+
101
+ @Override
102
+ public void closeConnection() {
103
+ Logger.T(this.TAG, ".closeConnection()");
104
+ try {
105
+ super.closeConnection();
106
+ }
107
+ catch (Exception ex) {
108
+ Logger.E(this.TAG, ".closeConnection() ERROR = "+ex.getMessage());
109
+ }
110
+ }
111
+
112
+ @Override
113
+ public boolean performEditorAction(int editorAction) {
114
+ Logger.T(this.TAG, "================================sendKeyEvent================================");
115
+ Logger.T(this.TAG, Integer.toString(editorAction));
116
+ Logger.T(this.TAG, "================================");
117
+ return super.performEditorAction(editorAction);
118
+ }
119
+
120
+ @Override
121
+ public boolean requestCursorUpdates(int cursorUpdateMode) {
122
+ Logger.T(this.TAG, ".requestCursorUpdates()");
123
+ try {
124
+ return super.requestCursorUpdates(cursorUpdateMode);
125
+ } catch(Exception e){
126
+ Logger.E(this.TAG, e.toString());
127
+ }
128
+ return false;
129
+ }
130
+ //endregion
131
+
132
+
133
+ @Override
134
+ public boolean reportFullscreenMode(boolean enabled) {
135
+ Logger.T(this.TAG, ".reportFullscreenMode()");
136
+ boolean h = false;
137
+ try {
138
+ h = super.reportFullscreenMode(enabled);
139
+ }
140
+ catch (Exception ex) {
141
+ Logger.E(this.TAG, ".reportFullscreenMode() ERROR = "+ex.getMessage());
142
+ }
143
+ return h;
144
+ }
145
+
146
+ }
@@ -0,0 +1,21 @@
1
+ package com.rhomobile.rhodes.webview;
2
+
3
+ import android.view.accessibility.AccessibilityEvent;
4
+
5
+ public class RhoInputListener {
6
+ public interface IRhoInputListener{
7
+ public void onTextInput();
8
+ public void onAccessibitityEvent(AccessibilityEvent event);
9
+ public void onRestartBrowser();
10
+ }
11
+
12
+ private static IRhoInputListener mListener;
13
+
14
+ public static IRhoInputListener getListener() {
15
+ return mListener;
16
+ }
17
+
18
+ public static void setListener(IRhoInputListener listener){
19
+ mListener = listener;
20
+ }
21
+ }
@@ -1,18 +1,18 @@
1
1
  /*------------------------------------------------------------------------
2
2
  * (The MIT License)
3
- *
3
+ *
4
4
  * Copyright (c) 2008-2011 Rhomobile, Inc.
5
- *
5
+ *
6
6
  * Permission is hereby granted, free of charge, to any person obtaining a copy
7
7
  * of this software and associated documentation files (the "Software"), to deal
8
8
  * in the Software without restriction, including without limitation the rights
9
9
  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
10
  * copies of the Software, and to permit persons to whom the Software is
11
11
  * furnished to do so, subject to the following conditions:
12
- *
12
+ *
13
13
  * The above copyright notice and this permission notice shall be included in
14
14
  * all copies or substantial portions of the Software.
15
- *
15
+ *
16
16
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
17
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
18
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -20,7 +20,7 @@
20
20
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
21
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
22
  * THE SOFTWARE.
23
- *
23
+ *
24
24
  * http://rhomobile.com
25
25
  *------------------------------------------------------------------------*/
26
26
 
@@ -32,6 +32,9 @@ import java.net.URL;
32
32
  import java.net.MalformedURLException;
33
33
  import java.io.IOException;
34
34
  import java.util.Map;
35
+ import java.util.HashMap;
36
+
37
+ import com.rhomobile.rhodes.util.PerformOnUiThread;
35
38
 
36
39
  import com.rhomobile.rhodes.LocalFileProvider;
37
40
  import com.rhomobile.rhodes.Logger;
@@ -69,7 +72,7 @@ public class RhoWebViewClient extends WebViewClient
69
72
  private String host;
70
73
  private String realm;
71
74
  // private boolean pending;
72
-
75
+
73
76
  public HttpAuthResult(HttpAuthHandler handler, String host, String realm) {
74
77
  authHandler = handler;
75
78
  this.host = host;
@@ -100,7 +103,7 @@ public class RhoWebViewClient extends WebViewClient
100
103
  // public void setPending() {
101
104
  // pending = true;
102
105
  // }
103
- //
106
+ //
104
107
  // boolean isPending() {
105
108
  // return pending;
106
109
  // }
@@ -109,11 +112,27 @@ public class RhoWebViewClient extends WebViewClient
109
112
  public String type() {
110
113
  return "http";
111
114
  }
112
-
115
+
113
116
  }
114
-
117
+
115
118
  private final String TAG = RhoWebViewClient.class.getSimpleName();
116
119
  private GoogleWebView mWebView;
120
+ private static boolean ourIsDoNotTrack = false;
121
+ private static boolean ourIsDoNotSendAuthorise = false;
122
+ private static boolean ourIsDoNotVerifySSL = false;
123
+
124
+
125
+ public static void setDoNotTrack(boolean dnt) {
126
+ ourIsDoNotTrack = dnt;
127
+ }
128
+
129
+ public static void setDoNotVerifySSL(boolean do_not_verify) {
130
+ ourIsDoNotVerifySSL = do_not_verify;
131
+ }
132
+
133
+ public static void setDoNotSendAuthorise(boolean dnsa) {
134
+ ourIsDoNotSendAuthorise = dnsa;
135
+ }
117
136
 
118
137
  public RhoWebViewClient(GoogleWebView webView) {
119
138
  mWebView = webView;
@@ -128,44 +147,49 @@ public class RhoWebViewClient extends WebViewClient
128
147
  public void onLoadResource(WebView view, String url) {
129
148
  Logger.I(TAG, "Load resource" + url);
130
149
 
131
- RhoExtManager.getImplementationInstance().onLoadResource(view, url);
150
+ try {
151
+ RhoExtManager.getImplementationInstance().onLoadResource(view, url);
152
+ }
153
+ catch (Exception e) {
154
+
155
+ }
132
156
  }
133
157
 
134
-
158
+
135
159
  @Override
136
160
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
137
161
  Logger.I(TAG, "Loading URL: " + url);
138
-
162
+
139
163
  //RhoElements implementation of "history:back"
140
164
  if(url.equalsIgnoreCase("history:back")) {
141
165
  Logger.I(TAG, "history:back");
142
166
  view.goBack();
143
167
  return true;
144
168
  }
145
- else if(url.equalsIgnoreCase("history:twiceback"))
169
+ else if(url.equalsIgnoreCase("history:twiceback"))
146
170
  {
147
171
  Logger.I(TAG, "history:twiceback");
148
172
  view.goBack();
149
173
  view.goBack();
150
174
  return true;
151
175
  }
152
-
153
- if (url.contains(".HTM"))
176
+
177
+ if (url.contains(".HTM"))
154
178
  {
155
179
  url=url.replace(".HTML", ".html");
156
180
  url=url.replace(".HTM", ".htm");
157
181
  Logger.I(TAG, "Changed to lower case html, url="+ url);
158
182
  }
159
-
160
-
161
-
162
-
183
+
184
+
185
+
186
+
163
187
  boolean res = RhodesService.getInstance().handleUrlLoading(url);
164
188
  if (!res) {
165
189
  Logger.profStart("BROWSER_PAGE");
166
-
190
+
167
191
  RhoExtManager.getImplementationInstance().onBeforeNavigate(view, url);
168
-
192
+
169
193
  Uri localUri = LocalFileProvider.overrideUri(Uri.parse(url));
170
194
  if (localUri != null) {
171
195
  url = Uri.decode(localUri.toString());
@@ -173,20 +197,56 @@ public class RhoWebViewClient extends WebViewClient
173
197
  view.loadUrl(url);
174
198
  return true;
175
199
  }
200
+ else {
201
+
202
+
203
+ /*
204
+ if (url.equals("https://authenticationtest.com/HTTPAuth/")) {
205
+ final WebView sview = view;
206
+ final String surl = url;
207
+ final HashMap<String, String> extraHeaders = new HashMap<String, String>();
208
+ extraHeaders.put("Authorization", "");
209
+
210
+ PerformOnUiThread.exec(new Runnable() {
211
+
212
+ @Override
213
+ public void run() {
214
+ sview.loadUrl(surl, extraHeaders);
215
+ }
216
+ });
217
+ return true;
218
+ }
219
+ */
220
+
221
+ if (ourIsDoNotTrack || ourIsDoNotSendAuthorise) {
222
+ HashMap<String, String> extraHeaders = new HashMap<String, String>();
223
+ if (ourIsDoNotTrack) {
224
+ extraHeaders.put("DNT", "1");
225
+ }
226
+ if (ourIsDoNotSendAuthorise) {
227
+ extraHeaders.put("Authorization", "");
228
+ //ourIsDoNotSendAuthorise = false;
229
+ }
230
+ view.loadUrl(url, extraHeaders);
231
+ return true;
232
+ }
233
+ }
176
234
  }
177
235
  return res;
178
236
  }
179
-
237
+
238
+
239
+
180
240
  @Override
181
241
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
182
242
  super.onPageStarted(view, url, favicon);
183
-
243
+
184
244
  RhoExtManager.getImplementationInstance().onNavigateStarted(view, url);
185
245
 
186
246
  if (mWebView.getConfig() != null && mWebView.getConfig().getBool(WebViewConfig.ENABLE_PAGE_LOADING_INDICATION))
187
247
  RhodesActivity.safeGetInstance().getWindow().setFeatureInt(Window.FEATURE_PROGRESS, 0);
188
248
  }
189
-
249
+
190
250
  @Override
191
251
  public void onPageFinished(WebView view, String url) {
192
252
 
@@ -221,9 +281,9 @@ public class RhoWebViewClient extends WebViewClient
221
281
  @Override
222
282
  public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
223
283
  super.onReceivedError(view, errorCode, description, failingUrl);
224
-
284
+
225
285
  Logger.profStop("BROWSER_PAGE");
226
-
286
+
227
287
  StringBuilder msg = new StringBuilder(failingUrl != null ? failingUrl : "null");
228
288
  msg.append(" failed: ");
229
289
  msg.append(errorCode);
@@ -233,7 +293,7 @@ public class RhoWebViewClient extends WebViewClient
233
293
  RhoExtManager.getImplementationInstance().onLoadError(view, IRhoExtension.LoadErrorReason.INTERNAL_ERROR);
234
294
  }
235
295
 
236
- @Override
296
+ @Override
237
297
  public void onReceivedClientCertRequest(WebView view, ClientCertRequest request)
238
298
  {
239
299
  try {
@@ -250,7 +310,7 @@ public class RhoWebViewClient extends WebViewClient
250
310
  } catch (Throwable e) {
251
311
  request.cancel();
252
312
  }
253
-
313
+
254
314
  }
255
315
 
256
316
  @Override
@@ -276,7 +336,7 @@ public class RhoWebViewClient extends WebViewClient
276
336
  }
277
337
  }
278
338
 
279
- if(RhoConf.getBool("no_ssl_verify_peer")) {
339
+ if(ourIsDoNotVerifySSL || RhoConf.getBool("no_ssl_verify_peer")) {
280
340
  Logger.D(TAG, "Skip SSL error.");
281
341
  handler.proceed();
282
342
  } else {
@@ -306,7 +366,7 @@ public class RhoWebViewClient extends WebViewClient
306
366
  //public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
307
367
  // return null;
308
368
  //}
309
-
369
+
310
370
  @Override
311
371
  public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) {
312
372
  IRhoConfig rhoelementsGetConfig = RhoExtManager.getInstance().getConfig("rhoelementsext");
@@ -333,10 +393,10 @@ public class RhoWebViewClient extends WebViewClient
333
393
  private void checkTitleDataContain(WebView view){
334
394
  // Set title
335
395
  String title = view.getTitle();
336
- if(! (title.equalsIgnoreCase("data:text/html,") || title.equalsIgnoreCase("data:,")
396
+ if(! (title.equalsIgnoreCase("data:text/html,") || title.equalsIgnoreCase("data:,")
337
397
  || title.contains("about:blank"))){
338
398
  RhodesActivity.safeGetInstance().setTitle(title);
339
399
  }
340
400
  }
341
-
401
+
342
402
  }
@@ -0,0 +1,118 @@
1
+ package com.rhomobile.rhodes.webview;
2
+
3
+
4
+ import androidx.annotation.NonNull;
5
+ import androidx.annotation.Nullable;
6
+
7
+ import java.util.Collection;
8
+ import java.util.HashMap;
9
+ import java.util.Hashtable;
10
+ import java.util.Iterator;
11
+ import java.util.Map;
12
+ import java.util.Set;
13
+
14
+ import com.rhomobile.rhodes.Logger;
15
+ import com.rhomobile.rhodes.RhoConf;
16
+
17
+ public class TauWebViewOptions {
18
+
19
+ public final static String TAU_WEBVIEW_OPTIONS_DEFAUlT_MASK = "*";
20
+ public final static String TAU_WEBVIEW_OPTIONS_DISABLE_KEYBOARD = "DisableKeyboard";
21
+ public final static String TAU_WEBVIEW_OPTIONS_DISABLE_SCROLL = "DisableScroll";
22
+ public final static String TAU_WEBVIEW_OPTIONS_INJECT_META_VIEWPORT = "InjectMetaViewport";
23
+ public final static String TAU_WEBVIEW_OPTIONS_SCREN_ORIENTATION = "ScreenOrientation";
24
+ public final static String TAU_WEBVIEW_OPTIONS_INJECT_JAVASCRIPT = "InjectJavascript";
25
+
26
+
27
+ private static final String TAG = TauWebViewOptions.class.getSimpleName();
28
+
29
+ private static TauWebViewOptions ourInstance = null;
30
+
31
+ private Map<String, Map> mOptions = new Hashtable<String, Map>();
32
+
33
+ public static TauWebViewOptions getInstance() {
34
+ if (ourInstance == null) {
35
+ ourInstance = new TauWebViewOptions();
36
+ }
37
+ return ourInstance;
38
+ }
39
+
40
+ public void addUrlOptions(String mask, Map<String, String> options) {
41
+ Logger.T(TAG, "$$$ addUrlOptions with mask = " + mask);
42
+ Iterator<String> iter = options.keySet().iterator();
43
+ while (iter.hasNext()) {
44
+ String key = iter.next();
45
+ String value = options.get(key);
46
+ Logger.T(TAG, "$$$ addUrlOptions ["+key+"] = ["+value+"]");
47
+ }
48
+ mOptions.put(mask, options);
49
+ }
50
+
51
+ public Map<String, String> getOptionsForUrl(String url) {
52
+ Iterator<String> iter = mOptions.keySet().iterator();
53
+ Map<String, String> def_opt = new Hashtable<String, String>();
54
+ while (iter.hasNext()) {
55
+ String key = iter.next();
56
+ if (key.equals(TAU_WEBVIEW_OPTIONS_DEFAUlT_MASK)) {
57
+ def_opt = (Map<String, String>)mOptions.get(key);
58
+ }
59
+ if (url.contains(key)) {
60
+ return (Map<String, String>)mOptions.get(key);
61
+ }
62
+ }
63
+ return def_opt;
64
+ }
65
+
66
+ public boolean isKeyboardDisabled(String url) {
67
+ Map<String, String> opt = getOptionsForUrl(url);
68
+ String value = opt.get(TAU_WEBVIEW_OPTIONS_DISABLE_KEYBOARD);
69
+ if (value != null) {
70
+ return value.equals("1");
71
+ }
72
+ return false;
73
+ }
74
+
75
+ public boolean isScrollDisabled(String url) {
76
+ Map<String, String> opt = getOptionsForUrl(url);
77
+ String value = opt.get(TAU_WEBVIEW_OPTIONS_DISABLE_SCROLL);
78
+ if (value != null) {
79
+ return value.equals("1");
80
+ }
81
+ return false;
82
+ }
83
+
84
+ public String getMetaViewport(String url) {
85
+ Map<String, String> opt = getOptionsForUrl(url);
86
+ String value = opt.get(TAU_WEBVIEW_OPTIONS_INJECT_META_VIEWPORT);
87
+ if (value != null) {
88
+ return value;
89
+ }
90
+ return null;
91
+ }
92
+
93
+ public String getScreenOrientation(String url) {
94
+ Map<String, String> opt = getOptionsForUrl(url);
95
+ String value = opt.get(TAU_WEBVIEW_OPTIONS_SCREN_ORIENTATION);
96
+ if (value != null) {
97
+ return value;
98
+ }
99
+ return null;
100
+ }
101
+
102
+ public String getInjectJavascript(String url) {
103
+ Map<String, String> opt = getOptionsForUrl(url);
104
+ String value = opt.get(TAU_WEBVIEW_OPTIONS_INJECT_JAVASCRIPT);
105
+ if (value != null) {
106
+ return value;
107
+ }
108
+ return null;
109
+ }
110
+
111
+ public String getParameterByUrl(String url, String name) {
112
+ Map<String, String> opt = getOptionsForUrl(url);
113
+ String value = opt.get(name);
114
+ return value;
115
+ }
116
+
117
+
118
+ }
@@ -13,39 +13,40 @@ import com.rhomobile.rhodes.RhoConf;
13
13
 
14
14
  public class WebSettingsProviderBase implements IWebSettingsProvider {
15
15
  protected static final String TAG = "WebSettingsProvider";
16
-
16
+
17
17
  @SuppressLint("SetJavaScriptEnabled")
18
18
  public void fillSettings(WebSettings settings, IRhoConfig config) {
19
-
19
+
20
20
  boolean enableZoom = config == null || config.getBool(WebViewConfig.ENABLE_ZOOM);
21
21
  boolean enableCache = config == null || config.getBool(WebViewConfig.ENABLE_CACHE);
22
22
  boolean enableMediaPlaybackWithoutGesture = config != null && config.getBool(WebViewConfig.ENABLE_MEDIA_PLAYBACK_WITHOUT_GESTURE);
23
23
  String customUA = RhoConf.getString("useragent");
24
-
25
- settings.setMediaPlaybackRequiresUserGesture(!enableMediaPlaybackWithoutGesture);
24
+
25
+ //settings.setMediaPlaybackRequiresUserGesture(!enableMediaPlaybackWithoutGesture);
26
+ settings.setMediaPlaybackRequiresUserGesture(false);
26
27
  settings.setSavePassword(false);
27
28
  settings.setSaveFormData(false);
28
29
  settings.setJavaScriptEnabled(true);
29
30
  settings.setJavaScriptCanOpenWindowsAutomatically(false);
30
31
  settings.setSupportZoom(enableZoom);
31
32
  settings.setBuiltInZoomControls(enableZoom);
32
- settings.setAppCacheEnabled(true);
33
+ //settings.setAppCacheEnabled(true);
33
34
  if(!RhoConf.getString("fontFamily").isEmpty())
34
35
  settings.setStandardFontFamily(RhoConf.getString("fontFamily"));
35
36
  //customUA = updateRevesionOfCustomUA(settings.getUserAgentString(), customUA);
36
37
  //settings.setUserAgentString(customUA);
37
- if(RhoConf.isExist("ApplicationCachePath")){
38
- if(!RhoConf.getString("ApplicationCachePath").isEmpty())
39
- settings.setAppCachePath(RhoConf.getString("ApplicationCachePath"));
40
- }
41
- if(RhoConf.isExist("ApplicationCacheQuota")){
42
- if(!RhoConf.getString("ApplicationCacheQuota").isEmpty())
43
- try{
44
- settings.setAppCacheMaxSize(Long.valueOf(RhoConf.getString("ApplicationCacheQuota")).longValue());
45
- }
46
- catch(NumberFormatException exp){
47
- }
48
- }
38
+ //if(RhoConf.isExist("ApplicationCachePath")){
39
+ // if(!RhoConf.getString("ApplicationCachePath").isEmpty())
40
+ // settings.setAppCachePath(RhoConf.getString("ApplicationCachePath"));
41
+ //}
42
+ //if(RhoConf.isExist("ApplicationCacheQuota")){
43
+ // if(!RhoConf.getString("ApplicationCacheQuota").isEmpty())
44
+ // try{
45
+ // settings.setAppCacheMaxSize(Long.valueOf(RhoConf.getString("ApplicationCacheQuota")).longValue());
46
+ // }
47
+ // catch(NumberFormatException exp){
48
+ // }
49
+ //}
49
50
  Logger.T(TAG, "Enable Zoom: " + enableZoom);
50
51
 
51
52
  if (enableCache) {
@@ -9,10 +9,10 @@ import com.rhomobile.rhodes.util.ContextFactory;
9
9
  public class WebSettingsProviderEclairMR1 extends WebSettingsProviderEclair implements IWebSettingsProvider {
10
10
  public void fillSettings(WebSettings settings, IRhoConfig config) {
11
11
  super.fillSettings(settings, config);
12
- settings.setAppCacheMaxSize(5 * 1048576);
13
- String pathToCache = ContextFactory.getAppContext().getDir("database", Context.MODE_PRIVATE).getPath();
14
- settings.setAppCachePath(pathToCache);
15
- settings.setAppCacheEnabled(true);
12
+ //settings.setAppCacheMaxSize(5 * 1048576);
13
+ //String pathToCache = ContextFactory.getAppContext().getDir("database", Context.MODE_PRIVATE).getPath();
14
+ //settings.setAppCachePath(pathToCache);
15
+ //settings.setAppCacheEnabled(true);
16
16
 
17
17
  settings.setDomStorageEnabled(true);
18
18
  }
@@ -3,6 +3,7 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java
3
3
  platform/android/Rhodes/src/com/rhomobile/rhodes/ConnectionChangeReceiver.java
4
4
  platform/android/Rhodes/src/com/rhomobile/rhodes/HttpLog.java
5
5
  platform/android/Rhodes/src/com/rhomobile/rhodes/LocalFileProvider.java
6
+ platform/android/Rhodes/src/com/rhomobile/rhodes/RhoFileProvider.java
6
7
  platform/android/Rhodes/src/com/rhomobile/rhodes/Logger.java
7
8
  platform/android/Rhodes/src/com/rhomobile/rhodes/MemoryInfoCollector.java
8
9
  platform/android/Rhodes/src/com/rhomobile/rhodes/NativeBar.java
@@ -105,6 +106,7 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/webview/WebSettingsProviderHone
105
106
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/WebSettingsProviderJellyBean.java
106
107
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/WebSettingsProviderKitKat.java
107
108
  platform/android/Rhodes/src/com/rhomobile/rhodes/webview/WebViewConfig.java
109
+ platform/android/Rhodes/src/com/rhomobile/rhodes/webview/TauWebViewOptions.java
108
110
  platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/AbstractRhoExtension.java
109
111
  platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/AbstractRhoListener.java
110
112
  platform/android/Rhodes/src/com/rhomobile/rhodes/extmanager/IRhoConfig.java
@@ -130,3 +132,14 @@ platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunction
130
132
  platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionality26.java
131
133
  platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/AndroidFunctionalityManager.java
132
134
  platform/android/Rhodes/src/com/rhomobile/rhodes/osfunctionality/OsVersionManager.java
135
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/MyAccessibilityService.java
136
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/CallReceiver.java
137
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/KioskManager.java
138
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/MyNotificationListenerService.java
139
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/MyOverlayService.java
140
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/PermissionManager.java
141
+ platform/android/Rhodes/src/com/rhomobile/rhodes/kioskservices/IKioskMode.java
142
+ platform/android/Rhodes/src/com/rhomobile/rhodes/permissioncheck/PermissionListGenerate.java
143
+ platform/android/Rhodes/src/com/rhomobile/rhodes/permissioncheck/CheckDrawable.java
144
+ platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoInputConnectionWrapper.java
145
+ platform/android/Rhodes/src/com/rhomobile/rhodes/webview/RhoInputListener.java
@@ -118,8 +118,15 @@ namespace 'device' do
118
118
  usesPermissions.uniq!
119
119
 
120
120
  hidden = get_boolean(prebuilt_config['hidden_app'])
121
+ home_app = false
122
+ if app_config['android'] != nil
123
+ if app_config['android']['home_app'] != nil
124
+ home_app = app_config['android']['home_app']
125
+ end
126
+ end
127
+
121
128
 
122
- generator = ManifestGenerator.new JAVA_PACKAGE_NAME, $app_package_name, hidden, usesPermissions
129
+ generator = ManifestGenerator.new JAVA_PACKAGE_NAME, $app_package_name, hidden, home_app, usesPermissions
123
130
 
124
131
  generator.versionName = versionName
125
132
  generator.versionCode = version