From 61892f39c6ebc18f693ca3ca06c18f04f32b7608 Mon Sep 17 00:00:00 2001 From: weizhen Date: Thu, 30 Aug 2018 14:24:22 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E9=92=88=E5=AF=B9=20android=20=20api=2023?= =?UTF-8?q?=20=E4=B9=8B=E5=90=8E=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contactswrapper/ContactsWrapper.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java b/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java index 487ab81..8bd0e26 100644 --- a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java +++ b/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java @@ -8,12 +8,17 @@ import android.net.Uri; import android.provider.ContactsContract; import android.util.Log; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.Manifest; +import android.content.pm.PackageManager; import java.net.URI; import java.util.*; import com.facebook.react.*; +import com.facebook.react.ReactActivity; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.ActivityEventListener; import com.facebook.react.bridge.Arguments; @@ -29,6 +34,7 @@ import com.facebook.react.bridge.ReadableType; import com.facebook.react.bridge.WritableMap; import com.facebook.react.uimanager.ViewManager; +import com.facebook.react.modules.core.PermissionAwareActivity; public class ContactsWrapper extends ReactContextBaseJavaModule implements ActivityEventListener { @@ -39,9 +45,11 @@ public class ContactsWrapper extends ReactContextBaseJavaModule implements Activ public static final String E_CONTACT_NO_EMAIL = "E_CONTACT_NO_EMAIL"; public static final String E_CONTACT_EXCEPTION = "E_CONTACT_EXCEPTION"; public static final String E_CONTACT_PERMISSION = "E_CONTACT_PERMISSION"; + protected Callback callback; private Promise mContactsPromise; private Activity mCtx; private final ContentResolver contentResolver; + private Promise reactContactsPromise; private static final List JUST_ME_PROJECTION = new ArrayList() {{ add(ContactsContract.Contacts.Data.MIMETYPE); add(ContactsContract.Profile.DISPLAY_NAME); @@ -66,6 +74,45 @@ public ContactsWrapper(ReactApplicationContext reactContext) { reactContext.addActivityEventListener(this); } + private boolean permissionsCheck(requestCode){ + Activity activity = getCurrentActivity(); + if(ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){ + //没有授权 + ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, requestCode); + return false; + }else{ + //已经授权 + return true; + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + boolean permissionsGranted = true; + for (int i = 0; i < permissions.length; i++) + { + final boolean granted = grantResults[i] == PackageManager.PERMISSION_GRANTED; + permissionsGranted = permissionsGranted && granted; + } + + if (!permissionsGranted) { + return false; + } + switch (requestCode){ + case (CONTACT_REQUEST): + launchPicker(reactContactsPromise, CONTACT_REQUEST); + break; + case (EMAIL_REQUEST): + launchPicker(reactContactsPromise, EMAIL_REQUEST); + break; + default: + break; + } + + } + + @Override public String getName() { return "ContactsWrapper"; @@ -75,11 +122,19 @@ public String getName() { @ReactMethod public void getContact(Promise contactsPromise) { + reactContactsPromise = contactsPromise; + if (!permissionsCheck(CONTACT_REQUEST)) { + return ; + } launchPicker(contactsPromise, CONTACT_REQUEST); } @ReactMethod public void getEmail(Promise contactsPromise) { + reactContactsPromise = contactsPromise; + if (!permissionsCheck(EMAIL_REQUEST)) { + return ; + } launchPicker(contactsPromise, EMAIL_REQUEST); } From d0df755e0bc3513c8369e22a937f2169cf63c7c1 Mon Sep 17 00:00:00 2001 From: weizhen Date: Thu, 30 Aug 2018 15:26:12 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix=20=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lynxit/contactswrapper/ContactsWrapper.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java b/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java index 8bd0e26..49f9006 100644 --- a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java +++ b/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java @@ -12,6 +12,7 @@ import android.support.v4.content.ContextCompat; import android.Manifest; import android.content.pm.PackageManager; +import android.support.annotation.NonNull; import java.net.URI; import java.util.*; @@ -45,7 +46,6 @@ public class ContactsWrapper extends ReactContextBaseJavaModule implements Activ public static final String E_CONTACT_NO_EMAIL = "E_CONTACT_NO_EMAIL"; public static final String E_CONTACT_EXCEPTION = "E_CONTACT_EXCEPTION"; public static final String E_CONTACT_PERMISSION = "E_CONTACT_PERMISSION"; - protected Callback callback; private Promise mContactsPromise; private Activity mCtx; private final ContentResolver contentResolver; @@ -74,7 +74,8 @@ public ContactsWrapper(ReactApplicationContext reactContext) { reactContext.addActivityEventListener(this); } - private boolean permissionsCheck(requestCode){ +//dsdsdsds + private boolean permissionsCheck(int requestCode) { //dsdsdsds Activity activity = getCurrentActivity(); if(ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){ //没有授权 @@ -86,9 +87,9 @@ private boolean permissionsCheck(requestCode){ } } - @Override + // @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); + // super.onRequestPermissionsResult(requestCode, permissions, grantResults); boolean permissionsGranted = true; for (int i = 0; i < permissions.length; i++) { @@ -97,7 +98,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } if (!permissionsGranted) { - return false; + return ; } switch (requestCode){ case (CONTACT_REQUEST): From 7ce28046f121d9a2304d9de482e3736d77fd537c Mon Sep 17 00:00:00 2001 From: weizhen Date: Thu, 30 Aug 2018 16:11:37 +0800 Subject: [PATCH 3/6] release npm --- android/app/src/main/AndroidManifest.xml | 2 +- .../contactswrapper/ContactsWrapper.java | 2 +- .../contactswrapper/ContactsWrapperPackage.java | 2 +- license.txt | 2 +- package.json | 10 +++++----- 5 files changed, 9 insertions(+), 9 deletions(-) rename android/app/src/main/java/com/{lynxit => zhiyu}/contactswrapper/ContactsWrapper.java (99%) rename android/app/src/main/java/com/{lynxit => zhiyu}/contactswrapper/ContactsWrapperPackage.java (95%) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 5492abc..5d9e0c6 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ diff --git a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java b/android/app/src/main/java/com/zhiyu/contactswrapper/ContactsWrapper.java similarity index 99% rename from android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java rename to android/app/src/main/java/com/zhiyu/contactswrapper/ContactsWrapper.java index 49f9006..ba9268b 100644 --- a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapper.java +++ b/android/app/src/main/java/com/zhiyu/contactswrapper/ContactsWrapper.java @@ -1,4 +1,4 @@ -package com.lynxit.contactswrapper; +package com.zhiyu.contactswrapper; import android.app.Activity; import android.content.ContentResolver; diff --git a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapperPackage.java b/android/app/src/main/java/com/zhiyu/contactswrapper/ContactsWrapperPackage.java similarity index 95% rename from android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapperPackage.java rename to android/app/src/main/java/com/zhiyu/contactswrapper/ContactsWrapperPackage.java index 6519294..2485ea2 100644 --- a/android/app/src/main/java/com/lynxit/contactswrapper/ContactsWrapperPackage.java +++ b/android/app/src/main/java/com/zhiyu/contactswrapper/ContactsWrapperPackage.java @@ -1,4 +1,4 @@ -package com.lynxit.contactswrapper; +package com.zhiyu.contactswrapper; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; diff --git a/license.txt b/license.txt index 4bfe7db..1a39da4 100644 --- a/license.txt +++ b/license.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2016 LynxIT Digital +Copyright (c) 2018 zhiyu JDshi Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/package.json b/package.json index 6cf8e79..363c889 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "react-native-contacts-wrapper", + "name": "react-native-contacts-wrapper-pro", "version": "0.2.4", "nativePackage": true, "scripts": { @@ -7,7 +7,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/LynxITDigital/react-native-contacts-wrapper.git" + "url": "git+https://github.com/JDshi/react-native-contacts-wrapper.git" }, "keywords": [ "react", @@ -17,13 +17,13 @@ "people" ], "author": { - "name": "LynxIT Digital" + "name": "zhiyu JDshi" }, "license": "MIT", "bugs": { - "url": "https://github.com/LynxITDigital/react-native-contacts-wrapper/issues" + "url": "https://github.com/JDshi/react-native-contacts-wrapper/issues" }, - "homepage": "https://github.com/LynxITDigital/react-native-contacts-wrapper", + "homepage": "https://github.com/JDshi/react-native-contacts-wrapper", "maintainers": [ { "name": "Oliver Jacobs" From 212681f6c40848777e41452481f6b35ab63b69ed Mon Sep 17 00:00:00 2001 From: JDshi Date: Thu, 30 Aug 2018 17:55:10 +0800 Subject: [PATCH 4/6] Update package.json --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 363c889..eea2f50 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/JDshi/react-native-contacts-wrapper.git" + "url": "git+https://github.com/JDshi/react-native-contacts-wrapper-pro.git" }, "keywords": [ "react", @@ -21,9 +21,10 @@ }, "license": "MIT", "bugs": { - "url": "https://github.com/JDshi/react-native-contacts-wrapper/issues" + "url": "https://github.com/JDshi/ + /issues" }, - "homepage": "https://github.com/JDshi/react-native-contacts-wrapper", + "homepage": "https://github.com/JDshi/react-native-contacts-wrapper-pro", "maintainers": [ { "name": "Oliver Jacobs" From 9007e5873c9ca0b309081233db808ce9b2bf5322 Mon Sep 17 00:00:00 2001 From: JDshi Date: Thu, 30 Aug 2018 17:56:53 +0800 Subject: [PATCH 5/6] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 641bd0c..1c3e36b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# react-native-contacts-wrapper +# react-native-contacts-wrapper-pro ![alt tag](https://github.com/LynxITDigital/Screenshots/blob/master/RN%20Contacts%20Wrapper%20example.gif) @@ -17,8 +17,8 @@ Feel free to extend the functionality so it's more useful for everyone - all PRs If you have rnpm installed, all you need to do is ``` -npm install react-native-contacts-wrapper --save -rnpm link react-native-contacts-wrapper +npm install react-native-contacts-wrapper-pro --save +react-native link react-native-contacts-wrapper-pro ``` ### Manual @@ -27,15 +27,15 @@ rnpm link react-native-contacts-wrapper in `settings.gradle` ``` -include ':react-native-contacts-wrapper' -project(':react-native-contacts-wrapper').projectDir = new File(settingsDir, '../node_modules/react-native-contacts-wrapper/android/app') +include ':react-native-contacts-wrapper-pro' +project(':react-native-contacts-wrapper-pro').projectDir = new File(settingsDir, '../node_modules/react-native-contacts-wrapper-pro/android/app') ``` in `android/app/build.gradle` ``` dependencies { - compile project(':react-native-contacts-wrapper') + compile project(':react-native-contacts-wrapper-pro') ``` in `MainApplication.java` @@ -100,7 +100,7 @@ Prevent methods from being called multiple times (on Android). An example project can be found in this repo: https://github.com/LynxITDigital/react-native-contacts-wrapper-example/tree/master ``` -import ContactsWrapper from 'react-native-contacts-wrapper'; +import ContactsWrapper from 'react-native-contacts-wrapper-pro'; ... if (!this.importingContactInfo) { this.importingContactInfo = true; From 457f679eb56987de6d92a2fb56b18f98b70b9262 Mon Sep 17 00:00:00 2001 From: JDshi Date: Fri, 31 Aug 2018 08:42:30 +0800 Subject: [PATCH 6/6] Update package.json --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index eea2f50..24e1b99 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,7 @@ }, "license": "MIT", "bugs": { - "url": "https://github.com/JDshi/ - /issues" + "url": "https://github.com/JDshi/react-native-contacts-wrapper-pro/issues" }, "homepage": "https://github.com/JDshi/react-native-contacts-wrapper-pro", "maintainers": [