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

Commit 67263549 authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Remove ArraysCompatUtils

bug: 6129704
Change-Id: I0f1a0dee744e6dcdea7ae8606119b4af22b86663
parent cba3887b
Loading
Loading
Loading
Loading
+0 −61
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 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 com.android.inputmethod.compat;

import android.util.Log;

import java.lang.reflect.Method;
import java.util.Arrays;

public class ArraysCompatUtils {
    private static final String TAG = ArraysCompatUtils.class.getSimpleName();

    private static final Method METHOD_Arrays_binarySearch = CompatUtils
            .getMethod(Arrays.class, "binarySearch", int[].class, int.class, int.class, int.class);

    public static int binarySearch(int[] array, int startIndex, int endIndex, int value) {
        if (METHOD_Arrays_binarySearch != null) {
            final Object index = CompatUtils.invoke(null, 0, METHOD_Arrays_binarySearch,
                    array, startIndex, endIndex, value);
            return (Integer)index;
        } else {
            return compatBinarySearch(array, startIndex, endIndex, value);
        }
    }

    // TODO: Implement fast binary search
    /* package for testing */
    static int compatBinarySearch(int[] array, int startIndex, int endIndex, int value) {
        // Output error log because this method has strict performance penalty.
        // Note that this method has been called only from spell checker and spell checker exists
        // only from IceCreamSandwich and after, so that there is no chance on pre-ICS device to
        // invoke this method.
        Log.e(TAG, "Invoked expensive binarySearch");

        if (startIndex > endIndex) throw new IllegalArgumentException();
        if (startIndex < 0 || endIndex > array.length) throw new ArrayIndexOutOfBoundsException();

        final int work[] = new int[endIndex - startIndex];
        System.arraycopy(array, startIndex, work, 0, work.length);
        final int index = Arrays.binarySearch(work, value);
        if (index >= 0) {
            return index + startIndex;
        } else {
            return ~(~index + startIndex);
        }
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import android.util.Log;
import android.view.textservice.SuggestionsInfo;
import android.view.textservice.TextInfo;

import com.android.inputmethod.compat.ArraysCompatUtils;
import com.android.inputmethod.compat.SuggestionsInfoCompatUtils;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.BinaryDictionary;
@@ -237,7 +236,7 @@ public class AndroidSpellCheckerService extends SpellCheckerService
        @Override
        synchronized public boolean addWord(char[] word, int wordOffset, int wordLength, int score,
                int dicTypeId, int dataType) {
            final int positionIndex = ArraysCompatUtils.binarySearch(mScores, 0, mLength, score);
            final int positionIndex = Arrays.binarySearch(mScores, 0, mLength, score);
            // binarySearch returns the index if the element exists, and -<insertion index> - 1
            // if it doesn't. See documentation for binarySearch.
            final int insertIndex = positionIndex >= 0 ? positionIndex : -positionIndex - 1;