Skip to content

Commit

Permalink
Issue rtyley#100: Added logic to support time-of-day periodic synchro…
Browse files Browse the repository at this point in the history
…nization with git repositories.
  • Loading branch information
jwir3 committed Mar 4, 2014
1 parent 6ecb4f6 commit 0fd81f4
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 11 deletions.
3 changes: 2 additions & 1 deletion agit/res/layout/settings_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
<PreferenceCategory
android:title="@string/settings_category_sync">
<ListPreference
android:key="setting_sync_frequency"
android:id="@+id/setting_sync_frequency_listPref"
android:key="@string/setting_sync_frequency_key"
android:title="@string/setting_title_sync_frequency"
android:summary="@string/setting_instruction_sync_frequency"
android:entries="@array/setting_sync_choices"
Expand Down
12 changes: 10 additions & 2 deletions agit/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,17 @@
<string name="settings_category_sync">Sync Settings</string>
<string name="setting_title_sync_frequency">Sync Frequency</string>
<string name="setting_instruction_sync_frequency">Tap to set how often repository synchronization will occur</string>
<string name="setting_sync_frequency_key">setting_sync_frequency</string>

<!-- This is a "magic number" just set so as not to confuse with other potential values -->
<string name="setting_sync_frequency_daily">72083</string>
<string name="setting_sync_frequency_daily_title">Sync daily at</string>
<string name="setting_sync_frequency_daily_hour_key">setting_sync_frequency_daily_hour</string>
<string name="setting_sync_frequency_daily_min_key">setting_sync_frequency_daily_min</string>

<string-array name="setting_sync_choices">
<item>Manually</item>
<!-- <item>Schedule daily at&#8230;</item> -->
<item>Schedule daily at&#8230;</item>
<item>Every 15 minutes</item>
<item>Every hour</item>
<item>Every 3 hours</item>
Expand All @@ -131,7 +139,7 @@
</string-array>
<string-array name="setting_sync_choices_values">
<item>0</item>
<!-- <item>1</item> -->
<item>@string/setting_sync_frequency_daily</item>
<item>15</item>
<item>60</item>
<item>180</item>
Expand Down
43 changes: 43 additions & 0 deletions agit/src/main/java/com/madgag/agit/SettingsActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,56 @@
package com.madgag.agit;

import static com.madgag.agit.sync.AccountAuthenticatorService.addAccount;
import android.app.TimePickerDialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.TimePicker;

public class SettingsActivity extends PreferenceActivity {
public void onCreate(Bundle aSavedInstanceState) {
super.onCreate(aSavedInstanceState);
addPreferencesFromResource(R.layout.settings_activity);
ListPreference syncFreq = (ListPreference) findPreference(getString(R.string.setting_sync_frequency_key));
syncFreq.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
String value = (String)o;
if (value.equals(getString(R.string.setting_sync_frequency_daily))) {
// Check if our previous value was the same thing, so we can set it in the time
// picker dialog.
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SettingsActivity.this);
int hourDefault = 12;
int minDefault = 0;
String prevVal = prefs.getString(getString(R.string.setting_sync_frequency_key), "-1");
if (prevVal.equals(o)) {
hourDefault = prefs.getInt(getString(R.string.setting_sync_frequency_daily_hour_key), hourDefault);
minDefault = prefs.getInt(getString(R.string.setting_sync_frequency_daily_min_key), minDefault);
}

TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hourOfDay, int minOfHour) {
SharedPreferences.Editor edtr = prefs.edit();
edtr.putInt(getString(R.string.setting_sync_frequency_daily_hour_key), hourOfDay);
edtr.putInt(getString(R.string.setting_sync_frequency_daily_min_key), minOfHour);
edtr.commit();
}
};

// Display new dialog with the available options.
TimePickerDialog timePicker = new TimePickerDialog(SettingsActivity.this, timeListener, hourDefault, minDefault, false);
timePicker.setTitle(getString(R.string.setting_sync_frequency_daily_title));
timePicker.show();
}

return true;
}
});
}

@Override
Expand All @@ -40,5 +82,6 @@ public void onDestroy() {
}
}

private ListPreference mSyncPreferences;
private static final String TAG = "SettingsActivity";
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,14 @@
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.util.Log;

import com.madgag.agit.R;

/**
* Authenticator service that returns a subclass of AbstractAccountAuthenticator in onBind()
*/
Expand Down Expand Up @@ -75,22 +78,38 @@ public static Bundle addAccount(Context ctx) {
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
int syncFreq = Integer.parseInt(prefs.getString("setting_sync_frequency", "15"));

Resources res = ctx.getResources();
int dailySentinel = Integer.parseInt(res.getString(R.string.setting_sync_frequency_daily));
if (syncFreq == dailySentinel) {
int hourOfDay = prefs.getInt(res.getString(R.string.setting_sync_frequency_daily_hour_key), -1);
int minOfHour = prefs.getInt(res.getString(R.string.setting_sync_frequency_daily_min_key), -1);

Log.d(TAG, "Configuring sync to run at " + hourOfDay + "h" + minOfHour);
configureSyncFor(account, syncFreq, hourOfDay, minOfHour);
}

configureSyncFor(account, syncFreq);
return result;
}

private static void configureSyncFor(Account account, int syncFreq) {
Log.d(TAG, "Trying to configure account for sync at rate of " + syncFreq + " minutes");
private static void configureSyncFor(Account aAccount, int aSyncFreq) {
configureSyncFor(aAccount, aSyncFreq, -1, -1);
}

private static void configureSyncFor(Account aAccount, int aSyncFreq, int aHourOfDay, int aMinOfHour) {

if (syncFreq < 1) {
setIsSyncable(account, AGIT_PROVIDER_AUTHORITY, 0);
ContentResolver.removePeriodicSync(account, AGIT_PROVIDER_AUTHORITY, new Bundle());
if (aSyncFreq < 1) {
setIsSyncable(aAccount, AGIT_PROVIDER_AUTHORITY, 0);
ContentResolver.removePeriodicSync(aAccount, AGIT_PROVIDER_AUTHORITY, new Bundle());
return;
}

setIsSyncable(account, AGIT_PROVIDER_AUTHORITY, 1);
setSyncAutomatically(account, AGIT_PROVIDER_AUTHORITY, true);
ContentResolver.addPeriodicSync(account, AGIT_PROVIDER_AUTHORITY, new Bundle(), (long) (syncFreq * 60));

Log.d(TAG, "Trying to configure account for sync at rate of " + aSyncFreq + " minutes");
setIsSyncable(aAccount, AGIT_PROVIDER_AUTHORITY, 1);
setSyncAutomatically(aAccount, AGIT_PROVIDER_AUTHORITY, true);
ContentResolver.addPeriodicSync(aAccount, AGIT_PROVIDER_AUTHORITY, new Bundle(), (long) (aSyncFreq * 60));
}

private static class AccountAuthenticatorImpl extends AbstractAccountAuthenticator {
Expand Down

0 comments on commit 0fd81f4

Please sign in to comment.