Backup.java :  » App » gasmixer » divestoclimb » scuba » equipment » Android Open Source

Android Open Source » App » gasmixer 
gasmixer » divestoclimb » scuba » equipment » Backup.java
package divestoclimb.scuba.equipment;

import java.util.Calendar;

import divestoclimb.scuba.equipment.storage.XmlMapper;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class Backup extends BroadcastReceiver {

  private static final int WEEKLY_ALARM_CODE = 2, RETRY_ALARM_CODE = 3;
  
  public static final String BROADCAST_ACTION = "divestoclimb.action.PERFORM_BACKUP";
  
  private static final String TAG = "divestoclimb.scuba.equipment.Backup";

  public static void scheduleNext(Context context) {
    Intent i = new Intent();
    i.setAction(BROADCAST_ACTION);
    PendingIntent pi = PendingIntent.getBroadcast(context, WEEKLY_ALARM_CODE, i, 0);

    // Compute the time for midnight on the upcoming Sunday
    Calendar cal = Calendar.getInstance();
    cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    cal.set(Calendar.DAY_OF_WEEK, 0);
    cal.add(Calendar.WEEK_OF_YEAR, 1);

    AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    am.set(AlarmManager.RTC, cal.getTimeInMillis(), pi);
  }
  
  private static void scheduleRetry(Context context) {
    Intent i = new Intent();
    i.setAction(BROADCAST_ACTION);
    PendingIntent pi = PendingIntent.getBroadcast(context, RETRY_ALARM_CODE, i, 0);

    // Compute the time for midnight tomorrow
    Calendar cal = Calendar.getInstance();
    cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
    cal.add(Calendar.DAY_OF_YEAR, 1);

    AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    am.set(AlarmManager.RTC, cal.getTimeInMillis(), pi);
  }

  @Override
  public void onReceive(Context context, Intent intent) {
    try {
      XmlMapper xmlMapper = new XmlMapper(context);
      xmlMapper.writeCylinders(xmlMapper.getDefaultWriter());
    } catch(Exception e) {
      Log.w(TAG, "Backup failed: " + e.toString() + ". Will retry tomorrow.");
      scheduleRetry(context);
    } finally {
      scheduleNext(context);
    }
  }
  
  public static class Scheduler extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
      Backup.scheduleNext(context);
    }

  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.