summaryrefslogtreecommitdiff
path: root/services/contentcapture
diff options
context:
space:
mode:
Diffstat (limited to 'services/contentcapture')
-rw-r--r--services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java78
1 files changed, 21 insertions, 57 deletions
diff --git a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
index 5d2b9f359381..ce539dabfac1 100644
--- a/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
+++ b/services/contentcapture/java/com/android/server/contentcapture/ContentCaptureManagerService.java
@@ -89,7 +89,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
-import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -919,35 +918,24 @@ public final class ContentCaptureManagerService extends
private static class DataShareCallbackDelegate extends IDataShareCallback.Stub {
@NonNull private final DataShareRequest mDataShareRequest;
- @NonNull private final WeakReference<IDataShareWriteAdapter> mClientAdapterReference;
- @NonNull private final WeakReference<ContentCaptureManagerService> mParentServiceReference;
+ @NonNull private final IDataShareWriteAdapter mClientAdapter;
+ @NonNull private final ContentCaptureManagerService mParentService;
DataShareCallbackDelegate(@NonNull DataShareRequest dataShareRequest,
@NonNull IDataShareWriteAdapter clientAdapter,
ContentCaptureManagerService parentService) {
mDataShareRequest = dataShareRequest;
- mClientAdapterReference = new WeakReference<>(clientAdapter);
- mParentServiceReference = new WeakReference<>(parentService);
+ mClientAdapter = clientAdapter;
+ mParentService = parentService;
}
@Override
public void accept(IDataShareReadAdapter serviceAdapter) throws RemoteException {
Slog.i(TAG, "Data share request accepted by Content Capture service");
- final ContentCaptureManagerService parentService = mParentServiceReference.get();
- final IDataShareWriteAdapter clientAdapter = mClientAdapterReference.get();
- if (parentService == null || clientAdapter == null) {
- Slog.w(TAG, "Can't fulfill accept() request, because remote objects have been "
- + "GC'ed");
- return;
- }
-
- final WeakReference<IDataShareReadAdapter> serviceAdapterReference =
- new WeakReference<>(serviceAdapter);
-
Pair<ParcelFileDescriptor, ParcelFileDescriptor> clientPipe = createPipe();
if (clientPipe == null) {
- clientAdapter.error(ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
+ mClientAdapter.error(ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
serviceAdapter.error(ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
return;
}
@@ -959,7 +947,7 @@ public final class ContentCaptureManagerService extends
if (servicePipe == null) {
bestEffortCloseFileDescriptors(sourceIn, sinkIn);
- clientAdapter.error(ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
+ mClientAdapter.error(ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
serviceAdapter.error(ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
return;
}
@@ -967,9 +955,9 @@ public final class ContentCaptureManagerService extends
ParcelFileDescriptor sourceOut = servicePipe.second;
ParcelFileDescriptor sinkOut = servicePipe.first;
- parentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName());
+ mParentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName());
- clientAdapter.write(sourceIn);
+ mClientAdapter.write(sourceIn);
serviceAdapter.start(sinkOut);
// File descriptor received by the client app will be a copy of the current one. Close
@@ -977,7 +965,7 @@ public final class ContentCaptureManagerService extends
// current pipe.
bestEffortCloseFileDescriptor(sourceIn);
- parentService.mDataShareExecutor.execute(() -> {
+ mParentService.mDataShareExecutor.execute(() -> {
try (InputStream fis =
new ParcelFileDescriptor.AutoCloseInputStream(sinkIn);
OutputStream fos =
@@ -996,23 +984,23 @@ public final class ContentCaptureManagerService extends
} catch (IOException e) {
Slog.e(TAG, "Failed to pipe client and service streams", e);
- sendErrorSignal(mClientAdapterReference, serviceAdapterReference,
+ sendErrorSignal(mClientAdapter, serviceAdapter,
ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
} finally {
- synchronized (parentService.mLock) {
- parentService.mPackagesWithShareRequests
+ synchronized (mParentService.mLock) {
+ mParentService.mPackagesWithShareRequests
.remove(mDataShareRequest.getPackageName());
}
}
});
- parentService.mHandler.postDelayed(() ->
+ mParentService.mHandler.postDelayed(() ->
enforceDataSharingTtl(
sourceIn,
sinkIn,
sourceOut,
sinkOut,
- serviceAdapterReference),
+ serviceAdapter),
MAX_DATA_SHARE_FILE_DESCRIPTORS_TTL_MS);
}
@@ -1020,31 +1008,17 @@ public final class ContentCaptureManagerService extends
public void reject() throws RemoteException {
Slog.i(TAG, "Data share request rejected by Content Capture service");
- IDataShareWriteAdapter clientAdapter = mClientAdapterReference.get();
- if (clientAdapter == null) {
- Slog.w(TAG, "Can't fulfill reject() request, because remote objects have been "
- + "GC'ed");
- return;
- }
-
- clientAdapter.rejected();
+ mClientAdapter.rejected();
}
private void enforceDataSharingTtl(ParcelFileDescriptor sourceIn,
ParcelFileDescriptor sinkIn,
ParcelFileDescriptor sourceOut,
ParcelFileDescriptor sinkOut,
- WeakReference<IDataShareReadAdapter> serviceAdapterReference) {
+ IDataShareReadAdapter serviceAdapter) {
- final ContentCaptureManagerService parentService = mParentServiceReference.get();
- if (parentService == null) {
- Slog.w(TAG, "Can't enforce data sharing TTL, because remote objects have been "
- + "GC'ed");
- return;
- }
-
- synchronized (parentService.mLock) {
- parentService.mPackagesWithShareRequests
+ synchronized (mParentService.mLock) {
+ mParentService.mPackagesWithShareRequests
.remove(mDataShareRequest.getPackageName());
// Interaction finished successfully <=> all data has been written to Content
@@ -1069,7 +1043,7 @@ public final class ContentCaptureManagerService extends
bestEffortCloseFileDescriptors(sourceIn, sinkIn, sourceOut, sinkOut);
if (!finishedSuccessfully) {
- sendErrorSignal(mClientAdapterReference, serviceAdapterReference,
+ sendErrorSignal(mClientAdapter, serviceAdapter,
ContentCaptureManager.DATA_SHARE_ERROR_TIMEOUT_INTERRUPTED);
}
}
@@ -1115,19 +1089,9 @@ public final class ContentCaptureManagerService extends
}
private static void sendErrorSignal(
- WeakReference<IDataShareWriteAdapter> clientAdapterReference,
- WeakReference<IDataShareReadAdapter> serviceAdapterReference,
+ IDataShareWriteAdapter clientAdapter,
+ IDataShareReadAdapter serviceAdapter,
int errorCode) {
-
- final IDataShareWriteAdapter clientAdapter = clientAdapterReference.get();
- final IDataShareReadAdapter serviceAdapter = serviceAdapterReference.get();
-
- if (clientAdapter == null || serviceAdapter == null) {
- Slog.w(TAG, "Can't propagate error() to read/write data share adapters, because "
- + "remote objects have been GC'ed");
- return;
- }
-
try {
clientAdapter.error(errorCode);
} catch (RemoteException e) {