summaryrefslogtreecommitdiff
path: root/StoneIsland/platforms/android
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2017-11-05 20:24:49 +0100
committerJules Laplace <julescarbon@gmail.com>2017-11-05 20:24:49 +0100
commitf828ce6d0c308c2c5d67c71ee3141b015807fd62 (patch)
tree4f5a819afe988158902b907f4f7582448819a594 /StoneIsland/platforms/android
parent1f38892c1729572fa98801692dc20c60931d7377 (diff)
cordova-plugin-sim
Diffstat (limited to 'StoneIsland/platforms/android')
-rwxr-xr-xStoneIsland/platforms/android/AndroidManifest.xml1
-rwxr-xr-xStoneIsland/platforms/android/android.json30
-rw-r--r--StoneIsland/platforms/android/assets/www/cordova_plugins.js153
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/android/sim.js11
-rw-r--r--StoneIsland/platforms/android/assets/www/plugins/cordova-plugin-sim/www/sim.js8
-rwxr-xr-xStoneIsland/platforms/android/platform_www/cordova_plugins.js19
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/android/sim.js11
-rw-r--r--StoneIsland/platforms/android/platform_www/plugins/cordova-plugin-sim/www/sim.js8
-rw-r--r--StoneIsland/platforms/android/res/xml/config.xml3
-rw-r--r--StoneIsland/platforms/android/src/com/pbakondy/Sim.java264
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");
+ }
+ }
+}