17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/* 27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License. 67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at 77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * 107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and 147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License. 157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpackage com.android.inputmethod.pinyin; 187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport com.android.inputmethod.pinyin.IPinyinDecoderService; 207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.io.FileDescriptor; 227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.io.FileNotFoundException; 237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.io.IOException; 247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.util.List; 257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.util.Vector; 267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.app.Service; 287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.Intent; 297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.res.AssetFileDescriptor; 307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.os.IBinder; 317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.os.RemoteException; 327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.util.Log; 337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/** 357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * This class is used to separate the input method kernel in an individual 367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * service so that both IME and IME-syncer can use it. 377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */ 387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpublic class PinyinDecoderService extends Service { 397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeImOpenDecoder(byte fn_sys_dict[], 407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project byte fn_usr_dict[]); 417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeImOpenDecoderFd(FileDescriptor fd, 437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project long startOffset, long length, byte fn_usr_dict[]); 447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static void nativeImSetMaxLens(int maxSpsLen, int maxHzsLen); 467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeImCloseDecoder(); 487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImSearch(byte pyBuf[], int pyLen); 507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImDelSearch(int pos, boolean is_pos_in_splid, 527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean clear_fixed_this_step); 537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static void nativeImResetSearch(); 557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImAddLetter(byte ch); 577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static String nativeImGetPyStr(boolean decoded); 597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImGetPyStrLen(boolean decoded); 617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int[] nativeImGetSplStart(); 637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static String nativeImGetChoice(int choiceId); 657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImChoose(int choiceId); 677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImCancelLastChoice(); 697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImGetFixedLen(); 717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeImCancelInput(); 737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeImFlushCache(); 757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeImGetPredictsNum(String fixedStr); 777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static String nativeImGetPredictItem(int predictNo); 797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Sync related 817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static String nativeSyncUserDict(byte[] user_dict, String tomerge); 827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeSyncBegin(byte[] user_dict); 847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeSyncFinish(); 867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static String nativeSyncGetLemmas(); 887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeSyncPutLemmas(String tomerge); 907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeSyncGetLastCount(); 927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeSyncGetTotalCount(); 947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static boolean nativeSyncClearLastGot(); 967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project native static int nativeSyncGetCapacity(); 987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private final static int MAX_PATH_FILE_LENGTH = 100; 1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private static boolean inited = false; 1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private String mUsr_dict_file; 1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project static { 1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project try { 1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project System.loadLibrary("jni_pinyinime"); 1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } catch (UnsatisfiedLinkError ule) { 1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Log.e("PinyinDecoderService", 1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project "WARNING: Could not load jni_pinyinime natives"); 1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Get file name of the specified dictionary 1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private boolean getUsrDictFileName(byte usr_dict[]) { 1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == usr_dict) { 1167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 1177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = 0; i < mUsr_dict_file.length(); i++) 1207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project usr_dict[i] = (byte) mUsr_dict_file.charAt(i); 1217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project usr_dict[mUsr_dict_file.length()] = 0; 1227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return true; 1247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private void initPinyinEngine() { 1277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project byte usr_dict[]; 1287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project usr_dict = new byte[MAX_PATH_FILE_LENGTH]; 1297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // Here is how we open a built-in dictionary for access through 1317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // a file descriptor... 1327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project AssetFileDescriptor afd = getResources().openRawResourceFd( 1337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project R.raw.dict_pinyin); 1347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (Environment.getInstance().needDebug()) { 1357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Log 1367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project .i("foo", "Dict: start=" + afd.getStartOffset() 1377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project + ", length=" + afd.getLength() + ", fd=" 1387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project + afd.getParcelFileDescriptor()); 1397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (getUsrDictFileName(usr_dict)) { 1417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project inited = nativeImOpenDecoderFd(afd.getFileDescriptor(), afd 1427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project .getStartOffset(), afd.getLength(), usr_dict); 1437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project try { 1457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project afd.close(); 1467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } catch (IOException e) { 1477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project @Override 1517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void onCreate() { 1527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project super.onCreate(); 1537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project mUsr_dict_file = getFileStreamPath("usr_dict.dat").getPath(); 1547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // This is a hack to make sure our "files" directory has been 1557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project // created. 1567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project try { 1577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project openFileOutput("dummy", 0).close(); 1587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } catch (FileNotFoundException e) { 1597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } catch (IOException e) { 1607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project initPinyinEngine(); 1637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project @Override 1667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void onDestroy() { 1677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project nativeImCloseDecoder(); 1687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project inited = false; 1697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project super.onDestroy(); 1707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project private final IPinyinDecoderService.Stub mBinder = new IPinyinDecoderService.Stub() { 1737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int getInt() { 1747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return 12345; 1757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void setMaxLens(int maxSpsLen, int maxHzsLen) { 1787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project nativeImSetMaxLens(maxSpsLen, maxHzsLen); 1797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imSearch(byte[] pyBuf, int pyLen) { 1827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImSearch(pyBuf, pyLen); 1837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imDelSearch(int pos, boolean is_pos_in_splid, 1867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project boolean clear_fixed_this_step) { 1877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImDelSearch(pos, is_pos_in_splid, 1887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project clear_fixed_this_step); 1897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void imResetSearch() { 1927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project nativeImResetSearch(); 1937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imAddLetter(byte ch) { 1967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImAddLetter(ch); 1977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 1987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 1997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public String imGetPyStr(boolean decoded) { 2007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetPyStr(decoded); 2017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imGetPyStrLen(boolean decoded) { 2047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetPyStrLen(decoded); 2057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int[] imGetSplStart() { 2087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetSplStart(); 2097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public String imGetChoice(int choiceId) { 2127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetChoice(choiceId); 2137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public String imGetChoices(int choicesNum) { 2167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project String retStr = null; 2177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = 0; i < choicesNum; i++) { 2187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (null == retStr) 2197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project retStr = nativeImGetChoice(i); 2207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project else 2217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project retStr += " " + nativeImGetChoice(i); 2227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return retStr; 2247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public List<String> imGetChoiceList(int choicesStart, int choicesNum, 2277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project int sentFixedLen) { 2287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Vector<String> choiceList = new Vector<String>(); 2297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = choicesStart; i < choicesStart + choicesNum; i++) { 2307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project String retStr = nativeImGetChoice(i); 2317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (0 == i) retStr = retStr.substring(sentFixedLen); 2327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project choiceList.add(retStr); 2337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return choiceList; 2357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imChoose(int choiceId) { 2387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImChoose(choiceId); 2397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imCancelLastChoice() { 2427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImCancelLastChoice(); 2437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imGetFixedLen() { 2467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetFixedLen(); 2477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean imCancelInput() { 2507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImCancelInput(); 2517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void imFlushCache() { 2547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project nativeImFlushCache(); 2557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imGetPredictsNum(String fixedStr) { 2587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetPredictsNum(fixedStr); 2597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public String imGetPredictItem(int predictNo) { 2627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeImGetPredictItem(predictNo); 2637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public List<String> imGetPredictList(int predictsStart, int predictsNum) { 2667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project Vector<String> predictList = new Vector<String>(); 2677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project for (int i = predictsStart; i < predictsStart + predictsNum; i++) { 2687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project predictList.add(nativeImGetPredictItem(i)); 2697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return predictList; 2717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public String syncUserDict(String tomerge) { 2747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project byte usr_dict[]; 2757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project usr_dict = new byte[MAX_PATH_FILE_LENGTH]; 2767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (getUsrDictFileName(usr_dict)) { 2787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncUserDict(usr_dict, tomerge); 2797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return null; 2817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public boolean syncBegin() { 2847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project byte usr_dict[]; 2857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project usr_dict = new byte[MAX_PATH_FILE_LENGTH]; 2867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project if (getUsrDictFileName(usr_dict)) { 2887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncBegin(usr_dict); 2897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return false; 2917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void syncFinish() { 2947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project nativeSyncFinish(); 2957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 2967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 2977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int syncPutLemmas(String tomerge) { 2987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncPutLemmas(tomerge); 2997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public String syncGetLemmas() { 3027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncGetLemmas(); 3037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int syncGetLastCount() { 3067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncGetLastCount(); 3077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int syncGetTotalCount() { 3107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncGetTotalCount(); 3117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public void syncClearLastGot() { 3147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project nativeSyncClearLastGot(); 3157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public int imSyncGetCapacity() { 3187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return nativeSyncGetCapacity(); 3197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project }; 3217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project 3227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project @Override 3237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project public IBinder onBind(Intent intent) { 3247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project return mBinder; 3257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project } 3267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project} 327