Working notification
This commit is contained in:
parent
20d5350a60
commit
ebe3ab4505
4 changed files with 54 additions and 9 deletions
|
@ -26,11 +26,15 @@ class NtfyApi(context: Context) {
|
||||||
|
|
||||||
fun getEventsFlow(): Flow<Event> = flow {
|
fun getEventsFlow(): Flow<Event> = flow {
|
||||||
coroutineScope {
|
coroutineScope {
|
||||||
val conn = getStreamConnection("https://ntfy.sh/_phil")
|
println("111111111111")
|
||||||
|
|
||||||
|
val conn = getStreamConnection("https://ntfy.sh/_phil/sse")
|
||||||
|
println("2222222222222")
|
||||||
val input = conn.inputStream.bufferedReader()
|
val input = conn.inputStream.bufferedReader()
|
||||||
try {
|
try {
|
||||||
conn.connect()
|
conn.connect()
|
||||||
var event = Event()
|
var event = Event()
|
||||||
|
println("CCCCCCCCCCCCCCc")
|
||||||
while (isActive) {
|
while (isActive) {
|
||||||
val line = input.readLine()
|
val line = input.readLine()
|
||||||
println("PHIL: " + line)
|
println("PHIL: " + line)
|
||||||
|
|
|
@ -17,12 +17,17 @@
|
||||||
package io.heckel.ntfy.list
|
package io.heckel.ntfy.list
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
import android.app.NotificationChannel
|
||||||
|
import android.app.NotificationManager
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.lifecycle.Observer
|
import androidx.core.app.NotificationCompat
|
||||||
|
import androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.lifecycle.asLiveData
|
import androidx.lifecycle.asLiveData
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -35,6 +40,7 @@ import io.heckel.ntfy.detail.TopicDetailActivity
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
const val TOPIC_ID = "topic id"
|
const val TOPIC_ID = "topic id"
|
||||||
|
|
||||||
|
@ -64,18 +70,32 @@ class TopicsListActivity : AppCompatActivity() {
|
||||||
fabOnClick()
|
fabOnClick()
|
||||||
}
|
}
|
||||||
|
|
||||||
val self = this
|
createNotificationChannel()
|
||||||
api.getEventsFlow().asLiveData(Dispatchers.IO).observe(this, Observer { event ->
|
|
||||||
// Get the Activity's lifecycleScope and launch
|
api.getEventsFlow().asLiveData(Dispatchers.IO).observe(this) { event ->
|
||||||
this.lifecycleScope.launch(Dispatchers.Main) {
|
this.lifecycleScope.launch(Dispatchers.Main) {
|
||||||
// run the code again in IO context
|
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
println(event.data)
|
handleEvent(event)
|
||||||
//Toast.makeText(self, event.data, Toast.LENGTH_SHORT)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
|
|
||||||
|
private fun handleEvent(event: NtfyApi.Event) {
|
||||||
|
if (event.data.isJsonNull || !event.data.has("message")) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
println("PHIL EVENT: " + event.data)
|
||||||
|
val channelId = getString(R.string.notification_channel_id)
|
||||||
|
val notification = NotificationCompat.Builder(this, channelId)
|
||||||
|
.setSmallIcon(R.drawable.ntfy)
|
||||||
|
.setContentTitle("ntfy")
|
||||||
|
.setContentText(event.data.get("message").asString)
|
||||||
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
|
.build()
|
||||||
|
with(NotificationManagerCompat.from(this)) {
|
||||||
|
notify(Random.nextInt(), notification)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Opens TopicDetailActivity when RecyclerView item is clicked. */
|
/* Opens TopicDetailActivity when RecyclerView item is clicked. */
|
||||||
|
@ -102,4 +122,23 @@ class TopicsListActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createNotificationChannel() {
|
||||||
|
// Create the NotificationChannel, but only on API 26+ because
|
||||||
|
// the NotificationChannel class is new and not in the support library
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
val channelId = getString(R.string.notification_channel_id)
|
||||||
|
val name = getString(R.string.notification_channel_name)
|
||||||
|
val descriptionText = getString(R.string.notification_channel_name)
|
||||||
|
val importance = NotificationManager.IMPORTANCE_DEFAULT
|
||||||
|
val channel = NotificationChannel(channelId, name, importance).apply {
|
||||||
|
description = descriptionText
|
||||||
|
}
|
||||||
|
// Register the channel with the system
|
||||||
|
val notificationManager: NotificationManager =
|
||||||
|
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
|
||||||
|
notificationManager.createNotificationChannel(channel)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
BIN
app/src/main/res/drawable/ntfy.png
Normal file
BIN
app/src/main/res/drawable/ntfy.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
|
@ -24,4 +24,6 @@
|
||||||
<string name="fab_content_description">fab</string>
|
<string name="fab_content_description">fab</string>
|
||||||
<string name="remove_topic">Unsubscribe</string>
|
<string name="remove_topic">Unsubscribe</string>
|
||||||
|
|
||||||
|
<string name="notification_channel_name">Ntfy</string>
|
||||||
|
<string name="notification_channel_id">ntfy</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue