package ch.racic.android.linuxtag;
import java.util.Date;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.util.Log;
public class Preferences extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
private SharedPreferences mPrefs;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
addPreferencesFromResource(R.xml.preferences);
PreferenceScreen preferenceScreen = getPreferenceScreen();
preferenceScreen.getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// what to do if some values changed?
//TODO implement the hooks with autostart and agenda reminders
if (key.equals("refreshrate")) {
int updateIntervall = Integer.parseInt(sharedPreferences.getString("refreshrate", ""+0));
if(updateIntervall != 0) {
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, UpdateShedule.class);
//Time that the alarm should trigger
Date triggerAt = new Date();
if(triggerAt.getHours() < 6) {
//It is before 6 in the morning
// Schedule next update to 6
triggerAt.setHours(6);
} else if(triggerAt.getHours() > 19) {
//It is after 7 in the evening
// Schedule next update to 6 on next morning
triggerAt.setDate(triggerAt.getDate()+1); //TODO works in this case but wont work if actual day is last of the month
triggerAt.setHours(6);
} else {
triggerAt.setHours(triggerAt.getHours()+updateIntervall);
}
PendingIntent pendingIntent = PendingIntent.getService(
this,
0,
intent,
android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
Log.i("LinuxTagPreferenceChanges", "Setting next update at "+ new java.text.SimpleDateFormat("HH:mm").format(triggerAt));
am.set(AlarmManager.RTC_WAKEUP, triggerAt.getTime(), pendingIntent);
}
} else if(key.equals("notifyNextSchedule") || key.equals("notifyNextScheduleMinutesBefore")) {
final Context ctx = this.getApplicationContext();
new Thread() {
@Override public void run() {
ctx.startService(new Intent(ctx, AlarmService.class));
}
}.start();
}
}
}
|