diff --git a/app/src/main/java/pub/devrel/easypermissions/sample/BasicActivity.java b/app/src/main/java/pub/devrel/easypermissions/sample/BasicActivity.java index daf2f78..36f1af4 100644 --- a/app/src/main/java/pub/devrel/easypermissions/sample/BasicActivity.java +++ b/app/src/main/java/pub/devrel/easypermissions/sample/BasicActivity.java @@ -5,9 +5,12 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.util.Log; +import android.view.View; +import android.widget.Toast; import java.util.List; +import pub.devrel.easypermissions.AfterPermissionGranted; import pub.devrel.easypermissions.EasyPermissions; /** @@ -19,15 +22,18 @@ public class BasicActivity extends Activity implements EasyPermissions.Permissio private static final String TAG = "BasicActivity"; + private static final int RC_REQUEST_SMS = 1001; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_basic); - findViewById(R.id.button_request).setOnClickListener(v -> { - // Request SMS permission - EasyPermissions.requestPermissions(BasicActivity.this, "NEED SMS PLZ", 1001, - Manifest.permission.READ_SMS); + findViewById(R.id.button_request).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + doSmsTask(); + } }); } @@ -39,6 +45,16 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } + @AfterPermissionGranted(RC_REQUEST_SMS) + public void doSmsTask() { + String perm = Manifest.permission.READ_SMS; + if (!EasyPermissions.hasPermissions(this, perm)) { + EasyPermissions.requestPermissions(this, getString(R.string.rationale_sms), + RC_REQUEST_SMS, perm); + } else { + Toast.makeText(this, "TODO: SMS Task", Toast.LENGTH_SHORT).show(); + } + } @Override public void onPermissionsGranted(int requestCode, List perms) { diff --git a/build.gradle b/build.gradle index d6de960..21a69b8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,10 +1,11 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.4.0-alpha7' + classpath 'com.android.tools.build:gradle:3.0.0-alpha1' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' @@ -14,6 +15,7 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/RationaleDialogClickListener.java b/easypermissions/src/main/java/pub/devrel/easypermissions/RationaleDialogClickListener.java index 944e1ae..894f499 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/RationaleDialogClickListener.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/RationaleDialogClickListener.java @@ -1,15 +1,16 @@ package pub.devrel.easypermissions; +import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; import android.os.Build; import android.support.annotation.RequiresApi; -import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; import java.util.Arrays; +import pub.devrel.easypermissions.helper.PermissionHelper; + /** * Click listener for either {@link RationaleDialogFragment} or {@link RationaleDialogFragmentCompat}. */ @@ -52,18 +53,16 @@ class RationaleDialogClickListener implements Dialog.OnClickListener { public void onClick(DialogInterface dialog, int which) { if (which == Dialog.BUTTON_POSITIVE) { if (mHost instanceof Fragment) { - ((Fragment) mHost).requestPermissions(mConfig.permissions, mConfig.requestCode); + PermissionHelper.newInstance((Fragment) mHost).directRequestPermissions( + mConfig.requestCode, mConfig.permissions); } else if (mHost instanceof android.app.Fragment) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - ((android.app.Fragment) mHost) - .requestPermissions(mConfig.permissions, mConfig.requestCode); - } else { - throw new IllegalArgumentException( - "Target SDK needs to be greater than 23 if caller is android.app.Fragment"); - } - } else if (mHost instanceof FragmentActivity) { - ActivityCompat.requestPermissions( - (FragmentActivity) mHost, mConfig.permissions, mConfig.requestCode); + PermissionHelper.newInstance((android.app.Fragment) mHost).directRequestPermissions( + mConfig.requestCode, mConfig.permissions); + } else if (mHost instanceof Activity) { + PermissionHelper.newInstance((Activity) mHost).directRequestPermissions( + mConfig.requestCode, mConfig.permissions); + } else { + throw new RuntimeException("Host must be an Activity or Fragment!"); } } else { notifyPermissionDenied(); diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/ActivityPermissionHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/ActivityPermissionHelper.java index a5583e8..018d486 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/ActivityPermissionHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/ActivityPermissionHelper.java @@ -2,15 +2,15 @@ import android.annotation.SuppressLint; import android.app.Activity; +import android.app.FragmentManager; import android.content.Context; import android.support.annotation.NonNull; -import android.support.annotation.StringRes; import android.support.v4.app.ActivityCompat; /** * Permissions helper for {@link Activity}. */ -class ActivityPermissionHelper extends PermissionHelper { +class ActivityPermissionHelper extends BaseFrameworkPermissionsHelper { public ActivityPermissionHelper(Activity host) { super(host); @@ -18,23 +18,13 @@ public ActivityPermissionHelper(Activity host) { @Override @SuppressLint("NewApi") - public void requestPermissions(@NonNull String rationale, - @StringRes int positiveButton, - @StringRes int negativeButton, - int requestCode, - @NonNull String... perms) { + public FragmentManager getFragmentManager() { + return getHost().getFragmentManager(); + } - if (shouldShowRationale(perms)) { - showRationaleDialogFragment( - getHost().getFragmentManager(), - rationale, - positiveButton, - negativeButton, - requestCode, - perms); - } else { - ActivityCompat.requestPermissions(getHost(), perms, requestCode); - } + @Override + public void directRequestPermissions(int requestCode, @NonNull String... perms) { + ActivityCompat.requestPermissions(getHost(), perms, requestCode); } @Override diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java new file mode 100644 index 0000000..8b0a799 --- /dev/null +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseFrameworkPermissionsHelper.java @@ -0,0 +1,32 @@ +package pub.devrel.easypermissions.helper; + +import android.app.FragmentManager; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.annotation.RequiresApi; + +import pub.devrel.easypermissions.RationaleDialogFragment; + +/** + * Implementation of {@link PermissionHelper} for framework host classes. + */ +public abstract class BaseFrameworkPermissionsHelper extends PermissionHelper { + + public BaseFrameworkPermissionsHelper(@NonNull T host) { + super(host); + } + + public abstract FragmentManager getFragmentManager(); + + @Override + @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB) + public void showRequestPermissionRationale(@NonNull String rationale, + int positiveButton, + int negativeButton, + int requestCode, + @NonNull String... perms) { + RationaleDialogFragment + .newInstance(positiveButton, negativeButton, rationale, requestCode, perms) + .show(getFragmentManager(), RationaleDialogFragment.TAG); + } +} diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java new file mode 100644 index 0000000..0c0786a --- /dev/null +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/BaseSupportPermissionsHelper.java @@ -0,0 +1,31 @@ +package pub.devrel.easypermissions.helper; + +import android.annotation.SuppressLint; +import android.support.annotation.NonNull; +import android.support.v4.app.FragmentManager; + +import pub.devrel.easypermissions.RationaleDialogFragmentCompat; + +/** + * Implementation of {@link PermissionHelper} for Support Library host classes. + */ +public abstract class BaseSupportPermissionsHelper extends PermissionHelper { + + public BaseSupportPermissionsHelper(@NonNull T host) { + super(host); + } + + public abstract FragmentManager getSupportFragmentManager(); + + @Override + @SuppressLint("NewApi") + public void showRequestPermissionRationale(@NonNull String rationale, + int positiveButton, + int negativeButton, + int requestCode, + @NonNull String... perms) { + RationaleDialogFragmentCompat + .newInstance(positiveButton, negativeButton, rationale, requestCode, perms) + .show(getSupportFragmentManager(), RationaleDialogFragmentCompat.TAG); + } +} diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/FrameworkFragmentPermissionHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/FrameworkFragmentPermissionHelper.java index 863b14e..29ad62f 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/FrameworkFragmentPermissionHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/FrameworkFragmentPermissionHelper.java @@ -2,37 +2,31 @@ import android.annotation.SuppressLint; import android.app.Fragment; +import android.app.FragmentManager; import android.content.Context; +import android.os.Build; import android.support.annotation.NonNull; -import android.support.annotation.StringRes; +import android.support.annotation.RequiresApi; /** * Permissions helper for {@link Fragment} from the framework. */ -class FrameworkFragmentPermissionHelper extends PermissionHelper { +class FrameworkFragmentPermissionHelper extends BaseFrameworkPermissionsHelper { public FrameworkFragmentPermissionHelper(@NonNull Fragment host) { super(host); } @Override - @SuppressLint("NewApi") - public void requestPermissions(@NonNull String rationale, - @StringRes int positiveButton, - @StringRes int negativeButton, int requestCode, - @NonNull String... perms) { + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) + public FragmentManager getFragmentManager() { + return getHost().getChildFragmentManager(); + } - if (shouldShowRationale(perms)) { - showRationaleDialogFragment( - getHost().getChildFragmentManager(), - rationale, - positiveButton, - negativeButton, - requestCode, - perms); - } else { - getHost().requestPermissions(perms, requestCode); - } + @Override + @SuppressLint("NewApi") + public void directRequestPermissions(int requestCode, @NonNull String... perms) { + getHost().requestPermissions(perms, requestCode); } @Override diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/LowApiPermissionsHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/LowApiPermissionsHelper.java index 505027e..37b5f3b 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/LowApiPermissionsHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/LowApiPermissionsHelper.java @@ -1,8 +1,8 @@ package pub.devrel.easypermissions.helper; +import android.annotation.SuppressLint; import android.content.Context; import android.support.annotation.NonNull; -import android.support.annotation.StringRes; /** * Permissions helper for apps built against API < 23, which do not need runtime permissions. @@ -14,12 +14,7 @@ public LowApiPermissionsHelper(@NonNull Object host) { } @Override - public void requestPermissions(@NonNull String rationale, - @StringRes int positiveButton, - @StringRes int negativeButton, - int requestCode, - @NonNull String... perms) { - + public void directRequestPermissions(int requestCode, @NonNull String... perms) { throw new IllegalStateException("Should never be requesting permissions on API < 23!"); } @@ -28,6 +23,16 @@ public boolean shouldShowRequestPermissionRationale(@NonNull String perm) { return false; } + @Override + @SuppressLint("NewApi") + public void showRequestPermissionRationale(@NonNull String rationale, + int positiveButton, + int negativeButton, + int requestCode, + @NonNull String... perms) { + throw new IllegalStateException("Should never be requesting permissions on API < 23!"); + } + @Override public Context getContext() { return null; diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/PermissionHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/PermissionHelper.java index 81d6d69..551aca4 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/PermissionHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/PermissionHelper.java @@ -4,15 +4,12 @@ import android.content.Context; import android.os.Build; import android.support.annotation.NonNull; -import android.support.annotation.RequiresApi; import android.support.annotation.RestrictTo; import android.support.annotation.StringRes; import android.support.v4.app.Fragment; import java.util.List; -import pub.devrel.easypermissions.RationaleDialogFragment; - /** * Delegate class to make permission calls based on the 'host' (Fragment, Activity, etc). */ @@ -67,6 +64,19 @@ public boolean shouldShowRationale(@NonNull String... perms) { return false; } + public void requestPermissions(@NonNull String rationale, + @StringRes int positiveButton, + @StringRes int negativeButton, + int requestCode, + @NonNull String... perms) { + if (shouldShowRationale(perms)) { + showRequestPermissionRationale( + rationale, positiveButton, negativeButton, requestCode, perms); + } else { + directRequestPermissions(requestCode, perms); + } + } + public boolean somePermissionPermanentlyDenied(@NonNull List perms) { for (String deniedPermission : perms) { if (permissionPermanentlyDenied(deniedPermission)) { @@ -94,34 +104,15 @@ public T getHost() { // Public abstract methods // ============================================================================ - public abstract void requestPermissions(@NonNull String rationale, - @StringRes int positiveButton, - @StringRes int negativeButton, - int requestCode, - @NonNull String... perms); + public abstract void directRequestPermissions(int requestCode, @NonNull String... perms); public abstract boolean shouldShowRequestPermissionRationale(@NonNull String perm); + public abstract void showRequestPermissionRationale(@NonNull String rationale, + @StringRes int positiveButton, + @StringRes int negativeButton, + int requestCode, + @NonNull String... perms); public abstract Context getContext(); - // ============================================================================ - // Protected methods - // ============================================================================ - - /** - * Show a {@link RationaleDialogFragment} explaining permission request rationale. - */ - @RequiresApi(api = Build.VERSION_CODES.HONEYCOMB) - protected void showRationaleDialogFragment(@NonNull android.app.FragmentManager fragmentManager, - @NonNull String rationale, - @StringRes int positiveButton, - @StringRes int negativeButton, - int requestCode, - @NonNull String... perms) { - - RationaleDialogFragment - .newInstance(positiveButton, negativeButton, rationale, requestCode, perms) - .show(fragmentManager, RationaleDialogFragment.TAG); - } - } diff --git a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java index c94611d..0b7e643 100644 --- a/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java +++ b/easypermissions/src/main/java/pub/devrel/easypermissions/helper/SupportFragmentPermissionHelper.java @@ -1,37 +1,27 @@ package pub.devrel.easypermissions.helper; -import android.annotation.SuppressLint; import android.content.Context; import android.support.annotation.NonNull; -import android.support.annotation.StringRes; import android.support.v4.app.Fragment; - -import pub.devrel.easypermissions.RationaleDialogFragmentCompat; +import android.support.v4.app.FragmentManager; /** * Permissions helper for {@link Fragment} from the support library. */ -class SupportFragmentPermissionHelper extends PermissionHelper { +class SupportFragmentPermissionHelper extends BaseSupportPermissionsHelper { public SupportFragmentPermissionHelper(@NonNull Fragment host) { super(host); } @Override - @SuppressLint("NewApi") - public void requestPermissions(@NonNull String rationale, - @StringRes int positiveButton, - @StringRes int negativeButton, - int requestCode, - @NonNull String... perms) { + public FragmentManager getSupportFragmentManager() { + return getHost().getChildFragmentManager(); + } - if (shouldShowRationale(perms)) { - RationaleDialogFragmentCompat - .newInstance(positiveButton, negativeButton, rationale, requestCode, perms) - .show(getHost().getChildFragmentManager(), RationaleDialogFragmentCompat.TAG); - } else { - getHost().requestPermissions(perms, requestCode); - } + @Override + public void directRequestPermissions(int requestCode, @NonNull String... perms) { + getHost().requestPermissions(perms, requestCode); } @Override diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 9b0ceda..20d957c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4dbdfde..70e6fcf 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu May 11 19:29:35 PDT 2017 +#Tue Jun 13 13:03:52 PDT 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-rc-3-bin.zip diff --git a/gradlew b/gradlew index 4453cce..cccdd3d 100755 --- a/gradlew +++ b/gradlew @@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn ( ) { +warn () { echo "$*" } -die ( ) { +die () { echo echo "$*" echo @@ -155,7 +155,7 @@ if $cygwin ; then fi # Escape application args -save ( ) { +save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " }