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; 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 84% 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 487ab81..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; @@ -8,12 +8,18 @@ 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 android.support.annotation.NonNull; 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 +35,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 { @@ -42,6 +49,7 @@ public class ContactsWrapper extends ReactContextBaseJavaModule implements Activ 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,46 @@ public ContactsWrapper(ReactApplicationContext reactContext) { reactContext.addActivityEventListener(this); } +//dsdsdsds + private boolean permissionsCheck(int requestCode) { //dsdsdsds + 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 ; + } + 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 +123,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); } 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..24e1b99 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-pro.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-pro/issues" }, - "homepage": "https://github.com/LynxITDigital/react-native-contacts-wrapper", + "homepage": "https://github.com/JDshi/react-native-contacts-wrapper-pro", "maintainers": [ { "name": "Oliver Jacobs"