fix problem where send notification would stay on forever

main
Conny Duck 7 years ago
parent 8543df733c
commit 911bffea32
  1. 25
      app/src/main/java/com/keylesspalace/tusky/service/SendTootService.kt

@ -46,6 +46,7 @@ class SendTootService: Service(), Injectable {
private val timer = Timer() private val timer = Timer()
private val notificationManager by lazy { getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager }
override fun onCreate() { override fun onCreate() {
AndroidInjection.inject(this) AndroidInjection.inject(this)
@ -67,8 +68,6 @@ class SendTootService: Service(), Injectable {
throw IllegalStateException("SendTootService started without $KEY_TOOT extra") throw IllegalStateException("SendTootService started without $KEY_TOOT extra")
} }
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(CHANNEL_ID, getString(R.string.send_toot_notification_channel_name), NotificationManager.IMPORTANCE_LOW) val channel = NotificationChannel(CHANNEL_ID, getString(R.string.send_toot_notification_channel_name), NotificationManager.IMPORTANCE_LOW)
notificationManager.createNotificationChannel(channel) notificationManager.createNotificationChannel(channel)
@ -124,6 +123,8 @@ class SendTootService: Service(), Injectable {
if(account == null) { if(account == null) {
tootsToSend.remove(tootId) tootsToSend.remove(tootId)
notificationManager.cancel(tootId)
stopSelfWhenDone()
return return
} }
@ -148,7 +149,6 @@ class SendTootService: Service(), Injectable {
override fun onResponse(call: Call<Status>, response: Response<Status>) { override fun onResponse(call: Call<Status>, response: Response<Status>) {
tootsToSend.remove(tootId) tootsToSend.remove(tootId)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (response.isSuccessful) { if (response.isSuccessful) {
@ -160,10 +160,7 @@ class SendTootService: Service(), Injectable {
saveTootHelper.deleteDraft(tootToSend.savedTootUid) saveTootHelper.deleteDraft(tootToSend.savedTootUid)
} }
if (tootsToSend.isEmpty()) { stopSelfWhenDone()
ServiceCompat.stopForeground(this@SendTootService, ServiceCompat.STOP_FOREGROUND_REMOVE)
stopSelf()
}
notificationManager.cancel(tootId) notificationManager.cancel(tootId)
@ -179,10 +176,7 @@ class SendTootService: Service(), Injectable {
notificationManager.notify(tootId, builder.build()) notificationManager.notify(tootId, builder.build())
if (tootsToSend.isEmpty()) { stopSelfWhenDone()
ServiceCompat.stopForeground(this@SendTootService, ServiceCompat.STOP_FOREGROUND_DETACH)
stopSelf()
}
} }
} }
@ -205,6 +199,13 @@ class SendTootService: Service(), Injectable {
} }
private fun stopSelfWhenDone() {
if (tootsToSend.isEmpty()) {
ServiceCompat.stopForeground(this@SendTootService, ServiceCompat.STOP_FOREGROUND_DETACH)
stopSelf()
}
}
private fun cancelSending(tootId: Int) { private fun cancelSending(tootId: Int) {
val tootToCancel = tootsToSend.remove(tootId) val tootToCancel = tootsToSend.remove(tootId)
if(tootToCancel != null) { if(tootToCancel != null) {
@ -213,8 +214,6 @@ class SendTootService: Service(), Injectable {
saveTootToDrafts(tootToCancel) saveTootToDrafts(tootToCancel)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val builder = NotificationCompat.Builder(this@SendTootService, CHANNEL_ID) val builder = NotificationCompat.Builder(this@SendTootService, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notify) .setSmallIcon(R.drawable.ic_notify)
.setContentTitle(getString(R.string.send_toot_notification_cancel_title)) .setContentTitle(getString(R.string.send_toot_notification_cancel_title))

Loading…
Cancel
Save