diff options
author | Timi Rautamäki <timi.rautamaki@gmail.com> | 2021-11-18 13:18:38 +0000 |
---|---|---|
committer | Timi Rautamäki <timi.rautamaki@gmail.com> | 2021-11-18 13:31:06 +0000 |
commit | 7756676a3dfed2216e02c71be4a4734c48b8cff8 (patch) | |
tree | 48d1ef65ed6b791d1640722155f51ae2d562dfaf | |
parent | cde0f1bed488ae2dafe290b5f9c4f091ab9f8386 (diff) |
DeskClock: fix setting alarm volume
Minimum volume for a STREAM_ALARM is 1 (or 4, if caller is unprivile-
ged). Substract the minimum volume from Seekbar's value in order to set
proper volume. Also add permission MODIFY_AUDIO_SETTINGS to be able to
set the volume to 1.
Test: Open DeskClock settings, set alarm volume to 1.
Reopen app, verify volume is still at 1 (minimum).
Verify alarm volume is at 1 in settings (minimum).
Signed-off-by: Timi Rautamäki <timi.rautamaki@gmail.com>
Change-Id: Icdb5bf7ebc0daefa12edcd28d03c444709cf75c6
-rw-r--r-- | AndroidManifest.xml | 1 | ||||
-rw-r--r-- | src/com/android/deskclock/Utils.java | 7 | ||||
-rw-r--r-- | src/com/android/deskclock/settings/AlarmVolumePreference.java | 27 |
3 files changed, 25 insertions, 10 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0abd72adf..1463515a3 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" /> <uses-permission android:name="org.codeaurora.permission.POWER_OFF_ALARM" /> <!-- WRITE_SETTINGS is required to record the upcoming alarm prior to L --> diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java index 6d97912f7..348c795c1 100644 --- a/src/com/android/deskclock/Utils.java +++ b/src/com/android/deskclock/Utils.java @@ -164,6 +164,13 @@ public class Utils { } /** + * @return {@code true} if the device is {@link Build.VERSION_CODES#P} or later + */ + public static boolean isPOrLater() { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.P; + } + + /** * @param resourceId identifies an application resource * @return the Uri by which the application resource is accessed */ diff --git a/src/com/android/deskclock/settings/AlarmVolumePreference.java b/src/com/android/deskclock/settings/AlarmVolumePreference.java index c6510db1a..92edd9e67 100644 --- a/src/com/android/deskclock/settings/AlarmVolumePreference.java +++ b/src/com/android/deskclock/settings/AlarmVolumePreference.java @@ -44,7 +44,6 @@ public class AlarmVolumePreference extends Preference { private static final long ALARM_PREVIEW_DURATION_MS = 2000; private SeekBar mSeekbar; - private ImageView mAlarmIcon; private boolean mPreviewPlaying; public AlarmVolumePreference(Context context, AttributeSet attrs) { @@ -61,10 +60,14 @@ public class AlarmVolumePreference extends Preference { // Disable click feedback for this preference. holder.itemView.setClickable(false); + // Minimum volume for alarm is not 0, calculate it. + int maxVolume = audioManager.getStreamMaxVolume(STREAM_ALARM) - getMinVolume(audioManager); mSeekbar = (SeekBar) holder.findViewById(R.id.seekbar); - mSeekbar.setMax(audioManager.getStreamMaxVolume(STREAM_ALARM)); - mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM)); - mAlarmIcon = (ImageView) holder.findViewById(android.R.id.icon); + mSeekbar.setMax(maxVolume); + mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM) - + getMinVolume(audioManager)); + ((ImageView) holder.findViewById(android.R.id.icon)) + .setImageResource(R.drawable.ic_alarm_small); onSeekbarChanged(); @@ -72,7 +75,8 @@ public class AlarmVolumePreference extends Preference { @Override public void onChange(boolean selfChange) { // Volume was changed elsewhere, update our slider. - mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM)); + mSeekbar.setProgress(audioManager.getStreamVolume(STREAM_ALARM) - + getMinVolume(audioManager)); } }; @@ -93,7 +97,8 @@ public class AlarmVolumePreference extends Preference { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { - audioManager.setStreamVolume(STREAM_ALARM, progress, 0); + int newVolume = progress + getMinVolume(audioManager); + audioManager.setStreamVolume(STREAM_ALARM, newVolume, 0); } onSeekbarChanged(); } @@ -104,8 +109,8 @@ public class AlarmVolumePreference extends Preference { @Override public void 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.getDataModel().getDefaultAlarmRingtoneUri()); mPreviewPlaying = true; @@ -123,8 +128,6 @@ public class AlarmVolumePreference extends Preference { private void onSeekbarChanged() { mSeekbar.setEnabled(doesDoNotDisturbAllowAlarmPlayback()); - mAlarmIcon.setImageResource(mSeekbar.getProgress() == 0 ? - R.drawable.ic_alarm_off_24dp : R.drawable.ic_alarm_small); } private boolean doesDoNotDisturbAllowAlarmPlayback() { @@ -138,4 +141,8 @@ public class AlarmVolumePreference extends Preference { return notificationManager.getCurrentInterruptionFilter() != NotificationManager.INTERRUPTION_FILTER_NONE; } + + private int getMinVolume(AudioManager audioManager) { + return (Utils.isPOrLater()) ? audioManager.getStreamMinVolume(STREAM_ALARM) : 0; + } }
\ No newline at end of file |