You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by bo...@apache.org on 2015/10/19 19:32:13 UTC

[08/10] android commit: Refactor of the Cordova Plugin/Permissions API

Refactor of the Cordova Plugin/Permissions API


Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/013ad94a
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/013ad94a
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/013ad94a

Branch: refs/heads/master
Commit: 013ad94af0a9f0d1f4d4a90528308ce19840c49d
Parents: 2ceb803
Author: Joe Bowser <bo...@apache.org>
Authored: Wed Sep 30 12:20:40 2015 -0700
Committer: Joe Bowser <bo...@apache.org>
Committed: Mon Oct 19 10:31:56 2015 -0700

----------------------------------------------------------------------
 .../org/apache/cordova/CordovaInterface.java    | 15 ++++++++++++++-
 .../apache/cordova/CordovaInterfaceImpl.java    | 20 ++++++++++++++++++--
 .../src/org/apache/cordova/CordovaPlugin.java   | 18 ++++++++++++++++--
 .../cordova/engine/SystemWebChromeClient.java   |  2 +-
 4 files changed, 49 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-android/blob/013ad94a/framework/src/org/apache/cordova/CordovaInterface.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaInterface.java b/framework/src/org/apache/cordova/CordovaInterface.java
index 4b43580..3b8468f 100755
--- a/framework/src/org/apache/cordova/CordovaInterface.java
+++ b/framework/src/org/apache/cordova/CordovaInterface.java
@@ -70,6 +70,19 @@ public interface CordovaInterface {
      */
     public ExecutorService getThreadPool();
 
+    /**
+     * Sends a permission request to the activity for one permission.
+     */
     public void requestPermission(CordovaPlugin plugin, int requestCode, String permission);
-    public void requestPermissions(CordovaPlugin plugin, int requestCode);
+
+    /**
+     * Sends a permission request to the activity for a group of permissions
+     */
+    public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions);
+
+    /**
+     * Check for a permission.  Returns true if the permission is granted, false otherwise.
+     */
+    public boolean hasPermission(String permission);
+
 }

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/013ad94a/framework/src/org/apache/cordova/CordovaInterfaceImpl.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaInterfaceImpl.java b/framework/src/org/apache/cordova/CordovaInterfaceImpl.java
index ac31189..3f5e69d 100644
--- a/framework/src/org/apache/cordova/CordovaInterfaceImpl.java
+++ b/framework/src/org/apache/cordova/CordovaInterfaceImpl.java
@@ -19,8 +19,11 @@
 
 package org.apache.cordova;
 
+import android.Manifest;
 import android.app.Activity;
 import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 
@@ -188,11 +191,24 @@ public class CordovaInterfaceImpl implements CordovaInterface {
         getActivity().requestPermissions(permissions, requestCode);
     }
 
-    public void requestPermissions(CordovaPlugin plugin, int requestCode)
+    public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions)
     {
         permissionResultCallback = plugin;
-        String[] permissions = plugin.getPermissionRequest();
         getActivity().requestPermissions(permissions, requestCode);
     }
 
+    public boolean hasPermission(String permission)
+    {
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+        {
+            int result = activity.checkSelfPermission(permission);
+            return PackageManager.PERMISSION_GRANTED == result;
+        }
+        else
+        {
+            return true;
+        }
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/013ad94a/framework/src/org/apache/cordova/CordovaPlugin.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaPlugin.java b/framework/src/org/apache/cordova/CordovaPlugin.java
index 7dc18e3..9f211ff 100644
--- a/framework/src/org/apache/cordova/CordovaPlugin.java
+++ b/framework/src/org/apache/cordova/CordovaPlugin.java
@@ -29,6 +29,7 @@ import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.net.Uri;
+import android.os.Build;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -365,14 +366,27 @@ public class CordovaPlugin {
     /**
      * Called by the Plugin Manager when we need to actually request permissions
      *
+     * @param requestCode   Passed to the activity to track the request
+     *
      * @return              Returns the permission that was stored in the plugin
      */
 
-    public String[] getPermissionRequest() {
-        return permissions;
+    public void requestPermissions(int requestCode) {
+        cordova.requestPermissions(this, requestCode, permissions);
     }
 
+    /*
+     * Called by the WebView implementation to check for geolocation permissions, can be used
+     * by other Java methods in the event that a plugin is using this as a dependency.
+     *
+     * @return          Returns true if the plugin has all the permissions it needs to operate.
+     */
+
     public boolean hasPermisssion() {
+        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
+        {
+            return true;
+        }
         for(String p : permissions)
         {
             if(PackageManager.PERMISSION_DENIED == cordova.getActivity().checkSelfPermission(p))

http://git-wip-us.apache.org/repos/asf/cordova-android/blob/013ad94a/framework/src/org/apache/cordova/engine/SystemWebChromeClient.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/engine/SystemWebChromeClient.java b/framework/src/org/apache/cordova/engine/SystemWebChromeClient.java
index 9faae29..6a17e72 100755
--- a/framework/src/org/apache/cordova/engine/SystemWebChromeClient.java
+++ b/framework/src/org/apache/cordova/engine/SystemWebChromeClient.java
@@ -189,7 +189,7 @@ public class SystemWebChromeClient extends WebChromeClient {
         CordovaPlugin geolocation = parentEngine.pluginManager.getPlugin("Geolocation");
         if(geolocation != null && !geolocation.hasPermisssion())
         {
-            geolocation.cordova.requestPermissions(geolocation, 0);
+            geolocation.requestPermissions(0);
         }
 
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org