Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.33 KB | None | 0 0
  1. package com.joshualsmn.mademovie.util.notification
  2.  
  3. import android.app.AlarmManager
  4. import android.app.NotificationChannel
  5. import android.app.NotificationManager
  6. import android.app.PendingIntent
  7. import android.content.BroadcastReceiver
  8. import android.content.Context
  9. import android.content.Intent
  10. import android.media.RingtoneManager
  11. import android.os.Build
  12. import android.util.Log
  13. import android.widget.Toast
  14. import androidx.core.app.NotificationCompat
  15. import androidx.core.content.ContextCompat
  16. import com.joshualsmn.mademovie.BuildConfig
  17. import com.joshualsmn.mademovie.R
  18. import com.joshualsmn.mademovie.model.MovieItems
  19. import com.joshualsmn.mademovie.service.BaseService
  20. import com.joshualsmn.mademovie.service.DiscoverService
  21. import com.joshualsmn.mademovie.service.response.MovieResponse
  22. import com.joshualsmn.mademovie.util.CommonConstant
  23. import retrofit2.Call
  24. import retrofit2.Response
  25. import java.text.SimpleDateFormat
  26. import java.util.*
  27. import kotlin.collections.ArrayList
  28.  
  29. /**
  30. * Created by Dihardja Software on 2019-12-09.
  31. */
  32. class AlarmReceiver : BroadcastReceiver() {
  33. private var movieItems: ArrayList<MovieItems>? = null
  34.  
  35. override fun onReceive(context: Context, intent: Intent) {
  36. val type = intent.getStringExtra(CommonConstant.PARAM_TYPE)
  37.  
  38. val notificationId = if (type.equals(
  39. CommonConstant.TYPE_DAILY,
  40. ignoreCase = true
  41. )
  42. ) CommonConstant.NOTIFICATION_ID_DAILY else CommonConstant.NOTIFICATION_ID_RELEASE
  43.  
  44. showAlarmNotification(context, notificationId)
  45. }
  46.  
  47. fun setDailyAlarm(context: Context) {
  48. val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
  49.  
  50. val intent = Intent(context, AlarmReceiver::class.java)
  51. intent.putExtra(
  52. CommonConstant.PARAM_TYPE,
  53. CommonConstant.TYPE_DAILY
  54. )
  55.  
  56. val calendar = Calendar.getInstance()
  57. calendar.set(Calendar.HOUR_OF_DAY, 6)
  58. calendar.set(Calendar.MINUTE, 0)
  59. calendar.set(Calendar.SECOND, 0)
  60.  
  61. val pendingIntent =
  62. PendingIntent.getBroadcast(
  63. context,
  64. CommonConstant.NOTIFICATION_ID_DAILY,
  65. intent,
  66. 0
  67. )
  68.  
  69. alarmManager.setInexactRepeating(
  70. AlarmManager.RTC_WAKEUP,
  71. calendar.timeInMillis,
  72. AlarmManager.INTERVAL_DAY,
  73. pendingIntent
  74. )
  75.  
  76. Toast.makeText(context, context.getString(R.string.notification_add_daily), Toast.LENGTH_SHORT).show()
  77. }
  78.  
  79. fun setReleaseAlarm(context: Context) {
  80. val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
  81.  
  82. val intent = Intent(context, AlarmReceiver::class.java)
  83. intent.putExtra(
  84. CommonConstant.PARAM_TYPE,
  85. CommonConstant.TYPE_RELEASE
  86. )
  87.  
  88. val calendar = Calendar.getInstance()
  89. calendar.set(Calendar.HOUR_OF_DAY, 7)
  90. calendar.set(Calendar.MINUTE, 0)
  91. calendar.set(Calendar.SECOND, 0)
  92.  
  93. val pendingIntent =
  94. PendingIntent.getBroadcast(
  95. context,
  96. CommonConstant.NOTIFICATION_ID_RELEASE,
  97. intent,
  98. 0
  99. )
  100.  
  101. alarmManager.setInexactRepeating(
  102. AlarmManager.RTC_WAKEUP,
  103. calendar.timeInMillis,
  104. AlarmManager.INTERVAL_DAY,
  105. pendingIntent
  106. )
  107.  
  108. Toast.makeText(context, context.getString(R.string.notification_add_release), Toast.LENGTH_SHORT).show()
  109. }
  110.  
  111. fun cancelAlarm(context: Context, type: String) {
  112. when(type == CommonConstant.TYPE_DAILY){
  113. true->{
  114. val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
  115. val intent = Intent(context, AlarmReceiver::class.java)
  116. val requestCode = CommonConstant.NOTIFICATION_ID_DAILY
  117. val pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, 0)
  118. pendingIntent.cancel()
  119.  
  120. alarmManager.cancel(pendingIntent)
  121.  
  122. Toast.makeText(context, context.getString(R.string.notification_remove_daily), Toast.LENGTH_SHORT).show()
  123. }
  124. false->{
  125. val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
  126. val intent = Intent(context, AlarmReceiver::class.java)
  127. val requestCode = CommonConstant.NOTIFICATION_ID_RELEASE
  128. val pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, 0)
  129. pendingIntent.cancel()
  130.  
  131. alarmManager.cancel(pendingIntent)
  132.  
  133. Toast.makeText(context, context.getString(R.string.notification_remove_release), Toast.LENGTH_SHORT).show()
  134. }
  135. }
  136. }
  137.  
  138. private fun showAlarmNotification(
  139. context: Context,
  140. notificationId: Int
  141. ) {
  142. when(notificationId == CommonConstant.NOTIFICATION_ID_DAILY){
  143. true -> {
  144. val channelId = "DAILY_CHANNEL"
  145. val channelName = "Daily channel"
  146.  
  147. val notificationManagerCompat =
  148. context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  149. val alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
  150. val builder = NotificationCompat.Builder(context, channelId)
  151. .setSmallIcon(R.drawable.ic_notifications)
  152. .setContentTitle(context.getString(R.string.daily_reminder))
  153. .setContentText(context.getString(R.string.daily_reminder_desc))
  154. .setColor(ContextCompat.getColor(context, android.R.color.transparent))
  155. .setVibrate(longArrayOf(1000, 1000, 1000, 1000, 1000))
  156. .setSound(alarmSound)
  157.  
  158. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  159. val channel = NotificationChannel(
  160. channelId,
  161. channelName,
  162. NotificationManager.IMPORTANCE_DEFAULT
  163. )
  164. channel.enableVibration(true)
  165. channel.vibrationPattern = longArrayOf(1000, 1000, 1000, 1000, 1000)
  166. builder.setChannelId(channelId)
  167. notificationManagerCompat.createNotificationChannel(channel)
  168. }
  169.  
  170. val notification = builder.build()
  171. notificationManagerCompat.notify(notificationId, notification)
  172. }
  173. false -> {
  174. getTodayMovie()
  175.  
  176. when(movieItems?.isNotEmpty()){
  177. true -> {
  178. val channelId = "RELEASE_CHANNEL"
  179. val channelName = "Release channel"
  180.  
  181. val notificationManagerCompat =
  182. context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
  183. val alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
  184. val builder = NotificationCompat.Builder(context, channelId)
  185. .setSmallIcon(R.drawable.ic_notifications)
  186. .setContentTitle(movieItems!![0].movieName)
  187. .setContentText(movieItems!![0].movieDesc)
  188. .setColor(ContextCompat.getColor(context, android.R.color.transparent))
  189. .setVibrate(longArrayOf(1000, 1000, 1000, 1000, 1000))
  190. .setSound(alarmSound)
  191.  
  192. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  193. val channel = NotificationChannel(
  194. channelId,
  195. channelName,
  196. NotificationManager.IMPORTANCE_DEFAULT
  197. )
  198. channel.enableVibration(true)
  199. channel.vibrationPattern = longArrayOf(1000, 1000, 1000, 1000, 1000)
  200. builder.setChannelId(channelId)
  201. notificationManagerCompat.createNotificationChannel(channel)
  202. }
  203.  
  204. val notification = builder.build()
  205. notificationManagerCompat.notify(notificationId, notification)
  206.  
  207. }
  208. }
  209. }
  210. }
  211. }
  212.  
  213. private fun getTodayMovie() {
  214. val language = when (Locale.getDefault().language == Locale.ENGLISH.language) {
  215. true -> {
  216. "en-US"
  217. }
  218. false -> {
  219. "id-ID"
  220. }
  221. }
  222.  
  223. val date = getCurrentDateTime()
  224. val dateInString = date.toString("yyyy-MM-dd")
  225.  
  226. val service: DiscoverService = BaseService.create(DiscoverService::class.java)
  227. service.getTodayMovie(BuildConfig.API_KEY, language, dateInString, dateInString)
  228. .enqueue(object :
  229. retrofit2.Callback<MovieResponse.Result> {
  230. override fun onFailure(call: Call<MovieResponse.Result>, t: Throwable) {
  231. Log.d("Exception", t.message.toString())
  232. }
  233.  
  234. override fun onResponse(
  235. call: Call<MovieResponse.Result>,
  236. response: Response<MovieResponse.Result>
  237. ) {
  238. when (response.isSuccessful && response.body() != null) {
  239. true -> {
  240. if (response.body()!!.results.isNotEmpty()) {
  241. movieItems = response.body()!!.results
  242. }
  243. }
  244. false -> {
  245. Log.d("Exception", response.message())
  246. }
  247. }
  248. }
  249. })
  250. }
  251.  
  252. private fun Date.toString(format: String, locale: Locale = Locale.getDefault()): String {
  253. val formatter = SimpleDateFormat(format, locale)
  254. return formatter.format(this)
  255. }
  256.  
  257. private fun getCurrentDateTime(): Date {
  258. return Calendar.getInstance().time
  259. }
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement