Add broadcast receiver to AlarmModule
This commit is contained in:
parent
21d9149498
commit
46dcfb96bf
|
@ -3,8 +3,10 @@ package com.massive
|
|||
import android.annotation.SuppressLint
|
||||
import android.app.*
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.CountDownTimer
|
||||
|
@ -14,14 +16,10 @@ import android.util.Log
|
|||
import android.widget.Toast
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.facebook.react.bridge.ActivityEventListener
|
||||
import com.facebook.react.bridge.Arguments
|
||||
import com.facebook.react.bridge.BaseActivityEventListener
|
||||
import com.facebook.react.bridge.Callback
|
||||
import com.facebook.react.bridge.ReactApplicationContext
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
||||
import com.facebook.react.bridge.ReactMethod
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
|
||||
import kotlin.math.floor
|
||||
|
||||
|
||||
|
@ -34,20 +32,15 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
return "AlarmModule"
|
||||
}
|
||||
|
||||
private val mActivityEventListener: ActivityEventListener =
|
||||
object : BaseActivityEventListener() {
|
||||
override fun onActivityResult(
|
||||
activity: Activity?,
|
||||
requestCode: Int,
|
||||
resultCode: Int,
|
||||
data: Intent?
|
||||
) {
|
||||
Log.d("AlarmModule", "onActivityResult")
|
||||
}
|
||||
private val broadcastReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
Toast.makeText(reactApplicationContext, "called from test receiver", Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
reactApplicationContext.addActivityEventListener(mActivityEventListener)
|
||||
reactApplicationContext.registerReceiver(broadcastReceiver, IntentFilter(STOP_BROADCAST))
|
||||
}
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
|
@ -82,8 +75,7 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
manager.cancel(NOTIFICATION_ID_DONE)
|
||||
reactApplicationContext.stopService(
|
||||
Intent(
|
||||
reactApplicationContext,
|
||||
AlarmService::class.java
|
||||
reactApplicationContext, AlarmService::class.java
|
||||
)
|
||||
)
|
||||
countdownTimer?.cancel()
|
||||
|
@ -95,8 +87,7 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
@ReactMethod
|
||||
fun ignoringBattery(callback: Callback) {
|
||||
val packageName = reactApplicationContext.packageName
|
||||
val pm =
|
||||
reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
val pm = reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
callback.invoke(pm.isIgnoringBatteryOptimizations(packageName))
|
||||
} else {
|
||||
|
@ -128,16 +119,14 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
return object : CountDownTimer(endMs.toLong(), 1000) {
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
override fun onTick(current: Long) {
|
||||
val seconds = floor((current / 1000).toDouble() % 60)
|
||||
.toInt().toString().padStart(2, '0')
|
||||
val minutes = floor((current / 1000).toDouble() / 60)
|
||||
.toInt().toString().padStart(2, '0')
|
||||
builder.setContentText("$minutes:$seconds")
|
||||
.setAutoCancel(false)
|
||||
.setDefaults(0)
|
||||
val seconds =
|
||||
floor((current / 1000).toDouble() % 60).toInt().toString().padStart(2, '0')
|
||||
val minutes =
|
||||
floor((current / 1000).toDouble() / 60).toInt().toString().padStart(2, '0')
|
||||
builder.setContentText("$minutes:$seconds").setAutoCancel(false).setDefaults(0)
|
||||
.setProgress(endMs, current.toInt(), false)
|
||||
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
|
||||
.priority = NotificationCompat.PRIORITY_LOW
|
||||
.setCategory(NotificationCompat.CATEGORY_PROGRESS).priority =
|
||||
NotificationCompat.PRIORITY_LOW
|
||||
val manager = getManager()
|
||||
manager.notify(NOTIFICATION_ID_PENDING, builder.build())
|
||||
}
|
||||
|
@ -146,30 +135,18 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
override fun onFinish() {
|
||||
val context = reactApplicationContext
|
||||
val finishIntent = Intent(context, StopAlarm::class.java)
|
||||
val finishPending =
|
||||
PendingIntent.getActivity(
|
||||
context,
|
||||
0,
|
||||
finishIntent,
|
||||
PendingIntent.FLAG_IMMUTABLE
|
||||
)
|
||||
val finishPending = PendingIntent.getActivity(
|
||||
context, 0, finishIntent, PendingIntent.FLAG_IMMUTABLE
|
||||
)
|
||||
val fullIntent = Intent(context, TimerDone::class.java)
|
||||
val fullPending =
|
||||
PendingIntent.getActivity(
|
||||
context,
|
||||
0,
|
||||
fullIntent,
|
||||
PendingIntent.FLAG_IMMUTABLE
|
||||
)
|
||||
builder.setContentText("Timer finished.")
|
||||
.setProgress(0, 0, false)
|
||||
.setAutoCancel(true)
|
||||
.setOngoing(true)
|
||||
.setFullScreenIntent(fullPending, true)
|
||||
.setContentIntent(finishPending)
|
||||
.setChannelId(CHANNEL_ID_DONE)
|
||||
.setCategory(NotificationCompat.CATEGORY_ALARM)
|
||||
.priority = NotificationCompat.PRIORITY_HIGH
|
||||
val fullPending = PendingIntent.getActivity(
|
||||
context, 0, fullIntent, PendingIntent.FLAG_IMMUTABLE
|
||||
)
|
||||
builder.setContentText("Timer finished.").setProgress(0, 0, false)
|
||||
.setAutoCancel(true).setOngoing(true).setFullScreenIntent(fullPending, true)
|
||||
.setContentIntent(finishPending).setChannelId(CHANNEL_ID_DONE)
|
||||
.setCategory(NotificationCompat.CATEGORY_ALARM).priority =
|
||||
NotificationCompat.PRIORITY_HIGH
|
||||
val manager = getManager()
|
||||
manager.notify(NOTIFICATION_ID_DONE, builder.build())
|
||||
manager.cancel(NOTIFICATION_ID_PENDING)
|
||||
|
@ -188,12 +165,11 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
val contentIntent = Intent(context, MainActivity::class.java)
|
||||
val pendingContent =
|
||||
PendingIntent.getActivity(context, 0, contentIntent, PendingIntent.FLAG_IMMUTABLE)
|
||||
val stopIntent = Intent(context, StopTimer::class.java)
|
||||
val stopIntent = Intent(STOP_BROADCAST)
|
||||
val pendingStop =
|
||||
PendingIntent.getService(context, 0, stopIntent, PendingIntent.FLAG_IMMUTABLE)
|
||||
return NotificationCompat.Builder(context, CHANNEL_ID_PENDING)
|
||||
.setSmallIcon(R.drawable.ic_baseline_hourglass_bottom_24)
|
||||
.setContentTitle("Resting")
|
||||
.setSmallIcon(R.drawable.ic_baseline_hourglass_bottom_24).setContentTitle("Resting")
|
||||
.setContentIntent(pendingContent)
|
||||
.addAction(R.drawable.ic_baseline_stop_24, "Stop", pendingStop)
|
||||
.setDeleteIntent(pendingStop)
|
||||
|
@ -202,9 +178,7 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
fun getManager(): NotificationManager {
|
||||
val alarmsChannel = NotificationChannel(
|
||||
CHANNEL_ID_DONE,
|
||||
CHANNEL_ID_DONE,
|
||||
NotificationManager.IMPORTANCE_HIGH
|
||||
CHANNEL_ID_DONE, CHANNEL_ID_DONE, NotificationManager.IMPORTANCE_HIGH
|
||||
)
|
||||
alarmsChannel.description = "Alarms for rest timers."
|
||||
alarmsChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
|
||||
|
@ -212,12 +186,9 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
NotificationManager::class.java
|
||||
)
|
||||
notificationManager.createNotificationChannel(alarmsChannel)
|
||||
val timersChannel =
|
||||
NotificationChannel(
|
||||
CHANNEL_ID_PENDING,
|
||||
CHANNEL_ID_PENDING,
|
||||
NotificationManager.IMPORTANCE_LOW
|
||||
)
|
||||
val timersChannel = NotificationChannel(
|
||||
CHANNEL_ID_PENDING, CHANNEL_ID_PENDING, NotificationManager.IMPORTANCE_LOW
|
||||
)
|
||||
timersChannel.setSound(null, null)
|
||||
timersChannel.description = "Progress on rest timers."
|
||||
notificationManager.createNotificationChannel(timersChannel)
|
||||
|
@ -225,6 +196,7 @@ class AlarmModule internal constructor(context: ReactApplicationContext?) :
|
|||
}
|
||||
|
||||
companion object {
|
||||
const val STOP_BROADCAST = "stop-timer-event"
|
||||
const val CHANNEL_ID_PENDING = "Timer"
|
||||
const val CHANNEL_ID_DONE = "Alarm"
|
||||
const val NOTIFICATION_ID_PENDING = 1
|
||||
|
|
Loading…
Reference in New Issue
Block a user