package yuku.alkitab.reminder.ac;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.app.ActionBar;
import android.support.v7.preference.EditTextPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.text.format.DateFormat;
import yuku.afw.V;
import yuku.afw.storage.Preferences;
import yuku.alkitab.base.App;
import yuku.alkitab.base.ac.base.BaseActivity;
import yuku.alkitab.debug.R;
import yuku.alkitab.reminder.util.DevotionReminder;
import yuku.alkitab.reminder.widget.ReminderTimePreference;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class DevotionReminderActivity extends BaseActivity {
public static final int REQCODE_ringtone = 1;
public static Intent createIntent() {
return new Intent(App.context, DevotionReminderActivity.class);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_devotion_reminder);
final Toolbar toolbar = V.get(this, R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
assert ab != null;
ab.setDisplayHomeAsUpEnabled(true);
}
public static class DevotionReminderFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Preferences.registerObserver(this);
}
@Override
public void onDestroy() {
super.onDestroy();
Preferences.unregisterObserver(this);
}
@Override
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
addPreferencesFromResource(R.xml.devotion_reminder_settings);
updateReminderTypeEnabledness();
updateDisplayedValue();
}
void updateReminderTypeEnabledness() {
Preference reminder_time = findPreference(DevotionReminder.REMINDER_TIME);
Preference reminder_sound = findPreference(DevotionReminder.REMINDER_SOUND);
Preference reminder_vibrate = findPreference(DevotionReminder.REMINDER_VIBRATE);
Preference reminder_text = findPreference(DevotionReminder.REMINDER_TEXT);
boolean disable = reminder_time.shouldDisableDependents();
reminder_sound.setEnabled(!disable);
reminder_vibrate.setEnabled(!disable);
reminder_text.setEnabled(!disable);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateReminderTypeEnabledness();
if (TextUtils.isEmpty(Preferences.getString(DevotionReminder.REMINDER_TEXT))) {
Preferences.setString(DevotionReminder.REMINDER_TEXT, DevotionReminder.getNotificationText());
}
DevotionReminder.scheduleAlarm();
updateDisplayedValue();
}
@Override
public boolean onPreferenceTreeClick(final Preference preference) {
if (DevotionReminder.REMINDER_SOUND.equals(preference.getKey())) {
final 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, Settings.System.DEFAULT_NOTIFICATION_URI);
final String existingValue = Preferences.getString(DevotionReminder.REMINDER_SOUND);
if (existingValue != null) {
if (existingValue.length() == 0) { // "Silent"
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
} else {
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Uri.parse(existingValue));
}
} else {
// No ringtone has been selected, set to the default
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, Settings.System.DEFAULT_NOTIFICATION_URI);
}
startActivityForResult(intent, REQCODE_ringtone);
return true;
}
return super.onPreferenceTreeClick(preference);
}
void updateDisplayedValue() {
//sound
final String reminder_sound = Preferences.getString(DevotionReminder.REMINDER_SOUND);
Uri reminder_sound_uri;
if (reminder_sound == null) {
reminder_sound_uri = Settings.System.DEFAULT_NOTIFICATION_URI;
} else if (reminder_sound.length() != 0) {
reminder_sound_uri = Uri.parse(reminder_sound);
} else { // None/silent
reminder_sound_uri = null;
}
final Preference soundPreference = findPreference(DevotionReminder.REMINDER_SOUND);
String soundName;
if (reminder_sound_uri == null) { // None/silent
soundName = getString(R.string.dr_off);
} else {
final Ringtone ringtone = RingtoneManager.getRingtone(getActivity(), reminder_sound_uri);
if (ringtone != null) { // on some devices this happens!
soundName = ringtone.getTitle(getActivity());
} else {
soundName = getString(R.string.dr_default_sound);
}
}
soundPreference.setSummary(soundName);
//time
final ReminderTimePreference timePreference = (ReminderTimePreference) findPreference(DevotionReminder.REMINDER_TIME);
final String currentValue = Preferences.getString(DevotionReminder.REMINDER_TIME, null);
if (currentValue == null) {
timePreference.setSummary(R.string.dr_off);
} else {
Calendar time = GregorianCalendar.getInstance();
time.set(Calendar.HOUR_OF_DAY, Integer.parseInt(currentValue.substring(0, 2)));
time.set(Calendar.MINUTE, Integer.parseInt(currentValue.substring(2, 4)));
timePreference.setSummary(DateFormat.getTimeFormat(getActivity()).format(time.getTime()));
}
//text
final EditTextPreference textPreference = (EditTextPreference) findPreference(DevotionReminder.REMINDER_TEXT);
textPreference.setSummary(DevotionReminder.getNotificationText());
textPreference.setText(DevotionReminder.getNotificationText());
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
if (requestCode == REQCODE_ringtone && resultCode == RESULT_OK && data != null) {
final Uri value = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
if (value != null) {
Preferences.setString(DevotionReminder.REMINDER_SOUND, value.toString());
} else {
Preferences.setString(DevotionReminder.REMINDER_SOUND, "");
}
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
}
}