Add audio output setting (alarm/media/ringtone/notification)

Resolves #76.
merge-requests/7/head 1.6.2
Trevor Slocum 2020-11-12 12:53:06 -08:00
parent 090c7a1f5d
commit 71433fcb3b
12 changed files with 71 additions and 17 deletions

View File

@ -1,3 +1,6 @@
1.6.2:
- Add audio output setting (alarm/media/ringtone/notification)
1.6.1:
- Fix delayed completion sound on Android 10.0+

View File

@ -8,8 +8,8 @@ android {
minSdkVersion 16
targetSdkVersion 29
versionCode 161
versionName "1.6.1"
versionCode 162
versionName "1.6.2"
applicationId "sh.ftp.rocketninelabs.meditationassistant"
manifestPlaceholders = [

View File

@ -216,11 +216,11 @@ public class ListPreferenceSound extends ListPreference {
afd.getDeclaredLength());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setUsage(((MeditationAssistant) ctx.getApplicationContext()).audioUsage())
.build();
mMediaPlayer.setAudioAttributes(audioAttributes);
} else {
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mMediaPlayer.setAudioStreamType(((MeditationAssistant) ctx.getApplicationContext()).audioStream());
}
mMediaPlayer.setVolume(mediaVolume, mediaVolume);
mMediaPlayer.prepareAsync();

View File

@ -1412,12 +1412,12 @@ public class MainActivity extends Activity implements OnShowcaseEventListener {
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if (getMeditationAssistant().previous_volume == null) {
getMeditationAssistant().previous_volume = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
getMeditationAssistant().previous_volume = mAudioManager.getStreamVolume(getMeditationAssistant().audioStream());
}
mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, (int) ((mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM) * getMeditationAssistant().getPrefs().getInt("pref_sessionvolume", 50) * 0.1) / 10), 0);
mAudioManager.setStreamVolume(getMeditationAssistant().audioStream(), (int) ((mAudioManager.getStreamMaxVolume(getMeditationAssistant().audioStream()) * getMeditationAssistant().getPrefs().getInt("pref_sessionvolume", 50) * 0.1) / 10), 0);
if (delay > 0) {
setVolumeControlStream(AudioManager.STREAM_ALARM);
setVolumeControlStream(getMeditationAssistant().audioStream());
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, (int) delay);

View File

@ -133,7 +133,6 @@ public class MeditationAssistant extends Application {
public long streakbuffer = -1;
private long sessrunnablestarttime = 0;
private boolean sesswassignedout = false;
private Boolean sendusage = null;
private long sessionduration = 0;
private Integer webview_scale = null;
private String timerMode = null;
@ -295,11 +294,37 @@ public class MeditationAssistant extends Application {
return string.substring(0, 1).toUpperCase() + string.substring(1).toLowerCase();
}
public int audioStream() {
switch (getPrefs().getString("pref_audio_stream", "")) {
case "media":
return AudioManager.STREAM_MUSIC;
case "ringtone":
return AudioManager.STREAM_RING;
case "notification":
return AudioManager.STREAM_NOTIFICATION;
default:
return AudioManager.STREAM_ALARM;
}
}
public int audioUsage() {
switch (getPrefs().getString("pref_audio_stream", "")) {
case "media":
return AudioAttributes.USAGE_MEDIA;
case "ringtone":
return AudioAttributes.USAGE_NOTIFICATION_RINGTONE;
case "notification":
return AudioAttributes.USAGE_NOTIFICATION;
default:
return AudioAttributes.USAGE_ALARM;
}
}
public void restoreVolume() {
if (previous_volume != null) {
try {
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, previous_volume, 0);
mAudioManager.setStreamVolume(audioStream(), previous_volume, 0);
} catch (java.lang.SecurityException e) {
// Do nothing
}
@ -513,11 +538,11 @@ public class MeditationAssistant extends Application {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setUsage(audioUsage())
.build();
mp.setAudioAttributes(audioAttributes);
} else {
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setAudioStreamType(audioStream());
}
try {
if (!soundpath.equals("")) {

View File

@ -204,11 +204,11 @@ public class SeekBarPreference extends DialogPreference implements SeekBar.OnSee
afd.getDeclaredLength());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setUsage(((MeditationAssistant) mContext.getApplicationContext()).audioStream())
.build();
mediaPlayer.setAudioAttributes(audioAttributes);
} else {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
mediaPlayer.setAudioStreamType(((MeditationAssistant) mContext.getApplicationContext()).audioStream());
}
float mediaVolume = (float) (value * 0.01);
mediaPlayer.setVolume(mediaVolume, mediaVolume);

View File

@ -161,7 +161,7 @@ public class SettingsActivity extends PreferenceActivity {
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: (preference instanceof ListPreferenceSound ? "Gong" : (preference.getKey().equals("pref_timer_position") ? getString(R.string.top) : getString(R.string.disabled)))
: (preference instanceof ListPreferenceSound ? "Gong" : (preference.getKey().equals("pref_timer_position") ? getString(R.string.top) : (preference.getKey().equals("pref_audio_output") ? getString(R.string.alarm) : getString(R.string.disabled))))
); // TODO: Don't hardcode sound names
if (listPreference.getKey().equals("pref_theme")) {
@ -678,6 +678,7 @@ public class SettingsActivity extends PreferenceActivity {
bindPreferenceSummaryToValue(preferenceFragment == null ? findPreference("pref_text_size") : preferenceFragment.findPreference("pref_text_size"));
bindPreferenceSummaryToValue(preferenceFragment == null ? findPreference("pref_timer_position") : preferenceFragment.findPreference("pref_timer_position"));
bindPreferenceSummaryToValue(preferenceFragment == null ? findPreference("pref_autosave") : preferenceFragment.findPreference("pref_autosave"));
bindPreferenceSummaryToValue(preferenceFragment == null ? findPreference("pref_audio_output") : preferenceFragment.findPreference("pref_audio_output"));
}
if (pref_type.equals("all") || pref_type.equals("progress")) {
if (preferenceFragment != null) {

View File

@ -129,6 +129,18 @@
<item>@string/duringSession</item>
<item>@string/always</item>
</string-array>
<string-array name="audio_output_values">
<item></item>
<item>media</item>
<item>ringtone</item>
<item>notification</item>
</string-array>
<string-array name="audio_output">
<item>@string/alarm</item>
<item>@string/media</item>
<item>@string/ringtone</item>
<item>@string/notification</item>
</string-array>
<string-array name="presetsettings_values">
<item>modeandduration</item>
<item>introduction</item>

View File

@ -179,6 +179,7 @@
<string name="pref_display_seconds_summary">Shown below the main timer</string>
<string name="pref_meditationstreakbuffer">Streak resets at</string>
<string name="pref_full_screen">Full screen</string>
<string name="pref_audio_output">Audio output</string>
<string name="pref_delay">Delay</string>
<string name="pref_interval">Interval duration</string>
<string name="pref_interval_count">Interval count</string>
@ -237,6 +238,10 @@
<string name="normal">Normal</string>
<string name="large">Large</string>
<string name="extralarge">Extra-large</string>
<string name="alarm">Alarm</string>
<string name="media">Media</string>
<string name="ringtone">Ringtone</string>
<string name="notification">Notification</string>
<string name="restartApp">Restart application to apply new settings</string>
<string name="pref_notificationcontrol">Ringtone and notifications</string>
<string name="pref_notificationcontrol_priority">Priority only</string>

View File

@ -59,4 +59,12 @@
android:key="pref_full_screen"
android:title="@string/pref_full_screen"/>
<ListPreference
android:defaultValue=""
android:dialogIcon="?attr/actionIconVolumeOn"
android:entries="@array/audio_output"
android:entryValues="@array/audio_output_values"
android:key="pref_audio_output"
android:title="@string/pref_audio_output"/>
</PreferenceScreen>

View File

@ -5,7 +5,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.1'
classpath 'com.android.tools.build:gradle:4.1.1'
}
}

View File

@ -1,6 +1,6 @@
#Tue Jul 07 14:26:34 PDT 2020
#Thu Nov 12 12:35:55 PST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip