/*
* Copyright(c) 2017 lizhaotailang
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.marktony.espresso.ui;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.design.widget.Snackbar;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.widget.Toast;
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
import io.github.marktony.espresso.R;
import io.github.marktony.espresso.util.PushUtil;
import io.github.marktony.espresso.util.SettingsUtil;
import io.github.marktony.espresso.util.TimeFormatUtil;
/**
* Created by lizhaotailang on 2017/3/15.
*/
public class SettingsFragment extends PreferenceFragmentCompat {
private Preference prefStartTime, prefsEndTime, prefAlert;
private Preference prefNotificationInterval, prefNavigationBar;
private SharedPreferences sp;
private int startHour, startMinute;
private int endHour, endMinute;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.settings_prefs);
initPrefs();
sp = PreferenceManager.getDefaultSharedPreferences(getContext());
// Set the do-not-disturb-mode time initial range:
// from 23:00 to 6:00
startHour = sp.getInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_START_HOUR, 23);
startMinute = sp.getInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_START_MINUTE, 0);
prefStartTime.setSummary(TimeFormatUtil.formatTimeIntToString(startHour, startMinute));
endHour = sp.getInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_END_HOUR, 6);
endMinute = sp.getInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_END_MINUTE, 0);
prefsEndTime.setSummary(TimeFormatUtil.formatTimeIntToString(endHour, endMinute));
prefStartTime.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// Show the time picker dialog
TimePickerDialog dialog = TimePickerDialog.newInstance(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
// Save the hour and minute value to shared preferences
SharedPreferences.Editor editor = sp.edit();
editor.putInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_START_HOUR, hourOfDay);
editor.putInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_START_MINUTE, minute);
editor.apply();
// Update ui
prefStartTime.setSummary(TimeFormatUtil.formatTimeIntToString(hourOfDay, minute));
}
// The final params setting true means that it is 24 hours mode.
}, startHour, startMinute, true);
dialog.show(getActivity().getFragmentManager(), "StartTimePickerDialog");
return true;
}
});
prefsEndTime.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// Show the time picker dialog
TimePickerDialog dialog = TimePickerDialog.newInstance(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) {
if (startHour == endHour && startMinute == endMinute) {
Toast.makeText(getContext(), R.string.set_end_time_error, Toast.LENGTH_SHORT).show();
return;
}
// Save the hour and minute value to shared preferences
SharedPreferences.Editor editor = sp.edit();
editor.putInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_END_HOUR, hourOfDay);
editor.putInt(SettingsUtil.KEY_DO_NOT_DISTURB_MODE_END_MINUTE, minute);
editor.apply();
prefsEndTime.setSummary(TimeFormatUtil.formatTimeIntToString(hourOfDay, minute));
}
// The final params setting true means that it is 24 hours mode.
}, endHour, endMinute, true);
dialog.show(getActivity().getFragmentManager(), "StartTimePickerDialog");
return true;
}
});
prefAlert.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean value = (boolean) newValue;
if (value) {
PushUtil.startReminderService(getContext());
} else {
PushUtil.stopReminderService(getContext());
}
return true;
}
});
prefNotificationInterval.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
SharedPreferences.Editor editor = sp.edit();
editor.putString(SettingsUtil.KEY_NOTIFICATION_INTERVAL, (String)newValue);
editor.apply();
PushUtil.restartReminderService(getContext());
return true;
}
});
prefNavigationBar.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Snackbar.make(getView(), R.string.navigation_bar_restart_msg, Snackbar.LENGTH_SHORT).show();
return true;
}
});
}
/**
* Init the preferences.
*/
private void initPrefs() {
prefStartTime = findPreference("do_not_disturb_mode_start");
prefsEndTime = findPreference("do_not_disturb_mode_end");
prefAlert = findPreference("alert");
prefNotificationInterval = findPreference("notification_interval");
prefNavigationBar = findPreference("navigation_bar_tint");
}
}