Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.submission1.view.main;
- 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.os.Build;
- import android.util.Log;
- import android.widget.Toast;
- import androidx.core.app.NotificationCompat;
- import com.example.submission1.BuildConfig;
- import com.example.submission1.R;
- import com.example.submission1.model.MovieModel;
- import com.example.submission1.rest.ApiUtil;
- import com.example.submission1.rest.response.MovieListResponse;
- import com.example.submission1.view.detail.DetailMovieActivity;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Locale;
- import retrofit2.Call;
- import retrofit2.Callback;
- import retrofit2.Response;
- public class AlarmReceiver extends BroadcastReceiver {
- private static final String EXTRA_TYPE = "type";
- private static final String CHANNEL_ID_DAILY = "channel_1";
- private static final CharSequence CHANNEL_NAME_DAILY = "Dialy channel";
- private static final int NOTIFICATION_ID_DAILY = 2;
- private final static String TIME_FORMAT = "HH:mm";
- private static int notification_request_code2 = 200;
- private int idNotification = 0;
- @Override
- public void onReceive(Context context, Intent intent) {
- int type = intent.getIntExtra(EXTRA_TYPE,MainActivity.ID_REPEATING);
- if (type==MainActivity.ID_REPEATING){ dailyReminder(context); }
- if (type==MainActivity.ID_REPEATING2){ getMovieTodayRelease(context);}
- }
- private String getTodayDate(){
- Calendar calendar = Calendar.getInstance();
- int thisYear = calendar.get(Calendar.YEAR);
- int thisMonth = calendar.get(Calendar.MONTH) + 1;
- int thisDate = calendar.get(Calendar.DATE);
- return thisYear + "-" + thisMonth + "-" + thisDate;
- }
- private void getMovieTodayRelease(final Context context) {
- String today_date = getTodayDate();
- ApiUtil.getRequest().getTodayRelease(BuildConfig.Api_Key,today_date,today_date).enqueue(new Callback<MovieListResponse>() {
- @Override
- public void onResponse(Call<MovieListResponse> call, Response<MovieListResponse> response) {
- if (response.isSuccessful()){
- if (response.body().results!=null && response.body().results.size()!=0){
- makeNotif(context,response.body().results);
- }
- }
- }
- @Override
- public void onFailure(Call<MovieListResponse> call, Throwable t) {
- Log.d("released_today", t.getMessage());
- }
- });
- }
- private void makeNotif(Context context, ArrayList<MovieModel> results) {
- for (MovieModel movie : results){
- Intent intent = new Intent(context, DetailMovieActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra("movie_id", movie.id);
- intent.putExtra("type", "movie");
- PendingIntent pendingIntent = PendingIntent.getActivity(context, notification_request_code2, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- NotificationCompat.Builder mBuilder;
- NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- mBuilder = new NotificationCompat.Builder(context, CHANNEL_ID_DAILY)
- .setContentTitle(movie.original_title)
- .setContentText(movie.original_title + " " + context.getResources().getString(R.string.released_today))
- .setSmallIcon(R.drawable.ic_notification_black)
- .setContentIntent(pendingIntent)
- .setAutoCancel(true);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- NotificationChannel channel = new NotificationChannel(CHANNEL_ID_DAILY, CHANNEL_NAME_DAILY, NotificationManager.IMPORTANCE_DEFAULT);
- mBuilder.setChannelId(CHANNEL_ID_DAILY);
- if (mNotificationManager != null) {
- mNotificationManager.createNotificationChannel(channel);
- }
- }
- Notification notification = mBuilder.build();
- if (mNotificationManager != null) {
- mNotificationManager.notify(idNotification, notification);
- }
- }
- }
- public void dailyReminder(Context context) {
- Intent intent = new Intent(context, MainActivity.class);
- PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
- String title= context.getResources().getString(R.string.app_name);
- String text= context.getResources().getString(R.string.dialy_notif_subtext);
- NotificationCompat.Builder mBuilder;
- NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
- mBuilder = new NotificationCompat.Builder(context, CHANNEL_ID_DAILY)
- .setContentTitle(title)
- .setContentText(text)
- .setSmallIcon(R.drawable.ic_notification_black)
- .setContentIntent(pendingIntent)
- .setAutoCancel(true);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- /* Create or update. */
- NotificationChannel channel = new NotificationChannel(CHANNEL_ID_DAILY, CHANNEL_NAME_DAILY, NotificationManager.IMPORTANCE_DEFAULT);
- mBuilder.setChannelId(CHANNEL_ID_DAILY);
- if (mNotificationManager != null) {
- mNotificationManager.createNotificationChannel(channel);
- }
- }
- Notification notification = mBuilder.build();
- if (mNotificationManager != null) {
- mNotificationManager.notify(NOTIFICATION_ID_DAILY, notification);
- }
- }
- public void setRepeatingAlarm(Context context, int id_alarm,String time,String msg) {
- if (isDateInvalid(time, TIME_FORMAT)) return;
- AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- Intent intent = new Intent(context, AlarmReceiver.class);
- intent.putExtra(EXTRA_TYPE, id_alarm);
- String[] timeArray = time.split(":");
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(timeArray[0]));
- calendar.set(Calendar.MINUTE, Integer.parseInt(timeArray[1]));
- calendar.set(Calendar.SECOND, 0);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context, id_alarm, intent, 0);
- if (alarmManager != null) {
- alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
- }
- if (msg!=null)
- Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
- }
- public void cancelAlarm(Context context, int id_alarm, String msg) {
- AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
- Intent intent = new Intent(context, AlarmReceiver.class);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context, id_alarm, intent, 0);
- pendingIntent.cancel();
- if (alarmManager != null)
- alarmManager.cancel(pendingIntent);
- if (msg!=null)
- Toast.makeText(context,msg, Toast.LENGTH_SHORT).show();
- }
- private boolean isDateInvalid(String date, String format) {
- try {
- DateFormat df = new SimpleDateFormat(format, Locale.getDefault());
- df.setLenient(false);
- df.parse(date);
- return false;
- } catch (ParseException e) {
- return true;
- }
- }
- public boolean isAlarmSet(Context context, int requestCode) {
- Intent intent = new Intent(context, AlarmReceiver.class);
- return PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_NO_CREATE) != null;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement