Convert RingtoneManager to Kotlin

pull/316/head^2
Alinson S. Xavier 8 years ago
parent 6f80a9c030
commit 3783fd8506

@ -52,6 +52,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
private SharedPreferences sharedPrefs; private SharedPreferences sharedPrefs;
private RingtoneManager ringtoneManager;
@Nullable @Nullable
private Preferences prefs; private Preferences prefs;
@ -60,7 +62,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
{ {
if (requestCode == RINGTONE_REQUEST_CODE) if (requestCode == RINGTONE_REQUEST_CODE)
{ {
RingtoneManager.parseRingtoneData(getContext(), data); ringtoneManager.update(data);
updateRingtoneDescription(); updateRingtoneDescription();
return; return;
} }
@ -86,9 +88,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
setResultOnPreferenceClick("exportDB", RESULT_EXPORT_DB); setResultOnPreferenceClick("exportDB", RESULT_EXPORT_DB);
setResultOnPreferenceClick("repairDB", RESULT_REPAIR_DB); setResultOnPreferenceClick("repairDB", RESULT_REPAIR_DB);
setResultOnPreferenceClick("bugReport", RESULT_BUG_REPORT); setResultOnPreferenceClick("bugReport", RESULT_BUG_REPORT);
updateRingtoneDescription();
updateSync();
} }
@Override @Override
@ -123,6 +122,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
public void onResume() public void onResume()
{ {
super.onResume(); super.onResume();
this.ringtoneManager = new RingtoneManager(getActivity());
sharedPrefs = getPreferenceManager().getSharedPreferences(); sharedPrefs = getPreferenceManager().getSharedPreferences();
sharedPrefs.registerOnSharedPreferenceChangeListener(this); sharedPrefs.registerOnSharedPreferenceChangeListener(this);
@ -133,6 +134,9 @@ public class SettingsFragment extends PreferenceFragmentCompat
devCategory.removeAll(); devCategory.removeAll();
devCategory.setVisible(false); devCategory.setVisible(false);
} }
updateRingtoneDescription();
updateSync();
} }
@Override @Override
@ -156,7 +160,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
private void showRingtonePicker() private void showRingtonePicker()
{ {
Uri existingRingtoneUri = RingtoneManager.getRingtoneUri(getContext()); Uri existingRingtoneUri = ringtoneManager.getURI();
Uri defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI; Uri defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI;
Intent intent = new Intent(ACTION_RINGTONE_PICKER); Intent intent = new Intent(ACTION_RINGTONE_PICKER);
@ -170,7 +174,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
private void updateRingtoneDescription() private void updateRingtoneDescription()
{ {
String ringtoneName = RingtoneManager.getRingtoneName(getContext()); String ringtoneName = ringtoneManager.getName();
if (ringtoneName == null) return; if (ringtoneName == null) return;
Preference ringtonePreference = findPreference("reminderSound"); Preference ringtonePreference = findPreference("reminderSound");
ringtonePreference.setSummary(ringtoneName); ringtonePreference.setSummary(ringtoneName);

@ -31,15 +31,15 @@ import org.isoron.uhabits.core.models.*
import org.isoron.uhabits.core.preferences.* import org.isoron.uhabits.core.preferences.*
import org.isoron.uhabits.core.ui.* import org.isoron.uhabits.core.ui.*
import org.isoron.uhabits.intents.* import org.isoron.uhabits.intents.*
import org.isoron.uhabits.notifications.RingtoneManager.*
import javax.inject.* import javax.inject.*
@AppScope @AppScope
class AndroidNotificationTray class AndroidNotificationTray
@Inject constructor( @Inject constructor(
@param:AppContext private val context: Context, @AppContext private val context: Context,
private val pendingIntents: PendingIntentFactory, private val pendingIntents: PendingIntentFactory,
private val preferences: Preferences private val preferences: Preferences,
private val ringtoneManager: RingtoneManager
) : NotificationTray.SystemTray { ) : NotificationTray.SystemTray {
override fun removeNotification(id: Int) { override fun removeNotification(id: Int) {
@ -79,7 +79,7 @@ class AndroidNotificationTray
.setDeleteIntent(pendingIntents.dismissNotification(habit)) .setDeleteIntent(pendingIntents.dismissNotification(habit))
.addAction(checkAction) .addAction(checkAction)
.addAction(snoozeAction) .addAction(snoozeAction)
.setSound(getRingtoneUri(context)) .setSound(ringtoneManager.getURI())
.extend(wearableExtender) .extend(wearableExtender)
.setWhen(reminderTime) .setWhen(reminderTime)
.setShowWhen(true) .setShowWhen(true)

@ -1,112 +0,0 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.notifications;
import android.content.*;
import android.media.*;
import android.net.*;
import android.preference.*;
import android.provider.*;
import android.support.annotation.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.*;
import javax.inject.*;
import static android.media.RingtoneManager.EXTRA_RINGTONE_PICKED_URI;
import static android.media.RingtoneManager.getRingtone;
@AppScope
public class RingtoneManager
{
@Inject
public RingtoneManager()
{
}
@Nullable
public static String getRingtoneName(Context context)
{
try
{
Uri ringtoneUri = getRingtoneUri(context);
String ringtoneName =
context.getResources().getString(R.string.none);
if (ringtoneUri != null)
{
Ringtone ringtone = getRingtone(context, ringtoneUri);
if (ringtone != null)
{
ringtoneName = ringtone.getTitle(context);
ringtone.stop();
}
}
return ringtoneName;
}
catch (RuntimeException e)
{
e.printStackTrace();
return null;
}
}
@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, @Nullable Intent data)
{
if (data == null) return;
Uri ringtoneUri = data.getParcelableExtra(EXTRA_RINGTONE_PICKED_URI);
if (ringtoneUri != null)
{
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(context);
prefs
.edit()
.putString("pref_ringtone_uri", ringtoneUri.toString())
.apply();
}
else
{
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putString("pref_ringtone_uri", "").apply();
}
}
}

@ -0,0 +1,74 @@
/*
* Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.notifications
import android.content.*
import android.media.RingtoneManager.*
import android.net.*
import android.preference.*
import android.provider.*
import org.isoron.androidbase.*
import org.isoron.uhabits.R
import org.isoron.uhabits.core.*
import javax.inject.*
@AppScope
class RingtoneManager
@Inject constructor(@AppContext private val context: Context) {
val prefs: SharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context)
fun getName(): String? {
try {
var ringtoneName = context.resources.getString(R.string.none)
val ringtoneUri = getURI()
if (ringtoneUri != null) {
val ringtone = getRingtone(context, ringtoneUri)
if (ringtone != null) ringtoneName = ringtone.getTitle(context)
}
return ringtoneName
} catch (e: RuntimeException) {
e.printStackTrace()
return null
}
}
fun getURI(): Uri? {
var ringtoneUri: Uri? = null
val defaultRingtoneUri = Settings.System.DEFAULT_NOTIFICATION_URI
val prefRingtoneUri = prefs.getString("pref_ringtone_uri",
defaultRingtoneUri.toString())
if (prefRingtoneUri.isNotEmpty())
ringtoneUri = Uri.parse(prefRingtoneUri)
return ringtoneUri
}
fun update(data: Intent?) {
if (data == null) return
val ringtoneUri = data.getParcelableExtra<Uri>(EXTRA_RINGTONE_PICKED_URI)
if (ringtoneUri != null) {
prefs.edit().putString("pref_ringtone_uri", ringtoneUri.toString()).apply()
} else {
prefs.edit().putString("pref_ringtone_uri", "").apply()
}
}
}
Loading…
Cancel
Save