package com.plusonelabs.calendar.prefs;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import com.plusonelabs.calendar.DateUtil;
import com.plusonelabs.calendar.EventAppWidgetProvider;
import com.plusonelabs.calendar.MainActivity;
import com.plusonelabs.calendar.R;
import org.joda.time.DateTimeZone;
import java.util.TimeZone;
public class AppearancePreferencesFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences_appearance);
}
@Override
public void onResume() {
super.onResume();
showLockTimeZone(true);
showEventEntryLayout();
showWidgetInstanceName();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
private void showEventEntryLayout() {
Preference preference = findPreference(ApplicationPreferences.PREF_EVENT_ENTRY_LAYOUT);
if (preference != null) {
preference.setSummary(ApplicationPreferences.getEventEntryLayout(getActivity()).summaryResId);
}
}
private void showLockTimeZone(boolean setAlso) {
CheckBoxPreference preference = (CheckBoxPreference) findPreference(ApplicationPreferences.PREF_LOCK_TIME_ZONE);
if (preference != null) {
boolean isChecked = setAlso ? ApplicationPreferences.isTimeZoneLocked(getActivity()) : preference.isChecked();
if (setAlso && preference.isChecked() != isChecked) {
preference.setChecked(isChecked);
}
DateTimeZone timeZone = DateTimeZone.forID(DateUtil.validatedTimeZoneId(isChecked ?
ApplicationPreferences.getLockedTimeZoneId(getActivity()) : TimeZone.getDefault().getID()));
preference.setSummary(String.format(
getText(isChecked ? R.string.lock_time_zone_on_desc : R.string.lock_time_zone_off_desc).toString(),
timeZone.getName(DateUtil.now(timeZone).getMillis()))
);
}
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
switch (preference.getKey()) {
case ApplicationPreferences.PREF_BACKGROUND_COLOR:
new BackgroundTransparencyDialog().show(getFragmentManager(),
ApplicationPreferences.PREF_BACKGROUND_COLOR);
break;
case ApplicationPreferences.PREF_PAST_EVENTS_BACKGROUND_COLOR:
new BackgroundTransparencyDialog().show(getFragmentManager(),
ApplicationPreferences.PREF_PAST_EVENTS_BACKGROUND_COLOR);
break;
case ApplicationPreferences.PREF_LOCK_TIME_ZONE:
if (preference instanceof CheckBoxPreference) {
CheckBoxPreference checkPref = (CheckBoxPreference) preference;
ApplicationPreferences.setLockedTimeZoneId(getActivity(),
checkPref.isChecked() ? TimeZone.getDefault().getID() : "");
showLockTimeZone(false);
}
break;
default:
break;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
@Override
public void onPause() {
super.onPause();
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
EventAppWidgetProvider.updateEventList(getActivity());
EventAppWidgetProvider.updateAllWidgets(getActivity());
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
switch (key) {
case ApplicationPreferences.PREF_EVENT_ENTRY_LAYOUT:
showEventEntryLayout();
break;
case ApplicationPreferences.PREF_WIDGET_INSTANCE_NAME:
getActivity().finish();
startActivity(MainActivity.intentToConfigure(getActivity(), ApplicationPreferences
.getWidgetId(getActivity())));
break;
default:
break;
}
}
private void showWidgetInstanceName() {
Preference preference = findPreference(ApplicationPreferences.PREF_WIDGET_INSTANCE_NAME);
if (preference != null) {
preference.setSummary(ApplicationPreferences.getWidgetInstanceName(getActivity()));
}
}
}