Massive/android/app/src/main/java/com/massive/AlarmModule.kt

70 lines
2.4 KiB
Kotlin
Raw Normal View History

2022-07-05 00:43:04 +00:00
package com.massive
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Context
2022-07-05 00:43:04 +00:00
import android.content.Intent
import android.net.Uri
2022-07-05 00:43:04 +00:00
import android.os.Build
import android.os.PowerManager
import android.provider.Settings
2022-07-05 00:43:04 +00:00
import android.util.Log
import android.widget.Toast
2022-07-05 03:33:42 +00:00
import androidx.annotation.RequiresApi
import androidx.core.content.ContextCompat.startActivity
import com.facebook.react.bridge.Callback
2022-07-05 03:33:42 +00:00
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
2022-07-05 00:43:04 +00:00
2022-07-05 00:43:04 +00:00
class AlarmModule internal constructor(context: ReactApplicationContext?) :
ReactContextBaseJavaModule(context) {
2022-07-05 03:33:42 +00:00
2022-07-05 00:43:04 +00:00
override fun getName(): String {
return "AlarmModule"
}
@RequiresApi(api = Build.VERSION_CODES.O)
@ReactMethod
fun timer(milliseconds: Int, vibrate: Boolean, sound: String?) {
2022-07-05 00:43:04 +00:00
Log.d("AlarmModule", "Queue alarm for $milliseconds delay")
2022-07-05 03:33:42 +00:00
val intent = Intent(reactApplicationContext, TimerService::class.java)
intent.putExtra("milliseconds", milliseconds)
2022-08-20 04:37:59 +00:00
intent.putExtra("vibrate", vibrate)
intent.putExtra("sound", sound)
2022-07-05 03:33:42 +00:00
reactApplicationContext.startService(intent)
2022-07-05 00:43:04 +00:00
}
@RequiresApi(Build.VERSION_CODES.M)
@ReactMethod
2022-07-19 04:38:58 +00:00
fun ignoringBattery(callback: Callback) {
val packageName = reactApplicationContext.packageName
val pm =
reactApplicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
callback.invoke(pm.isIgnoringBatteryOptimizations(packageName))
} else {
callback.invoke(true)
}
}
@SuppressLint("BatteryLife")
@RequiresApi(Build.VERSION_CODES.M)
@ReactMethod
fun ignoreBattery() {
val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
intent.data = Uri.parse("package:" + reactApplicationContext.packageName)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
try {
reactApplicationContext.startActivity(intent)
} catch (e: ActivityNotFoundException) {
Toast.makeText(
reactApplicationContext,
"Requests to ignore battery optimizations are disabled on your device.",
Toast.LENGTH_LONG
).show()
}
}
2022-07-05 03:33:42 +00:00
}