Skip to content

Instantly share code, notes, and snippets.

@igorokr
Last active August 29, 2015 14:27
Show Gist options
  • Save igorokr/fad13b0f3fcf4bb8442c to your computer and use it in GitHub Desktop.
Save igorokr/fad13b0f3fcf4bb8442c to your computer and use it in GitHub Desktop.
package com.rirdev.aafl.demo.notification.daily;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.widget.Toast;
import com.rirdev.aafl.DateUtils;
import com.rirdev.aafl.demo.R;
import org.joda.time.DateTime;
/**
* Created by IgorOK on 22.03.2015.
*/
public class DailyNotificationAlarmPushReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final String prop_daily_reminder_if_no_transaction_today_key =
context.getString(R.string.prop_daily_reminder_if_no_transaction_today);
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context);
boolean notify_only_when_no_trans_today = p.getBoolean(prop_daily_reminder_if_no_transaction_today_key, false);
if (!notify_only_when_no_trans_today) {
show(context);
} else {
boolean areExistTransactionsToday = true;
// TODO: check if there are transactions today
if (areExistTransactionsToday) {
show(context);
}
}
}
private void show(Context context) {
DailyNotificationHelper.showNotification(context, null);
String date = DateUtils.formatDateTimeFull(DateTime.now().getMillis());
Toast.makeText(context, date, Toast.LENGTH_LONG).show();
}
}
package com.rirdev.aafl.demo.notification.daily;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.RingtoneManager;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;
import com.rirdev.aafl.DateUtils;
import com.rirdev.aafl.demo.MainActivityDemo;
import com.rirdev.aafl.demo.R;
import com.rirdev.aafl.demo.window.budget.BudgetContextFactory;
import com.rirdev.aafl.demo.window.transaction.TransactionContextFactory;
import com.rirdev.aafl.preferences.AppPreferenceActivity;
import com.rirdev.aafl.preferences.TimePreference;
import org.joda.time.DateTime;
/**
* Created by IgorOK on 22.03.2015.
*/
public class DailyNotificationHelper {
private static final int NOTIFY_ID = 1;
public static final long INTERVAL_8_SECONDS = 8 * 1000;
private static PendingIntent createPendingIntent(Context c) {
Intent i = new Intent(c, DailyNotificationAlarmPushReceiver.class);
i.putExtra(MainActivityDemo.CONTEXT_FACTORY_BUNDLE_KEY, TransactionContextFactory.class.getName());
return PendingIntent.getBroadcast(c, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
}
public static void reschedule(Context context, int hours, int minutes) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = createPendingIntent(context);
am.cancel(pi);
long interval = AlarmManager.INTERVAL_DAY; // INTERVAL_8_SECONDS AlarmManager.INTERVAL_DAY;
DateTime now = DateTime.now();
DateTime startDate = now
.withHourOfDay(hours)
.withMinuteOfHour(minutes)
.withSecondOfMinute(0)
.withMillisOfSecond(0);
if (now.getMillis() > startDate.getMillis()) {
startDate = startDate.plusDays(1);
}
//DateTime startDate = DateTime.now().plusMinutes(1).withSecondOfMinute(0).withMillisOfSecond(0);
am.setRepeating(AlarmManager.RTC_WAKEUP, startDate.getMillis(), interval, pi);
Toast.makeText(context, "Alarm Set " + DateUtils.formatDateTimeFull(startDate.getMillis()),
Toast.LENGTH_SHORT).show();
}
public static void rescheduleFromPreferences(Context context, SharedPreferences sharedPreferences) {
final String prop_daily_reminder_enable_key =
context.getString(R.string.prop_daily_reminder_enable);
final String prop_daily_reminder_time_key =
context.getString(R.string.prop_daily_reminder_time);
boolean is_reminder_enable = sharedPreferences.getBoolean(prop_daily_reminder_enable_key, false);
if (is_reminder_enable) {
String timeStr = sharedPreferences.getString(prop_daily_reminder_time_key, "--:--");
int hours = TimePreference.getHour(timeStr);
int minutes = TimePreference.getMinute(timeStr);
reschedule(context, hours, minutes);
} else {
cancel(context);
}
}
/**
* Schedule AlarmManager for "No transactions today" notification event. It get parameters from preferences.
* Canceled schedule if turned off in preferences.
*
* @param context
*/
public static void rescheduleFromPreferences(Context context) {
rescheduleFromPreferences(context, PreferenceManager.getDefaultSharedPreferences(context));
}
public static void cancel(Context context) {
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = createPendingIntent(context);
am.cancel(pi);
Toast.makeText(context, "Alarm Canceled ", Toast.LENGTH_SHORT).show();
}
public static void showNotification(Context context, String text) {
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (text == null) {
text = " Date " + DateUtils.formatDateTimeFull(System.currentTimeMillis());
}
PendingIntent pIntentActionAdd = PendingIntent.getActivity(context, 0, new Intent(context, MainActivityDemo.class),
PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent pIntentActionSettings = PendingIntent.getActivity(context, 0, new Intent(context, AppPreferenceActivity.class),
PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(" Money counter ")
.setContentText(text)
.setAutoCancel(true) // TODO: does not work why ????
.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS)
.addAction(R.drawable.abc_btn_check_material, " Add ", pIntentActionAdd)
.addAction(R.drawable.abc_btn_radio_material, " Settings ", pIntentActionSettings)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
mNotificationManager.notify(NOTIFY_ID, mBuilder.build());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment