summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaman Tenneti <rtenneti@google.com>2021-11-18 03:05:47 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-11-18 03:05:47 +0000
commit93501eb0fd8ced27183f3a32be1f817c3aa29c20 (patch)
treed23362a83312cdb03a4ab83c2424bf5f1c065a45
parent0de8f4bdef7967dc15cdc158bb2308cce74a4fa7 (diff)
parent0743cf73af76d8fc3a960de8721d9ae3e8c7606f (diff)
downloadDeskClock-93501eb0fd8ced27183f3a32be1f817c3aa29c20.tar.gz
Merge "DeskClock: fix setting alarm volume" am: a0b1d03354 am: 0743cf73af
Original change: https://android-review.googlesource.com/c/platform/packages/apps/DeskClock/+/1866877 Change-Id: Ia13521cb41668a535887c7c0f183c799321a8de8
-rw-r--r--AndroidManifest.xml1
-rw-r--r--src/com/android/deskclock/Utils.kt8
-rw-r--r--src/com/android/deskclock/settings/AlarmVolumePreference.kt33
3 files changed, 26 insertions, 16 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3819f4006..098637b75 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -32,6 +32,7 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- WRITE_SETTINGS is required to record the upcoming alarm prior to L -->
<uses-permission
diff --git a/src/com/android/deskclock/Utils.kt b/src/com/android/deskclock/Utils.kt
index 4692320b1..166803a24 100644
--- a/src/com/android/deskclock/Utils.kt
+++ b/src/com/android/deskclock/Utils.kt
@@ -155,6 +155,12 @@ object Utils {
get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
/**
+ * @return {@code true} if the device is {@link Build.VERSION_CODES#P} or later
+ */
+ val isPOrLater: Boolean
+ get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P
+
+ /**
* @param resourceId identifies an application resource
* @return the Uri by which the application resource is accessed
*/
@@ -612,4 +618,4 @@ object Utils {
AccessibilityActionCompat.ACTION_CLICK.getId(), mLabel))
}
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/deskclock/settings/AlarmVolumePreference.kt b/src/com/android/deskclock/settings/AlarmVolumePreference.kt
index 554c3843b..5270f2193 100644
--- a/src/com/android/deskclock/settings/AlarmVolumePreference.kt
+++ b/src/com/android/deskclock/settings/AlarmVolumePreference.kt
@@ -40,7 +40,6 @@ import com.android.deskclock.data.DataModel
class AlarmVolumePreference(context: Context?, attrs: AttributeSet?) : Preference(context, attrs) {
private lateinit var mSeekbar: SeekBar
- private lateinit var mAlarmIcon: ImageView
private var mPreviewPlaying = false
@@ -51,16 +50,21 @@ class AlarmVolumePreference(context: Context?, attrs: AttributeSet?) : Preferenc
// Disable click feedback for this preference.
holder.itemView.setClickable(false)
+ // Minimum volume for alarm is not 0, calculate it.
+ val maxVolume = audioManager.getStreamMaxVolume(STREAM_ALARM) - getMinVolume(audioManager)
mSeekbar = holder.findViewById(R.id.alarm_volume_slider) as SeekBar
- mSeekbar.setMax(audioManager.getStreamMaxVolume(STREAM_ALARM))
- mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM))
- mAlarmIcon = holder.findViewById(R.id.alarm_icon) as ImageView
+ mSeekbar.setMax(maxVolume)
+ mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM) -
+ getMinVolume(audioManager))
+ (holder.findViewById(R.id.alarm_icon) as ImageView)
+ .setImageResource(R.drawable.ic_alarm_small)
onSeekbarChanged()
val volumeObserver: ContentObserver = object : ContentObserver(mSeekbar.getHandler()) {
override fun onChange(selfChange: Boolean) {
// Volume was changed elsewhere, update our slider.
- mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM))
+ mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM) -
+ getMinVolume(audioManager))
}
}
@@ -78,7 +82,8 @@ class AlarmVolumePreference(context: Context?, attrs: AttributeSet?) : Preferenc
mSeekbar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
if (fromUser) {
- audioManager.setStreamVolume(STREAM_ALARM, progress, 0)
+ val newVolume = progress + getMinVolume(audioManager)
+ audioManager.setStreamVolume(STREAM_ALARM, newVolume, 0)
}
onSeekbarChanged()
}
@@ -87,8 +92,8 @@ class AlarmVolumePreference(context: Context?, attrs: AttributeSet?) : Preferenc
}
override fun onStopTrackingTouch(seekBar: SeekBar) {
- if (!mPreviewPlaying && seekBar.getProgress() != 0) {
- // If we are not currently playing and progress is set to non-zero, start.
+ if (!mPreviewPlaying) {
+ // If we are not currently playing, start.
RingtonePreviewKlaxon
.start(context, DataModel.dataModel.defaultAlarmRingtoneUri)
mPreviewPlaying = true
@@ -103,12 +108,6 @@ class AlarmVolumePreference(context: Context?, attrs: AttributeSet?) : Preferenc
private fun onSeekbarChanged() {
mSeekbar.setEnabled(doesDoNotDisturbAllowAlarmPlayback())
- val imageRes = if (mSeekbar.getProgress() == 0) {
- R.drawable.ic_alarm_off_24dp
- } else {
- R.drawable.ic_alarm_small
- }
- mAlarmIcon.setImageResource(imageRes)
}
private fun doesDoNotDisturbAllowAlarmPlayback(): Boolean {
@@ -123,7 +122,11 @@ class AlarmVolumePreference(context: Context?, attrs: AttributeSet?) : Preferenc
NotificationManager.INTERRUPTION_FILTER_NONE
}
+ private fun getMinVolume(audioManager: AudioManager): Int {
+ return if (Utils.isPOrLater) audioManager.getStreamMinVolume(STREAM_ALARM) else 0
+ }
+
companion object {
private const val ALARM_PREVIEW_DURATION_MS: Long = 2000
}
-} \ No newline at end of file
+}