package com.fsck.k9;
/**
* Describes how a notification should behave.
*/
public class NotificationSetting {
/**
* Ring notification kill switch. Allow disabling ringtones without losing
* ringtone selection.
*/
private boolean mRing;
private String mRingtoneUri;
/**
* LED kill switch.
*/
private boolean mLed;
private int mLedColor;
/**
* Vibration kill switch.
*/
private boolean mVibrate;
private int mVibratePattern;
private int mVibrateTimes;
/**
* Set the ringtone kill switch. Allow to disable ringtone without losing
* ringtone selection.
*
* @param ring
* true
to allow ringtones, false
* otherwise.
*/
public synchronized void setRing(boolean ring) {
mRing = ring;
}
/**
* @return true
if ringtone is allowed to play,
* false
otherwise.
*/
public synchronized boolean shouldRing() {
return mRing;
}
public synchronized String getRingtone() {
return mRingtoneUri;
}
public synchronized void setRingtone(String ringtoneUri) {
mRingtoneUri = ringtoneUri;
}
public synchronized boolean isLed() {
return mLed;
}
public synchronized void setLed(final boolean led) {
mLed = led;
}
public synchronized int getLedColor() {
return mLedColor;
}
public synchronized void setLedColor(int color) {
mLedColor = color;
}
public synchronized boolean shouldVibrate() {
return mVibrate;
}
public synchronized void setVibrate(boolean vibrate) {
mVibrate = vibrate;
}
public synchronized int getVibratePattern() {
return mVibratePattern;
}
public synchronized int getVibrateTimes() {
return mVibrateTimes;
}
public synchronized void setVibratePattern(int pattern) {
mVibratePattern = pattern;
}
public synchronized void setVibrateTimes(int times) {
mVibrateTimes = times;
}
/*
* Fetch a vibration pattern.
*
* @param vibratePattern Vibration pattern index to use.
* @param vibrateTimes Number of times to do the vibration pattern.
* @return Pattern multiplied by the number of times requested.
*/
public long[] getVibration() {
return getVibration(mVibratePattern, mVibrateTimes);
}
public static long[] getVibration(int pattern, int times) {
// These are "off, on" patterns, specified in milliseconds
long[] pattern0 = new long[] {300, 200}; // like the default pattern
long[] pattern1 = new long[] {100, 200};
long[] pattern2 = new long[] {100, 500};
long[] pattern3 = new long[] {200, 200};
long[] pattern4 = new long[] {200, 500};
long[] pattern5 = new long[] {500, 500};
long[] selectedPattern = pattern0; //default pattern
switch (pattern) {
case 1:
selectedPattern = pattern1;
break;
case 2:
selectedPattern = pattern2;
break;
case 3:
selectedPattern = pattern3;
break;
case 4:
selectedPattern = pattern4;
break;
case 5:
selectedPattern = pattern5;
break;
}
long[] repeatedPattern = new long[selectedPattern.length * times];
for (int n = 0; n < times; n++) {
System.arraycopy(selectedPattern, 0, repeatedPattern, n * selectedPattern.length, selectedPattern.length);
}
// Do not wait before starting the vibration pattern.
repeatedPattern[0] = 0;
return repeatedPattern;
}
}