mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2025-02-25 00:39:01 +01:00
Add fallback ping tone
This commit is contained in:
parent
790d5ecd45
commit
b10ca0930d
@ -18,9 +18,11 @@
|
||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.AssetFileDescriptor;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.media.RingtoneManager;
|
||||
@ -108,23 +110,15 @@ public class FindPhoneActivity extends AbstractGBActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void playRingtone(){
|
||||
private void playRingtone() {
|
||||
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
|
||||
if (mAudioManager != null) {
|
||||
userVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
|
||||
}
|
||||
mp = new MediaPlayer();
|
||||
|
||||
Uri ringtoneUri = Uri.parse(GBApplication.getPrefs().getString(GBPrefs.PING_TONE, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE).toString()));
|
||||
|
||||
try {
|
||||
mp.setDataSource(this, ringtoneUri);
|
||||
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
|
||||
mp.setLooping(true);
|
||||
mp.prepare();
|
||||
mp.start();
|
||||
} catch (IOException ignore) {
|
||||
LOG.warn("problem playing ringtone");
|
||||
if (!playConfiguredRingtone()) {
|
||||
playFallbackRingtone();
|
||||
}
|
||||
|
||||
if (mAudioManager != null) {
|
||||
@ -137,6 +131,46 @@ public class FindPhoneActivity extends AbstractGBActivity {
|
||||
mVibrator.cancel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to play the configured ringtone. This fails to get the default ringtone on some ROMs
|
||||
* (https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2697)
|
||||
*
|
||||
* @return whether playing the configured ringtone was successful or not.
|
||||
*/
|
||||
private boolean playConfiguredRingtone() {
|
||||
try {
|
||||
Uri ringtoneUri = Uri.parse(GBApplication.getPrefs().getString(GBPrefs.PING_TONE, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE).toString()));
|
||||
mp.setDataSource(this, ringtoneUri);
|
||||
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
|
||||
mp.setLooping(true);
|
||||
mp.prepare();
|
||||
mp.start();
|
||||
} catch (final Exception e) {
|
||||
LOG.warn("Failed to play configured ringtone", e);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void playFallbackRingtone() {
|
||||
try {
|
||||
final AssetFileDescriptor afd = getBaseContext().getResources().openRawResourceFd(R.raw.ping_tone);
|
||||
if (afd == null) {
|
||||
LOG.error("Failed to load fallback ringtone");
|
||||
return;
|
||||
}
|
||||
|
||||
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
|
||||
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
|
||||
mp.setLooping(true);
|
||||
mp.prepare();
|
||||
mp.start();
|
||||
} catch (final Exception e) {
|
||||
LOG.warn("Failed to play fallback ringtone", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void stopSound() {
|
||||
mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, userVolume, AudioManager.FLAG_PLAY_SOUND);
|
||||
mp.stop();
|
||||
|
@ -95,7 +95,14 @@ public class NotificationManagementActivity extends AbstractSettingsActivity {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
pref.setSummary(RingtoneManager.getRingtone(this, Uri.parse(prefs.getString(GBPrefs.PING_TONE, DEFAULT_RINGTONE_URI))).getTitle(this));
|
||||
|
||||
try {
|
||||
// This fails on some ROMs. The actual implementation falls-back to an internal ping tone
|
||||
pref.setSummary(RingtoneManager.getRingtone(this, Uri.parse(prefs.getString(GBPrefs.PING_TONE, DEFAULT_RINGTONE_URI))).getTitle(this));
|
||||
} catch (final Exception e) {
|
||||
LOG.error("Failed to find the configured ping ringtone");
|
||||
pref.setSummary("-");
|
||||
}
|
||||
|
||||
pref = findPreference("pref_key_blacklist");
|
||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
|
1
app/src/main/res/raw/ping_tone.rtttl
Normal file
1
app/src/main/res/raw/ping_tone.rtttl
Normal file
@ -0,0 +1 @@
|
||||
ping:d=8,o=5,b=120:d,2p,d,2p,d,2p,d,2p
|
Loading…
x
Reference in New Issue
Block a user