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,366 @@
1
+ package com.rhomobile.rhodes.permissioncheck;
2
+
3
+ import android.app.Activity;
4
+ import android.app.AlertDialog;
5
+ import android.content.Context;
6
+ import android.content.Intent;
7
+ import android.content.pm.PackageInfo;
8
+ import android.content.pm.PackageManager;
9
+ import android.content.pm.PermissionInfo;
10
+ import android.graphics.Color;
11
+ import android.graphics.drawable.Drawable;
12
+ import android.net.Uri;
13
+ import android.os.Build;
14
+ import android.os.Environment;
15
+ import android.provider.Settings;
16
+ import android.view.Gravity;
17
+ import android.view.View;
18
+ import android.widget.Button;
19
+ import android.widget.ImageView;
20
+ import android.widget.LinearLayout;
21
+ import android.widget.ScrollView;
22
+ import android.widget.TextView;
23
+ import android.util.Log;
24
+
25
+
26
+
27
+ import androidx.annotation.NonNull;
28
+ import androidx.core.app.ActivityCompat;
29
+ import androidx.core.content.ContextCompat;
30
+
31
+ import java.util.ArrayList;
32
+ import java.util.HashMap;
33
+ import java.util.Locale;
34
+ import java.util.Map;
35
+
36
+ import com.rhomobile.rhodes.RhoConf;
37
+ import com.rhomobile.rhodes.kioskservices.PermissionManager;
38
+
39
+
40
+ public class PermissionListGenerate {
41
+ private final Context mContext;
42
+ private final Activity mActivity;
43
+ private AlertDialog mPermissionsDialog = null;
44
+ private final Map<String, ArrayList<String>> permissionsMap = new HashMap<String, ArrayList<String>>();
45
+ private AlertDialog.Builder ad;
46
+ final static private Integer MY_PERMISSIONS_REQUEST = 1;
47
+ private final String accessibility_key = "ACCESSIBILITY_SERVICE";
48
+
49
+ public PermissionListGenerate(Context context, Activity activity){
50
+ this.mContext = context;
51
+ this.mActivity = activity;
52
+
53
+ this.ad = new AlertDialog.Builder(context);
54
+
55
+ try {
56
+ init();
57
+ } catch (Exception e){
58
+ e.printStackTrace();
59
+ }
60
+ }
61
+
62
+ private void init() throws PackageManager.NameNotFoundException {
63
+ PackageInfo info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(),PackageManager.GET_PERMISSIONS);
64
+ int sdkVersion = Build.VERSION.SDK_INT;
65
+
66
+ for(String p :info.requestedPermissions){
67
+ if(sdkVersion >= 29) {
68
+ PermissionInfo permissionInfo = mContext.getPackageManager().getPermissionInfo(p, 0);
69
+ int protectionLevel = permissionInfo.protectionLevel;
70
+ if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS || p.equals("android.permission.MANAGE_EXTERNAL_STORAGE"))
71
+ addToListPermission(p);
72
+ }else{
73
+ if(!p.equals("android.permission.MANAGE_EXTERNAL_STORAGE")){
74
+ PermissionInfo permissionInfo = mContext.getPackageManager().getPermissionInfo(p, 0);
75
+ int protectionLevel = permissionInfo.protectionLevel;
76
+ if (protectionLevel == PermissionInfo.PROTECTION_DANGEROUS)
77
+ addToListPermission(p);
78
+ }
79
+ }
80
+ }
81
+ }
82
+
83
+
84
+
85
+ public void addToListPermission(String permissionName){
86
+ String nameKey = formatName(permissionName);
87
+ Log.d("permissionCheck", permissionName);
88
+
89
+ if(permissionsMap.get(nameKey) != null)
90
+ {
91
+ ArrayList<String> i = permissionsMap.get(nameKey);
92
+ if(!i.contains(permissionName)) {
93
+ i.add(permissionName);
94
+ permissionsMap.remove(nameKey);
95
+ permissionsMap.put(nameKey, i);
96
+ }
97
+ }else{
98
+ ArrayList<String> i = new ArrayList<String>();
99
+ i.add(permissionName);
100
+ permissionsMap.put(nameKey, i);
101
+ }
102
+ }
103
+
104
+
105
+ @NonNull
106
+ private String formatName(String name) {
107
+ if(name == accessibility_key)
108
+ return "accessibility services";
109
+
110
+ name = name.toLowerCase(Locale.ROOT);
111
+
112
+ String[] splitNameToPoint = name.split("\\.");
113
+ String[] splitName = splitNameToPoint[splitNameToPoint.length -1].split("_");
114
+
115
+ StringBuilder returnName = new StringBuilder();
116
+ boolean firstWord = true;
117
+ for(int i = 0; i < splitName.length; i++){
118
+ if(!splitName[i].equals("read") && !splitName[i].equals("write") && !splitName[i].equals("manage"))
119
+ {
120
+ if(!firstWord)
121
+ returnName.append(" ");
122
+ else
123
+ firstWord = false;
124
+
125
+ returnName.append(splitName[i]);
126
+ }
127
+ }
128
+ return returnName.toString();
129
+ }
130
+
131
+
132
+
133
+ public boolean checkAllPermissionsStatus(){
134
+ if( RhoConf.isExist("click_sound_with_accessibility_service") &&
135
+ RhoConf.getBool("click_sound_with_accessibility_service")){
136
+ if(permissionsMap.get(accessibility_key) == null){
137
+ ArrayList<String> p = new ArrayList<String>();
138
+ p.add(accessibility_key);
139
+ permissionsMap.put(accessibility_key,p);
140
+ }
141
+ }
142
+ if(RhoConf.getInt("strict_permission_requirements") == 1){
143
+ for(Map.Entry<String, ArrayList<String>> entry : permissionsMap.entrySet()){
144
+ if(!getPermissionStatus(entry.getValue()))
145
+ return false;
146
+ }
147
+ }
148
+ return true;
149
+ }
150
+
151
+ private boolean getPermissionStatus(@NonNull String pNameManifest){
152
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
153
+ pNameManifest.equals("android.permission.MANAGE_EXTERNAL_STORAGE"))
154
+ return Environment.isExternalStorageManager();
155
+ else
156
+ return ContextCompat.checkSelfPermission(mContext, pNameManifest) == PackageManager.PERMISSION_GRANTED;
157
+ }
158
+ private boolean getPermissionStatus(@NonNull ArrayList<String> pNameManifest){
159
+ if(pNameManifest.contains(accessibility_key))
160
+ return PermissionManager.checkAccessibilityServicePermission(mContext);
161
+
162
+ for(String value : pNameManifest){
163
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && value.equals("android.permission.MANAGE_EXTERNAL_STORAGE")){
164
+ boolean manageExternal = Environment.isExternalStorageManager();
165
+ if(!manageExternal)
166
+ return false;
167
+ }
168
+ else
169
+ if(ContextCompat.checkSelfPermission(mContext, value) != PackageManager.PERMISSION_GRANTED)
170
+ return false;
171
+ }
172
+ return true;
173
+ }
174
+
175
+
176
+
177
+ public boolean isShowPermissionDialog(){
178
+ return mPermissionsDialog != null && mPermissionsDialog.isShowing();
179
+ }
180
+ public void closePermissionsDialog(){
181
+ if(mPermissionsDialog != null)
182
+ mPermissionsDialog.cancel();
183
+ }
184
+
185
+
186
+
187
+ public void showPermissionList(){
188
+ ad.setTitle("Permission check")
189
+ .setCancelable(false);
190
+
191
+ ////////////////////////////////////////////////////////////
192
+
193
+ LinearLayout permissionLayout = new LinearLayout(mContext);
194
+ permissionLayout.setLayoutParams(new LinearLayout.LayoutParams(
195
+ LinearLayout.LayoutParams.MATCH_PARENT,
196
+ LinearLayout.LayoutParams.WRAP_CONTENT
197
+ ));
198
+ permissionLayout.setOrientation(LinearLayout.VERTICAL);
199
+ permissionLayout.setBackgroundColor(Color.parseColor("#FFFFFF"));
200
+
201
+ ////////////////////////////////////////////////////////////
202
+
203
+ TextView textView = new TextView(mContext);
204
+ textView.setTextSize(23);
205
+ textView.setText("This app requires some additional permissions in order to make its job properly:");
206
+ textView.setLayoutParams(new LinearLayout.LayoutParams(
207
+ LinearLayout.LayoutParams.WRAP_CONTENT,
208
+ LinearLayout.LayoutParams.WRAP_CONTENT
209
+ ));
210
+
211
+ ////////////////////////////////////////////////////////////
212
+
213
+ View space = new View(mContext);
214
+ space.setLayoutParams(new LinearLayout.LayoutParams(
215
+ LinearLayout.LayoutParams.MATCH_PARENT,
216
+ (int)convertDpToPixels(20)
217
+ ));
218
+
219
+ ////////////////////////////////////////////////////////////
220
+
221
+ permissionLayout.addView(textView);
222
+ permissionLayout.addView(space);
223
+
224
+ ScrollView scrollView = new ScrollView(mContext);
225
+ scrollView.setLayoutParams(new LinearLayout.LayoutParams(
226
+ LinearLayout.LayoutParams.MATCH_PARENT,
227
+ LinearLayout.LayoutParams.MATCH_PARENT
228
+ ));
229
+ LinearLayout layoutForScrollView = new LinearLayout(mContext);
230
+ layoutForScrollView.setLayoutParams(new LinearLayout.LayoutParams(
231
+ LinearLayout.LayoutParams.MATCH_PARENT,
232
+ LinearLayout.LayoutParams.WRAP_CONTENT
233
+ ));
234
+ layoutForScrollView.setOrientation(LinearLayout.VERTICAL);
235
+ layoutForScrollView.setBackgroundColor(Color.parseColor("#FFFFFF"));
236
+
237
+ for(Map.Entry<String, ArrayList<String>> entry : permissionsMap.entrySet()){
238
+ layoutForScrollView.addView(permissionLine(entry.getValue()));
239
+ }
240
+
241
+ scrollView.addView(layoutForScrollView);
242
+ permissionLayout.addView(scrollView);
243
+
244
+ ad.setView(permissionLayout);
245
+ mPermissionsDialog = ad.create();
246
+ mPermissionsDialog.show();
247
+
248
+ }
249
+ @NonNull
250
+ private LinearLayout permissionLine(@NonNull final ArrayList<String> pItems){
251
+ LinearLayout layout = new LinearLayout(mContext);
252
+ layout.setOrientation(LinearLayout.HORIZONTAL);
253
+ layout.setBackgroundColor(Color.parseColor("#F3F3F3"));
254
+ layout.setMinimumHeight(48);
255
+ layout.setMinimumWidth(88);
256
+
257
+ LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(
258
+ LinearLayout.LayoutParams.MATCH_PARENT,
259
+ LinearLayout.LayoutParams.WRAP_CONTENT
260
+ );
261
+ lParams.setMargins(3,3,3,3);
262
+ layout.setLayoutParams(lParams);
263
+
264
+ ////////////////////////////////////////////////////////////
265
+
266
+ TextView tv = new TextView(mContext);
267
+
268
+ LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(
269
+ LinearLayout.LayoutParams.WRAP_CONTENT,
270
+ LinearLayout.LayoutParams.WRAP_CONTENT
271
+ );
272
+ tvParams.setMargins(10,0,0,0);
273
+
274
+ tv.setLayoutParams(tvParams);
275
+ tv.setText(formatName(pItems.get(0)));
276
+ tv.setTextSize(20);
277
+ tv.setGravity(Gravity.CENTER);
278
+
279
+ ////////////////////////////////////////////////////////////
280
+
281
+ View space = new View(mContext);
282
+ space.setLayoutParams(new LinearLayout.LayoutParams(0,0,1));
283
+
284
+ ////////////////////////////////////////////////////////////
285
+
286
+ layout.addView(tv);
287
+ layout.addView(space);
288
+
289
+ ////////////////////////////////////////////////////////////
290
+
291
+ if(getPermissionStatus(pItems)){
292
+ ImageView checkImg = new ImageView(mContext);
293
+
294
+ LinearLayout.LayoutParams imgParams = new LinearLayout.LayoutParams(
295
+ (int)convertDpToPixels(24),
296
+ (int)convertDpToPixels(24)
297
+ );
298
+ imgParams.gravity = Gravity.CENTER;
299
+ imgParams.rightMargin = (int) convertDpToPixels(10);
300
+
301
+ checkImg.setLayoutParams(imgParams);
302
+ Drawable dr = new CheckDrawable();
303
+ checkImg.setImageDrawable(dr);
304
+
305
+ layout.addView(checkImg);
306
+ }
307
+ else
308
+ {
309
+ Button btn = new Button(mContext);
310
+
311
+ LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(
312
+ (int) convertDpToPixels(130),
313
+ (int) convertDpToPixels(40)
314
+ );
315
+ btnParams.setMargins(0,0,(int)convertDpToPixels(3),0);
316
+
317
+ btn.setLayoutParams(btnParams);
318
+ btn.setText("Settings...");
319
+ btn.setTextColor(Color.parseColor("#FFFFFF"));
320
+ btn.setTextSize(15);
321
+ btn.setGravity(Gravity.CENTER);
322
+ btn.setBackgroundColor(Color.parseColor("#5CD9FF"));
323
+ btn.setOnClickListener(new View.OnClickListener(){
324
+ @Override
325
+ public void onClick(View v) {
326
+ if(pItems.contains(accessibility_key))
327
+ PermissionManager.setAccessibilityServicePermission(mActivity);
328
+
329
+ openManageExternalStorage(pItems);
330
+
331
+ ActivityCompat.requestPermissions(mActivity, pItems.toArray(new String[0]), MY_PERMISSIONS_REQUEST);
332
+ mPermissionsDialog.cancel();
333
+ }
334
+ });
335
+
336
+ layout.addView(btn);
337
+
338
+ }
339
+
340
+ ////////////////////////////////////////////////////////////
341
+
342
+ return layout;
343
+ }
344
+
345
+ private void openManageExternalStorage(@NonNull final ArrayList<String> pItems){
346
+ if(pItems.contains("android.permission.MANAGE_EXTERNAL_STORAGE") &&
347
+ !getPermissionStatus("android.permission.MANAGE_EXTERNAL_STORAGE")){
348
+ try{
349
+ Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
350
+ intent.addCategory("android.intent.category.DEFAULT");
351
+ intent.setData(Uri.parse(String.format("package:%s", mContext.getPackageName())));
352
+ mActivity.startActivity(intent);
353
+ } catch (Exception e) {
354
+ Intent intent = new Intent();
355
+ intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
356
+ mActivity.startActivity(intent);
357
+ }
358
+ }
359
+ }
360
+
361
+
362
+
363
+ private float convertDpToPixels(float dp) {
364
+ return dp * mContext.getResources().getDisplayMetrics().density;
365
+ }
366
+ }
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="JAVA_MODULE" version="4">
3
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+ <exclude-output />
5
+ <content url="file://$MODULE_DIR$">
6
+ <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" packagePrefix="com.rhomobile.rhodes" />
7
+ </content>
8
+ <orderEntry type="inheritedJdk" />
9
+ <orderEntry type="sourceFolder" forTests="false" />
10
+ </component>
11
+ </module>
@@ -640,6 +640,7 @@ public class SSLImpl {
640
640
  String host = st.nextToken();
641
641
 
642
642
  SSLSocket aSock = (SSLSocket)f.createSocket(s, host, remote.port, true);
643
+ aSock.setEnabledProtocols(new String[] {"TLSv1", "TLSv1.1","TLSv1.2"});
643
644
  aSock.setUseClientMode(true);
644
645
 
645
646
  synchronized (this) {