Squash increasing volume for alarm commits
DeskClock: Add increasing volume option for alarm clocks
this commit adds a checkbox preference for "increasing volume" to
alarm clocks. when checked, the alarm will start off at 10% of the
system-wide alarm volume and slowly increase to 100% over the
course of a minute.
Original author for jb is Austen Dicken<cvpcsm@gmail.com>
jb-mr1 porters Davor Bertovic (LorD ClockaN) and maxwen
Change-Id: Ic097e344ed1570602f17f774faed7b612d47be73
Conflicts:
src/com/android/deskclock/AlarmKlaxon.java
Fix a number of issues introduced with the increasing volume setting
- Fix coding style
- Fix alarm layout
- Don't increase volume to levels higher than set in the system
- If increasing volume is enabled and alarm volume is set to 0, don't
play alarm
- Don't randomly change log class usage
Change-Id: Ib98d82e361e83a76f08550f3b74df0c6270645a8
Conflicts:
res/values-el/strings.xml
res/values-es/strings.xml
res/values-fr/strings.xml
res/values-hu/strings.xml
res/values-pt/strings.xml
res/values-ru/strings.xml
src/com/android/deskclock/AlarmKlaxon.java
Fix layout issues with increasing volume option.
- Ellipsize 'increasing volume' check box so even long strings aren't
wrapped to two lines
- Adjust margins so they're consistent with the day buttons right above
Change-Id: Icfdefa837e84ff7db51376ca1d938dc1876f8da3
Fix NullPointerException when using vibrate-only alarms.
mAudioManager wasn't initialized in that case.
Fixes issue CYAN-376.
Change-Id: I70b3bc1f89498c3407980f512b09c3449969e733
diff --git a/res/layout/alarm_time.xml b/res/layout/alarm_time.xml
index 91124af..325c150 100644
--- a/res/layout/alarm_time.xml
+++ b/res/layout/alarm_time.xml
@@ -165,20 +165,20 @@
android:visibility="gone">
<!-- Day buttons are put here programatically -->
</LinearLayout>
- <LinearLayout
+ <RelativeLayout
android:layout_width="match_parent"
- android:layout_height="64dp"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginBottom="16dp"
android:layout_marginLeft="10dp"
- android:layout_marginRight="16dp"
+ android:layout_marginRight="10dp"
android:gravity="center_vertical">
<TextView
android:id="@+id/choose_ringtone"
android:layout_height="match_parent"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_marginRight="16dp"
- android:gravity="center_vertical"
+ android:layout_width="match_parent"
+ android:layout_marginBottom="10dp"
style="@style/body"
android:background="@drawable/item_background"
android:clickable="true"
@@ -197,9 +197,23 @@
android:textColor="@color/clock_gray"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:layout_gravity="center_vertical|right"
+ android:layout_below="@id/choose_ringtone"
+ android:layout_alignParentLeft="true"
+ android:layout_marginRight="10dp"
style="@style/body"/>
- </LinearLayout>
+ <CheckBox
+ android:id="@+id/increasing_volume_onoff"
+ android:text="@string/alarm_increasing_volume"
+ android:includeFontPadding="false"
+ android:textColor="@color/clock_gray"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_below="@id/choose_ringtone"
+ android:layout_toRightOf="@id/vibrate_onoff"
+ android:maxLines="1"
+ android:ellipsize="end"
+ style="@style/body"/>
+ </RelativeLayout>
<View
android:id="@+id/hairline"
android:layout_height="1dp"
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 6448e11..b1d2605 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -330,4 +330,5 @@
<string name="timer_delete_confirmation" msgid="2815524107015816453">"Διαγραφή αυτού του ξυπνητηριού;"</string>
<string name="city_delete_confirmation" msgid="1783441538785676299">"Να διαγραφεί αυτή η πόλη;"</string>
<string name="digital_gadget" msgid="2326954556720571358">"Ψηφιακό ρολόι"</string>
+ <string name="alarm_increasing_volume">Αυξανόμενη ένταση</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index aca9b33..e306314 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -330,4 +330,5 @@
<string name="timer_delete_confirmation" msgid="2815524107015816453">"¿Eliminar este temporizador?"</string>
<string name="city_delete_confirmation" msgid="1783441538785676299">"¿Eliminar esta ciudad?"</string>
<string name="digital_gadget" msgid="2326954556720571358">"Reloj digital"</string>
+ <string name="alarm_increasing_volume">Volumen ascendente</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 177925a..3fce4ad 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (C) 2007 The Android Open Source Project
+ Copyright (C) 2013 The CyanogenMod Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -330,4 +331,5 @@
<string name="timer_delete_confirmation" msgid="2815524107015816453">"Supprimer ce minuteur ?"</string>
<string name="city_delete_confirmation" msgid="1783441538785676299">"Supprimer cette ville ?"</string>
<string name="digital_gadget" msgid="2326954556720571358">"Horloge numérique"</string>
+ <string name="alarm_increasing_volume">Volume progressif</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 01c2d4a..9ac020d 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -31,6 +31,7 @@
<string name="default_label" msgid="5590025289805630372">"Ébresztő"</string>
<string name="set_alarm" msgid="9148359866152726808">"Ébresztés beállítása"</string>
<string name="alarm_vibrate" msgid="3476686921490362230">"Rezgés"</string>
+ <string name="alarm_increasing_volume">Emelkedő csengőhang</string>
<string name="alarm_repeat" msgid="7242985466344233206">"Ismétlődés"</string>
<string name="alert" msgid="6506982899651975645">"Ébresztés csengőhangja"</string>
<string name="ringtone" msgid="9110746249688559579">"Csengőhang"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 80d3dee..cca00aa 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -330,4 +330,5 @@
<string name="timer_delete_confirmation" msgid="2815524107015816453">"Excluir este temporizador?"</string>
<string name="city_delete_confirmation" msgid="1783441538785676299">"Remover esta cidade?"</string>
<string name="digital_gadget" msgid="2326954556720571358">"Relógio digital"</string>
+ <string name="alarm_increasing_volume">Volume crescente</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index b6c51f7..159df20 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -31,6 +31,7 @@
<string name="default_label" msgid="5590025289805630372">"Будильник"</string>
<string name="set_alarm" msgid="9148359866152726808">"Установить будильник"</string>
<string name="alarm_vibrate" msgid="3476686921490362230">"Вибросигнал"</string>
+ <string name="alarm_increasing_volume">Возрастающая громкость</string>
<string name="alarm_repeat" msgid="7242985466344233206">"Повторять"</string>
<string name="alert" msgid="6506982899651975645">"Звонок будильника"</string>
<string name="ringtone" msgid="9110746249688559579">"Рингтон"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 878df78..ef58005 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -64,6 +64,9 @@
<!-- Setting labels on Set alarm screen: Vibration on or off -->
<string name="alarm_vibrate">Vibrate</string>
+ <!-- Setting labels on Set alarm screen: Increasing volume on or off -->
+ <string name="alarm_increasing_volume">Increasing volume</string>
+
<!-- Setting labels on Set alarm screen: Repeat -->
<string name="alarm_repeat">Repeat</string>
diff --git a/res/xml/alarm_prefs.xml b/res/xml/alarm_prefs.xml
index 162b674..fd10e9b 100644
--- a/res/xml/alarm_prefs.xml
+++ b/res/xml/alarm_prefs.xml
@@ -36,4 +36,7 @@
<CheckBoxPreference android:key="vibrate"
android:persistent="false"
android:title="@string/alarm_vibrate"/>
+ <CheckBoxPreference android:key="increasingVolume"
+ android:persistent="false"
+ android:title="@string/alarm_increasing_volume" />
</PreferenceScreen>
diff --git a/src/com/android/deskclock/Alarm.java b/src/com/android/deskclock/Alarm.java
index 73414c5..7df1401 100644
--- a/src/com/android/deskclock/Alarm.java
+++ b/src/com/android/deskclock/Alarm.java
@@ -60,6 +60,7 @@
p.writeString(label);
p.writeParcelable(alert, flags);
p.writeInt(silent ? 1 : 0);
+ p.writeInt(increasingVolume ? 1 : 0);
}
//////////////////////////////
// end Parcelable apis
@@ -125,6 +126,12 @@
public static final String ALERT = "alert";
/**
+ * True if alarm should start off quiet and slowly increase volume
+ * <P>Type: BOOLEAN</P>
+ */
+ public static final String INCREASING_VOLUME = "incvol";
+
+ /**
* The default sort order for this table
*/
public static final String DEFAULT_SORT_ORDER =
@@ -135,7 +142,7 @@
static final String[] ALARM_QUERY_COLUMNS = {
_ID, HOUR, MINUTES, DAYS_OF_WEEK, ALARM_TIME,
- ENABLED, VIBRATE, MESSAGE, ALERT };
+ ENABLED, VIBRATE, MESSAGE, ALERT, INCREASING_VOLUME };
/**
* These save calls to cursor.getColumnIndexOrThrow()
@@ -150,6 +157,7 @@
public static final int ALARM_VIBRATE_INDEX = 6;
public static final int ALARM_MESSAGE_INDEX = 7;
public static final int ALARM_ALERT_INDEX = 8;
+ public static final int ALARM_INCREASING_VOLUME_INDEX = 9;
}
//////////////////////////////
// End column definitions
@@ -166,6 +174,7 @@
public String label;
public Uri alert;
public boolean silent;
+ public boolean increasingVolume;
@Override
public String toString() {
@@ -178,6 +187,7 @@
", daysOfWeek=" + daysOfWeek +
", time=" + time +
", vibrate=" + vibrate +
+ ", increasingVolume=" + increasingVolume +
", label='" + label + '\'' +
", silent=" + silent +
'}';
@@ -210,6 +220,7 @@
RingtoneManager.TYPE_ALARM);
}
}
+ increasingVolume = c.getInt(Columns.ALARM_INCREASING_VOLUME_INDEX) == 1;
}
public Alarm(Parcel p) {
@@ -223,6 +234,7 @@
label = p.readString();
alert = (Uri) p.readParcelable(null);
silent = p.readInt() == 1;
+ increasingVolume = p.readInt() == 1;
}
// Creates a default alarm at the current time.
@@ -234,6 +246,7 @@
daysOfWeek = new DaysOfWeek(0);
label = "";
alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
+ increasingVolume = false;
}
public String getLabelOrDefault(Context context) {
diff --git a/src/com/android/deskclock/AlarmClock.java b/src/com/android/deskclock/AlarmClock.java
index 14868c0..b01084b 100644
--- a/src/com/android/deskclock/AlarmClock.java
+++ b/src/com/android/deskclock/AlarmClock.java
@@ -476,6 +476,7 @@
ViewGroup[] dayButtonParents = new ViewGroup[7];
ToggleButton[] dayButtons = new ToggleButton[7];
CheckBox vibrate;
+ CheckBox increasingVolume;
ViewGroup collapse;
TextView ringtone;
View hairLine;
@@ -606,6 +607,7 @@
holder.dayButtonParents[i] = viewgroup;
}
holder.vibrate = (CheckBox) view.findViewById(R.id.vibrate_onoff);
+ holder.increasingVolume = (CheckBox) view.findViewById(R.id.increasing_volume_onoff);
holder.collapse = (ViewGroup) view.findViewById(R.id.collapse);
holder.ringtone = (TextView) view.findViewById(R.id.choose_ringtone);
@@ -884,6 +886,30 @@
}
});
+ itemHolder.increasingVolume.setVisibility(View.VISIBLE);
+ itemHolder.increasingVolume.setChecked(alarm.increasingVolume);
+ itemHolder.increasingVolume.setTextColor(
+ alarm.increasingVolume ? mColorLit : mColorDim);
+ itemHolder.increasingVolume.setOnLongClickListener(mLongClickListener);
+
+ itemHolder.increasingVolume.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final boolean checked = ((CheckBox) v).isChecked();
+ //When action mode is on - simulate long click
+ if (doLongClick(v)) {
+ return;
+ }
+ if (checked) {
+ itemHolder.increasingVolume.setTextColor(mColorLit);
+ } else {
+ itemHolder.increasingVolume.setTextColor(mColorDim);
+ }
+ alarm.increasingVolume = checked;
+ asyncUpdateAlarm(alarm, false);
+ }
+ });
+
itemHolder.collapse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/src/com/android/deskclock/AlarmDatabaseHelper.java b/src/com/android/deskclock/AlarmDatabaseHelper.java
index aa22c10..c2ffdf9 100644
--- a/src/com/android/deskclock/AlarmDatabaseHelper.java
+++ b/src/com/android/deskclock/AlarmDatabaseHelper.java
@@ -32,7 +32,7 @@
class AlarmDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "alarms.db";
- private static final int DATABASE_VERSION = 5;
+ private static final int DATABASE_VERSION = 6;
public AlarmDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
@@ -49,14 +49,15 @@
"enabled INTEGER, " +
"vibrate INTEGER, " +
"message TEXT, " +
- "alert TEXT);");
+ "alert TEXT, " +
+ "incvol INTEGER);");
// insert default alarms
String insertMe = "INSERT INTO alarms " +
"(hour, minutes, daysofweek, alarmtime, enabled, vibrate, " +
- " message, alert) VALUES ";
- db.execSQL(insertMe + "(8, 30, 31, 0, 0, 1, '', '');");
- db.execSQL(insertMe + "(9, 00, 96, 0, 0, 1, '', '');");
+ " message, alert, incvol) VALUES ";
+ db.execSQL(insertMe + "(8, 30, 31, 0, 0, 1, '', '', 0);");
+ db.execSQL(insertMe + "(9, 00, 96, 0, 0, 1, '', '', 0);");
}
@Override
diff --git a/src/com/android/deskclock/AlarmKlaxon.java b/src/com/android/deskclock/AlarmKlaxon.java
index 7834623..1f3edef 100644
--- a/src/com/android/deskclock/AlarmKlaxon.java
+++ b/src/com/android/deskclock/AlarmKlaxon.java
@@ -45,16 +45,25 @@
private static final long[] sVibratePattern = new long[] { 500, 500 };
+ private static final long INCVOL_DELAY = 5000; // 5sec * 7 volume levels = 30sec till max volume
+ private static final int INCVOL_START = 1;
+ private static final int INCVOL_DELTA = 1;
+
private boolean mPlaying = false;
private Vibrator mVibrator;
private MediaPlayer mMediaPlayer;
+ private AudioManager mAudioManager;
private Alarm mCurrentAlarm;
private long mStartTime;
private TelephonyManager mTelephonyManager;
private int mInitialCallState;
+ private int mCurrentVolume;
+ private int mAlarmVolumeSetting = -1;
// Internal messages
private static final int KILLER = 1000;
+ private static final int INCREASE_VOLUME = 1001;
+
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -63,9 +72,22 @@
if (Log.LOGV) {
Log.v("*********** Alarm killer triggered ***********");
}
+
sendKillBroadcast((Alarm) msg.obj, false);
stopSelf();
break;
+ case INCREASE_VOLUME:
+ if (mPlaying && mMediaPlayer != null && mMediaPlayer.isPlaying()) {
+ mCurrentVolume += INCVOL_DELTA;
+ if (Log.LOGV) {
+ Log.v("Increasing alarm volume to " + mCurrentVolume);
+ }
+ mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, mCurrentVolume, 0);
+ if (mCurrentVolume < mAlarmVolumeSetting) {
+ mHandler.sendEmptyMessageDelayed(INCREASE_VOLUME, INCVOL_DELAY);
+ }
+ }
+ break;
}
}
};
@@ -87,6 +109,7 @@
@Override
public void onCreate() {
+ mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Listen for incoming calls to kill the alarm.
mTelephonyManager =
@@ -201,7 +224,7 @@
} else {
mMediaPlayer.setDataSource(this, alert);
}
- startAlarm(mMediaPlayer);
+ startAlarm(mMediaPlayer, alarm.increasingVolume);
} catch (Exception ex) {
Log.v("Using the fallback ringtone");
// The alert may be on the sd card which could be busy right
@@ -211,7 +234,7 @@
mMediaPlayer.reset();
setDataSourceFromResource(getResources(), mMediaPlayer,
R.raw.fallbackring);
- startAlarm(mMediaPlayer);
+ startAlarm(mMediaPlayer, alarm.increasingVolume);
} catch (Exception ex2) {
// At this point we just don't play anything.
Log.e("Failed to play fallback ringtone", ex2);
@@ -232,18 +255,23 @@
}
// Do the common stuff when starting the alarm.
- private void startAlarm(MediaPlayer player)
+ private void startAlarm(MediaPlayer player, boolean useIncreasingVolume)
throws java.io.IOException, IllegalArgumentException,
IllegalStateException {
- final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
// do not play alarms if stream volume is 0
// (typically because ringer mode is silent).
- if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
- player.setAudioStreamType(AudioManager.STREAM_ALARM);
- player.setLooping(true);
- player.prepare();
- player.start();
+ if (mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM) == 0) {
+ return;
}
+
+ if (useIncreasingVolume) {
+ startVolumeIncrease();
+ }
+
+ player.setAudioStreamType(AudioManager.STREAM_ALARM);
+ player.setLooping(true);
+ player.prepare();
+ player.start();
}
private void setDataSourceFromResource(Resources resources,
@@ -276,6 +304,7 @@
mVibrator.cancel();
}
disableKiller();
+ stopVolumeIncrease();
}
/**
@@ -301,5 +330,21 @@
mHandler.removeMessages(KILLER);
}
+ private void startVolumeIncrease() {
+ // save current value
+ mAlarmVolumeSetting = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
+ mCurrentVolume = INCVOL_START;
+ mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, mCurrentVolume, 0);
+ mHandler.sendEmptyMessageDelayed(INCREASE_VOLUME, INCVOL_DELAY);
+ }
+
+ private void stopVolumeIncrease() {
+ mHandler.removeMessages(INCREASE_VOLUME);
+ if (mAlarmVolumeSetting >= 0) {
+ // reset to default from before
+ mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, mAlarmVolumeSetting, 0);
+ mAlarmVolumeSetting = -1;
+ }
+ }
}
diff --git a/src/com/android/deskclock/Alarms.java b/src/com/android/deskclock/Alarms.java
index 7b4ff74..341e37c 100644
--- a/src/com/android/deskclock/Alarms.java
+++ b/src/com/android/deskclock/Alarms.java
@@ -192,6 +192,8 @@
values.put(Alarm.Columns.ALERT, alarm.alert == null ? ALARM_ALERT_SILENT
: alarm.alert.toString());
+ values.put(Alarm.Columns.INCREASING_VOLUME, alarm.increasingVolume);
+
return values;
}
diff --git a/src/com/android/deskclock/HandleSetAlarm.java b/src/com/android/deskclock/HandleSetAlarm.java
index 69ef89e..0f831cb 100644
--- a/src/com/android/deskclock/HandleSetAlarm.java
+++ b/src/com/android/deskclock/HandleSetAlarm.java
@@ -89,6 +89,7 @@
values.put(Alarm.Columns.VIBRATE, 1);
values.put(Alarm.Columns.DAYS_OF_WEEK, 0);
values.put(Alarm.Columns.ALARM_TIME, timeInMillis);
+ values.put(Alarm.Columns.INCREASING_VOLUME, 0);
ContentResolver cr = getContentResolver();
Uri result = cr.insert(Alarm.Columns.CONTENT_URI, values);
diff --git a/src/com/android/deskclock/SetAlarm.java b/src/com/android/deskclock/SetAlarm.java
index 3b73231..f650796 100644
--- a/src/com/android/deskclock/SetAlarm.java
+++ b/src/com/android/deskclock/SetAlarm.java
@@ -52,6 +52,7 @@
private Preference mTimePref;
private AlarmPreference mAlarmPref;
private CheckBoxPreference mVibratePref;
+ private CheckBoxPreference mIncreasingVolumePref;
private RepeatPreference mRepeatPref;
private int mId;
@@ -87,6 +88,8 @@
if (!v.hasVibrator()) {
getPreferenceScreen().removePreference(mVibratePref);
}
+ mIncreasingVolumePref = (CheckBoxPreference) findPreference("increasingVolume");
+ mIncreasingVolumePref.setOnPreferenceChangeListener(this);
mRepeatPref = (RepeatPreference) findPreference("setRepeat");
mRepeatPref.setOnPreferenceChangeListener(this);
@@ -233,6 +236,7 @@
mMinute = alarm.minutes;
mRepeatPref.setDaysOfWeek(alarm.daysOfWeek);
mVibratePref.setChecked(alarm.vibrate);
+ mIncreasingVolumePref.setChecked(alarm.increasingVolume);
// Give the alert uri to the preference.
mAlarmPref.setAlert(alarm.alert);
updateTime();
@@ -300,6 +304,7 @@
alarm.vibrate = mVibratePref.isChecked();
alarm.label = mLabel.getText().toString();
alarm.alert = mAlarmPref.getAlert();
+ alarm.increasingVolume = mIncreasingVolumePref.isChecked();
return alarm;
}