Last active
August 29, 2015 14:27
-
-
Save igorokr/fad13b0f3fcf4bb8442c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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