ComicReader/ComicReader/src/com/blogspot/applications4android/comicreader/ActivitySettingsPage.java

122 lines
4.3 KiB
Java
Executable File

package com.blogspot.applications4android.comicreader;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;
/**
* Main class for comic-reader settings
*/
public class ActivitySettingsPage extends PreferenceActivity {
/** for logging purposes only */
private static final String TAG = "ComicReaderSettings";
/** milliseconds in a day */
public static final long ONE_DAY = 24 * 60 * 60 * 1000;
/** key storing the last time synced */
public static final String LAST_SYNC_PREF = "lastTimeSyncedPref";
/** key storing the last time synced as a string */
public static final String LAST_SYNC_STRING_PREF = "lastTimeSyncedStringPref";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
protected void onPause() {
launchRepeatedCaching(this, false);
super.onPause();
}
/**
* Sets up the default values for background caching
* @param act activity calling this function
*/
public static void setupDefaults(Activity act) {
Log.d(TAG, "Setting up the default values for ComicReader...");
Context ctx = act.getApplicationContext();
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctx);
SharedPreferences.Editor e = sp.edit();
e.putBoolean("backgroundCacheEnabledPref", true);
e.putString("backgroundCacheFreqPref", "4");
e.putString("numStripsCachePref", "3");
e.commit();
}
/**
* Start/setup the caching service
* @param ctx context used
* @param force forcefully setup the alarm even if background caching is currently disabled
* This will NOT cache the strips, but'll only setup the alarm
*/
public static void launchRepeatedCaching(Context ctx, boolean force) {
Intent i = new Intent(ctx, BackgroundCacheReciever.class);
PendingIntent pi = PendingIntent.getBroadcast(ctx, 0, i, 0);
AlarmManager mgr = (AlarmManager) ctx.getSystemService(ALARM_SERVICE);
Log.d(TAG, "Cancelling the previous alarm...");
mgr.cancel(pi);
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctx);
if(!sp.getBoolean("backgroundCacheEnabledPref", false) && !force) {
Log.d(TAG, "Caching disabled. Returning back...");
return;
}
int hour = Integer.parseInt(sp.getString("backgroundCacheStartTimePref", "6"));
int cacheFreq = Integer.parseInt(sp.getString("backgroundCacheFreqPref", "1"));
long interval = ONE_DAY / cacheFreq;
Calendar cal = Calendar.getInstance();
long now = System.currentTimeMillis();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
long sixAm = cal.getTimeInMillis();
long gap = now - sixAm;
if(gap < 0) {
cal.add(Calendar.DAY_OF_MONTH, -1);
sixAm = cal.getTimeInMillis();
gap = now - sixAm;
}
long next = ((gap / interval) + 1) * interval;
next += sixAm;
long diff = next - now;
Log.d(TAG, "Alarm for interval="+interval+" firstTime="+next+" now="+now+" diff="+diff);
mgr.setRepeating(AlarmManager.RTC_WAKEUP, next, interval, pi);
return;
}
/**
* Checks when was the last time sync was performed
* @param ctx context
* @return true if there needs to be a sync to be performed now
*/
public static boolean checkForLastSynced(Context ctx) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(ctx);
long last = sp.getLong(LAST_SYNC_PREF, 0);
long now = System.currentTimeMillis();
long diff = now - last;
long freq = Long.parseLong(sp.getString("backgroundCacheFreqPref", "1"));
freq = ActivitySettingsPage.ONE_DAY / freq;
if(diff > freq) {
Log.d(TAG, "lastsynced="+last+" now="+now+" diff="+diff+" freq="+freq+". So syncing now...");
return true;
}
else {
Log.d(TAG, "lastsynced="+last+" now="+now+" diff="+diff+" freq="+freq+". So NOT syncing now...");
return false;
}
}
}