summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYara Hassan <yaraabdullatif@google.com>2020-05-20 17:38:20 +0100
committerAhaan Ugale <augale@google.com>2020-05-29 14:35:13 -0700
commitdc699fb8cea5f97020152b75641dfcb641e7e96a (patch)
tree76014968c516be81bf0ab8816f3d5e71e25c972e
parent1298d2b7601383ad6e9c6964e939f6bfbd7093e2 (diff)
Add finish() method to DataShare Read and Write Adapters
The finish() method is used to clear hard references after the data copy has ended. This fixes a bug where the references are cleared before onError() is attempted to be called. Test: CTS tests in followup CL Bug: 157136368 Fixes: 157136368 Change-Id: If924fe388762831af90579e6b00bdf223230e203
-rw-r--r--core/java/android/service/contentcapture/ContentCaptureService.java11
-rw-r--r--core/java/android/service/contentcapture/IDataShareReadAdapter.aidl1
-rw-r--r--core/java/android/view/contentcapture/ContentCaptureManager.java9
-rw-r--r--core/java/android/view/contentcapture/IDataShareWriteAdapter.aidl1
4 files changed, 14 insertions, 8 deletions
diff --git a/core/java/android/service/contentcapture/ContentCaptureService.java b/core/java/android/service/contentcapture/ContentCaptureService.java
index 46cb65babc1c..b1f147be6735 100644
--- a/core/java/android/service/contentcapture/ContentCaptureService.java
+++ b/core/java/android/service/contentcapture/ContentCaptureService.java
@@ -677,10 +677,6 @@ public abstract class ContentCaptureService extends Service {
throws RemoteException {
synchronized (mLock) {
executeAdapterMethodLocked(adapter -> adapter.onStart(fd), "onStart");
-
- // Client app and Service successfully connected, so this object would be kept alive
- // until the session has finished.
- clearHardReferences();
}
}
@@ -693,6 +689,13 @@ public abstract class ContentCaptureService extends Service {
}
}
+ @Override
+ public void finish() throws RemoteException {
+ synchronized (mLock) {
+ clearHardReferences();
+ }
+ }
+
private void executeAdapterMethodLocked(Consumer<DataShareReadAdapter> adapterFn,
String methodName) {
LocalDataShareAdapterResourceManager resourceManager = mResourceManagerReference.get();
diff --git a/core/java/android/service/contentcapture/IDataShareReadAdapter.aidl b/core/java/android/service/contentcapture/IDataShareReadAdapter.aidl
index 91c8ff1fc662..4d441fe2b856 100644
--- a/core/java/android/service/contentcapture/IDataShareReadAdapter.aidl
+++ b/core/java/android/service/contentcapture/IDataShareReadAdapter.aidl
@@ -22,4 +22,5 @@ import android.os.ICancellationSignal;
oneway interface IDataShareReadAdapter {
void start(in ParcelFileDescriptor fd);
void error(int errorCode);
+ void finish();
}
diff --git a/core/java/android/view/contentcapture/ContentCaptureManager.java b/core/java/android/view/contentcapture/ContentCaptureManager.java
index d021fc917c88..756ff78e5906 100644
--- a/core/java/android/view/contentcapture/ContentCaptureManager.java
+++ b/core/java/android/view/contentcapture/ContentCaptureManager.java
@@ -761,10 +761,6 @@ public final class ContentCaptureManager {
public void write(ParcelFileDescriptor destination)
throws RemoteException {
executeAdapterMethodLocked(adapter -> adapter.onWrite(destination), "onWrite");
-
- // Client app and Service successfully connected, so this object would be kept alive
- // until the session has finished.
- clearHardReferences();
}
@Override
@@ -779,6 +775,11 @@ public final class ContentCaptureManager {
clearHardReferences();
}
+ @Override
+ public void finish() throws RemoteException {
+ clearHardReferences();
+ }
+
private void executeAdapterMethodLocked(Consumer<DataShareWriteAdapter> adapterFn,
String methodName) {
LocalDataShareAdapterResourceManager resourceManager = mResourceManagerReference.get();
diff --git a/core/java/android/view/contentcapture/IDataShareWriteAdapter.aidl b/core/java/android/view/contentcapture/IDataShareWriteAdapter.aidl
index 80924ef78f85..015b3bc2a00b 100644
--- a/core/java/android/view/contentcapture/IDataShareWriteAdapter.aidl
+++ b/core/java/android/view/contentcapture/IDataShareWriteAdapter.aidl
@@ -25,4 +25,5 @@ oneway interface IDataShareWriteAdapter {
void write(in ParcelFileDescriptor destination);
void error(int errorCode);
void rejected();
+ void finish();
}