public class AutoLogoutReceiver extends BroadcastReceiver {
public static final String TYPE_ONE_TIME = "OneTimeAlarm";
public static final String EXTRA_MESSAGE = "message";
public static final String EXTRA_TYPE = "type";
public static final String EXTRA_EVENT = "event";
// Siapkan 2 id untuk 2 macam alarm, onetime dna repeating
private final int ID_ONETIME = 100;
private final int ID_REPEATING = 101;
public AutoLogoutReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
String type = intent.getStringExtra(EXTRA_TYPE);
String message = intent.getStringExtra(EXTRA_MESSAGE);
String event = intent.getStringExtra(EXTRA_EVENT);
String title = "Sesi Telah Berakhir";
Log.e("TAG", "onReceive: " + event);
logout(context);
ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskList = activityManager.getRunningTasks(10);
if (!taskList.isEmpty()) {
showDialog(context, title, message);
} else {
logout(context);
}
}
private void showDialog(Context context, String title, String message) {
Intent i = new Intent(context, AlertDialogLogout.class);
i.putExtra("title", title);
i.putExtra("message", message);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
private void logout(Context context) {
Log.e("TAG", "logout: berhasil");
Intent intent = new Intent(context, Login.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//untuk menghapus session anggota
SharedPreferences preferences = context.getSharedPreferences(mypreference, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.apply();
context.startActivity(intent);
}
public void setOneTimeAlarm(Context context, String type, String event, String date, String time, String message) {
String DATE_FORMAT = "yyyy-MM-dd";
String TIME_FORMAT = "HH:mm";
if (isDateInvalid(date, DATE_FORMAT) || isDateInvalid(time, TIME_FORMAT)) return;
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AutoLogoutReceiver.class);
intent.putExtra(EXTRA_MESSAGE, message);
intent.putExtra(EXTRA_TYPE, type);
intent.putExtra(EXTRA_EVENT, event);
Log.e("ONE TIME", date + " " + time);
String[] dateArray = date.split("-");
String[] timeArray = time.split(":");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, Integer.parseInt(dateArray[0]));
calendar.set(Calendar.MONTH, Integer.parseInt(dateArray[1]) - 1);
calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(dateArray[2]));
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_ONETIME, intent, 0);
if (alarmManager != null) {
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
}
public 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 void cancelAlarm(Context context, String type) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AutoLogoutReceiver.class);
int requestCode = type.equalsIgnoreCase(TYPE_ONE_TIME) ? ID_ONETIME : ID_REPEATING;
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, 0);
pendingIntent.cancel();
if (alarmManager != null) {
alarmManager.cancel(pendingIntent);
}
}
}