SampleSyncAdapter sample code.
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.example.android.samplesync.syncadapter;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.accounts.AuthenticatorException;
|
||||
import android.accounts.OperationCanceledException;
|
||||
import android.content.AbstractThreadedSyncAdapter;
|
||||
import android.content.ContentProviderClient;
|
||||
import android.content.Context;
|
||||
import android.content.SyncResult;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.example.android.samplesync.Constants;
|
||||
import com.example.android.samplesync.client.NetworkUtilities;
|
||||
import com.example.android.samplesync.client.User;
|
||||
import com.example.android.samplesync.client.User.Status;
|
||||
import com.example.android.samplesync.platform.ContactManager;
|
||||
|
||||
import org.apache.http.ParseException;
|
||||
import org.apache.http.auth.AuthenticationException;
|
||||
import org.json.JSONException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* SyncAdapter implementation for syncing sample SyncAdapter contacts to the
|
||||
* platform ContactOperations provider.
|
||||
*/
|
||||
public class SyncAdapter extends AbstractThreadedSyncAdapter {
|
||||
private static final String TAG = "SyncAdapter";
|
||||
|
||||
private final AccountManager mAccountManager;
|
||||
private final Context mContext;
|
||||
|
||||
private Date mLastUpdated;
|
||||
|
||||
public SyncAdapter(Context context, boolean autoInitialize) {
|
||||
super(context, autoInitialize);
|
||||
mContext = context;
|
||||
mAccountManager = AccountManager.get(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPerformSync(Account account, Bundle extras, String authority,
|
||||
ContentProviderClient provider, SyncResult syncResult) {
|
||||
List<User> users;
|
||||
List<Status> statuses;
|
||||
String authtoken = null;
|
||||
try {
|
||||
// use the account manager to request the credentials
|
||||
authtoken =
|
||||
mAccountManager.blockingGetAuthToken(account,
|
||||
Constants.AUTHTOKEN_TYPE, true /* notifyAuthFailure */);
|
||||
// fetch updates from the sample service over the cloud
|
||||
users =
|
||||
NetworkUtilities.fetchFriendUpdates(account, authtoken,
|
||||
mLastUpdated);
|
||||
// update the last synced date.
|
||||
mLastUpdated = new Date();
|
||||
// update platform contacts.
|
||||
Log.d(TAG, "Calling contactManager's sync contacts");
|
||||
ContactManager.syncContacts(mContext, account.name, users);
|
||||
// fetch and update status messages for all the synced users.
|
||||
statuses = NetworkUtilities.fetchFriendStatuses(account, authtoken);
|
||||
ContactManager.insertStatuses(mContext, account.name, statuses);
|
||||
} catch (final AuthenticatorException e) {
|
||||
syncResult.stats.numParseExceptions++;
|
||||
Log.e(TAG, "AuthenticatorException", e);
|
||||
} catch (final OperationCanceledException e) {
|
||||
Log.e(TAG, "OperationCanceledExcetpion", e);
|
||||
} catch (final IOException e) {
|
||||
Log.e(TAG, "IOException", e);
|
||||
syncResult.stats.numIoExceptions++;
|
||||
} catch (final AuthenticationException e) {
|
||||
mAccountManager.invalidateAuthToken(Constants.ACCOUNT_TYPE,
|
||||
authtoken);
|
||||
syncResult.stats.numAuthExceptions++;
|
||||
Log.e(TAG, "AuthenticationException", e);
|
||||
} catch (final ParseException e) {
|
||||
syncResult.stats.numParseExceptions++;
|
||||
Log.e(TAG, "ParseException", e);
|
||||
} catch (final JSONException e) {
|
||||
syncResult.stats.numParseExceptions++;
|
||||
Log.e(TAG, "JSONException", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||||
* use this file except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.example.android.samplesync.syncadapter;
|
||||
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
|
||||
/**
|
||||
* Service to handle Account sync. This is invoked with an intent with action
|
||||
* ACTION_AUTHENTICATOR_INTENT. It instantiates the syncadapter and returns its
|
||||
* IBinder.
|
||||
*/
|
||||
public class SyncService extends Service {
|
||||
private static final Object sSyncAdapterLock = new Object();
|
||||
private static SyncAdapter sSyncAdapter = null;
|
||||
|
||||
/*
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public void onCreate() {
|
||||
synchronized (sSyncAdapterLock) {
|
||||
if (sSyncAdapter == null) {
|
||||
sSyncAdapter = new SyncAdapter(getApplicationContext(), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return sSyncAdapter.getSyncAdapterBinder();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user