Skip to content

Commit

Permalink
Add an case that "no more reminder"
Browse files Browse the repository at this point in the history
  • Loading branch information
姜姣姣 committed Jul 20, 2020
1 parent 2843b8d commit 6e629a6
Show file tree
Hide file tree
Showing 9 changed files with 234 additions and 65 deletions.
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
// implementation project(path: ':permission')
implementation 'com.github.jjjSilence:PermissionUtils:1.0.0'
implementation project(path: ':permission')
// implementation 'com.github.jjjSilence:PermissionUtils:1.0.0'
}
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package="com.jjj.permissionutils">

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<application
android:allowBackup="true"
Expand Down
38 changes: 23 additions & 15 deletions app/src/main/java/com/jjj/permission/utils/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,47 @@
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.jjj.permission.PermissionCallback;
import com.jjj.permission.PermissionUtils;
import com.jjj.permission.DefaultPermissionCallback;
import com.jjj.permission.PermissionManager;
import com.jjj.permissionutils.R;


public class MainActivity extends AppCompatActivity {
private static String[] NEEDED_PERMISSIONS = new String[]{
Manifest.permission.CAMERA
Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO
};
PermissionManager permissionManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (PermissionUtils.checkPermissions(this, NEEDED_PERMISSIONS)) {
PermissionUtils.requestPermissions(this, NEEDED_PERMISSIONS);
}
permissionManager = new PermissionManager(this, NEEDED_PERMISSIONS,
new DefaultPermissionCallback() {
@Override
public void grantedPermissions() {
init();
}
});
}

@Override
protected void onResume() {
super.onResume();
Log.e("----------", "onResume");
permissionManager.onResume();
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionUtils.onRequestPermissionsResult(this, requestCode, permissions, new PermissionCallback() {
@Override
public void grantedPermissions() {
Log.e("----------", "onRequestPermissionsResult");
permissionManager.onRequestPermissionsResult(requestCode);
}

}
private void init() {

@Override
public boolean deniedPermissions() {
return false;
}
});
}
}
4 changes: 2 additions & 2 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
Expand All @@ -15,4 +15,4 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
6 changes: 6 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ buildscript {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://maven.aliyun.com/repository/public/" }
maven { url "https://maven.aliyun.com/repository/google/" }
maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
Expand All @@ -18,6 +21,9 @@ allprojects {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url "https://maven.aliyun.com/repository/public/" }
maven { url "https://maven.aliyun.com/repository/google/" }
maven { url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/" }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,23 @@
* @author jiangjiaojiao
* @since 2020-04-13
*/
public interface PermissionCallback {
public interface BasePermissionCallback {
/**
* Granted permissions
*/
void grantedPermissions();

/**
* Denied permissions
*
*/
void deniedPermissions();

/**
* @return Is use default tips dialog if lacking permissions
*/
boolean deniedPermissions();
boolean isUseDefaultTipsDialog();

void showCustomTipsDialog();

void hideCustomTipsDialog();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.jjj.permission;

/**
* xx
*
* @author jiangjiaojiao
* @since 2020-07-20
*/
public abstract class DefaultPermissionCallback implements BasePermissionCallback {
@Override
public void deniedPermissions() {
}

@Override
public boolean isUseDefaultTipsDialog() {
return true;
}

@Override
public void showCustomTipsDialog() {
}

@Override
public void hideCustomTipsDialog() {

}
}
107 changes: 107 additions & 0 deletions permission/src/main/java/com/jjj/permission/PermissionManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package com.jjj.permission;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.support.annotation.NonNull;

/**
* xx
*
* @author jiangjiaojiao
* @since 2020-07-20
*/
public class PermissionManager {
private Activity mActivity;
private String[] mNeedPermissions;
private BasePermissionCallback mPermissionCallback;
private boolean isFirstRequestPermission = true;
private AlertDialog mDefaultTipsDialog;

public PermissionManager(Activity activity, String[] needPermissions, @NonNull BasePermissionCallback callback) {
mActivity = activity;
mNeedPermissions = needPermissions;
mPermissionCallback = callback;
}

public void onResume() {
if (PermissionUtils.checkPermissions(mActivity, mNeedPermissions)) {
mPermissionCallback.grantedPermissions();
hideTipsDialog();
} else {
mPermissionCallback.deniedPermissions();
if (isFirstRequestPermission) {
PermissionUtils.requestPermissions(mActivity, mNeedPermissions);
isFirstRequestPermission = false;
} else {
showTipsDialog();
}
}
}

public void onRequestPermissionsResult(int requestCode) {
if (requestCode == PermissionUtils.ACTION_REQUEST_PERMISSIONS &&
!PermissionUtils.checkPermissions(mActivity, mNeedPermissions)) {
showTipsDialog();
}
}

private void showDefaultTipsDialog() {
if (mDefaultTipsDialog == null) {
createDefaultTipsDialog();
}
if (!mDefaultTipsDialog.isShowing()) {
mDefaultTipsDialog.show();
mDefaultTipsDialog.getButton(DialogInterface.BUTTON_NEGATIVE)
.setTextColor(Color.parseColor("#888888"));
}
}

private void hideDefaultTipsDialog() {
if (mDefaultTipsDialog != null && mDefaultTipsDialog.isShowing()) {
mDefaultTipsDialog.dismiss();
}
}

private void showTipsDialog() {
if (mPermissionCallback.isUseDefaultTipsDialog()) {
showDefaultTipsDialog();
} else {
mPermissionCallback.showCustomTipsDialog();
}
}

private void hideTipsDialog() {
if (mPermissionCallback.isUseDefaultTipsDialog()) {
hideDefaultTipsDialog();
} else {
mPermissionCallback.hideCustomTipsDialog();
}
}

private void createDefaultTipsDialog() {
mDefaultTipsDialog = new AlertDialog.Builder(mActivity)
.setTitle("授权提醒")
.setMessage("权限不足会影响正常使用,请立即授权")
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
mActivity.finish();
}
})
.setPositiveButton("立即授权", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (PermissionUtils.isSuccessRequestPermissions(mActivity, mNeedPermissions)) {
PermissionUtils.requestPermissions(mActivity, mNeedPermissions);
} else {
PermissionUtils.goSettingPage(mActivity);
}
}
})
.setCancelable(false)
.create();
}
}
Loading

0 comments on commit 6e629a6

Please sign in to comment.