Allow user to select reminder sound

Closes #63
pull/84/merge
Alinson S. Xavier 10 years ago
parent 4db7a6e89c
commit b2811b9797

@ -29,7 +29,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Handler;
import android.preference.PreferenceManager;
@ -176,7 +175,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
PendingIntent checkIntentPending = buildCheckIntent(context, habit, timestamp);
PendingIntent snoozeIntentPending = buildSnoozeIntent(context, habit);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Uri ringtoneUri = ReminderHelper.getRingtoneUri(context);
NotificationCompat.WearableExtender wearableExtender =
new NotificationCompat.WearableExtender().setBackground(
@ -192,7 +191,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
context.getString(R.string.check), checkIntentPending)
.addAction(R.drawable.ic_action_snooze,
context.getString(R.string.snooze), snoozeIntentPending)
.setSound(soundUri)
.setSound(ringtoneUri)
.extend(wearableExtender)
.setWhen(reminderTime)
.setShowWhen(true)

@ -20,6 +20,7 @@
package org.isoron.uhabits.fragments;
import android.app.backup.BackupManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.preference.Preference;
@ -28,11 +29,14 @@ import android.support.v7.preference.PreferenceFragmentCompat;
import org.isoron.uhabits.MainActivity;
import org.isoron.uhabits.R;
import org.isoron.uhabits.helpers.ReminderHelper;
import org.isoron.uhabits.helpers.UIHelper;
public class SettingsFragment extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener
{
private static int RINGTONE_REQUEST_CODE = 1;
@Override
public void onCreate(Bundle savedInstanceState)
{
@ -44,6 +48,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
setResultOnPreferenceClick("exportDB", MainActivity.RESULT_EXPORT_DB);
setResultOnPreferenceClick("bugReport", MainActivity.RESULT_BUG_REPORT);
updateRingtoneDescription();
if(UIHelper.isLocaleFullyTranslated())
removePreference("translate", "linksCategory");
}
@ -97,4 +103,36 @@ public class SettingsFragment extends PreferenceFragmentCompat
{
BackupManager.dataChanged("org.isoron.uhabits");
}
@Override
public boolean onPreferenceTreeClick(Preference preference)
{
if (preference.getKey().equals("reminderSound"))
{
ReminderHelper.startRingtonePickerActivity(this, RINGTONE_REQUEST_CODE);
return true;
}
return super.onPreferenceTreeClick(preference);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == RINGTONE_REQUEST_CODE)
{
ReminderHelper.parseRingtoneData(getContext(), data);
updateRingtoneDescription();
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
private void updateRingtoneDescription()
{
String ringtoneName = ReminderHelper.getRingtoneName(getContext());
Preference ringtonePreference = findPreference("reminderSound");
ringtonePreference.setSummary(ringtoneName);
}
}

@ -23,12 +23,19 @@ import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import org.isoron.uhabits.HabitBroadcastReceiver;
import org.isoron.uhabits.R;
import org.isoron.uhabits.models.Habit;
import java.text.DateFormat;
@ -89,4 +96,66 @@ public class ReminderHelper
Log.d("ReminderHelper", String.format("Setting alarm (%s): %s",
DateFormat.getDateTimeInstance().format(new Date(reminderTime)), habit.name));
}
@Nullable
public static Uri getRingtoneUri(Context context)
{
Uri ringtoneUri = null;
Uri defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String prefRingtoneUri = prefs.getString("pref_ringtone_uri", defaultRingtoneUri.toString());
if (prefRingtoneUri.length() > 0) ringtoneUri = Uri.parse(prefRingtoneUri);
return ringtoneUri;
}
public static void parseRingtoneData(Context context, Intent data)
{
Uri ringtoneUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (ringtoneUri != null)
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putString("pref_ringtone_uri", ringtoneUri.toString()).apply();
}
else
{
String off = context.getResources().getString(R.string.none);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putString("pref_ringtone_uri", "").apply();
}
}
public static void startRingtonePickerActivity(Fragment fragment, int requestCode)
{
Uri existingRingtoneUri = ReminderHelper.getRingtoneUri(fragment.getContext());
Uri defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI;
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, defaultRingtoneUri);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, existingRingtoneUri);
fragment.startActivityForResult(intent, requestCode);
}
public static String getRingtoneName(Context context)
{
Uri ringtoneUri = getRingtoneUri(context);
String ringtoneName = context.getResources().getString(R.string.none);
if(ringtoneUri != null)
{
Ringtone ringtone = RingtoneManager.getRingtone(context, ringtoneUri);
if(ringtone != null)
{
ringtoneName = ringtone.getTitle(context);
ringtone.stop();
}
}
return ringtoneName;
}
}

@ -176,4 +176,6 @@
<string name="every_x_weeks">Every %d weeks</string>
<string name="every_x_months">Every %d months</string>
<string name="score">Score</string>
<string name="reminder_sound">Reminder sound</string>
<string name="none">None</string>
</resources>

@ -51,6 +51,10 @@
android:summary="%s"
android:title="@string/pref_snooze_interval_title"/>
<Preference
android:key="reminderSound"
android:title="@string/reminder_sound"/>
</PreferenceCategory>
<PreferenceCategory

Loading…
Cancel
Save