package com.stxnext.management.android.sync;
import java.util.List;
import android.app.IntentService;
import android.content.Intent;
import android.os.Handler;
import android.widget.Toast;
import com.google.common.base.Strings;
import com.stxnext.management.android.R;
import com.stxnext.management.android.dto.local.IntranetUser;
import com.stxnext.management.android.receivers.CommandReceiver;
import com.stxnext.management.android.storage.prefs.StoragePrefs;
import com.stxnext.management.android.storage.sqlite.dao.DAO;
public class BackgroundSyncService extends IntentService {
public static final String ACTION = "com.stxnext.management.android.sync.BackgroundSyncService.ACTION";
public static final int ACTION_SYNC = 2;
StoragePrefs prefs;
Handler toastHandler;
//
// public BackgroundSyncService(String name) {
// super(name);
// prefs = StoragePrefs.getInstance(this);
// toastHandler = new Handler();
// }
public BackgroundSyncService() {
super(BackgroundSyncService.class.getName());
prefs = StoragePrefs.getInstance(this);
toastHandler = new Handler();
}
private void toastMessage(final String message) {
toastHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onHandleIntent(Intent intent) {
int action = intent.getIntExtra(ACTION, 0);
// nope. This is not Yoda speaking. This is the easy way to avoid null
// exceptions if action would be null (it could be)
if (action != ACTION_SYNC)
return;
setFinished(false);
List<IntranetUser> users = DAO.getInstance().getIntranetUser().fetchFiltered();
ContactSyncManager manager = new ContactSyncManager(this);
for (IntranetUser user : users) {
if (!Strings.isNullOrEmpty(user.getPhone())) {
List<ProviderPhone> providerPhones = manager.query(user.getPhone(), user.getName());
if(providerPhones.size()<=0){
ProviderPhone providerPhone = new ProviderPhone();
providerPhone.setDisplayName(user.getName());
providerPhone.setNumberToUpdate(user.getPhone());
providerPhones.add(providerPhone);
}
else{
for(ProviderPhone existing : providerPhones){
existing.setNumberToUpdate(user.getPhone());
}
}
manager.mergeContacts(providerPhones, user);
}
}
setFinished(true);
}
private void setFinished(boolean finished) {
int toastResource = finished?R.string.notification_sync_finished:R.string.notification_sync_started;
String msg = getString(toastResource);
toastMessage(msg);
prefs.setSyncing(!finished);
int event = finished ? CommandReceiver.EVENT_FINISHED_SYNC
: CommandReceiver.EVENT_STARTED_SYNC;
Intent i = new Intent(CommandReceiver.ACTION_ACTIVITY_COMMAND);
i.putExtra(CommandReceiver.EXTRA_EVENT_TYPE,
event);
this.getApplication().sendBroadcast(i);
}
}