├── lint ├── .gitignore ├── src │ ├── test │ │ └── java │ │ │ └── permissions │ │ │ └── dispatcher │ │ │ ├── PermissionsDispatcherIssueRegistryTest.kt │ │ │ ├── Utils.kt │ │ │ ├── NoCorrespondingNeedsPermissionDetectorTest.kt │ │ │ ├── NoCorrespondingNeedsPermissionDetectorKtTest.kt │ │ │ └── CallOnRequestPermissionsResultDetectorTest.kt │ └── main │ │ └── java │ │ └── permissions │ │ └── dispatcher │ │ ├── PermissionsDispatcherIssueRegistry.java │ │ └── NoCorrespondingNeedsPermissionDetector.java └── build.gradle ├── sample ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── template-styles.xml │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ └── layout │ │ │ ├── fragment_camera.xml │ │ │ ├── activity_main.xml │ │ │ └── fragment_contacts.xml │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── permissions │ │ └── dispatcher │ │ └── sample │ │ ├── camera │ │ ├── CameraPreviewFragment.kt │ │ └── CameraPreview.kt │ │ └── MainActivity.kt └── build.gradle ├── annotation ├── .gitignore ├── build.gradle ├── gradle.properties └── src │ └── main │ └── java │ └── permissions │ └── dispatcher │ ├── GrantableRequest.java │ ├── PermissionRequest.java │ ├── OnPermissionDenied.java │ ├── RuntimePermissions.java │ ├── OnShowRationale.java │ ├── OnNeverAskAgain.java │ └── NeedsPermission.java ├── ktx-sample ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── template-styles.xml │ │ │ ├── dimens.xml │ │ │ └── strings.xml │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ └── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_camera.xml │ │ │ └── fragment_main.xml │ │ ├── java │ │ └── permissions │ │ │ └── dispatcher │ │ │ └── ktx │ │ │ └── sample │ │ │ ├── MainActivity.kt │ │ │ └── MainFragment.kt │ │ └── AndroidManifest.xml └── build.gradle ├── test ├── .gitignore ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── permissions │ │ │ └── dispatcher │ │ │ └── test │ │ │ ├── ActivityWithWriteSettingKt.kt │ │ │ ├── ActivityWithSystemAlertWindowKt.kt │ │ │ ├── ActivityWithWriteSetting.java │ │ │ ├── ActivityWithParametersKt.kt │ │ │ ├── ActivityWithSystemAlertWindow.java │ │ │ ├── ActivityOnlyNeedsPermission.java │ │ │ ├── ActivityWithWriteSettingKtAllAnnotations.kt │ │ │ ├── ActivityWithSystemAlertWindowKtAllAnnotations.kt │ │ │ ├── FragmentWithAllAnnotationsKt.kt │ │ │ ├── ActivityWithNoParameterArgumentKt.kt │ │ │ ├── ActivityWithOnNeverAskAgain.java │ │ │ ├── ActivityWithOnPermissionDenied.java │ │ │ ├── ActivityWithShowRationale.java │ │ │ ├── ActivityWithAllAnnotationsKt.kt │ │ │ ├── ActivityWithWriteSettingAllAnnotations.java │ │ │ ├── ActivityWithSystemAlertWindowAllAnnotations.java │ │ │ ├── FragmentWithAllAnnotations.java │ │ │ └── ActivityWithAllAnnotations.java │ └── test │ │ └── java │ │ └── permissions │ │ └── dispatcher │ │ └── test │ │ ├── ActivityWithParametersKtPermissionsDispatcherTest.kt │ │ ├── ActivityOnlyNeedsPermissionPermissionsDispatcherTest.kt │ │ ├── ActivityWithWriteSettingKtTest.kt │ │ ├── ActivityWithSystemAlertWindowKtTest.kt │ │ ├── ActivityWithWriteSettingPermissionsDispatcherTest.kt │ │ ├── ActivityWithSystemAlertWindowPermissionsDispatcherTest.kt │ │ ├── ActivityWithOnNeverAskAgainPermissionsDispatcherTest.kt │ │ ├── ActivityWithOnPermissionDeniedPermissionsDispatcherTest.kt │ │ ├── ActivityWithWriteSettingAllAnnotationsPermissionsDispatcherTest.kt │ │ └── ActivityWithShowRationalePermissionsDispatcherTest.kt └── build.gradle ├── .gitignore ├── ktx ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── permissions │ │ │ └── dispatcher │ │ │ └── ktx │ │ │ ├── PermissionRequestResult.kt │ │ │ ├── TypeAliases.kt │ │ │ ├── PermissionsRequester.kt │ │ │ ├── Event.kt │ │ │ ├── KtxPermissionRequest.kt │ │ │ ├── LocationPermission.kt │ │ │ ├── PermissionRequestViewModel.kt │ │ │ ├── PermissionsRequesterImpl.kt │ │ │ ├── PermissionRequestType.kt │ │ │ ├── PermissionRequestFragment.kt │ │ │ ├── ActivityExtensions.kt │ │ │ └── FragmentExtensions.kt │ └── test │ │ ├── resources │ │ └── mockito-extensions │ │ │ └── org.mockito.plugins.MockMaker │ │ └── java │ │ └── permissions │ │ └── dispatcher │ │ └── test │ │ ├── EventTest.kt │ │ ├── KtxPermissionRequestTest.kt │ │ ├── LocationPermissionTest.kt │ │ └── PermissionRequestViewModelTest.kt ├── gradle.properties └── build.gradle ├── library ├── src │ └── main │ │ └── AndroidManifest.xml ├── gradle.properties └── build.gradle ├── processor ├── src │ ├── test │ │ ├── resources │ │ │ └── mockito-extensions │ │ │ │ └── org.mockito.plugins.MockMaker │ │ └── java │ │ │ └── permissions │ │ │ └── dispatcher │ │ │ └── processor │ │ │ └── base │ │ │ ├── BaseTest.java │ │ │ ├── StringEquals.java │ │ │ ├── TestSuite.java │ │ │ └── AndroidAwareClassLoader.java │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ ├── services │ │ │ └── javax.annotation.processing.Processor │ │ │ └── gradle │ │ │ └── incremental.annotation.processors │ │ └── kotlin │ │ └── permissions │ │ └── dispatcher │ │ └── processor │ │ ├── exception │ │ ├── SpecialPermissionsWithNeverAskAgainException.kt │ │ ├── WrongClassException.kt │ │ ├── NoParametersAllowedException.kt │ │ ├── NoAnnotatedMethodsException.kt │ │ ├── NoThrowsAllowedException.kt │ │ ├── WrongReturnTypeException.kt │ │ ├── PrivateMethodException.kt │ │ ├── MixPermissionTypeException.kt │ │ ├── DuplicatedValueException.kt │ │ ├── DuplicatedMethodNameException.kt │ │ └── WrongParametersException.kt │ │ ├── impl │ │ ├── java │ │ │ ├── SensitivePermissionInterface.kt │ │ │ ├── JavaFragmentProcessorUnit.kt │ │ │ ├── WriteSettingsHelper.kt │ │ │ ├── JavaActivityProcessorUnit.kt │ │ │ └── SystemAlertWindowHelper.kt │ │ └── kotlin │ │ │ ├── SensitivePermissionInterface.kt │ │ │ ├── WriteSettingsHelper.kt │ │ │ ├── SystemAlertWindowHelper.kt │ │ │ ├── KotlinFragmentProcessorUnit.kt │ │ │ └── KotlinActivityProcessorUnit.kt │ │ ├── util │ │ ├── Constants.kt │ │ └── Helpers.kt │ │ ├── RequestCodeProvider.kt │ │ ├── ProcessorUnit.kt │ │ ├── RuntimePermissionsElement.kt │ │ └── PermissionsProcessor.kt ├── gradle.properties └── build.gradle ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .github ├── workflows │ ├── pull_request_ci.yml │ ├── deploy_snapshot.yml │ ├── ktx-release.yml │ └── release.yml └── ISSUE_TEMPLATE.md ├── doc ├── maxsdkversion.md ├── special_permissions.md └── java_usage.md ├── gradle.properties └── gradlew.bat /lint/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /annotation/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /ktx-sample/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /test/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | !build/generated/source/apt -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | local.properties 3 | 4 | build/ 5 | 6 | .idea/ 7 | *.iml 8 | -------------------------------------------------------------------------------- /ktx/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ktx/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /processor/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline -------------------------------------------------------------------------------- /annotation/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'java-library' 2 | apply plugin: "com.vanniktech.maven.publish" 3 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':library', ':processor', ':lint', ':sample', ':test', ':annotation', ':ktx', ':ktx-sample' -------------------------------------------------------------------------------- /ktx/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME = ktx 2 | POM_ARTIFACT_ID = ktx 3 | POM_PACKAGING = aar 4 | VERSION_NAME = 1.2.0-SNAPSHOT 5 | -------------------------------------------------------------------------------- /processor/src/main/resources/META-INF/services/javax.annotation.processing.Processor: -------------------------------------------------------------------------------- 1 | permissions.dispatcher.processor.PermissionsProcessor -------------------------------------------------------------------------------- /library/gradle.properties: -------------------------------------------------------------------------------- 1 | POM_NAME = permissionsdispatcher 2 | POM_ARTIFACT_ID = permissionsdispatcher 3 | POM_PACKAGING = aar 4 | -------------------------------------------------------------------------------- /processor/src/main/resources/META-INF/gradle/incremental.annotation.processors: -------------------------------------------------------------------------------- 1 | permissions.dispatcher.processor.PermissionsProcessor,isolating -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permissions-dispatcher/PermissionsDispatcher/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /sample/src/main/res/values/template-styles.xml: -------------------------------------------------------------------------------- 1 | 2 |