guolindev / PermissionX

An open source Android library that makes handling runtime permissions extremely easy.
Apache License 2.0
3.34k stars 386 forks source link

android.view.WindowLeaked #233

Open hamid-tahmasebi opened 1 year ago

hamid-tahmasebi commented 1 year ago

android.view.WindowLeaked happens when the app is installed for the first time and launched. It does not happen after restarting the app.

implementation 'com.guolindev.permissionx:permissionx:1.7.1'

compileSdk 33
minSdk 29
targetSdk 33

with

    implementation 'androidx.core:core-ktx:1.9.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
    implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0'

Code The exception is thrown here: scope.showRequestReasonDialog

fun Fragment.checkPermission(
    onPermissionsGranted: () -> Unit,
    onDeniedList: (List<String>) -> Unit
) {
    PermissionX.init(this)
        .permissions(*getAppRequiredPermissions())
        .explainReasonBeforeRequest()
        .onExplainRequestReason { scope, deniedList ->
            scope.showRequestReasonDialog(
                deniedList,
                getString(R.string.permissions_request_reason, getString(R.string.app_name)),
                getString(android.R.string.ok),
                getString(android.R.string.cancel)
            )
        }
        .onForwardToSettings { scope, deniedList ->
            scope.showForwardToSettingsDialog(
                deniedList,
                getString(R.string.permissions_allow),
                getString(R.string.allow),
                getString(R.string.deny)
            )
        }
        .request { allGranted, _, deniedList ->
            when (allGranted) {
                true -> onPermissionsGranted()
                false -> onDeniedList(deniedList)
            }
        }
}
E/WindowManager: android.view.WindowLeaked: Activity com.percept.loop.MainActivity has leaked window DecorView@3a5c585[MainActivity] that was originally added here
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:1290)
        at android.view.ViewRootImpl.<init>(ViewRootImpl.java:1265)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:504)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
        at android.app.Dialog.show(Dialog.java:523)
        at com.permissionx.guolindev.request.PermissionBuilder.showHandlePermissionDialog(PermissionBuilder.kt:346)
        at com.permissionx.guolindev.request.PermissionBuilder.showHandlePermissionDialog(PermissionBuilder.kt:321)
        at com.permissionx.guolindev.request.ExplainScope.showRequestReasonDialog(ExplainScope.kt:45)
        at com.percept.loop.extensions.FragmentExtensionsKt.checkPermission$lambda$2(FragmentExtensions.kt:59)
        at com.percept.loop.extensions.FragmentExtensionsKt.$r8$lambda$_zHy9MB_xe0hfkehNkrKqO7AM3I(Unknown Source:0)
        at com.percept.loop.extensions.FragmentExtensionsKt$$ExternalSyntheticLambda0.onExplainReason(Unknown Source:2)
        at com.permissionx.guolindev.request.RequestNormalPermissions.request(RequestNormalPermissions.kt:49)
        at com.permissionx.guolindev.request.RequestChain.runTask$permissionx_release(RequestChain.kt:51)
        at com.permissionx.guolindev.request.PermissionBuilder.startRequest(PermissionBuilder.kt:572)
        at com.permissionx.guolindev.request.PermissionBuilder.request(PermissionBuilder.kt:288)