Remove CursorAnchorInfo#createForAdditionalParentMatrix()
This CL logically reverts my previous CL [1], which added an @hide
method
CursorAnchorInfo#createForAdditionalParentMatrix()
as a preparation to support CursorAnchorInfo API on ActivityView.
Now that InputMethodManager#reportActivityView() is removed [2], we
also do not need this @hide method any more too.
Note also that CursorAnchorInfo is now fully tested in CTS rather than
FrameworksCoreTests [3]. Thus it's fine with removing
CursorAnchorInfoTest.java from FrameworksCoreTests.
[1]: Ic7f9057623ffc61ec7a6121735dc39adecf4649d
e4410a135b
[2]: Idd60d96a39f827197d189beb5de016446576d9cd
44c499d853
[3]: Ib758bddff34b4722b39c94e7ad4e8f8da2bb8b92
c4ef1d6ec22dc2af2ed339fd4e78075903783be0
Bug: 115693908
Bug: 179161778
Test: atest CtsInputMethodTestCases:CursorAnchorInfoTest
Change-Id: I0a05453eeed863db5bfe4b965ab4bcbad67f2783
This commit is contained in:
@@ -389,7 +389,7 @@ public final class CursorAnchorInfo implements Parcelable {
|
||||
"required when positional parameters are specified.");
|
||||
}
|
||||
}
|
||||
return CursorAnchorInfo.create(this);
|
||||
return new CursorAnchorInfo(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -413,90 +413,30 @@ public final class CursorAnchorInfo implements Parcelable {
|
||||
}
|
||||
}
|
||||
|
||||
private static CursorAnchorInfo create(Builder builder) {
|
||||
final SparseRectFArray characterBoundsArray =
|
||||
builder.mCharacterBoundsArrayBuilder != null
|
||||
? builder.mCharacterBoundsArrayBuilder.build()
|
||||
: null;
|
||||
final float[] matrixValues = new float[9];
|
||||
private CursorAnchorInfo(final Builder builder) {
|
||||
mSelectionStart = builder.mSelectionStart;
|
||||
mSelectionEnd = builder.mSelectionEnd;
|
||||
mComposingTextStart = builder.mComposingTextStart;
|
||||
mComposingText = builder.mComposingText;
|
||||
mInsertionMarkerFlags = builder.mInsertionMarkerFlags;
|
||||
mInsertionMarkerHorizontal = builder.mInsertionMarkerHorizontal;
|
||||
mInsertionMarkerTop = builder.mInsertionMarkerTop;
|
||||
mInsertionMarkerBaseline = builder.mInsertionMarkerBaseline;
|
||||
mInsertionMarkerBottom = builder.mInsertionMarkerBottom;
|
||||
mCharacterBoundsArray = builder.mCharacterBoundsArrayBuilder != null
|
||||
? builder.mCharacterBoundsArrayBuilder.build() : null;
|
||||
mMatrixValues = new float[9];
|
||||
if (builder.mMatrixInitialized) {
|
||||
System.arraycopy(builder.mMatrixValues, 0, matrixValues, 0, 9);
|
||||
System.arraycopy(builder.mMatrixValues, 0, mMatrixValues, 0, 9);
|
||||
} else {
|
||||
Matrix.IDENTITY_MATRIX.getValues(matrixValues);
|
||||
Matrix.IDENTITY_MATRIX.getValues(mMatrixValues);
|
||||
}
|
||||
|
||||
return new CursorAnchorInfo(builder.mSelectionStart, builder.mSelectionEnd,
|
||||
builder.mComposingTextStart, builder.mComposingText, builder.mInsertionMarkerFlags,
|
||||
builder.mInsertionMarkerHorizontal, builder.mInsertionMarkerTop,
|
||||
builder.mInsertionMarkerBaseline, builder.mInsertionMarkerBottom,
|
||||
characterBoundsArray, matrixValues);
|
||||
}
|
||||
|
||||
private CursorAnchorInfo(int selectionStart, int selectionEnd, int composingTextStart,
|
||||
@Nullable CharSequence composingText, int insertionMarkerFlags,
|
||||
float insertionMarkerHorizontal, float insertionMarkerTop,
|
||||
float insertionMarkerBaseline, float insertionMarkerBottom,
|
||||
@Nullable SparseRectFArray characterBoundsArray, @NonNull float[] matrixValues) {
|
||||
mSelectionStart = selectionStart;
|
||||
mSelectionEnd = selectionEnd;
|
||||
mComposingTextStart = composingTextStart;
|
||||
mComposingText = composingText;
|
||||
mInsertionMarkerFlags = insertionMarkerFlags;
|
||||
mInsertionMarkerHorizontal = insertionMarkerHorizontal;
|
||||
mInsertionMarkerTop = insertionMarkerTop;
|
||||
mInsertionMarkerBaseline = insertionMarkerBaseline;
|
||||
mInsertionMarkerBottom = insertionMarkerBottom;
|
||||
mCharacterBoundsArray = characterBoundsArray;
|
||||
mMatrixValues = matrixValues;
|
||||
|
||||
// To keep hash function simple, we only use some complex objects for hash.
|
||||
int hashCode = Objects.hashCode(mComposingText);
|
||||
hashCode *= 31;
|
||||
hashCode += Arrays.hashCode(matrixValues);
|
||||
mHashCode = hashCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link CursorAnchorInfo} by applying {@code parentMatrix} to
|
||||
* the coordinate transformation matrix.
|
||||
*
|
||||
* @param original {@link CursorAnchorInfo} to be cloned from.
|
||||
* @param parentMatrix {@link Matrix} to be applied to {@code original.getMatrix()}
|
||||
* @return A new instance of {@link CursorAnchorInfo} whose {@link CursorAnchorInfo#getMatrix()}
|
||||
* returns {@code parentMatrix * original.getMatrix()}.
|
||||
* @hide
|
||||
*/
|
||||
public static CursorAnchorInfo createForAdditionalParentMatrix(CursorAnchorInfo original,
|
||||
@NonNull Matrix parentMatrix) {
|
||||
return new CursorAnchorInfo(original.mSelectionStart, original.mSelectionEnd,
|
||||
original.mComposingTextStart, original.mComposingText,
|
||||
original.mInsertionMarkerFlags, original.mInsertionMarkerHorizontal,
|
||||
original.mInsertionMarkerTop, original.mInsertionMarkerBaseline,
|
||||
original.mInsertionMarkerBottom, original.mCharacterBoundsArray,
|
||||
computeMatrixValues(parentMatrix, original));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a float array that represents {@link Matrix} elements for
|
||||
* {@code parentMatrix * info.getMatrix()}.
|
||||
*
|
||||
* @param parentMatrix {@link Matrix} to be multiplied.
|
||||
* @param info {@link CursorAnchorInfo} to provide {@link Matrix} to be multiplied.
|
||||
* @return {@code parentMatrix * info.getMatrix()}.
|
||||
*/
|
||||
private static float[] computeMatrixValues(@NonNull Matrix parentMatrix,
|
||||
@NonNull CursorAnchorInfo info) {
|
||||
if (parentMatrix.isIdentity()) {
|
||||
return info.mMatrixValues;
|
||||
}
|
||||
|
||||
final Matrix newMatrix = new Matrix();
|
||||
newMatrix.setValues(info.mMatrixValues);
|
||||
newMatrix.postConcat(parentMatrix);
|
||||
|
||||
final float[] matrixValues = new float[9];
|
||||
newMatrix.getValues(matrixValues);
|
||||
return matrixValues;
|
||||
int hash = Objects.hashCode(mComposingText);
|
||||
hash *= 31;
|
||||
hash += Arrays.hashCode(mMatrixValues);
|
||||
mHashCode = hash;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.view.inputmethod;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import android.graphics.Matrix;
|
||||
import android.view.inputmethod.CursorAnchorInfo.Builder;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@SmallTest
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class CursorAnchorInfoTest {
|
||||
@Test
|
||||
public void testCreateForAdditionalParentMatrix() {
|
||||
final Matrix originalMatrix = new Matrix();
|
||||
originalMatrix.setTranslate(10.0f, 20.0f);
|
||||
final Builder builder = new Builder();
|
||||
builder.setMatrix(originalMatrix);
|
||||
|
||||
final CursorAnchorInfo originalInstance = builder.build();
|
||||
|
||||
assertEquals(originalMatrix, originalInstance.getMatrix());
|
||||
|
||||
final Matrix additionalParentMatrix = new Matrix();
|
||||
additionalParentMatrix.setTranslate(1.0f, 2.0f);
|
||||
|
||||
final Matrix newMatrix = new Matrix(originalMatrix);
|
||||
newMatrix.postConcat(additionalParentMatrix);
|
||||
|
||||
builder.reset();
|
||||
builder.setMatrix(newMatrix);
|
||||
// An instance created by the standard Builder class.
|
||||
final CursorAnchorInfo newInstanceByBuilder = builder.build();
|
||||
|
||||
// An instance created by an @hide method.
|
||||
final CursorAnchorInfo newInstanceByMethod =
|
||||
CursorAnchorInfo.createForAdditionalParentMatrix(
|
||||
originalInstance, additionalParentMatrix);
|
||||
|
||||
assertEquals(newMatrix, newInstanceByBuilder.getMatrix());
|
||||
assertEquals(newMatrix, newInstanceByMethod.getMatrix());
|
||||
assertEquals(newInstanceByBuilder.hashCode(), newInstanceByMethod.hashCode());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user