Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8fc935a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Ensure we clear mPackagesWithShareRequests when a remote exception...

Merge "Ensure we clear mPackagesWithShareRequests when a remote exception happens at write() or start()." into sc-qpr1-dev am: 7207d8d0

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16174880

Change-Id: I445ec2b15559d4d346e7f3331fffd53a2a9071d5
parents 02fa5d5e 7207d8d0
Loading
Loading
Loading
Loading
+35 −17
Original line number Diff line number Diff line
@@ -1072,26 +1072,18 @@ public final class ContentCaptureManagerService extends
            ParcelFileDescriptor sourceOut = servicePipe.second;
            ParcelFileDescriptor sinkOut = servicePipe.first;

            synchronized (mParentService.mLock) {
                mParentService.mPackagesWithShareRequests.add(mDataShareRequest.getPackageName());
            }

            try {
                mClientAdapter.write(sourceIn);
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to call write() the client operation", e);
            if (!setUpSharingPipeline(mClientAdapter, serviceAdapter, sourceIn, sinkOut)) {
                sendErrorSignal(mClientAdapter, serviceAdapter,
                        ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
                logServiceEvent(
                        CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_CLIENT_PIPE_FAIL);
                return;
                bestEffortCloseFileDescriptors(sourceIn, sinkIn, sourceOut, sinkOut);
                synchronized (mParentService.mLock) {
                    mParentService.mPackagesWithShareRequests
                        .remove(mDataShareRequest.getPackageName());
                }
            try {
                serviceAdapter.start(sinkOut);
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to call start() the service operation", e);
                sendErrorSignal(mClientAdapter, serviceAdapter,
                        ContentCaptureManager.DATA_SHARE_ERROR_UNKNOWN);
                logServiceEvent(
                        CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_SERVICE_PIPE_FAIL);
                return;
            }

@@ -1184,6 +1176,32 @@ public final class ContentCaptureManagerService extends
            }
        }

        private boolean setUpSharingPipeline(
                IDataShareWriteAdapter clientAdapter,
                IDataShareReadAdapter serviceAdapter,
                ParcelFileDescriptor sourceIn,
                ParcelFileDescriptor sinkOut) {
            try {
                clientAdapter.write(sourceIn);
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to call write() the client operation", e);
                logServiceEvent(
                        CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_CLIENT_PIPE_FAIL);
                return false;
            }

            try {
                serviceAdapter.start(sinkOut);
            } catch (RemoteException e) {
                Slog.e(TAG, "Failed to call start() the service operation", e);
                logServiceEvent(
                        CONTENT_CAPTURE_SERVICE_EVENTS__EVENT__DATA_SHARE_ERROR_SERVICE_PIPE_FAIL);
                return false;
            }

            return true;
        }

        private void enforceDataSharingTtl(ParcelFileDescriptor sourceIn,
                ParcelFileDescriptor sinkIn,
                ParcelFileDescriptor sourceOut,