diff --git a/core/java/android/service/contentcapture/ContentCaptureService.java b/core/java/android/service/contentcapture/ContentCaptureService.java index 46cb65babc1c1..b1f147be67357 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 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 91c8ff1fc6624..4d441fe2b8569 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 d021fc917c884..756ff78e5906e 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 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 80924ef78f857..015b3bc2a00b5 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(); }