diff options
author | Alon Albert <aalbert@google.com> | 2010-12-08 15:02:33 -0800 |
---|---|---|
committer | Alon Albert <aalbert@google.com> | 2010-12-09 14:06:04 -0800 |
commit | eca7511f61a6bfbb43a6646f87b5771bcc5d3fdc (patch) | |
tree | 844e6d026159f9f1ba923f38101d14e2625b2174 /core/java/android/content/SyncManager.java | |
parent | 488a0d5ece8d68a2a49117e698ecaa6de4faf6b9 (diff) | |
download | frameworks_base-eca7511f61a6bfbb43a6646f87b5771bcc5d3fdc.zip frameworks_base-eca7511f61a6bfbb43a6646f87b5771bcc5d3fdc.tar.gz frameworks_base-eca7511f61a6bfbb43a6646f87b5771bcc5d3fdc.tar.bz2 |
Listen for SyncAdapter death to cancel a sync
Change-Id: Icbb439c56b89fea1726723d7061c347867834dc8
Diffstat (limited to 'core/java/android/content/SyncManager.java')
-rw-r--r-- | core/java/android/content/SyncManager.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/core/java/android/content/SyncManager.java b/core/java/android/content/SyncManager.java index 221fe23..a6ffed6 100644 --- a/core/java/android/content/SyncManager.java +++ b/core/java/android/content/SyncManager.java @@ -873,7 +873,8 @@ public class SyncManager implements OnAccountsUpdateListener { /** * @hide */ - class ActiveSyncContext extends ISyncContext.Stub implements ServiceConnection { + class ActiveSyncContext extends ISyncContext.Stub + implements ServiceConnection, IBinder.DeathRecipient { final SyncOperation mSyncOperation; final long mHistoryRowId; ISyncAdapter mSyncAdapter; @@ -883,6 +884,7 @@ public class SyncManager implements OnAccountsUpdateListener { final PowerManager.WakeLock mSyncWakeLock; final int mSyncAdapterUid; SyncInfo mSyncInfo; + boolean mIsLinkedToDeath = false; /** * Create an ActiveSyncContext for an impending sync and grab the wakelock for that @@ -984,6 +986,11 @@ public class SyncManager implements OnAccountsUpdateListener { toString(sb); return sb.toString(); } + + @Override + public void binderDied() { + sendSyncFinishedOrCanceledMessage(this, null); + } } protected void dump(FileDescriptor fd, PrintWriter pw) { @@ -1798,11 +1805,14 @@ public class SyncManager implements OnAccountsUpdateListener { return true; } - private void runBoundToSyncAdapter(ActiveSyncContext activeSyncContext, + private void runBoundToSyncAdapter(final ActiveSyncContext activeSyncContext, ISyncAdapter syncAdapter) { activeSyncContext.mSyncAdapter = syncAdapter; final SyncOperation syncOperation = activeSyncContext.mSyncOperation; try { + activeSyncContext.mIsLinkedToDeath = true; + syncAdapter.asBinder().linkToDeath(activeSyncContext, 0); + syncAdapter.startSync(activeSyncContext, syncOperation.authority, syncOperation.account, syncOperation.extras); } catch (RemoteException remoteExc) { @@ -1842,6 +1852,11 @@ public class SyncManager implements OnAccountsUpdateListener { private void runSyncFinishedOrCanceledLocked(SyncResult syncResult, ActiveSyncContext activeSyncContext) { boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE); + + if (activeSyncContext.mIsLinkedToDeath) { + activeSyncContext.mSyncAdapter.asBinder().unlinkToDeath(activeSyncContext, 0); + activeSyncContext.mIsLinkedToDeath = false; + } closeActiveSyncContext(activeSyncContext); final SyncOperation syncOperation = activeSyncContext.mSyncOperation; |