├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values-night │ │ │ │ └── colors.xml │ │ │ ├── drawable │ │ │ │ ├── custom_dialog_bg.xml │ │ │ │ ├── negative_button_bg.xml │ │ │ │ ├── positive_button_bg.xml │ │ │ │ └── ic_launcher_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── layout │ │ │ │ ├── permissions_item.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── fragment_main.xml │ │ │ │ ├── activity_main_java.xml │ │ │ │ └── custom_dialog_layout.xml │ │ │ └── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── permissionx │ │ │ │ └── app │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── MainJavaActivity.java │ │ │ │ ├── MainFragment.kt │ │ │ │ ├── CustomDialog.kt │ │ │ │ └── CustomDialogFragment.kt │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── permissionx │ │ │ └── app │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── permissionx │ │ └── app │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle.kts ├── permissionx ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── res │ │ ├── drawable-nodpi │ │ │ ├── permissionx_ic_alert.png │ │ │ ├── permissionx_ic_install.png │ │ │ ├── permissionx_ic_setting.png │ │ │ └── permissionx_ic_notification.png │ │ ├── drawable │ │ │ └── permissionx_default_dialog_bg.xml │ │ ├── values-night │ │ │ └── colors.xml │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ ├── values-zh │ │ │ └── strings.xml │ │ └── layout │ │ │ ├── permissionx_permission_item.xml │ │ │ └── permissionx_default_dialog_layout.xml │ │ └── java │ │ └── com │ │ └── permissionx │ │ └── guolindev │ │ ├── callback │ │ ├── ExplainReasonCallback.java │ │ ├── RequestCallback.java │ │ ├── ForwardToSettingsCallback.java │ │ └── ExplainReasonCallbackWithBeforeParam.java │ │ ├── request │ │ ├── RequestChain.kt │ │ ├── ChainTask.java │ │ ├── RequestNotificationPermission.kt │ │ ├── ForwardScope.kt │ │ ├── ExplainScope.kt │ │ ├── RequestManageExternalStoragePermission.kt │ │ ├── RequestInstallPackagesPermission.kt │ │ ├── RequestNormalPermissions.kt │ │ ├── RequestWriteSettingsPermission.kt │ │ ├── RequestSystemAlertWindowPermission.kt │ │ ├── RequestBodySensorsBackgroundPermission.kt │ │ ├── RequestBackgroundLocationPermission.kt │ │ ├── BaseTask.kt │ │ └── PermissionBuilder.kt │ │ ├── dialog │ │ ├── RationaleDialogFragment.java │ │ ├── RationaleDialog.java │ │ ├── PermissionMap.kt │ │ └── DefaultDialog.kt │ │ ├── PermissionX.java │ │ └── PermissionMediator.kt ├── proguard-rules.pro └── build.gradle.kts ├── screenshots ├── 1.gif ├── 2.gif ├── 3.gif ├── 4.gif └── 5.gif ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── settings.gradle.kts ├── .gitignore ├── gradlew.bat ├── gradlew ├── README.md └── LICENSE /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /permissionx/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /permissionx/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenshots/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/screenshots/1.gif -------------------------------------------------------------------------------- /screenshots/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/screenshots/2.gif -------------------------------------------------------------------------------- /screenshots/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/screenshots/3.gif -------------------------------------------------------------------------------- /screenshots/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/screenshots/4.gif -------------------------------------------------------------------------------- /screenshots/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/screenshots/5.gif -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | PermissionX 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /permissionx/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /permissionx/src/main/res/drawable-nodpi/permissionx_ic_alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/permissionx/src/main/res/drawable-nodpi/permissionx_ic_alert.png -------------------------------------------------------------------------------- /permissionx/src/main/res/drawable-nodpi/permissionx_ic_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/permissionx/src/main/res/drawable-nodpi/permissionx_ic_install.png -------------------------------------------------------------------------------- /permissionx/src/main/res/drawable-nodpi/permissionx_ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/permissionx/src/main/res/drawable-nodpi/permissionx_ic_setting.png -------------------------------------------------------------------------------- /permissionx/src/main/res/drawable-nodpi/permissionx_ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/guolindev/PermissionX/HEAD/permissionx/src/main/res/drawable-nodpi/permissionx_ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #303030 4 | #232323 5 | #008577 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #008577 4 | #00574B 5 | #D81B60 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/custom_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/negative_button_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/positive_button_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed May 29 21:48:04 CST 2024 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /permissionx/src/main/res/drawable/permissionx_default_dialog_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /permissionx/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3c4043 4 | #55565a 5 | #8ab6f5 6 | #fff 7 | -------------------------------------------------------------------------------- /permissionx/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #fff 4 | #e0e0e0 5 | #1972e8 6 | #212121 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/layout/permissions_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/permissionx/app/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.permissionx.app 2 | 3 | import android.os.Bundle 4 | import androidx.appcompat.app.AppCompatActivity 5 | 6 | class MainActivity : AppCompatActivity() { 7 | 8 | override fun onCreate(savedInstanceState: Bundle?) { 9 | super.onCreate(savedInstanceState) 10 | setContentView(R.layout.activity_main) 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /app/src/test/java/com/permissionx/app/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.permissionx.app 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /permissionx/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 |