diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index b0372ee..d5c918a 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -43,17 +43,9 @@
android:name=".StopAlarm"
android:exported="true"
android:process=":remote" />
-
-
-
\ No newline at end of file
diff --git a/android/app/src/main/java/com/massive/DownloadModule.kt b/android/app/src/main/java/com/massive/DownloadModule.kt
deleted file mode 100644
index 0c9a606..0000000
--- a/android/app/src/main/java/com/massive/DownloadModule.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.massive
-
-import android.app.DownloadManager
-import android.app.NotificationChannel
-import android.app.NotificationManager
-import android.app.NotificationManager.IMPORTANCE_DEFAULT
-import android.app.PendingIntent
-import android.app.PendingIntent.FLAG_IMMUTABLE
-import android.content.Intent
-import android.net.Uri
-import android.os.Build
-import android.os.Environment
-import android.util.Log
-import androidx.annotation.RequiresApi
-import androidx.core.app.NotificationCompat
-import androidx.core.net.toUri
-import com.facebook.react.bridge.ReactApplicationContext
-import com.facebook.react.bridge.ReactContextBaseJavaModule
-import com.facebook.react.bridge.ReactMethod
-import java.io.File
-
-class DownloadModule internal constructor(context: ReactApplicationContext) :
- ReactContextBaseJavaModule(context) {
- override fun getName(): String {
- return "DownloadModule"
- }
-
- @RequiresApi(Build.VERSION_CODES.O)
- @ReactMethod
- fun show(name: String) {
- val channel = NotificationChannel(CHANNEL_ID, CHANNEL_ID, IMPORTANCE_DEFAULT)
- channel.description = "Notifications for downloaded files."
- val manager =
- reactApplicationContext.getSystemService(NotificationManager::class.java)
- manager.createNotificationChannel(channel)
- val intent = Intent(DownloadManager.ACTION_VIEW_DOWNLOADS)
- val pendingIntent =
- PendingIntent.getActivity(reactApplicationContext, 0, intent, FLAG_IMMUTABLE)
- val builder = NotificationCompat.Builder(reactApplicationContext, CHANNEL_ID)
- .setSmallIcon(R.drawable.ic_baseline_arrow_downward_24)
- .setContentTitle("Downloaded $name")
- .setContentIntent(pendingIntent)
- .setAutoCancel(true)
- manager.notify(NOTIFICATION_ID, builder.build())
- }
-
- companion object {
- private const val CHANNEL_ID = "MassiveDownloads"
- private const val NOTIFICATION_ID = 3
- }
-}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/massive/MassiveHelper.kt b/android/app/src/main/java/com/massive/MassiveHelper.kt
deleted file mode 100644
index 2263c00..0000000
--- a/android/app/src/main/java/com/massive/MassiveHelper.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.massive
-
-import android.content.Context
-import android.database.sqlite.SQLiteDatabase
-import android.database.sqlite.SQLiteOpenHelper
-
-class MassiveHelper(context: Context) : SQLiteOpenHelper(context, "massive.db", null, 1) {
- override fun onCreate(db: SQLiteDatabase) {
- return
- }
-
- override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) {
- return
- }
-}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/massive/MassivePackage.kt b/android/app/src/main/java/com/massive/MassivePackage.kt
index 6e123f5..25cbf82 100644
--- a/android/app/src/main/java/com/massive/MassivePackage.kt
+++ b/android/app/src/main/java/com/massive/MassivePackage.kt
@@ -17,7 +17,6 @@ class MassivePackage : ReactPackage {
): List {
val modules: MutableList = ArrayList()
modules.add(AlarmModule(reactContext))
- modules.add(DownloadModule(reactContext))
return modules
}
}
diff --git a/android/app/src/main/java/com/massive/StopTimer.kt b/android/app/src/main/java/com/massive/StopTimer.kt
deleted file mode 100644
index 1c02edf..0000000
--- a/android/app/src/main/java/com/massive/StopTimer.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.massive
-
-import android.app.Notification
-import android.app.NotificationChannel
-import android.app.NotificationManager
-import android.app.Service
-import android.content.Intent
-import android.os.Build
-import android.os.IBinder
-import android.util.Log
-import androidx.annotation.RequiresApi
-import com.facebook.react.bridge.ReactApplicationContext
-
-class StopTimer : Service() {
- @RequiresApi(Build.VERSION_CODES.O)
- override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
- Log.d("StopTimer", "onStartCommand")
- applicationContext.stopService(Intent(applicationContext, AlarmService::class.java))
- val manager = getManager();
- manager.cancel(AlarmModule.NOTIFICATION_ID_DONE)
- manager.cancel(AlarmModule.NOTIFICATION_ID_PENDING)
- val mod = AlarmModule(applicationContext as ReactApplicationContext?)
- Log.d("StopTimer", "countdownTimer=${mod.countdownTimer}")
- return super.onStartCommand(intent, flags, startId)
- }
-
- override fun onBind(p0: Intent?): IBinder? {
- return null
- }
-
-
- @RequiresApi(Build.VERSION_CODES.O)
- private fun getManager(): NotificationManager {
- val alarmsChannel = NotificationChannel(
- AlarmModule.CHANNEL_ID_DONE,
- AlarmModule.CHANNEL_ID_DONE,
- NotificationManager.IMPORTANCE_HIGH
- )
- alarmsChannel.description = "Alarms for rest timers."
- alarmsChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
- val notificationManager = applicationContext.getSystemService(
- NotificationManager::class.java
- )
- notificationManager.createNotificationChannel(alarmsChannel)
- val timersChannel =
- NotificationChannel(AlarmModule.CHANNEL_ID_PENDING, AlarmModule.CHANNEL_ID_PENDING, NotificationManager.IMPORTANCE_LOW)
- timersChannel.setSound(null, null)
- timersChannel.description = "Progress on rest timers."
- notificationManager.createNotificationChannel(timersChannel)
- return notificationManager
- }
-}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/massive/TimerDone.kt b/android/app/src/main/java/com/massive/TimerDone.kt
index cf6870f..7457765 100644
--- a/android/app/src/main/java/com/massive/TimerDone.kt
+++ b/android/app/src/main/java/com/massive/TimerDone.kt
@@ -1,10 +1,15 @@
package com.massive
+import android.app.Notification
+import android.app.NotificationChannel
+import android.app.NotificationManager
import android.content.Intent
+import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
+import androidx.annotation.RequiresApi
class TimerDone : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@@ -12,12 +17,41 @@ class TimerDone : AppCompatActivity() {
setContentView(R.layout.activity_timer_done)
}
+ @RequiresApi(Build.VERSION_CODES.O)
fun stop(view: View) {
Log.d("TimerDone", "Stopping...")
- applicationContext.stopService(Intent(applicationContext, TimerService::class.java))
applicationContext.stopService(Intent(applicationContext, AlarmService::class.java))
+ val manager = getManager()
+ manager.cancel(AlarmModule.NOTIFICATION_ID_DONE)
+ manager.cancel(AlarmModule.NOTIFICATION_ID_PENDING)
val intent = Intent(applicationContext, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
applicationContext.startActivity(intent)
}
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ fun getManager(): NotificationManager {
+ val alarmsChannel = NotificationChannel(
+ AlarmModule.CHANNEL_ID_DONE,
+ AlarmModule.CHANNEL_ID_DONE,
+ NotificationManager.IMPORTANCE_HIGH
+ ).apply {
+ description = "Alarms for rest timers."
+ lockscreenVisibility = Notification.VISIBILITY_PUBLIC
+ }
+ val timersChannel = NotificationChannel(
+ AlarmModule.CHANNEL_ID_PENDING,
+ AlarmModule.CHANNEL_ID_PENDING,
+ NotificationManager.IMPORTANCE_LOW
+ ).apply {
+ setSound(null, null)
+ description = "Progress on rest timers."
+ }
+ val notificationManager = applicationContext.getSystemService(
+ NotificationManager::class.java
+ )
+ notificationManager.createNotificationChannel(alarmsChannel)
+ notificationManager.createNotificationChannel(timersChannel)
+ return notificationManager
+ }
}
\ No newline at end of file
diff --git a/android/app/src/main/java/com/massive/TimerService.kt b/android/app/src/main/java/com/massive/TimerService.kt
deleted file mode 100644
index f613b98..0000000
--- a/android/app/src/main/java/com/massive/TimerService.kt
+++ /dev/null
@@ -1,179 +0,0 @@
-package com.massive
-
-import android.annotation.SuppressLint
-import android.app.*
-import android.app.NotificationManager.IMPORTANCE_HIGH
-import android.app.NotificationManager.IMPORTANCE_LOW
-import android.content.Context
-import android.content.Intent
-import android.net.Uri
-import android.os.Build
-import android.os.CountDownTimer
-import android.os.IBinder
-import android.util.Log
-import androidx.annotation.RequiresApi
-import androidx.core.app.NotificationCompat
-import kotlin.math.floor
-
-class TimerService : Service() {
- private var countdownTimer: CountDownTimer? = null
- private var endMs: Int = 0
- private var currentMs: Long = 0
- private var vibrate: Boolean = true
- private var noSound: Boolean = false
- private var sound: String? = null
-
- @RequiresApi(Build.VERSION_CODES.O)
- override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
- vibrate = intent?.extras?.getBoolean("vibrate") == true
- noSound = intent?.extras?.getBoolean("noSound") == true
- sound = intent?.extras?.getString("sound")
- val manager = getManager()
- manager.cancel(NOTIFICATION_ID_DONE)
- applicationContext.stopService(Intent(applicationContext, AlarmService::class.java))
- if (intent?.action == "add") {
- endMs = currentMs.toInt().plus(60000)
- applicationContext.stopService(Intent(applicationContext, AlarmService::class.java))
- } else {
- val ms = intent?.extras?.getInt("milliseconds")
- if (ms != null) endMs = ms;
- }
- Log.d("TimerService", "endMs=$endMs,currentMs=$currentMs,vibrate=$vibrate,sound=$sound")
- val builder = getBuilder(applicationContext)
- countdownTimer?.cancel()
- countdownTimer = getTimer(builder)
- countdownTimer?.start()
- return super.onStartCommand(intent, flags, startId)
- }
-
- private fun getTimer(builder: NotificationCompat.Builder): CountDownTimer {
- return object : CountDownTimer(endMs.toLong(), 1000) {
- @RequiresApi(Build.VERSION_CODES.O)
- override fun onTick(current: Long) {
- currentMs = current
- 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
- val manager = getManager()
- manager.notify(NOTIFICATION_ID_PENDING, builder.build())
- }
-
- @RequiresApi(Build.VERSION_CODES.O)
- override fun onFinish() {
- val finishIntent = Intent(applicationContext, StopAlarm::class.java)
- val finishPending =
- PendingIntent.getActivity(
- applicationContext,
- 0,
- finishIntent,
- PendingIntent.FLAG_IMMUTABLE
- )
- val fullIntent = Intent(applicationContext, TimerDone::class.java)
- val fullPending =
- PendingIntent.getActivity(
- applicationContext,
- 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)
- val alarmIntent = Intent(applicationContext, AlarmService::class.java).apply {
- putExtra("vibrate", vibrate)
- putExtra("sound", sound)
- putExtra("noSound", noSound)
- }
- applicationContext.startService(alarmIntent)
- }
- }
- }
-
- override fun onBind(p0: Intent?): IBinder? {
- return null
- }
-
- @RequiresApi(Build.VERSION_CODES.O)
- override fun onDestroy() {
- Log.d("TimerService", "Destroying...")
- countdownTimer?.cancel()
- val manager = getManager()
- manager.cancel(NOTIFICATION_ID_PENDING)
- manager.cancel(NOTIFICATION_ID_DONE)
- super.onDestroy()
- }
-
- @SuppressLint("UnspecifiedImmutableFlag")
- @RequiresApi(Build.VERSION_CODES.M)
- private fun getBuilder(context: Context): NotificationCompat.Builder {
- 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 pendingStop =
- PendingIntent.getService(context, 0, stopIntent, PendingIntent.FLAG_IMMUTABLE)
- val addIntent = Intent(context, TimerService::class.java).apply {
- action = "add"
- putExtra("vibrate", vibrate)
- putExtra("sound", sound)
- putExtra("noSound", noSound)
- data = Uri.parse("$currentMs")
- }
- val pendingAdd = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
- PendingIntent.getService(context, 0, addIntent, PendingIntent.FLAG_MUTABLE)
- } else {
- PendingIntent.getService(context, 0, addIntent, PendingIntent.FLAG_UPDATE_CURRENT)
- }
- return NotificationCompat.Builder(context, CHANNEL_ID_PENDING)
- .setSmallIcon(R.drawable.ic_baseline_hourglass_bottom_24)
- .setContentTitle("Resting")
- .setContentIntent(pendingContent)
- .addAction(R.drawable.ic_baseline_stop_24, "Stop", pendingStop)
- .addAction(R.drawable.ic_baseline_stop_24, "Add 1 min", pendingAdd)
- .setDeleteIntent(pendingStop)
- }
-
- @RequiresApi(Build.VERSION_CODES.O)
- private fun getManager(): NotificationManager {
- val alarmsChannel = NotificationChannel(
- CHANNEL_ID_DONE,
- CHANNEL_ID_DONE,
- IMPORTANCE_HIGH
- )
- alarmsChannel.description = "Alarms for rest timers."
- alarmsChannel.lockscreenVisibility = Notification.VISIBILITY_PUBLIC
- val notificationManager = applicationContext.getSystemService(
- NotificationManager::class.java
- )
- notificationManager.createNotificationChannel(alarmsChannel)
- val timersChannel =
- NotificationChannel(CHANNEL_ID_PENDING, CHANNEL_ID_PENDING, IMPORTANCE_LOW)
- timersChannel.setSound(null, null)
- timersChannel.description = "Progress on rest timers."
- notificationManager.createNotificationChannel(timersChannel)
- return notificationManager
- }
-
- companion object {
- private const val CHANNEL_ID_PENDING = "Timer"
- private const val CHANNEL_ID_DONE = "Alarm"
- private const val NOTIFICATION_ID_PENDING = 1
- private const val NOTIFICATION_ID_DONE = 2
- }
-}
\ No newline at end of file