Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.submission2.reminder;
- import android.app.AlarmManager;
- import android.app.Notification;
- import android.app.NotificationChannel;
- import android.app.NotificationManager;
- import android.app.PendingIntent;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.media.RingtoneManager;
- import android.net.Uri;
- import android.os.Build;
- import android.widget.Toast;
- import androidx.core.app.NotificationCompat;
- import androidx.core.content.ContextCompat;
- import androidx.fragment.app.FragmentActivity;
- import androidx.lifecycle.LifecycleOwner;
- import androidx.lifecycle.Observer;
- import androidx.lifecycle.ViewModelProviders;
- import com.example.submission2.MainActivity;
- import com.example.submission2.R;
- import java.util.ArrayList;
- import java.util.Calendar;
- public class NotificationReceiver extends BroadcastReceiver {
- public static final String EXTRA_MESSAGE = "message";
- public static final String EXTRA_TYPE = "type";
- public static final String EXTRA_TITLE = "title";
- private AlarmManager dailyReminder;
- private AlarmManager releaseReminder;
- private PendingIntent dailyPendingIntent;
- private PendingIntent releasePendingIntent;
- private ArrayList<ReleaseItem> myMovie = new ArrayList<>();
- MovieReleaseToday releaseToday = new MovieReleaseToday();
- private int movieid;
- private static final CharSequence CHANNEL_NAME = "Movie Catalogue";
- private final static String GROUP_KEY_MOVIE = "Movie";
- private static final int MAX_NOTIFICATION = 2;
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO: This method is called when the BroadcastReceiver is receiving
- // an Intent broadcast.
- String type = intent.getStringExtra(EXTRA_TYPE);
- String message = intent.getStringExtra(EXTRA_MESSAGE);
- String title = intent.getStringExtra(EXTRA_TITLE);
- movieViewModel= ViewModelProviders.of(this).get(MovieViewModel.class);
- movieViewModel.getMovies().observe(this,getMovie);
- releaseToday.setMovieReleaseToday();
- //getMovie(context);
- Toast.makeText(context, String.valueOf(myMovie.size()), Toast.LENGTH_SHORT).show();
- if (type.equals("1")) {
- showAlarmNotification(context, title, message);
- } else if (type.equals("2")) {
- if (!myMovie.isEmpty()) {
- showReleaseNotification(context);
- } else {
- showReleaseNoNotification(context, title, message);
- }
- }
- }
- public void showAlarmNotification(Context context, String title, String message) {
- String CHANNEL_ID = "Channel_1";
- String CHANNEL_NAME = "AlarmManager channel";
- NotificationManager notificationManagerCompat = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
- NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
- .setSmallIcon(R.drawable.ic_notifications_white_24dp)
- .setContentTitle(title)
- .setContentText(message)
- .setColor(ContextCompat.getColor(context, android.R.color.transparent))
- .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000})
- .setSound(alarmSound);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
- CHANNEL_NAME,
- NotificationManager.IMPORTANCE_DEFAULT);
- channel.enableVibration(true);
- channel.setVibrationPattern(new long[]{1000, 1000, 1000, 1000, 1000});
- builder.setChannelId(CHANNEL_ID);
- if (notificationManagerCompat != null) {
- notificationManagerCompat.createNotificationChannel(channel);
- }
- }
- Notification notification = builder.build();
- if (notificationManagerCompat != null) {
- notificationManagerCompat.notify(1, notification);
- }
- }
- public void showReleaseNoNotification(Context context, String title, String message) {
- String CHANNEL_ID = "Channel_2";
- String CHANNEL_NAME = "AlarmManager2 channel";
- NotificationManager notificationManagerCompat = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
- NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
- .setSmallIcon(R.drawable.ic_notifications_white_24dp)
- .setContentTitle(title)
- .setContentText(message)
- .setColor(ContextCompat.getColor(context, android.R.color.transparent))
- .setVibrate(new long[]{1000, 1000, 1000, 1000, 1000})
- .setSound(alarmSound);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
- CHANNEL_NAME,
- NotificationManager.IMPORTANCE_DEFAULT);
- channel.enableVibration(true);
- channel.setVibrationPattern(new long[]{1000, 1000, 1000, 1000, 1000});
- builder.setChannelId(CHANNEL_ID);
- if (notificationManagerCompat != null) {
- notificationManagerCompat.createNotificationChannel(channel);
- }
- }
- Notification notification = builder.build();
- if (notificationManagerCompat != null) {
- notificationManagerCompat.notify(1, notification);
- }
- }
- public void setRepeatingAlarm(Context context, String title, String message) {
- dailyReminder = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- Intent intentDaily = new Intent(context, NotificationReceiver.class);
- intentDaily.putExtra(EXTRA_MESSAGE, message);
- intentDaily.putExtra(EXTRA_TITLE, title);
- intentDaily.putExtra(EXTRA_TYPE, "1");
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.HOUR_OF_DAY, 7);
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- dailyPendingIntent = PendingIntent.getBroadcast(context, 1, intentDaily, 0);
- if (dailyReminder != null) {
- dailyReminder.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, dailyPendingIntent);
- }
- }
- public void stopRepeatingAlarm(Context context) {
- dailyReminder.cancel(dailyPendingIntent);
- }
- public void showReleaseNotification(Context context) {
- NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- NotificationCompat.Builder mBuilder;
- for (movieid = 1; movieid < myMovie.size(); movieid++) {
- //Melakukan pengecekan jika idNotification lebih kecil dari Max Notif
- String CHANNEL_ID = "channel_01";
- if (movieid < MAX_NOTIFICATION) {
- mBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
- .setContentTitle(myMovie.get(movieid).getTitle())
- .setContentText(myMovie.get(movieid).getDesc())
- .setSmallIcon(R.drawable.ic_notifications_white_24dp)
- .setGroup(GROUP_KEY_MOVIE)
- .setAutoCancel(true);
- } else {
- int jum = myMovie.size() - 2;
- NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle()
- .addLine(myMovie.get(movieid).getTitle() + " " + myMovie.get(movieid).getDesc())
- .addLine(myMovie.get(movieid - 1).getTitle() + " " + myMovie.get(movieid - 1).getDesc())
- .setBigContentTitle(movieid + 1 + " Movie release Today")
- .setSummaryText("+" + jum + " more");
- //Toast.makeText(context, "type 2 " + myMovie.get(movieid).getTitle(), Toast.LENGTH_SHORT).show();
- mBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
- .setContentTitle(myMovie.get(movieid).getTitle())
- .setContentText(myMovie.get(movieid).getDesc())
- .setSmallIcon(R.drawable.ic_notifications_white_24dp)
- .setGroup(GROUP_KEY_MOVIE)
- .setGroupSummary(true)
- .setStyle(inboxStyle)
- .setAutoCancel(true);
- }
- /*
- Untuk android Oreo ke atas perlu menambahkan notification channel
- Materi ini akan dibahas lebih lanjut di modul extended
- */
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- /* Create or update. */
- NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
- CHANNEL_NAME,
- NotificationManager.IMPORTANCE_DEFAULT);
- mBuilder.setChannelId(CHANNEL_ID);
- if (mNotificationManager != null) {
- mNotificationManager.createNotificationChannel(channel);
- }
- }
- Notification notification = mBuilder.build();
- if (mNotificationManager != null) {
- mNotificationManager.notify(movieid, notification);
- }
- }
- }
- public void setMovieReleaseAlarm(Context context, String title, String message) {
- releaseReminder = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- Intent intentRelease = new Intent(context, NotificationReceiver.class);
- intentRelease.putExtra(EXTRA_MESSAGE, message);
- intentRelease.putExtra(EXTRA_TITLE, title);
- intentRelease.putExtra(EXTRA_TYPE, "2");
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.HOUR_OF_DAY, 8);
- calendar.set(Calendar.MINUTE, 0);
- calendar.set(Calendar.SECOND, 0);
- releasePendingIntent = PendingIntent.getBroadcast(context, 2, intentRelease, 0);
- if (releaseReminder != null) {
- releaseReminder.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, releasePendingIntent);
- }
- }
- public void stopMovieReleaseAlarm(Context context) {
- releaseReminder.cancel(releasePendingIntent);
- }
- private Observer<ArrayList<Movie>> getMovie= new Observer<ArrayList<Movie>>() {
- @Override
- public void onChanged(ArrayList<Movie> movies) {
- if(movies!=null){
- myMovie = releaseItems;
- Toast.makeText(context, String.valueOf(myMovie.size()), Toast.LENGTH_SHORT).show();
- }
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement