diff options
author | Raman Tenneti <rtenneti@google.com> | 2021-11-18 03:05:47 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-11-18 03:05:47 +0000 |
commit | 93501eb0fd8ced27183f3a32be1f817c3aa29c20 (patch) | |
tree | d23362a83312cdb03a4ab83c2424bf5f1c065a45 | |
parent | 0de8f4bdef7967dc15cdc158bb2308cce74a4fa7 (diff) | |
parent | 0743cf73af76d8fc3a960de8721d9ae3e8c7606f (diff) | |
download | DeskClock-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.xml | 1 | ||||
-rw-r--r-- | src/com/android/deskclock/Utils.kt | 8 | ||||
-rw-r--r-- | src/com/android/deskclock/settings/AlarmVolumePreference.kt | 33 |
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 +} |