From f28fe26a4d9f8caea3205857f1f0f0b29646439d Mon Sep 17 00:00:00 2001
From: tibbi <tibor@kaputa.sk>
Date: Wed, 14 Mar 2018 14:16:43 +0100
Subject: [PATCH] move the Timer reminder creation in context extensions

---
 .../clock/activities/ReminderActivity.kt      |  6 +-
 .../clock/extensions/Context.kt               | 67 +++++++++++++++--
 .../clock/fragments/TimerFragment.kt          | 75 +------------------
 .../clock/helpers/Constants.kt                |  2 -
 4 files changed, 68 insertions(+), 82 deletions(-)

diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt b/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt
index 456cc84c..8ec4a9fa 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/activities/ReminderActivity.kt
@@ -3,8 +3,6 @@ package com.simplemobiletools.clock.activities
 import android.os.Bundle
 import com.simplemobiletools.clock.R
 import com.simplemobiletools.clock.extensions.showOverLockscreen
-import com.simplemobiletools.clock.helpers.REMINDER_TEXT
-import com.simplemobiletools.clock.helpers.REMINDER_TITLE
 import com.simplemobiletools.commons.extensions.updateTextColors
 import kotlinx.android.synthetic.main.activity_reminder.*
 
@@ -15,7 +13,7 @@ class ReminderActivity : SimpleActivity() {
         setContentView(R.layout.activity_reminder)
         showOverLockscreen()
         updateTextColors(reminder_holder)
-        reminder_title.text = intent.getStringExtra(REMINDER_TITLE)
-        reminder_text.text = intent.getStringExtra(REMINDER_TEXT)
+        reminder_title.text = getString(R.string.timer)
+        reminder_text.text = getString(R.string.time_expired)
     }
 }
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
index b7a321c0..19e61136 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/extensions/Context.kt
@@ -1,31 +1,36 @@
 package com.simplemobiletools.clock.extensions
 
 import android.annotation.SuppressLint
-import android.app.AlarmManager
-import android.app.NotificationManager
-import android.app.PendingIntent
+import android.app.*
 import android.appwidget.AppWidgetManager
 import android.content.ComponentName
 import android.content.Context
 import android.content.Intent
+import android.media.AudioManager
 import android.media.RingtoneManager
+import android.net.Uri
 import android.os.PowerManager
 import android.provider.Settings
+import android.support.v4.app.NotificationCompat
 import android.text.SpannableString
 import android.text.style.RelativeSizeSpan
 import android.widget.Toast
 import com.simplemobiletools.clock.R
 import com.simplemobiletools.clock.activities.MainActivity
+import com.simplemobiletools.clock.activities.SplashActivity
 import com.simplemobiletools.clock.helpers.*
 import com.simplemobiletools.clock.models.Alarm
 import com.simplemobiletools.clock.models.AlarmSound
 import com.simplemobiletools.clock.models.MyTimeZone
 import com.simplemobiletools.clock.receivers.AlarmReceiver
 import com.simplemobiletools.clock.receivers.DateTimeWidgetUpdateReceiver
+import com.simplemobiletools.clock.receivers.TimerReceiver
 import com.simplemobiletools.commons.extensions.formatMinutesToTimeString
+import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
 import com.simplemobiletools.commons.extensions.toast
 import com.simplemobiletools.commons.helpers.isKitkatPlus
 import com.simplemobiletools.commons.helpers.isLollipopPlus
+import com.simplemobiletools.commons.helpers.isOreoPlus
 import java.util.*
 import kotlin.math.pow
 
@@ -130,12 +135,12 @@ fun Context.setupAlarmClock(alarm: Alarm, triggerInSeconds: Int) {
     val targetMS = System.currentTimeMillis() + triggerInSeconds * 1000
 
     if (isLollipopPlus()) {
-        val info = AlarmManager.AlarmClockInfo(targetMS, getOpenAppIntent())
+        val info = AlarmManager.AlarmClockInfo(targetMS, getOpenAlarmTabIntent())
         alarmManager.setAlarmClock(info, getAlarmIntent(alarm))
     }
 }
 
-fun Context.getOpenAppIntent(): PendingIntent {
+fun Context.getOpenAlarmTabIntent(): PendingIntent {
     val intent = Intent(this, MainActivity::class.java)
     intent.putExtra(OPEN_TAB, TAB_ALARM)
     return PendingIntent.getActivity(this, OPEN_ALARMS_TAB_INTENT_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
@@ -220,3 +225,55 @@ fun Context.rescheduleEnabledAlarms() {
 }
 
 fun Context.isScreenOn() = (getSystemService(Context.POWER_SERVICE) as PowerManager).isScreenOn
+
+@SuppressLint("NewApi")
+fun Context.getTimerNotification(pendingIntent: PendingIntent): Notification {
+    val channelId = "timer_channel"
+    if (isOreoPlus()) {
+        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+        val name = getString(R.string.timer)
+        val importance = NotificationManager.IMPORTANCE_HIGH
+        NotificationChannel(channelId, name, importance).apply {
+            enableLights(true)
+            lightColor = getAdjustedPrimaryColor()
+            enableVibration(config.timerVibrate)
+            notificationManager.createNotificationChannel(this)
+        }
+    }
+
+    val builder = NotificationCompat.Builder(this)
+            .setContentTitle(getString(R.string.timer))
+            .setContentText(getString(R.string.time_expired))
+            .setSmallIcon(R.drawable.ic_timer)
+            .setContentIntent(pendingIntent)
+            .setPriority(Notification.PRIORITY_HIGH)
+            .setDefaults(Notification.DEFAULT_LIGHTS)
+            .setAutoCancel(true)
+            .setSound(Uri.parse(config.timerSoundUri), AudioManager.STREAM_SYSTEM)
+            .setChannelId(channelId)
+            .addAction(R.drawable.ic_cross, getString(R.string.dismiss), getTimerPendingIntent())
+
+    if (isLollipopPlus()) {
+        builder.setVisibility(Notification.VISIBILITY_PUBLIC)
+    }
+
+    if (config.timerVibrate) {
+        val vibrateArray = LongArray(2) { 500 }
+        builder.setVibrate(vibrateArray)
+    }
+
+    val notification = builder.build()
+    notification.flags = notification.flags or Notification.FLAG_INSISTENT
+    return notification
+}
+
+fun Context.getTimerPendingIntent(): PendingIntent {
+    val intent = Intent(this, TimerReceiver::class.java)
+    return PendingIntent.getBroadcast(this, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
+}
+
+fun Context.getOpenTimerTabIntent(): PendingIntent {
+    val intent = Intent(this, SplashActivity::class.java)
+    intent.putExtra(OPEN_TAB, TAB_TIMER)
+    return PendingIntent.getActivity(this, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
+}
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt
index 8bc6311e..9a9769a0 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/fragments/TimerFragment.kt
@@ -1,38 +1,25 @@
 package com.simplemobiletools.clock.fragments
 
-import android.annotation.SuppressLint
-import android.app.Notification
-import android.app.NotificationChannel
 import android.app.NotificationManager
-import android.app.PendingIntent
 import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.media.AudioManager
-import android.net.Uri
 import android.os.Bundle
 import android.os.Handler
 import android.os.SystemClock
 import android.support.v4.app.Fragment
-import android.support.v4.app.NotificationCompat
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import com.simplemobiletools.clock.R
 import com.simplemobiletools.clock.activities.ReminderActivity
 import com.simplemobiletools.clock.activities.SimpleActivity
-import com.simplemobiletools.clock.activities.SplashActivity
 import com.simplemobiletools.clock.dialogs.MyTimePickerDialogDialog
 import com.simplemobiletools.clock.dialogs.SelectAlarmSoundDialog
-import com.simplemobiletools.clock.extensions.colorLeftDrawable
-import com.simplemobiletools.clock.extensions.config
-import com.simplemobiletools.clock.extensions.hideNotification
-import com.simplemobiletools.clock.extensions.isScreenOn
-import com.simplemobiletools.clock.helpers.*
-import com.simplemobiletools.clock.receivers.TimerReceiver
+import com.simplemobiletools.clock.extensions.*
+import com.simplemobiletools.clock.helpers.TIMER_NOTIF_ID
 import com.simplemobiletools.commons.extensions.*
-import com.simplemobiletools.commons.helpers.isLollipopPlus
-import com.simplemobiletools.commons.helpers.isOreoPlus
 import kotlinx.android.synthetic.main.fragment_timer.view.*
 
 
@@ -187,8 +174,8 @@ class TimerFragment : Fragment() {
         view.timer_time.text = formattedDuration
         if (diff == 0) {
             if (context?.isScreenOn() == true) {
-                val pendingIntent = getOpenAppIntent(context!!)
-                val notification = getNotification(context!!, pendingIntent)
+                val pendingIntent = context!!.getOpenTimerTabIntent()
+                val notification = context!!.getTimerNotification(pendingIntent)
                 val notificationManager = context!!.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                 notificationManager.notify(TIMER_NOTIF_ID, notification)
 
@@ -197,8 +184,6 @@ class TimerFragment : Fragment() {
                 }, context?.config!!.timerMaxReminderSecs * 1000L)
             } else {
                 Intent(context, ReminderActivity::class.java).apply {
-                    putExtra(REMINDER_TITLE, context!!.getString(R.string.timer))
-                    putExtra(REMINDER_TEXT, context!!.getString(R.string.time_expired))
                     activity?.startActivity(this)
                 }
             }
@@ -206,58 +191,6 @@ class TimerFragment : Fragment() {
         return true
     }
 
-    @SuppressLint("NewApi")
-    private fun getNotification(context: Context, pendingIntent: PendingIntent): Notification {
-        val channelId = "timer_channel"
-        if (isOreoPlus()) {
-            val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
-            val name = context.resources.getString(R.string.timer)
-            val importance = NotificationManager.IMPORTANCE_HIGH
-            NotificationChannel(channelId, name, importance).apply {
-                enableLights(true)
-                lightColor = context.getAdjustedPrimaryColor()
-                enableVibration(context.config.timerVibrate)
-                notificationManager.createNotificationChannel(this)
-            }
-        }
-
-        val builder = NotificationCompat.Builder(context)
-                .setContentTitle(context.getString(R.string.timer))
-                .setContentText(context.getString(R.string.time_expired))
-                .setSmallIcon(R.drawable.ic_timer)
-                .setContentIntent(pendingIntent)
-                .setPriority(Notification.PRIORITY_HIGH)
-                .setDefaults(Notification.DEFAULT_LIGHTS)
-                .setAutoCancel(true)
-                .setSound(Uri.parse(context.config.timerSoundUri), AudioManager.STREAM_SYSTEM)
-                .setChannelId(channelId)
-                .addAction(R.drawable.ic_cross, context.getString(R.string.dismiss), getTimerPendingIntent(context))
-
-        if (isLollipopPlus()) {
-            builder.setVisibility(Notification.VISIBILITY_PUBLIC)
-        }
-
-        if (context.config.timerVibrate) {
-            val vibrateArray = LongArray(2) { 500 }
-            builder.setVibrate(vibrateArray)
-        }
-
-        val notification = builder.build()
-        notification.flags = notification.flags or Notification.FLAG_INSISTENT
-        return notification
-    }
-
-    private fun getTimerPendingIntent(context: Context): PendingIntent {
-        val intent = Intent(context, TimerReceiver::class.java)
-        return PendingIntent.getBroadcast(context, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
-    }
-
-    private fun getOpenAppIntent(context: Context): PendingIntent {
-        val intent = Intent(context, SplashActivity::class.java)
-        intent.putExtra(OPEN_TAB, TAB_TIMER)
-        return PendingIntent.getActivity(context, TIMER_NOTIF_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT)
-    }
-
     private fun hideTimerNotification() {
         context?.hideNotification(TIMER_NOTIF_ID)
     }
diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt
index da6424f5..9b5503ae 100644
--- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Constants.kt
@@ -22,8 +22,6 @@ const val DEFAULT_ALARM_MINUTES = 480
 const val DAY_MINUTES = 1440
 const val DEFAULT_MAX_ALARM_REMINDER_SECS = 300
 const val DEFAULT_MAX_TIMER_REMINDER_SECS = 60
-const val REMINDER_TITLE = "reminder_title"
-const val REMINDER_TEXT = "reminder_text"
 
 const val OPEN_ALARMS_TAB_INTENT_ID = 9996
 const val UPDATE_WIDGET_INTENT_ID = 9997