Skip to content

Commit

Permalink
Fixes #63:
Browse files Browse the repository at this point in the history
Changed duplicated value validation to account for multiple annotation signatures with partially repeating values, which shouldn't trigger DuplicatedValueExceptions, but did
  • Loading branch information
mannodermaus committed Dec 22, 2015
1 parent afe9d0f commit 83b0a35
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ fun findAndValidateProcessorUnit(units: List<ProcessorUnit>, e: Element): Proces
* Raises an exception if any annotation value is found multiple times.
*/
fun <A : Annotation> checkDuplicatedValue(items: List<ExecutableElement>, annotationClass: Class<A>) {
val set: HashSet<String> = hashSetOf()
val set: HashSet<List<String>> = hashSetOf()
items.forEach {
val permissionValue = it.getAnnotation(annotationClass).permissionValue()
if (!set.addAll(permissionValue)) {
if (!set.add(permissionValue)) {
throw DuplicatedValueException(permissionValue, it, annotationClass)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,4 +301,9 @@ public class ProcessorTestSuite extends TestSuite {
@Test public void onePermissionWithRationaleAndDeniedSupportFragment() {
assertJavaSource(Source.OnePermissionWithRationaleAndDeniedSupportFragment);
}

@Test public void noDuplicatesDespiteRepeatedValuesActivity() {
// Issue 63: https://github.com/hotchemi/PermissionsDispatcher/issues/63
assertJavaSource(Source.NoDuplicatesDespiteRepeatedValuesActivity);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4703,4 +4703,105 @@ protected String[] getExpectSource() {
};
}
};

public static final BaseTest NoDuplicatesDespiteRepeatedValuesActivity = new BaseTest() {
@Override
protected String getName() {
return "MyActivity";
}

@Override
protected String[] getActualSource() {
return new String[] {
"package tests;",
"import android.Manifest;",
"import android.app.Activity;",
"import permissions.dispatcher.RuntimePermissions;",
"import permissions.dispatcher.NeedsPermission;",
"import permissions.dispatcher.OnPermissionDenied;",
"import permissions.dispatcher.OnNeverAskAgain;",
"@RuntimePermissions",
"public class MyActivity extends Activity {",
"@NeedsPermission({Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE})",
"public void showCamera() {",
"}",
"@OnPermissionDenied({Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE})",
"void onShowCameraDenied() {",
"}",
"@OnNeverAskAgain({Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE})",
"void onShowCameraNeverAsk() {",
"}",
"@NeedsPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)",
"void showGetStorage() {",
"}",
"@OnPermissionDenied(Manifest.permission.WRITE_EXTERNAL_STORAGE)",
"void onGetStorageDenied() {",
"}",
"@OnNeverAskAgain(Manifest.permission.WRITE_EXTERNAL_STORAGE)",
"void onGetStorageNeverAsk() {",
"}",
"}"
};
}

@Override
protected String[] getExpectSource() {
return new String[] {
"package tests;",
"import android.support.v4.app.ActivityCompat;",
"import java.lang.String;",
"import permissions.dispatcher.PermissionUtils;",
"final class MyActivityPermissionsDispatcher {",
" private static final int REQUEST_SHOWCAMERA = 0;",
" private static final String[] PERMISSION_SHOWCAMERA = new String[] {\"android.permission.CAMERA\", \"android.permission.WRITE_EXTERNAL_STORAGE\"};",
" private static final int REQUEST_SHOWGETSTORAGE = 1;",
" private static final String[] PERMISSION_SHOWGETSTORAGE = new String[] {\"android.permission.WRITE_EXTERNAL_STORAGE\"};",
" private MyActivityPermissionsDispatcher() {",
" }",
" static void showCameraWithCheck(MyActivity target) {",
" if (PermissionUtils.hasSelfPermissions(target, PERMISSION_SHOWCAMERA)) {",
" target.showCamera();",
" } else {",
" ActivityCompat.requestPermissions(target, PERMISSION_SHOWCAMERA, REQUEST_SHOWCAMERA);",
" }",
" }",
" static void showGetStorageWithCheck(MyActivity target) {",
" if (PermissionUtils.hasSelfPermissions(target, PERMISSION_SHOWGETSTORAGE)) {",
" target.showGetStorage();",
" } else {",
" ActivityCompat.requestPermissions(target, PERMISSION_SHOWGETSTORAGE, REQUEST_SHOWGETSTORAGE);",
" }",
" }",
" static void onRequestPermissionsResult(MyActivity target, int requestCode, int[] grantResults) {",
" switch (requestCode) {",
" case REQUEST_SHOWCAMERA:",
" if (PermissionUtils.verifyPermissions(grantResults)) {",
" target.showCamera();",
" } else {",
" if (!PermissionUtils.shouldShowRequestPermissionRationale(target, PERMISSION_SHOWCAMERA)) {",
" target.onShowCameraNeverAsk();",
" } else {",
" target.onShowCameraDenied();",
" }",
" }",
" break;",
" case REQUEST_SHOWGETSTORAGE:",
" if (PermissionUtils.verifyPermissions(grantResults)) {",
" target.showGetStorage();",
" } else {",
" if (!PermissionUtils.shouldShowRequestPermissionRationale(target, PERMISSION_SHOWGETSTORAGE)) {",
" target.onGetStorageNeverAsk();",
" } else {",
" target.onGetStorageDenied();",
" }",
" }",
" break;",
" default:",
" break;",
" }",
" }",
"}"
};
}
};
}

0 comments on commit 83b0a35

Please sign in to comment.