mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-09-27 08:47:03 +02:00
Add fallback ping tone
This commit is contained in:
parent
790d5ecd45
commit
b10ca0930d
@ -18,9 +18,11 @@
|
|||||||
package nodomain.freeyourgadget.gadgetbridge.activities;
|
package nodomain.freeyourgadget.gadgetbridge.activities;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.content.res.AssetFileDescriptor;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.media.RingtoneManager;
|
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);
|
mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
|
||||||
if (mAudioManager != null) {
|
if (mAudioManager != null) {
|
||||||
userVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
|
userVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);
|
||||||
}
|
}
|
||||||
mp = new MediaPlayer();
|
mp = new MediaPlayer();
|
||||||
|
|
||||||
Uri ringtoneUri = Uri.parse(GBApplication.getPrefs().getString(GBPrefs.PING_TONE, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE).toString()));
|
if (!playConfiguredRingtone()) {
|
||||||
|
playFallbackRingtone();
|
||||||
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 (mAudioManager != null) {
|
if (mAudioManager != null) {
|
||||||
@ -137,6 +131,46 @@ public class FindPhoneActivity extends AbstractGBActivity {
|
|||||||
mVibrator.cancel();
|
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() {
|
private void stopSound() {
|
||||||
mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, userVolume, AudioManager.FLAG_PLAY_SOUND);
|
mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, userVolume, AudioManager.FLAG_PLAY_SOUND);
|
||||||
mp.stop();
|
mp.stop();
|
||||||
|
@ -95,7 +95,14 @@ public class NotificationManagementActivity extends AbstractSettingsActivity {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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));
|
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 = findPreference("pref_key_blacklist");
|
||||||
pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
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…
Reference in New Issue
Block a user