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

Commit 1eb47c7f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "IntResultReceiver: fix clearing on dispatch"

parents a7ab7d78 687a05d3
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -72,30 +72,33 @@ final class IRemoteInputConnectionInvoker {
     * callback.
     */
    private static final class IntResultReceiver extends ResultReceiver {
        @NonNull
        @Nullable
        private IntConsumer mConsumer;
        @NonNull
        @Nullable
        private Executor mExecutor;

        IntResultReceiver(@NonNull Executor executor, @NonNull IntConsumer consumer) {
            super(null);
            Objects.requireNonNull(executor);
            Objects.requireNonNull(consumer);
            mExecutor = executor;
            mConsumer = consumer;
        }

        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            if (mExecutor != null && mConsumer != null) {
                mExecutor.execute(() -> mConsumer.accept(resultCode));
                // provide callback only once.
                clear();
            }
        }

        private void clear() {
            final Executor executor;
            final IntConsumer consumer;
            synchronized (this) {
                executor = mExecutor;
                consumer = mConsumer;
                mExecutor = null;
                mConsumer = null;
            }
            if (executor != null && consumer != null) {
                executor.execute(() -> consumer.accept(resultCode));
            }
        }
    };

    /**