package com.gdg.miagegi.can2015.service;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock;
import com.gdg.miagegi.can2015.utils.Utils;
public class RefreshService extends Service {
public static class RefreshAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, SocialFetchService.class));
context.startService(new Intent(context, DataFetchService.class));
}
}
public static final String SIXTY_MINUTES = "5000";
private AlarmManager alarmManager;
// private final OnSharedPreferenceChangeListener listener = new OnSharedPreferenceChangeListener() {
// @Override
// public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
// if (Utils.REFRESH_INTERVAL.equals(key)) {
// restartTimer(false);
// }
// }
//};
private PendingIntent timerIntent;
@Override
public IBinder onBind(Intent intent) {
onRebind(intent);
return null;
}
@Override
public void onCreate() {
super.onCreate();
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
// Utils.registerOnPrefChangeListener(listener);
restartTimer(true);
}
@Override
public void onDestroy() {
if (timerIntent != null) {
alarmManager.cancel(timerIntent);
}
//Utils.unregisterOnPrefChangeListener(listener);
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
return true; // we want to use rebind
}
private void restartTimer(boolean created) {
if (timerIntent == null) {
timerIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, RefreshAlarmReceiver.class), 0);
} else {
alarmManager.cancel(timerIntent);
}
int time = 5000;
try {
time = Math.max(60000, Integer.parseInt(Utils.getString(Utils.REFRESH_INTERVAL, SIXTY_MINUTES)));
} catch (final Exception ignored) {
}
long initialRefreshTime = SystemClock.elapsedRealtime() + 10000;
if (created) {
final long lastRefresh = Utils.getLong(Utils.LAST_SCHEDULED_REFRESH, 0);
if (lastRefresh > 0) {
// this indicates a service restart by the system
initialRefreshTime = Math.max(SystemClock.elapsedRealtime() + 10000, lastRefresh + time);
}
}
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, initialRefreshTime, time, timerIntent);
}
}