X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/d8d535a0a219bc0dfe62daafab45de1f61de5f94..cf2c2eedc56dfd3b4b116b82a907ce72c59b942b:/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java diff --git a/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java b/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java new file mode 100644 index 00000000..8ddc4149 --- /dev/null +++ b/src/eu/alefzero/owncloud/syncadapter/ContactSyncAdapter.java @@ -0,0 +1,98 @@ +package eu.alefzero.owncloud.syncadapter; + +import java.io.FileInputStream; +import java.io.IOException; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.ByteArrayEntity; + +import eu.alefzero.owncloud.authenticator.AccountAuthenticator; +import eu.alefzero.owncloud.authenticator.AuthUtils; +import eu.alefzero.owncloud.db.ProviderMeta; +import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; +import android.accounts.Account; +import android.accounts.AccountManager; +import android.accounts.AuthenticatorException; +import android.accounts.OperationCanceledException; +import android.content.ContentProviderClient; +import android.content.Context; +import android.content.SyncResult; +import android.content.res.AssetFileDescriptor; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.provider.ContactsContract; +import android.util.Log; + +public class ContactSyncAdapter extends AbstractOwnCloudSyncAdapter { + private String mAddrBookUri; + + public ContactSyncAdapter(Context context, boolean autoInitialize) { + super(context, autoInitialize); + mAddrBookUri = null; + } + + @Override + public void onPerformSync(Account account, Bundle extras, String authority, + ContentProviderClient provider, SyncResult syncResult) { + setAccount(account); + setContentProvider(provider); + Cursor c = getLocalContacts(false); + if (c.moveToFirst()) { + do { + String lookup = c.getString(c.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); + String a = getAddressBookUri(); + String uri = a + lookup + ".vcf"; + FileInputStream f; + try { + f = getContactVcard(lookup); + HttpPut query = new HttpPut(uri); + byte[] b = new byte[f.available()]; + f.read(b); + query.setEntity(new ByteArrayEntity(b)); + HttpResponse response = fireRawRequest(query); + } catch (IOException e) { + e.printStackTrace(); + return; + } catch (OperationCanceledException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (AuthenticatorException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + }while (c.moveToNext()); + //} while (c.moveToNext()); + } + + } + + private String getAddressBookUri() { + if (mAddrBookUri != null) return mAddrBookUri; + + AccountManager am = getAccountManager(); + String uri = am.getUserData(getAccount(), AccountAuthenticator.KEY_OC_URL) + .replace(AuthUtils.WEBDAV_PATH_2_0, AuthUtils.CARDDAV_PATH_2_0); + uri += "/addressbooks/" + getAccount().name.substring(0, getAccount().name.lastIndexOf('@')) + + "/default/"; + mAddrBookUri = uri; + return uri; + } + + private FileInputStream getContactVcard(String lookupKey) throws IOException { + Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_VCARD_URI, lookupKey); + AssetFileDescriptor fd = getContext().getContentResolver().openAssetFileDescriptor(uri, "r"); + return fd.createInputStream(); + } + + private Cursor getLocalContacts(boolean include_hidden_contacts) { + return getContext().getContentResolver().query( + ContactsContract.Contacts.CONTENT_URI, + new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.LOOKUP_KEY}, + ContactsContract.Contacts.IN_VISIBLE_GROUP + " = ?", + new String[]{ (include_hidden_contacts?"0":"1")}, + ContactsContract.Contacts._ID + " DESC"); + } + +}