/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at
* src/com/vodafone360/people/VODAFONE.LICENSE.txt or
* http://github.com/360/360-Engine-for-Android
* See the License for the specific language governing permissions and
* limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each file and
* include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
* If applicable, add the following below this CDDL HEADER, with the fields
* enclosed by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
* Copyright 2010 Vodafone Sales & Services Ltd. All rights reserved.
* Use is subject to license terms.
*/
package com.vodafone360.people.tests.engine.contactsync;
import com.vodafone360.people.utils.CursorUtils;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.provider.ContactsContract;
import android.accounts.AccountManager;
import android.accounts.OnAccountsUpdateListener;
import android.accounts.Account;
public class NativeContactsApiTestHelper2 extends NativeContactsApiTestHelper {
private static final String PEOPLE_ACCOUNT_TYPE = "com.vodafone360.people.android.account";
private AccountsObserverThread mObserverThread = new AccountsObserverThread();
class AccountsObserverThread extends Thread {
private AccountsObserver mAccountsObserver = new AccountsObserver();
private Handler mHandler = new Handler();
@Override
public void run() {
super.run();
}
public synchronized void startObserving(IPeopleAccountChangeObserver observer) {
AccountManager accountMan = AccountManager.get(mContext);
accountMan.addOnAccountsUpdatedListener(mAccountsObserver, mHandler, false);
}
public synchronized void stopObserving() {
AccountManager accountMan = AccountManager.get(mContext);
accountMan.removeOnAccountsUpdatedListener(mAccountsObserver);
}
}
class AccountsObserver implements OnAccountsUpdateListener {
private IPeopleAccountChangeObserver mExternalObserver;
private int mNumPeopleAccounts = 0;
public void setExternalObserver(IPeopleAccountChangeObserver observer) {
mExternalObserver = observer;
}
@Override
public void onAccountsUpdated(Account[] accounts) {
int numPeopleAccounts = 0;
if(accounts != null && accounts.length > 0) {
final int numAccounts = accounts.length;
for(int i = 0; i < numAccounts; i++) {
final Account account = accounts[i];
if(account != null && account.type.equals(PEOPLE_ACCOUNT_TYPE)) {
numPeopleAccounts++;
}
}
} else {
numPeopleAccounts = 0;
}
if(mExternalObserver == null) {
return;
}
if(numPeopleAccounts != mNumPeopleAccounts) {
mExternalObserver.onPeopleAccountsChanged(numPeopleAccounts);
mNumPeopleAccounts = numPeopleAccounts;
}
}
}
@Override
public void populateNabContacts() {
// TODO Auto-generated method stub
}
@Override
public void wipeNab() {
// Removing accounts removes contacts anyway
wipeNabAccounts();
}
@Override
public void wipeNabAccounts() {
// TODO Auto-generated method stub
AccountManager accountMan = AccountManager.get(mContext);
android.accounts.Account[] accounts =
accountMan.getAccountsByType(PEOPLE_ACCOUNT_TYPE);
if(accounts != null && accounts.length > 0) {
int numAccounts = accounts.length;
while(numAccounts-- > 0) {
accountMan.removeAccount(accounts[numAccounts], null, null);
threadWait(5000);
}
}
}
@Override
public void wipeNabContacts() {
try {
mCr.delete(ContactsContract.Data.CONTENT_URI, null, null);
mCr.delete(ContactsContract.Contacts.CONTENT_URI, null, null);
} catch (IllegalArgumentException e) {
Cursor c = mCr.query(ContactsContract.Data.CONTENT_URI, null, null, null, null);
while (c.moveToNext()) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, c.getInt(0));
mCr.delete(uri, null, null);
}
c.close();
}
}
@Override
public void startObservingAccounts(IPeopleAccountChangeObserver observer) {
mObserverThread.startObserving(observer);
}
}