package com.darkrockstudios.apps.tminus.experiences.settings.fragments; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; import com.darkrockstudios.apps.tminus.R; import com.darkrockstudios.apps.tminus.UpdateAlarmsService; import com.darkrockstudios.apps.tminus.database.DatabaseHelper; import com.darkrockstudios.apps.tminus.launchlibrary.Launch; import com.j256.ormlite.android.apptools.OpenHelperManager; import com.j256.ormlite.dao.Dao; import java.sql.SQLException; /** * Created by Adam on 7/13/13. * Dark Rock Studios * darkrockstudios.com */ public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { private boolean m_dirty; @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); addPreferencesFromResource( R.xml.general_preferences ); } @Override public void onAttach( Activity activity ) { super.onAttach( activity ); final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( activity ); preferences.registerOnSharedPreferenceChangeListener( this ); } @Override public void onDetach() { super.onDetach(); Activity activity = getActivity(); final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences( activity ); preferences.unregisterOnSharedPreferenceChangeListener( this ); if( m_dirty ) { ResetAlarms resetAlarms = new ResetAlarms( activity ); resetAlarms.start(); m_dirty = false; } } @Override public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key ) { m_dirty = true; } private class ResetAlarms extends Thread { private final Context m_context; public ResetAlarms( Context context ) { m_context = context; } @Override public void run() { cancelAllAlarms(); setNewAlarms(); } private void cancelAllAlarms() { UpdateAlarmsService.cancelAutoUpdateAlarm( m_context ); final DatabaseHelper databaseHelper = OpenHelperManager.getHelper( m_context, DatabaseHelper.class ); if( databaseHelper != null ) { try { final Dao<Launch, Integer> launchDao = databaseHelper.getDao( Launch.class ); for( final Launch launch : launchDao ) { UpdateAlarmsService.cancelAlarmsForLaunch( launch, m_context ); } } catch( SQLException e ) { e.printStackTrace(); } OpenHelperManager.releaseHelper(); } } private void setNewAlarms() { Intent intent = new Intent( m_context, UpdateAlarmsService.class ); m_context.startService( intent ); } } }