Skip to content

Commit a73de97

Browse files
authored
Fix WindowLeaked exception in BrokenSiteActivity (duckduckgo#3651)
Task/Issue URL: https://app.asana.com/0/1202552961248957/1205303030306903/f ### Description Fix an Activity reference leak when an AlertDialog isn't properly dismissed. ### Steps to test this PR - Navigate to a website. - From the overflow menu choose "Report Broken Site". - Tap on category field (a dialog should show). - Rotate the screen while the dialog is shown. - Check that there is no WindowLeaked exception in logcat. ### No UI changes
1 parent f8ac188 commit a73de97

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

app/src/main/java/com/duckduckgo/app/brokensite/BrokenSiteActivity.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package com.duckduckgo.app.brokensite
1818

19+
import android.annotation.SuppressLint
1920
import android.content.Context
2021
import android.content.Intent
2122
import android.os.Bundle
23+
import androidx.lifecycle.DefaultLifecycleObserver
24+
import androidx.lifecycle.LifecycleOwner
2225
import com.duckduckgo.anvil.annotations.InjectWith
2326
import com.duckduckgo.app.brokensite.BrokenSiteViewModel.Command
2427
import com.duckduckgo.app.brokensite.BrokenSiteViewModel.ViewState
@@ -28,6 +31,7 @@ import com.duckduckgo.app.global.DuckDuckGoActivity
2831
import com.duckduckgo.browser.api.WebViewVersionProvider
2932
import com.duckduckgo.browser.api.brokensite.BrokenSiteData
3033
import com.duckduckgo.di.scopes.ActivityScope
34+
import com.duckduckgo.mobile.android.ui.view.dialog.DaxAlertDialog
3135
import com.duckduckgo.mobile.android.ui.view.dialog.RadioListAlertDialogBuilder
3236
import com.duckduckgo.mobile.android.ui.viewbinding.viewBinding
3337
import com.google.android.material.snackbar.Snackbar
@@ -107,6 +111,8 @@ class BrokenSiteActivity : DuckDuckGoActivity() {
107111
}
108112
},
109113
)
114+
.build()
115+
.dismissOnDestroy(lifecycleOwner = this)
110116
.show()
111117
}
112118
brokenSites.submitButton.setOnClickListener {
@@ -187,3 +193,15 @@ class BrokenSiteActivity : DuckDuckGoActivity() {
187193
}
188194
}
189195
}
196+
197+
private fun DaxAlertDialog.dismissOnDestroy(lifecycleOwner: LifecycleOwner): DaxAlertDialog {
198+
lifecycleOwner.lifecycle.addObserver(
199+
@SuppressLint("NoLifecycleObserver") // we don't observe app lifecycle
200+
object : DefaultLifecycleObserver {
201+
override fun onDestroy(owner: LifecycleOwner) {
202+
dismiss()
203+
}
204+
},
205+
)
206+
return this
207+
}

0 commit comments

Comments
 (0)