Skip to content
This repository was archived by the owner on Oct 3, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -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();
}
});
}

Expand All @@ -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<String> perms) {
Expand Down
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -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'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alpha 3 is available now 😄


classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
Expand All @@ -14,6 +15,7 @@ buildscript {
allprojects {
repositories {
jcenter()
google()
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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}.
*/
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,29 @@

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<Activity> {
class ActivityPermissionHelper extends BaseFrameworkPermissionsHelper<Activity> {

public ActivityPermissionHelper(Activity 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 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
Expand Down
Original file line number Diff line number Diff line change
@@ -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<T> extends PermissionHelper<T> {

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);
}
}
Original file line number Diff line number Diff line change
@@ -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<T> extends PermissionHelper<T> {

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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Fragment> {
class FrameworkFragmentPermissionHelper extends BaseFrameworkPermissionsHelper<Fragment> {

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
Expand Down
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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!");
}

Expand All @@ -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;
Expand Down
Loading