/*
* Copyright 2010 Arthur Zaczek <arthur@dasz.at>, dasz.at OG; All rights reserved.
* Copyright 2010 David Schmitt <david@dasz.at>, dasz.at OG; All rights reserved.
*
* This file is part of Kolab Sync for Android.
* Kolab Sync for Android is free software: you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version.
* Kolab Sync for Android is distributed in the hope that it will be
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with Kolab Sync for Android.
* If not, see <http://www.gnu.org/licenses/>.
*/
package at.dasz.KolabDroid.Sync;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.SystemClock;
import android.util.Log;
/**
* Part of the infrastructure to keep the background worker alive.
*/
public class SyncServiceManager extends BroadcastReceiver
{
public static final String TAG = "SyncServiceManager";
private static final int INITIAL_DELAY = 1000 * 60 * 10; // 10 minutes
private static final int SLEEP_TIME = 1000 * 60 * 60 * 3; // 3 hours
private static final String CRON_TRIGGER = "at.dasz.KolabDroid.Sync.CRON_TRIGGER";
@Override
public void onReceive(Context context, Intent intent)
{
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()))
{
initAlarmManager(context);
}
else if (CRON_TRIGGER.equals(intent.getAction()))
{
Log.i(TAG, "Starting synchronization from CRON");
SyncService.startSync(context);
}
else
{
Log.e(TAG, "Received unexpected intent " + intent.toString());
}
}
/**
* Initializes the Alarm Manager
* This Method can be called more than once.
* An existing repeating Intent will be replaced.
* */
public static void initAlarmManager(Context context)
{
AlarmManager mgr = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(CRON_TRIGGER, null, context,
SyncServiceManager.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
// From Android Documentation: If there is already an alarm scheduled for the same IntentSender, it will first be canceled.
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock
.elapsedRealtime()
+ INITIAL_DELAY, SLEEP_TIME, pi);
}
}