Replace the download complete context based receiver for Android 14

This commit is contained in:
sictiru 2024-03-11 11:04:04 -07:00
parent 9df11a9302
commit 76ea0c32b5
3 changed files with 32 additions and 31 deletions

View file

@ -155,6 +155,13 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<receiver android:name=".util.DownloadCompleteReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
<receiver android:name=".util.NotifyDismissReceiver" android:exported="false" /> <receiver android:name=".util.NotifyDismissReceiver" android:exported="false" />
<receiver android:name=".util.NotifySaveReceiver" android:exported="false" /> <receiver android:name=".util.NotifySaveReceiver" android:exported="false" />
<receiver android:name=".util.NotifyMarkreadReceiver" android:exported="false" /> <receiver android:name=".util.NotifyMarkreadReceiver" android:exported="false" />

View file

@ -1,22 +1,18 @@
package com.newsblur.activity package com.newsblur.activity
import android.app.Activity import android.app.Activity
import android.app.DownloadManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.newsblur.R import com.newsblur.R
import com.newsblur.databinding.ActivityImportExportBinding import com.newsblur.databinding.ActivityImportExportBinding
import com.newsblur.network.APIManager import com.newsblur.network.APIManager
import com.newsblur.service.NBSyncService import com.newsblur.service.NBSyncService
import com.newsblur.util.DownloadCompleteReceiver
import com.newsblur.util.FeedUtils import com.newsblur.util.FeedUtils
import com.newsblur.util.FileDownloader import com.newsblur.util.FileDownloader
import com.newsblur.util.NBScope import com.newsblur.util.NBScope
@ -38,28 +34,12 @@ class ImportExportActivity : NbActivity() {
private lateinit var binding: ActivityImportExportBinding private lateinit var binding: ActivityImportExportBinding
private var fileDownloaderId: Long? = null
private val filePickResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> private val filePickResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) { if (result.resultCode == Activity.RESULT_OK) {
handleFilePickResult(result.data) handleFilePickResult(result.data)
} }
} }
private val onOpmlExportReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == DownloadManager.ACTION_DOWNLOAD_COMPLETE) {
val id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1L)
if (id == fileDownloaderId) {
context?.let {
val msg = "${it.getString(R.string.newsblur_opml)} download completed"
Toast.makeText(it, msg, Toast.LENGTH_SHORT).show()
}
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityImportExportBinding.inflate(layoutInflater) binding = ActivityImportExportBinding.inflate(layoutInflater)
@ -67,10 +47,6 @@ class ImportExportActivity : NbActivity() {
setupUI() setupUI()
setupListeners() setupListeners()
ContextCompat.registerReceiver(this, onOpmlExportReceiver, IntentFilter().apply {
addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE)
}, ContextCompat.RECEIVER_EXPORTED)
} }
private fun setupUI() { private fun setupUI() {
@ -93,7 +69,7 @@ class ImportExportActivity : NbActivity() {
} }
private fun exportOpmlFile() { private fun exportOpmlFile() {
fileDownloaderId = FileDownloader.exportOpml(this) DownloadCompleteReceiver.expectedFileDownloadId = FileDownloader.exportOpml(this)
val msg = "${getString(R.string.newsblur_opml)} download started" val msg = "${getString(R.string.newsblur_opml)} download started"
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show() Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
} }
@ -155,9 +131,4 @@ class ImportExportActivity : NbActivity() {
override fun handleUpdate(updateType: Int) { override fun handleUpdate(updateType: Int) {
// ignore // ignore
} }
override fun onDestroy() {
unregisterReceiver(onOpmlExportReceiver)
super.onDestroy()
}
} }

View file

@ -1,9 +1,12 @@
package com.newsblur.util package com.newsblur.util
import android.app.DownloadManager import android.app.DownloadManager
import android.content.BroadcastReceiver
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.Environment import android.os.Environment
import android.webkit.MimeTypeMap import android.webkit.MimeTypeMap
import android.widget.Toast
import androidx.core.net.toUri import androidx.core.net.toUri
import com.newsblur.R import com.newsblur.R
import com.newsblur.network.APIConstants import com.newsblur.network.APIConstants
@ -30,4 +33,24 @@ object FileDownloader {
.setTitle(context.getString(R.string.newsblur_opml)) .setTitle(context.getString(R.string.newsblur_opml))
return manager.enqueue(request) return manager.enqueue(request)
} }
}
class DownloadCompleteReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == DownloadManager.ACTION_DOWNLOAD_COMPLETE) {
val id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1L)
if (id == expectedFileDownloadId) {
context?.let {
val msg = "${it.getString(R.string.newsblur_opml)} download completed"
Toast.makeText(it, msg, Toast.LENGTH_SHORT).show()
}
}
}
}
companion object {
var expectedFileDownloadId: Long? = null
}
} }