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

Commit 60843fbc authored by Justin Ghan's avatar Justin Ghan
Browse files

Handwriting delegate API changes

Per API feedback, updating handwriting delegate APIs to behave as
standard setters and getters. Removing requirement to call APIs in a
specific order, and removing side effects of setting default allowed
packages.

Bug: 266834695
Bug: 228100684
Test: atest android.view.stylus.HandwritingInitiatorTest
Test: atest android.view.inputmethod.cts.StylusHandwritingTest
Change-Id: I4ff7d53168d1fe25198a2d24faa3e45af108f989
parent 42139e0e
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -51992,8 +51992,8 @@ package android.view {
    method @Nullable public CharSequence getAccessibilityPaneTitle();
    method @Nullable public CharSequence getAccessibilityPaneTitle();
    method @IdRes public int getAccessibilityTraversalAfter();
    method @IdRes public int getAccessibilityTraversalAfter();
    method @IdRes public int getAccessibilityTraversalBefore();
    method @IdRes public int getAccessibilityTraversalBefore();
    method @NonNull public String getAllowedHandwritingDelegatePackageName();
    method @Nullable public String getAllowedHandwritingDelegatePackageName();
    method @NonNull public String getAllowedHandwritingDelegatorPackageName();
    method @Nullable public String getAllowedHandwritingDelegatorPackageName();
    method public float getAlpha();
    method public float getAlpha();
    method public android.view.animation.Animation getAnimation();
    method public android.view.animation.Animation getAnimation();
    method @Nullable public android.graphics.Matrix getAnimationMatrix();
    method @Nullable public android.graphics.Matrix getAnimationMatrix();
@@ -52376,8 +52376,8 @@ package android.view {
    method public void setAccessibilityTraversalBefore(@IdRes int);
    method public void setAccessibilityTraversalBefore(@IdRes int);
    method public void setActivated(boolean);
    method public void setActivated(boolean);
    method public void setAllowClickWhenDisabled(boolean);
    method public void setAllowClickWhenDisabled(boolean);
    method public void setAllowedHandwritingDelegatePackage(@NonNull String);
    method public void setAllowedHandwritingDelegatePackage(@Nullable String);
    method public void setAllowedHandwritingDelegatorPackage(@NonNull String);
    method public void setAllowedHandwritingDelegatorPackage(@Nullable String);
    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
    method public void setAlpha(@FloatRange(from=0.0, to=1.0) float);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAnimationMatrix(@Nullable android.graphics.Matrix);
    method public void setAnimationMatrix(@Nullable android.graphics.Matrix);
+12 −4
Original line number Original line Diff line number Diff line
@@ -172,9 +172,13 @@ public class HandwritingInitiator {
                        if (candidateView == getConnectedView()) {
                        if (candidateView == getConnectedView()) {
                            startHandwriting(candidateView);
                            startHandwriting(candidateView);
                        } else if (candidateView.getHandwritingDelegatorCallback() != null) {
                        } else if (candidateView.getHandwritingDelegatorCallback() != null) {
                            String delegatePackageName =
                                    candidateView.getAllowedHandwritingDelegatePackageName();
                            if (delegatePackageName == null) {
                                delegatePackageName = candidateView.getContext().getOpPackageName();
                            }
                            mImm.prepareStylusHandwritingDelegation(
                            mImm.prepareStylusHandwritingDelegation(
                                    candidateView,
                                    candidateView, delegatePackageName);
                                    candidateView.getAllowedHandwritingDelegatePackageName());
                            candidateView.getHandwritingDelegatorCallback().run();
                            candidateView.getHandwritingDelegatorCallback().run();
                        } else {
                        } else {
                            if (candidateView.getRevealOnFocusHint()) {
                            if (candidateView.getRevealOnFocusHint()) {
@@ -299,8 +303,12 @@ public class HandwritingInitiator {
     */
     */
    @VisibleForTesting
    @VisibleForTesting
    public boolean tryAcceptStylusHandwritingDelegation(@NonNull View view) {
    public boolean tryAcceptStylusHandwritingDelegation(@NonNull View view) {
        if (mImm.acceptStylusHandwritingDelegation(
        String delegatorPackageName =
                view, view.getAllowedHandwritingDelegatorPackageName())) {
                view.getAllowedHandwritingDelegatorPackageName();
        if (delegatorPackageName == null) {
            delegatorPackageName = view.getContext().getOpPackageName();
        }
        if (mImm.acceptStylusHandwritingDelegation(view, delegatorPackageName)) {
            if (mState != null) {
            if (mState != null) {
                mState.mHasInitiatedHandwriting = true;
                mState.mHasInitiatedHandwriting = true;
                mState.mShouldInitHandwriting = false;
                mState.mShouldInitHandwriting = false;
+26 −51
Original line number Original line Diff line number Diff line
@@ -12437,11 +12437,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    public void setHandwritingDelegatorCallback(@Nullable Runnable callback) {
    public void setHandwritingDelegatorCallback(@Nullable Runnable callback) {
        mHandwritingDelegatorCallback = callback;
        mHandwritingDelegatorCallback = callback;
        if (callback != null) {
        if (callback != null) {
            // By default, the delegate must be from the same package as the delegator view.
            mAllowedHandwritingDelegatePackageName = mContext.getOpPackageName();
            setHandwritingArea(new Rect(0, 0, getWidth(), getHeight()));
            setHandwritingArea(new Rect(0, 0, getWidth(), getHeight()));
        } else {
            mAllowedHandwritingDelegatePackageName = null;
        }
        }
    }
    }
@@ -12460,8 +12456,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * view from the specified package. If this method is not called, delegators may only be used to
     * view from the specified package. If this method is not called, delegators may only be used to
     * initiate handwriting mode for a delegate editor view from the same package as the delegator
     * initiate handwriting mode for a delegate editor view from the same package as the delegator
     * view. This method allows specifying a different trusted package which may contain a delegate
     * view. This method allows specifying a different trusted package which may contain a delegate
     * editor view linked to this delegator view. This should be called after {@link
     * editor view linked to this delegator view.
     * #setHandwritingDelegatorCallback}.
     *
     * <p>This method has no effect unless {@link #setHandwritingDelegatorCallback} is also called
     * to configure this view to act as a handwriting delegator.
     *
     *
     * <p>If this method is called on the delegator view, then {@link
     * <p>If this method is called on the delegator view, then {@link
     * #setAllowedHandwritingDelegatorPackage} should also be called on the delegate editor view.
     * #setAllowedHandwritingDelegatorPackage} should also be called on the delegate editor view.
@@ -12479,33 +12477,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * delegateEditorView.setAllowedHandwritingDelegatorPackage(package1);</pre>
     * delegateEditorView.setAllowedHandwritingDelegatorPackage(package1);</pre>
     *
     *
     * @param allowedPackageName the package name of a delegate editor view linked to this delegator
     * @param allowedPackageName the package name of a delegate editor view linked to this delegator
     *     view
     *     view, or {@code null} to restore the default behavior of only allowing delegate editor
     * @throws IllegalStateException If the view has not been configured as a handwriting delegator
     *     views from the same package as this delegator view
     *     using {@link #setHandwritingDelegatorCallback}.
     */
     */
    public void setAllowedHandwritingDelegatePackage(@NonNull String allowedPackageName) {
    public void setAllowedHandwritingDelegatePackage(@Nullable String allowedPackageName) {
        if (mHandwritingDelegatorCallback == null) {
            throw new IllegalStateException("This view is not a handwriting delegator.");
        }
        mAllowedHandwritingDelegatePackageName = allowedPackageName;
        mAllowedHandwritingDelegatePackageName = allowedPackageName;
    }
    }
    /**
    /**
     * Returns the allowed package for delegate editor views for which this view may act as a
     * Returns the allowed package for delegate editor views for which this view may act as a
     * handwriting delegator. If {@link #setAllowedHandwritingDelegatePackage} has not been called,
     * handwriting delegator, as set by {@link #setAllowedHandwritingDelegatePackage}. If {@link
     * this will return this view's package name, since by default delegators may only be used to
     * #setAllowedHandwritingDelegatePackage} has not been called, or called with {@code null}
     * initiate handwriting mode for a delegate editor view from the same package as the delegator
     * argument, this will return {@code null}, meaning that this delegator view may only be used to
     * view. This will return a different allowed package if set by {@link
     * initiate handwriting mode for a delegate editor view from the same package as this delegator
     * #setAllowedHandwritingDelegatePackage}.
     * view.
     *
     * @throws IllegalStateException If the view has not been configured as a handwriting delegator
     *     using {@link #setHandwritingDelegatorCallback}.
     */
     */
    @NonNull
    @Nullable
    public String getAllowedHandwritingDelegatePackageName() {
    public String getAllowedHandwritingDelegatePackageName() {
        if (mHandwritingDelegatorCallback == null) {
            throw new IllegalStateException("This view is not a handwriting delegator.");
        }
        return mAllowedHandwritingDelegatePackageName;
        return mAllowedHandwritingDelegatePackageName;
    }
    }
@@ -12519,12 +12507,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     */
     */
    public void setIsHandwritingDelegate(boolean isHandwritingDelegate) {
    public void setIsHandwritingDelegate(boolean isHandwritingDelegate) {
        mIsHandwritingDelegate = isHandwritingDelegate;
        mIsHandwritingDelegate = isHandwritingDelegate;
        if (mIsHandwritingDelegate) {
            // By default, the delegator must be from the same package as the delegate view.
            mAllowedHandwritingDelegatorPackageName = mContext.getOpPackageName();
        } else {
            mAllowedHandwritingDelegatePackageName = null;
        }
    }
    }
    /**
    /**
@@ -12537,41 +12519,34 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
    /**
    /**
     * Specifies that a view from the specified package may act as a handwriting delegator for this
     * Specifies that a view from the specified package may act as a handwriting delegator for this
     * delegate editor view. If this method is not called, only views from the same package as the
     * delegate editor view. If this method is not called, only views from the same package as this
     * delegate editor view may act as a handwriting delegator. This method allows specifying a
     * delegate editor view may act as a handwriting delegator. This method allows specifying a
     * different trusted package which may contain a delegator view linked to this delegate editor
     * different trusted package which may contain a delegator view linked to this delegate editor
     * view. This should be called after {@link #setIsHandwritingDelegate}.
     * view.
     *
     * <p>This method has no effect unless {@link #setIsHandwritingDelegate} is also called to
     * configure this view to act as a handwriting delegate.
     *
     *
     * <p>If this method is called on the delegate editor view, then {@link
     * <p>If this method is called on the delegate editor view, then {@link
     * #setAllowedHandwritingDelegatePackage} should also be called on the delegator view.
     * #setAllowedHandwritingDelegatePackage} should also be called on the delegator view.
     *
     *
     * @param allowedPackageName the package name of a delegator view linked to this delegate editor
     * @param allowedPackageName the package name of a delegator view linked to this delegate editor
     *     view
     *     view, or {@code null} to restore the default behavior of only allowing delegator views
     * @throws IllegalStateException If the view has not been configured as a handwriting delegate
     *     from the same package as this delegate editor view
     *     using {@link #setIsHandwritingDelegate}.
     */
     */
    public void setAllowedHandwritingDelegatorPackage(@NonNull String allowedPackageName) {
    public void setAllowedHandwritingDelegatorPackage(@Nullable String allowedPackageName) {
        if (!mIsHandwritingDelegate) {
            throw new IllegalStateException("This view is not a handwriting delegate.");
        }
        mAllowedHandwritingDelegatorPackageName = allowedPackageName;
        mAllowedHandwritingDelegatorPackageName = allowedPackageName;
    }
    }
    /**
    /**
     * Returns the allowed package for views which may act as a handwriting delegator for this
     * Returns the allowed package for views which may act as a handwriting delegator for this
     * delegate editor view. If {@link #setAllowedHandwritingDelegatorPackage} has not been called,
     * delegate editor view, as set by {@link #setAllowedHandwritingDelegatorPackage}. If {@link
     * this will return this view's package name, since by default only views from the same package
     * #setAllowedHandwritingDelegatorPackage} has not been called, or called with {@code null}
     * as the delegator editor view may act as a handwriting delegator. This will return a different
     * argument, this will return {@code null}, meaning that only views from the same package as
     * allowed package if set by {@link #setAllowedHandwritingDelegatorPackage}.
     * this delegator editor view may act as a handwriting delegator.
     *
     * @throws IllegalStateException If the view has not been configured as a handwriting delegate
     *     using {@link #setIsHandwritingDelegate}.
     */
     */
    @NonNull
    @Nullable
    public String getAllowedHandwritingDelegatorPackageName() {
    public String getAllowedHandwritingDelegatorPackageName() {
        if (!mIsHandwritingDelegate) {
            throw new IllegalStateException("This view is not a handwriting delegate.");
        }
        return mAllowedHandwritingDelegatorPackageName;
        return mAllowedHandwritingDelegatorPackageName;
    }
    }