Skip to content

Commit

Permalink
version 1.0.8
Browse files Browse the repository at this point in the history
- update support libs
- add support for fragment and v4 fragment
- update sample
- update javadoc
  • Loading branch information
raphaelbussa committed Mar 27, 2017
1 parent 338eeaa commit 63ead2b
Show file tree
Hide file tree
Showing 20 changed files with 378 additions and 60 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ repositories {
```
```Gradle
dependencies {
compile 'rebus:permission-utils:1.0.7'
compile 'rebus:permission-utils:1.0.8'
}
```
### How to use
Expand Down Expand Up @@ -93,7 +93,7 @@ Browse Javadoc [here](https://rebus007.github.io/PermissionUtils/javadoc/)
### App using Permission Utils
If you use this lib [contact me](mailto:raphaelbussa@gmail.com?subject=Permission Utils) and I will add it to the list below:

###Developed By
### Developed By
Raphaël Bussa - [raphaelbussa@gmail.com](mailto:raphaelbussa@gmail.com)

[ ![Twitter](https://raw.githubusercontent.com/rebus007/PermissionUtils/master/img/social/twitter-icon.png) ](https://twitter.com/rebus_007)[ ![Google Plus](https://raw.githubusercontent.com/rebus007/PermissionUtils/master/img/social/google-plus-icon.png) ](https://plus.google.com/+RaphaelBussa/posts)[ ![Linkedin](https://raw.githubusercontent.com/rebus007/PermissionUtils/master/img/social/linkedin-icon.png) ](https://www.linkedin.com/in/rebus007)
Expand Down
8 changes: 4 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,18 +30,18 @@ buildscript {
var = [
compileSdk: 25,
buildTools: "25.0.2",
minSdk : 9,
minSdk : 13,
targetSdk : 25,
version : "1.0.7",
supportLib: "25.1.0"
version : "1.0.8",
supportLib: "25.3.0"
]
}

repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.novoda:bintray-release:0.4.0'
}
}
Expand Down
2 changes: 1 addition & 1 deletion library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ android {
}

dependencies {
compile "com.android.support:support-v4:${var.supportLib}"
compile "com.android.support:support-v13:${var.supportLib}"
}

publish {
Expand Down
3 changes: 1 addition & 2 deletions library/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="rebus.permissionutils">

<application
android:label="@string/app_name" />
<application android:label="@string/app_name" />

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,18 @@
*/
public interface AskAgainCallback {

/**
* @param response user response
*/
void showRequestPermission(UserResponse response);

interface UserResponse {

/**
* @param askAgain the response from the user if allow to ask again a permission
*/
void result(boolean askAgain);

}

}
6 changes: 6 additions & 0 deletions library/src/main/java/rebus/permissionutils/FullCallback.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@
*/
public interface FullCallback {

/**
* @param permissionsGranted list of permission granted
* @param permissionsDenied list of permission denied
* @param permissionsDeniedForever list of permission denied forever
* @param permissionsAsked list of permission asked
*/
void result(ArrayList<PermissionEnum> permissionsGranted, ArrayList<PermissionEnum> permissionsDenied, ArrayList<PermissionEnum> permissionsDeniedForever, ArrayList<PermissionEnum> permissionsAsked);

}
74 changes: 62 additions & 12 deletions library/src/main/java/rebus/permissionutils/PermissionManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@
package rebus.permissionutils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v13.app.FragmentCompat;
import android.support.v4.app.ActivityCompat;

import java.util.ArrayList;
Expand All @@ -43,6 +43,10 @@ public class PermissionManager {
@SuppressLint("StaticFieldLeak")
private static PermissionManager instance;

private android.app.Activity activity;
private android.app.Fragment fragment;
private android.support.v4.app.Fragment v4fragment;

private Context context;

private FullCallback fullCallback;
Expand All @@ -61,14 +65,38 @@ public class PermissionManager {
private int key = PermissionConstant.KEY_PERMISSION;

/**
* @param context current context
* @param activity target activity
* @return current instance
*/
public static PermissionManager with(@NonNull android.app.Activity activity) {
if (instance == null) {
instance = new PermissionManager();
}
instance.init(activity, null, null);
return instance;
}

/**
* @param v4fragment target v4 fragment
* @return current instance
*/
public static PermissionManager with(Context context) {
public static PermissionManager with(@NonNull android.support.v4.app.Fragment v4fragment) {
if (instance == null) {
instance = new PermissionManager();
}
instance.init(context);
instance.init(null, null, v4fragment);
return instance;
}

/**
* @param fragment target fragment
* @return current instance
*/
public static PermissionManager with(@NonNull android.app.Fragment fragment) {
if (instance == null) {
instance = new PermissionManager();
}
instance.init(null, fragment, null);
return instance;
}

Expand All @@ -79,7 +107,14 @@ public static void handleResult(int requestCode, @NonNull String[] permissions,
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
instance.permissionsGranted.add(PermissionEnum.fromManifestPermission(permissions[i]));
} else {
boolean permissionsDeniedForever = ActivityCompat.shouldShowRequestPermissionRationale((Activity) instance.context, permissions[i]);
boolean permissionsDeniedForever = false;
if (instance.activity != null) {
permissionsDeniedForever = ActivityCompat.shouldShowRequestPermissionRationale(instance.activity, permissions[i]);
} else if (instance.fragment != null) {
permissionsDeniedForever = FragmentCompat.shouldShowRequestPermissionRationale(instance.fragment, permissions[i]);
} else if (instance.v4fragment != null) {
permissionsDeniedForever = instance.v4fragment.shouldShowRequestPermissionRationale(permissions[i]);
}
if (!permissionsDeniedForever) {
instance.permissionsDeniedForever.add(PermissionEnum.fromManifestPermission(permissions[i]));
}
Expand All @@ -92,8 +127,8 @@ public static void handleResult(int requestCode, @NonNull String[] permissions,
if (instance.askAgainCallback != null && instance.permissionsDeniedForever.size() != instance.permissionsDenied.size()) {
instance.askAgainCallback.showRequestPermission(new AskAgainCallback.UserResponse() {
@Override
public void result(boolean askagain) {
if (askagain) {
public void result(boolean askAgain) {
if (askAgain) {
instance.ask();
} else {
instance.showResult();
Expand All @@ -109,8 +144,18 @@ public void result(boolean askagain) {
}
}

private void init(Context context) {
this.context = context;
private void init(android.app.Activity activity, android.app.Fragment fragment, android.support.v4.app.Fragment v4fragment) {
this.activity = activity;
this.fragment = fragment;
this.v4fragment = v4fragment;

if (activity != null) {
this.context = activity;
} else if (fragment != null) {
this.context = fragment.getActivity();
} else if (v4fragment != null) {
this.context = v4fragment.getActivity();
}
}

/**
Expand Down Expand Up @@ -207,16 +252,21 @@ public PermissionManager key(int key) {
* just start all permission manager
*/
public void ask() {
initArray();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
initArray();
String[] permissionToAsk = permissionToAsk();
if (permissionToAsk.length == 0) {
showResult();
} else {
ActivityCompat.requestPermissions((Activity) context, permissionToAsk, key);
if (activity != null) {
ActivityCompat.requestPermissions(activity, permissionToAsk, key);
} else if (fragment != null) {
FragmentCompat.requestPermissions(fragment, permissionToAsk, key);
} else if (v4fragment != null) {
v4fragment.requestPermissions(permissionToAsk, key);
}
}
} else {
initArray();
permissionsGranted.addAll(permissions);
showResult();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
public class PermissionUtils {

/**
* @param context current context
* @param context current context
* @param permission permission to check
* @return if permission is granted return true
*/
Expand All @@ -46,7 +46,7 @@ public static boolean isGranted(Context context, PermissionEnum permission) {
}

/**
* @param context current context
* @param context current context
* @param permission all permission you need to check
* @return if one of permission is not granted return false
*/
Expand All @@ -70,12 +70,11 @@ public static Intent openApplicationSettings(String packageName) {
}

/**
* @param context current context
* @param context current context
* @param packageName package name of your app
*/
public static void openApplicationSettings(Context context, String packageName) {
Intent intent = openApplicationSettings(packageName);
context.startActivity(intent);
context.startActivity(openApplicationSettings(packageName));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
*/
public interface SimpleCallback {

/**
* @param allPermissionsGranted true if all permissions are granted
*/
void result(boolean allPermissionsGranted);

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@

public interface SmartCallback {

/**
* @param allPermissionsGranted true if all permissions are granted
* @param somePermissionsDeniedForever true if one of asked permissions are denied forever
*/
void result(boolean allPermissionsGranted, boolean somePermissionsDeniedForever);

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,5 @@
<string name="library_permissionutils_repositoryLink">https://github.com/rebus007/PermissionUtils</string>
<string name="library_permissionutils_licenseId">mit</string>
<string name="library_permissionutils_owner">Raphaël Bussa</string>
<string name="library_permissionutils_year">2016</string>
<string name="library_permissionutils_year">2017</string>
</resources>
Original file line number Diff line number Diff line change
@@ -1,35 +1,42 @@
package rebus.permissionutils.sample;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;

public class FragmentActivity extends AppCompatActivity {

private final static String SECOND_FRAGMENT = "SECOND_FRAGMENT";

private FragmentManager fragmentManager;
private final static String SECOND_FRAGMENT_V4 = "SECOND_FRAGMENT_V4";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);

boolean isFragmentV4 = getIntent().getExtras().getBoolean("IS_FRAGMENT_V4");

if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setSubtitle("Fragment");
getSupportActionBar().setSubtitle(isFragmentV4 ? "Fragment V4" : "Fragment");
}

Fragment fragment = Fragment.instantiate(this, SecondFragment.class.getName());
fragmentManager = getSupportFragmentManager();
if (savedInstanceState == null) {
fragmentManager.beginTransaction()
.add(R.id.container, fragment, SECOND_FRAGMENT)
.commit();
if (isFragmentV4) {
if (savedInstanceState == null) {
android.support.v4.app.Fragment fragment = android.support.v4.app.Fragment.instantiate(this, SecondFragmentV4.class.getName());
getSupportFragmentManager().beginTransaction()
.add(R.id.container, fragment, SECOND_FRAGMENT_V4)
.commit();
}
} else {
if (savedInstanceState == null) {
android.app.Fragment fragment = android.app.Fragment.instantiate(this, SecondFragment.class.getName());
getFragmentManager().beginTransaction()
.add(R.id.container, fragment, SECOND_FRAGMENT)
.commit();
}
}

}

@Override
Expand All @@ -42,12 +49,4 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
Fragment fragment = fragmentManager.findFragmentByTag(SECOND_FRAGMENT);
if (fragment != null) {
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public void showRequestPermission(UserResponse response) {
.callback(new SimpleCallback() {
@Override
public void result(boolean allPermissionsGranted) {
Toast.makeText(MainActivity.this, PermissionEnum.GET_ACCOUNTS.toString() + ", " + PermissionEnum.ACCESS_FINE_LOCATION.toString() + ", " + PermissionEnum.READ_SMS.toString() + " allPermissionsGranted [" + allPermissionsGranted + "]", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, PermissionEnum.GET_ACCOUNTS.toString() + ", " + PermissionEnum.ACCESS_FINE_LOCATION.toString() + ", " + PermissionEnum.READ_SMS.toString() + " allPermissionsGranted [" + allPermissionsGranted + "]", Toast.LENGTH_SHORT).show();
}
})
.ask();
Expand Down Expand Up @@ -188,7 +188,7 @@ public void showRequestPermission(UserResponse response) {
.callback(new SmartCallback() {
@Override
public void result(boolean allPermissionsGranted, boolean somePermissionsDeniedForever) {
Toast.makeText(MainActivity.this, PermissionEnum.GET_ACCOUNTS.toString() + ", " + PermissionEnum.ACCESS_FINE_LOCATION.toString() + ", " + PermissionEnum.READ_SMS.toString() + " allPermissionsGranted [" + allPermissionsGranted + "] somePermissionsDeniedForever [" + somePermissionsDeniedForever + "]", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, PermissionEnum.GET_ACCOUNTS.toString() + ", " + PermissionEnum.ACCESS_FINE_LOCATION.toString() + ", " + PermissionEnum.READ_SMS.toString() + " allPermissionsGranted [" + allPermissionsGranted + "] somePermissionsDeniedForever [" + somePermissionsDeniedForever + "]", Toast.LENGTH_SHORT).show();
}
})
.ask();
Expand Down Expand Up @@ -249,8 +249,15 @@ public boolean onOptionsItemSelected(MenuItem item) {
case R.id.action_settings:
PermissionUtils.openApplicationSettings(MainActivity.this, R.class.getPackage().getName());
break;
case R.id.action_fragment_v4:
Intent fragmentV4 = new Intent(MainActivity.this, FragmentActivity.class);
fragmentV4.putExtra("IS_FRAGMENT_V4", true);
startActivity(fragmentV4);
break;
case R.id.action_fragment:
startActivity(new Intent(MainActivity.this, FragmentActivity.class));
Intent fragment = new Intent(MainActivity.this, FragmentActivity.class);
fragment.putExtra("IS_FRAGMENT_V4", false);
startActivity(fragment);
break;
case R.id.action_info:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Expand Down
Loading

0 comments on commit 63ead2b

Please sign in to comment.