package fr.ydelouis.selfoss.sync;
import android.accounts.Account;
import android.content.AbstractThreadedSyncAdapter;
import android.content.ContentProviderClient;
import android.content.Context;
import android.content.SyncResult;
import android.net.ConnectivityManager;
import android.os.Bundle;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EBean;
import org.androidannotations.annotations.SystemService;
import org.springframework.web.client.ResourceAccessException;
import org.springframework.web.client.RestClientException;
import java.io.IOException;
import fr.ydelouis.selfoss.config.model.Config;
import fr.ydelouis.selfoss.config.model.ConfigManager;
@EBean
public class SyncAdapter extends AbstractThreadedSyncAdapter {
@Bean protected ConfigManager configManager;
@SystemService protected ConnectivityManager connectivityManager;
@Bean protected Uploader uploader;
@Bean protected SourceSync sourceSync;
@Bean protected TagSync tagSync;
@Bean protected ArticleSync articleSync;
public SyncAdapter(Context context) {
super(context, true);
}
@Override
public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
Config config = configManager.get();
if (config.syncOverWifiOnly() && !isConnectedOverWifi()) {
return;
}
try {
performSync();
} catch (Exception e) {
handleException(e, syncResult);
}
}
private boolean isConnectedOverWifi() {
return connectivityManager.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
}
private void performSync() {
uploader.performSync();
tagSync.performSync();
sourceSync.performSync();
articleSync.performSync();
}
private void handleException(Exception e, SyncResult syncResult) {
if (e instanceof IOException
|| e instanceof ResourceAccessException
|| e instanceof RestClientException) {
syncResult.stats.numIoExceptions++;
} else {
e.printStackTrace();
}
}
}