mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 01:08:50 -06:00
@@ -29,7 +29,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
import android.media.RingtoneManager;
|
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
@@ -176,7 +175,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
|
|||||||
PendingIntent checkIntentPending = buildCheckIntent(context, habit, timestamp);
|
PendingIntent checkIntentPending = buildCheckIntent(context, habit, timestamp);
|
||||||
PendingIntent snoozeIntentPending = buildSnoozeIntent(context, habit);
|
PendingIntent snoozeIntentPending = buildSnoozeIntent(context, habit);
|
||||||
|
|
||||||
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
Uri ringtoneUri = ReminderHelper.getRingtoneUri(context);
|
||||||
|
|
||||||
NotificationCompat.WearableExtender wearableExtender =
|
NotificationCompat.WearableExtender wearableExtender =
|
||||||
new NotificationCompat.WearableExtender().setBackground(
|
new NotificationCompat.WearableExtender().setBackground(
|
||||||
@@ -192,7 +191,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
|
|||||||
context.getString(R.string.check), checkIntentPending)
|
context.getString(R.string.check), checkIntentPending)
|
||||||
.addAction(R.drawable.ic_action_snooze,
|
.addAction(R.drawable.ic_action_snooze,
|
||||||
context.getString(R.string.snooze), snoozeIntentPending)
|
context.getString(R.string.snooze), snoozeIntentPending)
|
||||||
.setSound(soundUri)
|
.setSound(ringtoneUri)
|
||||||
.extend(wearableExtender)
|
.extend(wearableExtender)
|
||||||
.setWhen(reminderTime)
|
.setWhen(reminderTime)
|
||||||
.setShowWhen(true)
|
.setShowWhen(true)
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
package org.isoron.uhabits.fragments;
|
package org.isoron.uhabits.fragments;
|
||||||
|
|
||||||
import android.app.backup.BackupManager;
|
import android.app.backup.BackupManager;
|
||||||
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.preference.Preference;
|
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.MainActivity;
|
||||||
import org.isoron.uhabits.R;
|
import org.isoron.uhabits.R;
|
||||||
|
import org.isoron.uhabits.helpers.ReminderHelper;
|
||||||
import org.isoron.uhabits.helpers.UIHelper;
|
import org.isoron.uhabits.helpers.UIHelper;
|
||||||
|
|
||||||
public class SettingsFragment extends PreferenceFragmentCompat
|
public class SettingsFragment extends PreferenceFragmentCompat
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener
|
implements SharedPreferences.OnSharedPreferenceChangeListener
|
||||||
{
|
{
|
||||||
|
private static int RINGTONE_REQUEST_CODE = 1;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState)
|
public void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
@@ -44,6 +48,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
setResultOnPreferenceClick("exportDB", MainActivity.RESULT_EXPORT_DB);
|
setResultOnPreferenceClick("exportDB", MainActivity.RESULT_EXPORT_DB);
|
||||||
setResultOnPreferenceClick("bugReport", MainActivity.RESULT_BUG_REPORT);
|
setResultOnPreferenceClick("bugReport", MainActivity.RESULT_BUG_REPORT);
|
||||||
|
|
||||||
|
updateRingtoneDescription();
|
||||||
|
|
||||||
if(UIHelper.isLocaleFullyTranslated())
|
if(UIHelper.isLocaleFullyTranslated())
|
||||||
removePreference("translate", "linksCategory");
|
removePreference("translate", "linksCategory");
|
||||||
}
|
}
|
||||||
@@ -97,4 +103,36 @@ public class SettingsFragment extends PreferenceFragmentCompat
|
|||||||
{
|
{
|
||||||
BackupManager.dataChanged("org.isoron.uhabits");
|
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.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.media.Ringtone;
|
||||||
|
import android.media.RingtoneManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v4.app.Fragment;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.isoron.uhabits.HabitBroadcastReceiver;
|
import org.isoron.uhabits.HabitBroadcastReceiver;
|
||||||
|
import org.isoron.uhabits.R;
|
||||||
import org.isoron.uhabits.models.Habit;
|
import org.isoron.uhabits.models.Habit;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
@@ -89,4 +96,66 @@ public class ReminderHelper
|
|||||||
Log.d("ReminderHelper", String.format("Setting alarm (%s): %s",
|
Log.d("ReminderHelper", String.format("Setting alarm (%s): %s",
|
||||||
DateFormat.getDateTimeInstance().format(new Date(reminderTime)), habit.name));
|
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_weeks">Every %d weeks</string>
|
||||||
<string name="every_x_months">Every %d months</string>
|
<string name="every_x_months">Every %d months</string>
|
||||||
<string name="score">Score</string>
|
<string name="score">Score</string>
|
||||||
|
<string name="reminder_sound">Reminder sound</string>
|
||||||
|
<string name="none">None</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -51,6 +51,10 @@
|
|||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
android:title="@string/pref_snooze_interval_title"/>
|
android:title="@string/pref_snooze_interval_title"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="reminderSound"
|
||||||
|
android:title="@string/reminder_sound"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
|
|||||||
Reference in New Issue
Block a user