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

Commit 3988025f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Prevent view leak in handwriting delegation" into main

parents 73248530 54197881
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -496,9 +496,10 @@ public class HandwritingInitiator {
        if (delegatorPackageName == null) {
            delegatorPackageName = view.getContext().getOpPackageName();
        }
        WeakReference<View> viewRef = new WeakReference<>(view);
        Consumer<Boolean> consumer = delegationAccepted -> {
            if (delegationAccepted) {
                onDelegationAccepted(view);
                onDelegationAccepted(viewRef.get());
            }
        };
        mImm.acceptStylusHandwritingDelegation(view, delegatorPackageName, view::post, consumer);
@@ -509,6 +510,10 @@ public class HandwritingInitiator {
            mState.mHandled = true;
            mState.mShouldInitHandwriting = false;
        }
        if (view == null) {
            // can be null if view was detached and was GCed.
            return;
        }
        if (view instanceof TextView) {
            ((TextView) view).hideHint();
        }
+8 −3
Original line number Diff line number Diff line
@@ -129,6 +129,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.Collections;
@@ -2630,13 +2631,17 @@ public final class InputMethodManager {
                return false;
            }
            if (useDelegation) {
                WeakReference<Executor> executorRef = new WeakReference<>(executor);
                WeakReference<Consumer<Boolean>> callbackRef = new WeakReference<>(callback);
                if (useCallback) {
                    IBooleanListener listener = new IBooleanListener.Stub() {
                        @Override
                        public void onResult(boolean value) {
                            executor.execute(() -> {
                                callback.accept(value);
                            });
                            Executor executor = executorRef.get();
                            Consumer<Boolean> callback = callbackRef.get();
                            if (executor != null && callback != null) {
                                executor.execute(() -> callback.accept(value));
                            }
                        }
                    };
                    if (!IInputMethodManagerGlobalInvoker.acceptStylusHandwritingDelegationAsync(