alarm manager to shedule notifications

This commit is contained in:
danijoo
2016-01-01 15:58:22 +01:00
parent 279fe1d0d8
commit a44859e28a
4 changed files with 100 additions and 13 deletions

View File

@@ -16,6 +16,13 @@
</activity>
<activity android:name=".PreferenceActivity"
android:parentActivityName=".MainActivity"/>
<receiver android:name=".NotificationAlarmReceiver"
android:enabled="true">
<intent-filter>
<action android:name="net.headlezz.notificationbroadcast" />
</intent-filter>
</receiver>
</application>
</manifest>

View File

@@ -1,8 +1,12 @@
package net.headlezz.notificationlogger;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v7.app.NotificationCompat;
@@ -11,27 +15,46 @@ import java.util.Date;
public class DispatchableNotification {
private Context mContext;
private String mMessage;
private String mTitle;
private int mId;
private Notification mNotification;
private boolean mSound;
private boolean mVibrate;
private boolean mBlink;
private boolean mAutoCancel;
private DispatchableNotification(Context mContext, String mMessage, String mTitle, int mId, boolean mSound, boolean mVibrate, boolean mBlink, boolean mAutoCancel, int mIcon, String mCategory) {
private int mIcon;
private String mCategory;
public DispatchableNotification(Context mContext, String mMessage, String mTitle, int mId, boolean mSound, boolean mVibrate, boolean mBlink, boolean mAutoCancel, int mIcon, String mCategory) {
this.mContext = mContext;
this.mMessage = mMessage;
this.mTitle = mTitle;
this.mId = mId;
this.mSound = mSound;
this.mVibrate = mVibrate;
this.mBlink = mBlink;
this.mAutoCancel = mAutoCancel;
this.mIcon = mIcon;
this.mCategory = mCategory;
}
private Notification buildNotification() {
int defaults;
if(mSound && mVibrate && mBlink)
if (mSound && mVibrate && mBlink)
defaults = Notification.DEFAULT_ALL;
else {
if(mSound) {
if(mVibrate)
if (mSound) {
if (mVibrate)
defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
else if(mBlink)
else if (mBlink)
defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS;
else
defaults = Notification.DEFAULT_SOUND;
} else if(mVibrate) {
if(mBlink)
} else if (mVibrate) {
if (mBlink)
defaults = Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS;
else
defaults = Notification.DEFAULT_VIBRATE;
@@ -39,7 +62,7 @@ public class DispatchableNotification {
defaults = Notification.DEFAULT_LIGHTS;
}
mNotification = new NotificationCompat.Builder(mContext)
return new NotificationCompat.Builder(mContext)
.setContentText(mMessage)
.setContentTitle(mTitle)
.setSmallIcon(mIcon)
@@ -50,11 +73,45 @@ public class DispatchableNotification {
}
public void dispatch() {
NotificationManagerCompat.from(mContext).notify(mId, mNotification);
NotificationManagerCompat.from(mContext).notify(mId, buildNotification());
}
public void shedule(Date date) {
// TODO
Intent notificationIntent = new Intent();
notificationIntent.setAction(NotificationAlarmReceiver.BROADCAST_INTENT_ACTION);
Bundle b = new Bundle();
serializeToBundle(b);
notificationIntent.putExtras(b);
PendingIntent pI = PendingIntent.getBroadcast(mContext, mId, notificationIntent, 0);
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, date.getTime(), pI);
}
public void serializeToBundle(Bundle b) {
b.putString("message", mMessage);
b.putString("title", mTitle);
b.putInt("id", mId);
b.putBoolean("sound", mSound);
b.putBoolean("vibrate", mVibrate);
b.putBoolean("blink", mBlink);
b.putBoolean("autocancel", mAutoCancel);
b.putInt("icon", mIcon);
b.putString("category", mCategory);
}
public static DispatchableNotification fromBundle(Context context, Bundle b) {
return new DispatchableNotification.Builder(context)
.setMessage(b.getString("message"))
.setTitle(b.getString("title"))
.setId(b.getInt("id"))
.setSound(b.getBoolean("sound"))
.setVibrate(b.getBoolean("vibrate"))
.setBlink(b.getBoolean("blink"))
.setAutoCancel(b.getBoolean("autocancel"))
.setIcon(b.getInt("icon"))
.setCategory(b.getString("category"))
.build();
}
public static class Builder {

View File

@@ -0,0 +1,17 @@
package net.headlezz.notificationlogger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class NotificationAlarmReceiver extends BroadcastReceiver {
public static String BROADCAST_INTENT_ACTION = "net.headlezz.notificationbroadcast";
@Override
public void onReceive(Context context, Intent intent) {
DispatchableNotification dn = DispatchableNotification.fromBundle(context, intent.getExtras());
dn.dispatch();
}
}

View File

@@ -12,7 +12,8 @@ import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import java.util.Date;
import butterknife.Bind;
import butterknife.ButterKnife;
@@ -101,6 +102,7 @@ public class NotificationCreationFragment extends Fragment implements View.OnCli
spIcon.setAdapter(iconAdapter);
btDispatch.setOnClickListener(this);
btSchedule.setOnClickListener(this);
return view;
}
@@ -124,6 +126,10 @@ public class NotificationCreationFragment extends Fragment implements View.OnCli
if(v.getId() == R.id.create_btDispatch)
dn.dispatch();
else
Toast.makeText(getContext(), "Not implemented", Toast.LENGTH_LONG);
sheduleNotification(dn);
}
private void sheduleNotification(DispatchableNotification dn) {
dn.shedule(new Date(System.currentTimeMillis() + 5 * 1000));
}
}