Hi all, I am wandering if there is any examples on the account and sync plugin in Android Open Source project. For example, if there are any code on Facebook plugin in contacts and sync. If not, can any one help me give the codes in Eclair contacts and email application related to the topic. Thanks James
2009/12/3 Jerry Brady <jerry.br...@gmail.com> > The droids run 2.0, but the published Eclair source is 2.1 and that > was the fastest way to get an emulator that included the "Accounts & > Sync" settings that isn't in the 2.0 emulator. AFAIK you'll need that > in order to affect any testing that will work on shipping 2.0 devices. > > I don't have time to look into this any further at the moment as I'm > currently looking into the *next* issue which is the way in which the > contacts application handles contacts from account sources other than > the built-in Google and Exchange sources... > > Cheers, > Jerry > > On Dec 1, 8:02 pm, Dan Dumont <ddum...@gmail.com> wrote: > > Drat... I don't want to build 2.1... I thought the droids ran 2.0? > > > > anyway... I updated the project. Please let me know if it works :) > I > > get an error still in the 2.0 emulator... > > 12-01 19:54:36.454: ERROR/AndroidRuntime(93): > > android.content.ActivityNotFoundException: No Activity found to handle > > Intent { act=android.settings.SYNC_SETTINGS (has extras) } > > > > > > > > On Tue, Dec 1, 2009 at 4:18 PM, Dan Dumont <ddum...@gmail.com> wrote: > > > I'll update my project asap! Thanks for looking into this!! > > > > > when we create the binder, do we need to verify that the "account" > variable > > > is for us? IE... will the intent be triggered for all providers, and > we > > > must figure out if the info is our or not? > > > > > On Mon, Nov 30, 2009 at 2:35 PM, Jerry Brady <jerry.br...@gmail.com > >wrote: > > > > >> Guys following this issue, > > > > >> I found the ultimate cause of the error and found a workaround that > > >> will allow you to work on a Droid. > > > > >> One thing that's helpful is building yourself an Eclair 2.1 SDK so you > > >> can use an emulator (2.1) that includes the "Accounts & Sync" settings > > >> option we need in working with accounts: > > > > >> ------------------------------------- > > >> From the the root of the android source tree: > > >> . build/envsetup.sh > > >> lunch sdk-eng > > >> make sdk (may want to use -j<something> based on your number of cores) > > > > >> find the SDK in out/host/linux/sdk/... > > > > >> From the SDK, copy platforms/android-#.# into your SDK/platform on > > >> your destination pc. > > > > >> If that's running windows, copy platforms/android-2.0/tools/* into > > >> your newly created platforms tools folder. > > > > >> Use the AVD Manager to create an AVD for this new platform. > > >> ----------------------------------------------- > > > > >> The crash is caused by an undocumented assumption in the Android code > > >> that handles accounts and sync. They are *very* closely related. It > > >> turns out that the "Accounts and Sync" settings plugin after getting > > >> the accounts on the system, uses the content service to scan for > > >> services on the system that implement the intent > > >> "android.content.SyncAdapter". > > > > >> Since our code doesn't implement this, the search came up empty handed > > >> and since the code assumed this would never happen, BAM, null pointer > > >> exception and crash. > > > > >> It turns out that the solution is to have your application (or > > >> something on the system) implement a service that catches the intent > > >> "android.content.SyncAdapter" that returns an IBinder to an object > > >> that extends AbstractThreadedSyncAdapter (just like we did for our > > >> AbstractAccountAuthenticator). > > > > >> I took examples from the source code for the Email application in > > >> android, but here are the relevant bits to setup an empty sync adapter > > >> for contacts that does nothing but gets you past the exception: > > > > >> AndroidManifest.xml: > > > > >> > --------------------------------------------------------------------------- > - > > >> <!--Required stanza to register the ContactsSyncAdapterService with > > >> SyncManager --> > > >> <service > > >> android:name="com.YOURDOMAIN.YOURAPP.ContactsSyncAdapterService" > > >> android:exported="true"> > > >> <intent-filter> > > >> <action android:name="android.content.SyncAdapter" /> > > >> </intent-filter> > > >> <meta-data android:name="android.content.SyncAdapter" > > >> android:resource="@xml/syncadapter_contacts" /> > > >> </service> > > > > >> xml/syncadapter_contacts - : > > > > >> > --------------------------------------------------------------------------- > ----- > > >> <sync-adapter xmlns:android="http://schemas.android.com/apk/res/ > > >> android" > > >> android:contentAuthority="com.android.contacts" > > >> android:accountType="com.YOURDOMAIN.YOURAPP" > > >> /> > > > > >> ContactSyncAdapter: > > >> ===================================== > > >> public class ContactsSyncAdapterService extends Service { > > >> private static final String TAG = "ContactsSyncAdapterService"; > > >> private static SyncAdapterImpl sSyncAdapter = null; > > >> private static final Object sSyncAdapterLock = new Object(); > > > > >> public ContactsSyncAdapterService() { > > >> super(); > > >> } > > > > >> private static class SyncAdapterImpl extends > > >> AbstractThreadedSyncAdapter { > > >> private Context mContext; > > > > >> public SyncAdapterImpl(Context context) { > > >> super(context, true /* autoInitialize */); > > >> mContext = context; > > >> } > > > > >> @Override > > >> public void onPerformSync(Account account, Bundle extras, > > >> String authority, ContentProviderClient > provider, > > >> SyncResult syncResult) { > > >> try { > > >> > ContactsSyncAdapterService.performSync(mContext, > > >> account, > > >> extras, > > >> authority, provider, syncResult); > > >> } catch (OperationCanceledException e) { > > >> } > > >> } > > >> } > > > > >> @Override > > >> public void onCreate() { > > >> super.onCreate(); > > >> synchronized (sSyncAdapterLock) { > > >> if (sSyncAdapter == null) { > > >> sSyncAdapter = new SyncAdapterImpl > > >> (getApplicationContext()); > > >> } > > >> } > > >> } > > > > >> @Override > > >> public IBinder onBind(Intent intent) { > > >> return sSyncAdapter.getSyncAdapterBinder(); > > >> } > > > > >> private static void performSync(Context context, Account account, > > >> Bundle extras, > > >> String authority, ContentProviderClient provider, > > >> SyncResult syncResult) > > >> throws OperationCanceledException { > > >> ContentResolver cr = context.getContentResolver(); > > >> Log.i(TAG, "performSync: " + account.toString()); > > >> } > > >> } > > > > >> On Nov 23, 8:46 pm, Dan Dumont <ddum...@gmail.com> wrote: > > >> > Nice, thanks for doing that! I'll star it, I hope we get a > response > > >> soon. > > > > >> > On Mon, Nov 23, 2009 at 5:32 PM, Jerry Brady <jerry.br...@gmail.com > > > > >> wrote: > > >> > > Just filed a case for this: > > > > >> > >http://code.google.com/p/android/issues/detail?id=5009 > > > > >> > > On Nov 23, 1:47 pm, Jerry Brady <jerry.br...@gmail.com> wrote: > > >> > > > Dan, > > > > >> > > > My code and yours both work on the Droid, but there are some > nasty > > >> > > > side-effects. After adding an account with your application (or > > >> mine) > > >> > > > whenever you visit the "Accounts & Sync" settings screen, the > system > > >> > > > crashes hard and reboots. > > > > >> > > > 11-23 13:21:34.863: WARN/dalvikvm(1011): threadid=13: thread > exiting > > >> > > > with uncaught exception (group=0x4001b180) > > >> > > > 11-23 13:21:34.863: ERROR/AndroidRuntime(1011): Uncaught > handler: > > >> > > > thread android.server.ServerThread exiting due to uncaught > exception > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): *** EXCEPTION IN > > >> > > > SYSTEM PROCESS. System will crash. > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): > > >> > > > java.lang.NullPointerException > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > com.android.settings.ManageAccountsSettings.onSyncStateUpdated > > >> > > > (ManageAccountsSettings.java:187) > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > com.android.settings.ManageAccountsSettings.onAccountsUpdated > > >> > > > (ManageAccountsSettings.java:244) > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > android.accounts.AccountManager$10.run(AccountManager.java:389) > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > android.os.Handler.handleCallback(Handler.java:587) > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > android.os.Handler.dispatchMessage(Handler.java:92) > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > android.os.Looper.loop(Looper.java:123) > > >> > > > 11-23 13:21:34.879: ERROR/AndroidRuntime(1011): at > > >> > > > com.android.server.ServerThread.run(SystemServer.java:428) > > > > >> > > > I'm looking at the source now to see if I can figure out what's > > >> going > > >> > > > on. If necessary, I'll file a case with the project if I find a > bug > > >> > > > in the Android source. > > > > >> > > > Cheers, > > >> > > > Jerry > > > > >> > > > On Nov 23, 8:18 am, Jerry Brady <jerry.br...@gmail.com> wrote: > > > > >> > > > > I'm going to be trying it on a Droid this morning. > > > > >> > > > > On Nov 21, 10:07 pm, Dan Dumont <ddum...@gmail.com> wrote: > > > > >> > > > > > I get that exception in the emulator ( doesn't reboot though > ) > > > > >> > > > > > I thought it was due to missing pieces of the emulator... > > > > >> > > > > > does logcat output anything? > > > > >> > > > > > On Sat, Nov 21, 2009 at 7:07 PM, NitroDesk < > gsuku...@gmail.com> > > >> > > wrote: > > >> > > > > > > Any of you folks tried this on a Droid? > > >> > > > > > > Simply installing the project that contains an > Authenticator > > >> in the > > >> > > > > > > manfest and the other related items seems to cause the > "Add > > >> > > Account" > > >> > > > > > > option in the account list on te droid to simply reoot the > > >> phone > > >> > > with > > >> > > > > > > an exception. > > >> > > > > > > Anyone else seen this or find a way to avoid this ? > > >> > > > > > > -g > > > > >> > > > > > > On Nov 21, 9:04 am, Jerry Brady <jerry.br...@gmail.com> > > >> wrote: > > >> > > > > > > > Dan, > > > > >> > > > > > > > Now I see what you are doing in your code and found the > > >> reference > > >> > > to > > >> > > > > > > > AddAccountExplicitly(). I want to skip returning an > intent > > >> to > > >> > > fire > > >> > > > > > > > the an AccountAuthenticatorActivity and instead to > return > > >> > > > > > > > KEY_ACCOUNT_NAME and KEY_ACCOUNT_TYPE directly from my > > >> > > > > > > > AbstractAccountAuthenticator's addAccount method whereas > > >> your > > >> > > code > > >> > > > > > > > returns an intent that fires your authentication > activity. > > > > >> > > > > > > > The main issue for me so far is that I... > > > > read more ยป > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en