summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/SyncManager.java
diff options
context:
space:
mode:
authorAlon Albert <aalbert@google.com>2010-12-08 15:02:33 -0800
committerAlon Albert <aalbert@google.com>2010-12-09 14:06:04 -0800
commiteca7511f61a6bfbb43a6646f87b5771bcc5d3fdc (patch)
tree844e6d026159f9f1ba923f38101d14e2625b2174 /core/java/android/content/SyncManager.java
parent488a0d5ece8d68a2a49117e698ecaa6de4faf6b9 (diff)
downloadframeworks_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.java19
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;