diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2017-11-05 20:24:49 +0100 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2017-11-05 20:24:49 +0100 |
| commit | f828ce6d0c308c2c5d67c71ee3141b015807fd62 (patch) | |
| tree | 4f5a819afe988158902b907f4f7582448819a594 /StoneIsland/platforms/android | |
| parent | 1f38892c1729572fa98801692dc20c60931d7377 (diff) | |
cordova-plugin-sim
Diffstat (limited to 'StoneIsland/platforms/android')
10 files changed, 506 insertions, 2 deletions
diff --git a/StoneIsland/platforms/android/AndroidManifest.xml b/StoneIsland/platforms/android/AndroidManifest.xml index 75322df7..59ddcea4 100755 --- a/StoneIsland/platforms/android/AndroidManifest.xml +++ b/StoneIsland/platforms/android/AndroidManifest.xml @@ -55,4 +55,5 @@ <uses-permission android:name="${applicationId}.permission.PushHandlerActivity" /> <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <permission android:name="${applicationId}.permission.PushHandlerActivity" android:protectionLevel="signature" /> + <uses-permission android:name="android.permission.READ_PHONE_STATE" /> </manifest> diff --git a/StoneIsland/platforms/android/android.json b/StoneIsland/platforms/android/android.json index 3e69085c..5dc54401 100755 --- a/StoneIsland/platforms/android/android.json +++ b/StoneIsland/platforms/android/android.json @@ -55,6 +55,10 @@ { "xml": "<feature name=\"PushNotification\"><param name=\"android-package\" value=\"com.adobe.phonegap.push.PushPlugin\" /></feature>", "count": 1 + }, + { + "xml": "<feature name=\"Sim\"><param name=\"android-package\" value=\"com.pbakondy.Sim\" /></feature>", + "count": 1 } ] } @@ -146,6 +150,10 @@ { "xml": "<uses-feature android:name=\"android.hardware.location.gps\" />", "count": 1 + }, + { + "xml": "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />", + "count": 1 } ], "/manifest/application/activity": [ @@ -235,6 +243,9 @@ "phonegap-plugin-push": { "SENDER_ID": "85075801930", "PACKAGE_NAME": "us.okfoc.stoneisland" + }, + "cordova-plugin-sim": { + "PACKAGE_NAME": "us.okfoc.stoneisland" } }, "dependent_plugins": {}, @@ -351,6 +362,22 @@ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-sim.Sim", + "file": "plugins/cordova-plugin-sim/www/sim.js", + "pluginId": "cordova-plugin-sim", + "merges": [ + "window.plugins.sim" + ] + }, + { + "id": "cordova-plugin-sim.SimAndroid", + "file": "plugins/cordova-plugin-sim/www/android/sim.js", + "pluginId": "cordova-plugin-sim", + "merges": [ + "window.plugins.sim" + ] } ], "plugin_metadata": { @@ -367,6 +394,7 @@ "cordova-plugin-statusbar": "2.2.3", "cordova-plugin-app-name": "1.0.4", "cordova-plugin-splashscreen": "4.0.3", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-sim": "1.3.3" } }
\ No newline at end of file diff --git a/StoneIsland/platforms/android/assets/www/cordova_plugins.js b/StoneIsland/platforms/android/assets/www/cordova_plugins.js new file mode 100644 index 00000000..770bd946 --- /dev/null +++ b/StoneIsland/platforms/android/assets/www/cordova_plugins.js @@ -0,0 +1,153 @@ +cordova.define('cordova/plugin_list', function(require, exports, module) { +module.exports = [ + { + "file": "plugins/cordova-plugin-inappbrowser/www/inappbrowser.js", + "id": "cordova-plugin-inappbrowser.inappbrowser", + "pluginId": "cordova-plugin-inappbrowser", + "clobbers": [ + "cordova.InAppBrowser.open", + "window.open" + ] + }, + { + "file": "plugins/cordova-plugin-x-socialsharing/www/SocialSharing.js", + "id": "cordova-plugin-x-socialsharing.SocialSharing", + "pluginId": "cordova-plugin-x-socialsharing", + "clobbers": [ + "window.plugins.socialsharing" + ] + }, + { + "file": "plugins/cordova-plugin-customurlscheme/www/android/LaunchMyApp.js", + "id": "cordova-plugin-customurlscheme.LaunchMyApp", + "pluginId": "cordova-plugin-customurlscheme", + "clobbers": [ + "window.plugins.launchmyapp" + ] + }, + { + "file": "plugins/cordova-plugin-device/www/device.js", + "id": "cordova-plugin-device.device", + "pluginId": "cordova-plugin-device", + "clobbers": [ + "device" + ] + }, + { + "file": "plugins/cordova-plugin-network-information/www/network.js", + "id": "cordova-plugin-network-information.network", + "pluginId": "cordova-plugin-network-information", + "clobbers": [ + "navigator.connection", + "navigator.network.connection" + ] + }, + { + "file": "plugins/cordova-plugin-network-information/www/Connection.js", + "id": "cordova-plugin-network-information.Connection", + "pluginId": "cordova-plugin-network-information", + "clobbers": [ + "Connection" + ] + }, + { + "file": "plugins/cordova-plugin-dialogs/www/notification.js", + "id": "cordova-plugin-dialogs.notification", + "pluginId": "cordova-plugin-dialogs", + "merges": [ + "navigator.notification" + ] + }, + { + "file": "plugins/cordova-plugin-dialogs/www/android/notification.js", + "id": "cordova-plugin-dialogs.notification_android", + "pluginId": "cordova-plugin-dialogs", + "merges": [ + "navigator.notification" + ] + }, + { + "file": "plugins/cordova-plugin-geolocation/www/android/geolocation.js", + "id": "cordova-plugin-geolocation.geolocation", + "pluginId": "cordova-plugin-geolocation", + "clobbers": [ + "navigator.geolocation" + ] + }, + { + "file": "plugins/cordova-plugin-geolocation/www/PositionError.js", + "id": "cordova-plugin-geolocation.PositionError", + "pluginId": "cordova-plugin-geolocation", + "runs": true + }, + { + "file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js", + "id": "ionic-plugin-keyboard.keyboard", + "pluginId": "ionic-plugin-keyboard", + "clobbers": [ + "cordova.plugins.Keyboard" + ], + "runs": true + }, + { + "id": "cordova-plugin-statusbar.statusbar", + "file": "plugins/cordova-plugin-statusbar/www/statusbar.js", + "pluginId": "cordova-plugin-statusbar", + "clobbers": [ + "window.StatusBar" + ] + }, + { + "id": "cordova-plugin-splashscreen.SplashScreen", + "file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js", + "pluginId": "cordova-plugin-splashscreen", + "clobbers": [ + "navigator.splashscreen" + ] + }, + { + "id": "phonegap-plugin-push.PushNotification", + "file": "plugins/phonegap-plugin-push/www/push.js", + "pluginId": "phonegap-plugin-push", + "clobbers": [ + "PushNotification" + ] + }, + { + "id": "cordova-plugin-sim.Sim", + "file": "plugins/cordova-plugin-sim/www/sim.js", + "pluginId": "cordova-plugin-sim", + "merges": [ + "window.plugins.sim" + ] + }, + { + "id": "cordova-plugin-sim.SimAndroid", + "file": "plugins/cordova-plugin-sim/www/android/sim.js", + "pluginId": "cordova-plugin-sim", + "merges": [ + "window.plugins.sim" + ] + } +]; +module.exports.metadata = +// TOP OF METADATA +{ + "cordova-plugin-inappbrowser": "1.5.0", + "cordova-plugin-x-socialsharing": "5.1.3", + "cordova-plugin-customurlscheme": "4.2.0", + "cordova-plugin-whitelist": "1.3.0", + "cordova-plugin-device": "1.1.3", + "cordova-plugin-network-information": "1.3.0", + "cordova-plugin-dialogs": "1.3.0", + "cordova-plugin-compat": "1.1.0", + "cordova-plugin-geolocation": "2.4.0", + "ionic-plugin-keyboard": "2.2.1", + "cordova-plugin-statusbar": "2.2.3", + "cordova-plugin-app-name": "1.0.4", + "cordova-plugin-splashscreen": "4.0.3", + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-sim": "1.3.3" +}; +// BOTTOM OF METADATA +});
\ No newline at end of file diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/android/sim.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/android/sim.js new file mode 100644 index 00000000..5813054f --- /dev/null +++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/android/sim.js @@ -0,0 +1,11 @@ +cordova.define("cordova-plugin-sim.SimAndroid", function(require, exports, module) { +module.exports = { + hasReadPermission: function(successCallback, errorCallback) { + cordova.exec(successCallback, errorCallback, 'Sim', 'hasReadPermission', []); + }, + requestReadPermission: function(successCallback, errorCallback) { + cordova.exec(successCallback, errorCallback, 'Sim', 'requestReadPermission', []); + } +}; + +}); diff --git a/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/sim.js b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/sim.js new file mode 100644 index 00000000..ccc52e54 --- /dev/null +++ b/StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/sim.js @@ -0,0 +1,8 @@ +cordova.define("cordova-plugin-sim.Sim", function(require, exports, module) { +module.exports = { + getSimInfo: function(successCallback, errorCallback) { + cordova.exec(successCallback, errorCallback, 'Sim', 'getSimInfo', []); + } +}; + +}); diff --git a/StoneIsland/platforms/android/platform_www/cordova_plugins.js b/StoneIsland/platforms/android/platform_www/cordova_plugins.js index 8f70abd6..770bd946 100755 --- a/StoneIsland/platforms/android/platform_www/cordova_plugins.js +++ b/StoneIsland/platforms/android/platform_www/cordova_plugins.js @@ -112,6 +112,22 @@ module.exports = [ "clobbers": [ "PushNotification" ] + }, + { + "id": "cordova-plugin-sim.Sim", + "file": "plugins/cordova-plugin-sim/www/sim.js", + "pluginId": "cordova-plugin-sim", + "merges": [ + "window.plugins.sim" + ] + }, + { + "id": "cordova-plugin-sim.SimAndroid", + "file": "plugins/cordova-plugin-sim/www/android/sim.js", + "pluginId": "cordova-plugin-sim", + "merges": [ + "window.plugins.sim" + ] } ]; module.exports.metadata = @@ -130,7 +146,8 @@ module.exports.metadata = "cordova-plugin-statusbar": "2.2.3", "cordova-plugin-app-name": "1.0.4", "cordova-plugin-splashscreen": "4.0.3", - "phonegap-plugin-push": "1.9.2" + "phonegap-plugin-push": "1.9.2", + "cordova-plugin-sim": "1.3.3" }; // BOTTOM OF METADATA });
\ No newline at end of file diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/android/sim.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/android/sim.js new file mode 100644 index 00000000..5813054f --- /dev/null +++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/android/sim.js @@ -0,0 +1,11 @@ +cordova.define("cordova-plugin-sim.SimAndroid", function(require, exports, module) { +module.exports = { + hasReadPermission: function(successCallback, errorCallback) { + cordova.exec(successCallback, errorCallback, 'Sim', 'hasReadPermission', []); + }, + requestReadPermission: function(successCallback, errorCallback) { + cordova.exec(successCallback, errorCallback, 'Sim', 'requestReadPermission', []); + } +}; + +}); diff --git a/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/sim.js b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/sim.js new file mode 100644 index 00000000..ccc52e54 --- /dev/null +++ b/StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/sim.js @@ -0,0 +1,8 @@ +cordova.define("cordova-plugin-sim.Sim", function(require, exports, module) { +module.exports = { + getSimInfo: function(successCallback, errorCallback) { + cordova.exec(successCallback, errorCallback, 'Sim', 'getSimInfo', []); + } +}; + +}); diff --git a/StoneIsland/platforms/android/res/xml/config.xml b/StoneIsland/platforms/android/res/xml/config.xml index 9f4cb684..43132082 100644 --- a/StoneIsland/platforms/android/res/xml/config.xml +++ b/StoneIsland/platforms/android/res/xml/config.xml @@ -74,4 +74,7 @@ <feature name="PushNotification"> <param name="android-package" value="com.adobe.phonegap.push.PushPlugin" /> </feature> + <feature name="Sim"> + <param name="android-package" value="com.pbakondy.Sim" /> + </feature> </widget> diff --git a/StoneIsland/platforms/android/src/com/pbakondy/Sim.java b/StoneIsland/platforms/android/src/com/pbakondy/Sim.java new file mode 100644 index 00000000..df3542f7 --- /dev/null +++ b/StoneIsland/platforms/android/src/com/pbakondy/Sim.java @@ -0,0 +1,264 @@ +// MCC and MNC codes on Wikipedia +// http://en.wikipedia.org/wiki/Mobile_country_code + +// Mobile Network Codes (MNC) for the international identification plan for public networks and subscriptions +// http://www.itu.int/pub/T-SP-E.212B-2014 + +// class TelephonyManager +// http://developer.android.com/reference/android/telephony/TelephonyManager.html +// https://github.com/android/platform_frameworks_base/blob/master/telephony/java/android/telephony/TelephonyManager.java + +// permissions +// http://developer.android.com/training/permissions/requesting.html + +// Multiple SIM Card Support +// https://developer.android.com/about/versions/android-5.1.html + +// class SubscriptionManager +// https://developer.android.com/reference/android/telephony/SubscriptionManager.html +// https://github.com/android/platform_frameworks_base/blob/master/telephony/java/android/telephony/SubscriptionManager.java + +// class SubscriptionInfo +// https://developer.android.com/reference/android/telephony/SubscriptionInfo.html +// https://github.com/android/platform_frameworks_base/blob/master/telephony/java/android/telephony/SubscriptionInfo.java + +// Cordova Permissions API +// https://cordova.apache.org/docs/en/latest/guide/platforms/android/plugin.html#android-permissions + +package com.pbakondy; + +import org.apache.cordova.CallbackContext; +import org.apache.cordova.CordovaPlugin; +import org.apache.cordova.PluginResult; +import org.apache.cordova.LOG; + +import org.json.JSONObject; +import org.json.JSONArray; +import org.json.JSONException; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.Build; +import android.Manifest; + +import android.telephony.SubscriptionInfo; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; + +import java.util.List; + +public class Sim extends CordovaPlugin { + private static final String LOG_TAG = "CordovaPluginSim"; + + + private static final String GET_SIM_INFO = "getSimInfo"; + private static final String HAS_READ_PERMISSION = "hasReadPermission"; + private static final String REQUEST_READ_PERMISSION = "requestReadPermission"; + + private CallbackContext callback; + + @SuppressLint("HardwareIds") + @Override + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { + callback = callbackContext; + + if (GET_SIM_INFO.equals(action)) { + Context context = this.cordova.getActivity().getApplicationContext(); + + TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + + // dual SIM detection with SubscriptionManager API + // requires API 22 + // requires permission READ_PHONE_STATE + JSONArray sims = null; + Integer phoneCount = null; + Integer activeSubscriptionInfoCount = null; + Integer activeSubscriptionInfoCountMax = null; + + try { + // TelephonyManager.getPhoneCount() requires API 23 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + phoneCount = manager.getPhoneCount(); + } + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) { + + if (simPermissionGranted(Manifest.permission.READ_PHONE_STATE)) { + + SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); + activeSubscriptionInfoCount = subscriptionManager.getActiveSubscriptionInfoCount(); + activeSubscriptionInfoCountMax = subscriptionManager.getActiveSubscriptionInfoCountMax(); + + sims = new JSONArray(); + + List<SubscriptionInfo> subscriptionInfos = subscriptionManager.getActiveSubscriptionInfoList(); + for (SubscriptionInfo subscriptionInfo : subscriptionInfos) { + + CharSequence carrierName = subscriptionInfo.getCarrierName(); + String countryIso = subscriptionInfo.getCountryIso(); + int dataRoaming = subscriptionInfo.getDataRoaming(); // 1 is enabled ; 0 is disabled + CharSequence displayName = subscriptionInfo.getDisplayName(); + String iccId = subscriptionInfo.getIccId(); + int mcc = subscriptionInfo.getMcc(); + int mnc = subscriptionInfo.getMnc(); + String number = subscriptionInfo.getNumber(); + int simSlotIndex = subscriptionInfo.getSimSlotIndex(); + int subscriptionId = subscriptionInfo.getSubscriptionId(); + + boolean networkRoaming = subscriptionManager.isNetworkRoaming(simSlotIndex); + + String deviceId = null; + // TelephonyManager.getDeviceId(slotId) requires API 23 + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + deviceId = manager.getDeviceId(simSlotIndex); + } + + JSONObject simData = new JSONObject(); + + simData.put("carrierName", carrierName.toString()); + simData.put("displayName", displayName.toString()); + simData.put("countryCode", countryIso); + simData.put("mcc", mcc); + simData.put("mnc", mnc); + simData.put("isNetworkRoaming", networkRoaming); + simData.put("isDataRoaming", (dataRoaming == 1)); + simData.put("simSlotIndex", simSlotIndex); + simData.put("phoneNumber", number); + if (deviceId != null) { + simData.put("deviceId", deviceId); + } + simData.put("simSerialNumber", iccId); + simData.put("subscriptionId", subscriptionId); + + sims.put(simData); + + } + } + } + } catch (JSONException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + + String phoneNumber = null; + String countryCode = manager.getSimCountryIso(); + String simOperator = manager.getSimOperator(); + String carrierName = manager.getSimOperatorName(); + + String deviceId = null; + String deviceSoftwareVersion = null; + String simSerialNumber = null; + String subscriberId = null; + + int callState = manager.getCallState(); + int dataActivity = manager.getDataActivity(); + int networkType = manager.getNetworkType(); + int phoneType = manager.getPhoneType(); + int simState = manager.getSimState(); + + boolean isNetworkRoaming = manager.isNetworkRoaming(); + + if (simPermissionGranted(Manifest.permission.READ_PHONE_STATE)) { + phoneNumber = manager.getLine1Number(); + deviceId = manager.getDeviceId(); + deviceSoftwareVersion = manager.getDeviceSoftwareVersion(); + simSerialNumber = manager.getSimSerialNumber(); + subscriberId = manager.getSubscriberId(); + } + + String mcc = ""; + String mnc = ""; + + if (simOperator.length() >= 3) { + mcc = simOperator.substring(0, 3); + mnc = simOperator.substring(3); + } + + JSONObject result = new JSONObject(); + + result.put("carrierName", carrierName); + result.put("countryCode", countryCode); + result.put("mcc", mcc); + result.put("mnc", mnc); + + result.put("callState", callState); + result.put("dataActivity", dataActivity); + result.put("networkType", networkType); + result.put("phoneType", phoneType); + result.put("simState", simState); + + result.put("isNetworkRoaming", isNetworkRoaming); + + if (phoneCount != null) { + result.put("phoneCount", (int)phoneCount); + } + if (activeSubscriptionInfoCount != null) { + result.put("activeSubscriptionInfoCount", (int)activeSubscriptionInfoCount); + } + if (activeSubscriptionInfoCountMax != null) { + result.put("activeSubscriptionInfoCountMax", (int)activeSubscriptionInfoCountMax); + } + + if (simPermissionGranted(Manifest.permission.READ_PHONE_STATE)) { + result.put("phoneNumber", phoneNumber); + result.put("deviceId", deviceId); + result.put("deviceSoftwareVersion", deviceSoftwareVersion); + result.put("simSerialNumber", simSerialNumber); + result.put("subscriberId", subscriberId); + } + + if (sims != null && sims.length() != 0) { + result.put("cards", sims); + } + + callbackContext.success(result); + + return true; + } else if (HAS_READ_PERMISSION.equals(action)) { + hasReadPermission(); + return true; + } else if (REQUEST_READ_PERMISSION.equals(action)) { + requestReadPermission(); + return true; + } else { + return false; + } + } + + private void hasReadPermission() { + this.callback.sendPluginResult(new PluginResult(PluginResult.Status.OK, + simPermissionGranted(Manifest.permission.READ_PHONE_STATE))); + } + + private void requestReadPermission() { + requestPermission(Manifest.permission.READ_PHONE_STATE); + } + + private boolean simPermissionGranted(String type) { + if (Build.VERSION.SDK_INT < 23) { + return true; + } + return cordova.hasPermission(type); + } + + private void requestPermission(String type) { + LOG.i(LOG_TAG, "requestPermission"); + if (!simPermissionGranted(type)) { + cordova.requestPermission(this, 12345, type); + } else { + this.callback.success(); + } + } + + @Override + public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) throws JSONException + { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + this.callback.success(); + } else { + this.callback.error("Permission denied"); + } + } +} |
