Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.93 KB | None | 0 0
  1. package com.informatika.umm.myapplication.service;
  2.  
  3. import android.app.AlarmManager;
  4. import android.app.Notification;
  5. import android.app.NotificationChannel;
  6. import android.app.NotificationManager;
  7. import android.app.PendingIntent;
  8. import android.content.BroadcastReceiver;
  9. import android.content.Context;
  10. import android.content.Intent;
  11. import android.media.RingtoneManager;
  12. import android.net.Uri;
  13. import android.os.Build;
  14. import android.util.Log;
  15.  
  16. import androidx.annotation.NonNull;
  17. import androidx.core.app.NotificationCompat;
  18.  
  19. import com.informatika.umm.myapplication.BuildConfig;
  20. import com.informatika.umm.myapplication.R;
  21. import com.informatika.umm.myapplication.api.Client;
  22. import com.informatika.umm.myapplication.api.Service;
  23. import com.informatika.umm.myapplication.model.Movie;
  24. import com.informatika.umm.myapplication.model.MovieResponse;
  25. import com.informatika.umm.myapplication.ui.activity.main.MainActivity;
  26.  
  27. import java.text.SimpleDateFormat;
  28. import java.util.ArrayList;
  29. import java.util.Calendar;
  30. import java.util.Date;
  31. import java.util.List;
  32. import java.util.Locale;
  33.  
  34. import retrofit2.Call;
  35. import retrofit2.Callback;
  36. import retrofit2.Response;
  37.  
  38. /**
  39. * MADE_Submission_2
  40. * created by : Robin Nusantara on 1/18/2020 01 2020
  41. * 16:41 Sat
  42. **/
  43. public class ReminderReleaseReceiver extends BroadcastReceiver {
  44.  
  45. private static int NOTIFICATION_ID = 1;
  46. private static final int NOTIFICATION_REQUEST_CODE = 100;
  47. private static final String EXTRA_NOTIF_ID = "extra_notif_id";
  48. private static final String EXTRA_MOVIE = "extra_movie";
  49. private static final String CHANNEL_ID = "channel_01";
  50. private static final CharSequence CHANNEL_NAME = "release_channel";
  51.  
  52. @Override
  53. public void onReceive(Context context, Intent intent) {
  54. getMovieRelease(context);
  55. }
  56.  
  57. private void sendNotification(Context context, Movie movie, int id) {
  58. NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
  59. Uri ringtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
  60.  
  61. Intent intent = new Intent(context, MainActivity.class);
  62. intent.putExtra(EXTRA_MOVIE, movie);
  63. PendingIntent pendingIntent = PendingIntent.getActivity(
  64. context,
  65. id,
  66. intent,
  67. PendingIntent.FLAG_UPDATE_CURRENT
  68. );
  69.  
  70. NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
  71. .setSmallIcon(R.drawable.ic_movie_black_24dp)
  72. .setContentTitle(movie.getMovieTitle())
  73. .setContentText(movie.getMovieTitle() + context.getString(R.string.str_release_message))
  74. .setContentIntent(pendingIntent)
  75. .setPriority(NotificationCompat.PRIORITY_HIGH)
  76. .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000})
  77. .setAutoCancel(false)
  78. .setSound(ringtone);
  79.  
  80. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  81. NotificationChannel channel = new NotificationChannel(
  82. CHANNEL_ID,
  83. CHANNEL_NAME,
  84. NotificationManager.IMPORTANCE_DEFAULT
  85. );
  86. channel.enableVibration(true);
  87. if (notificationManager != null) {
  88. notificationManager.createNotificationChannel(channel);
  89. }
  90. }
  91.  
  92. Notification notification = builder.build();
  93. if (notificationManager != null) {
  94. notificationManager.notify(id, notification);
  95. }
  96. }
  97.  
  98. private void getMovieRelease(final Context context) {
  99. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
  100. final String today = dateFormat.format(new Date());
  101.  
  102. Service apiService = Client.getClient().create(Service.class);
  103. Call<MovieResponse> call = apiService.getReleaseMovies(BuildConfig.API_KEY, today, today);
  104. call.enqueue(new Callback<MovieResponse>() {
  105. @Override
  106. public void onResponse(@NonNull Call<MovieResponse> call, @NonNull Response<MovieResponse> response) {
  107. if (response.body() != null) {
  108. filterMovieRelease(context, response.body().getResults(), today);
  109. }
  110. }
  111.  
  112. @Override
  113. public void onFailure(@NonNull Call<MovieResponse> call, @NonNull Throwable t) {
  114. Log.d(t.getMessage(), "onFailure");
  115. }
  116. });
  117. }
  118.  
  119. private void filterMovieRelease(Context context, List<Movie> movies, String date) {
  120. List<Movie> filteredMovies = new ArrayList<>();
  121. for (Movie movie : movies) {
  122. if (movie.getMovieRelease() != null && movie.getMovieRelease().equals(date)) {
  123. filteredMovies.add(movie);
  124. }
  125. }
  126. setMovieNotification(context, filteredMovies);
  127. }
  128.  
  129. public void setMovieNotification(final Context context, final List<Movie> movies) {
  130. new Thread(new Runnable() {
  131. @Override
  132. public void run() {
  133. int id = NOTIFICATION_ID;
  134. for (Movie movie : movies) {
  135. sendNotification(context, movie, id);
  136. id++;
  137. }
  138. }
  139. }).start();
  140. }
  141.  
  142. private static PendingIntent getReleaseReminder(Context context) {
  143. Intent intent = new Intent(context, ReminderReleaseReceiver.class);
  144. return PendingIntent.getBroadcast(context, NOTIFICATION_REQUEST_CODE, intent, PendingIntent.FLAG_CANCEL_CURRENT);
  145. }
  146.  
  147. private Calendar setReminderTime() {
  148. Calendar calendar = Calendar.getInstance();
  149. calendar.set(Calendar.HOUR_OF_DAY, 8);
  150. calendar.set(Calendar.MINUTE, 0);
  151. calendar.set(Calendar.SECOND, 0);
  152. return calendar;
  153. }
  154.  
  155. public void setTimeReleaseReminder(Context context) {
  156. Intent intent = new Intent(context, ReminderReleaseReceiver.class);
  157. intent.putExtra(EXTRA_NOTIF_ID, NOTIFICATION_ID);
  158. PendingIntent pendingIntent = PendingIntent.getBroadcast(context, NOTIFICATION_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  159.  
  160. AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
  161.  
  162. if (alarmManager != null) {
  163. alarmManager.setInexactRepeating(
  164. AlarmManager.RTC_WAKEUP,
  165. setReminderTime().getTimeInMillis(),
  166. AlarmManager.INTERVAL_DAY,
  167. pendingIntent);
  168. }
  169. NOTIFICATION_ID += 2;
  170. }
  171.  
  172. public void cancelReleaseReminder(Context context) {
  173. AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
  174. if (alarmManager != null) {
  175. alarmManager.cancel(getReleaseReminder(context));
  176. }
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement