Fix receiver leaking

This commit is contained in:
Mygod
2018-02-15 15:34:56 -08:00
parent 7461d3bf30
commit 026d1ecb2b
4 changed files with 26 additions and 10 deletions
@@ -174,12 +174,16 @@ class App : Application() {
}
}
fun listenForPackageChanges(callback: () -> Unit): BroadcastReceiver {
fun listenForPackageChanges(onetime: Boolean = true, callback: () -> Unit): BroadcastReceiver {
val filter = IntentFilter(Intent.ACTION_PACKAGE_ADDED)
filter.addAction(Intent.ACTION_PACKAGE_REMOVED)
filter.addDataScheme("package")
val result = broadcastReceiver { _, intent ->
if (!intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) callback()
val result = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) return
callback()
if (onetime) app.unregisterReceiver(this)
}
}
app.registerReceiver(result, filter)
return result