1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/* 259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Copyright (C) 2008-2012 OMRON SOFTWARE Co., Ltd. 3053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 4053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * you may not use this file except in compliance with the License. 6053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * You may obtain a copy of the License at 7053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 8053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 10053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * See the License for the specific language governing permissions and 14053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * limitations under the License. 15053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 16053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 17053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpackage jp.co.omronsoft.openwnn; 18053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 19053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.app.Activity; 20053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.app.AlertDialog; 21053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.app.Dialog; 22053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.DialogInterface; 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.Intent; 2459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.content.res.Configuration; 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.graphics.Color; 2659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.graphics.Paint.FontMetricsInt; 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.os.Bundle; 2859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.text.TextPaint; 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.text.TextUtils; 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log; 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Display; 3259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monmaimport android.view.Gravity; 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Menu; 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.MenuItem; 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.MotionEvent; 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.KeyEvent; 37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View; 38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.ViewGroup; 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Window; 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.WindowManager; 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View.OnFocusChangeListener; 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View.OnTouchListener; 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TableLayout; 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TableRow; 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TextView; 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.Toast; 47e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport android.widget.Button; 48e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 49e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport java.util.ArrayList; 50e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport java.util.Arrays; 51e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawaimport java.util.Comparator; 52e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 553feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The abstract class for user dictionary tool. 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 577b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD. All Rights Reserved. 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic abstract class UserDictionaryToolsList extends Activity 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project implements View.OnClickListener, OnTouchListener, OnFocusChangeListener { 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The class name of the user dictionary tool */ 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected String mListViewName; 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The class name of the user dictionary editor */ 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected String mEditViewName; 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The package name of the user dictionary editor */ 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected String mPackageName; 68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** ID of the menu item (add) */ 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int MENU_ITEM_ADD = 0; 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** ID of the menu item (edit) */ 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int MENU_ITEM_EDIT = 1; 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** ID of the menu item (delete) */ 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int MENU_ITEM_DELETE = 2; 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** ID of the menu item (initialize) */ 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int MENU_ITEM_INIT = 3; 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** ID of the dialog control (confirm deletion) */ 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int DIALOG_CONTROL_DELETE_CONFIRM = 0; 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** ID of the dialog control (confirm initialize) */ 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int DIALOG_CONTROL_INIT_CONFIRM = 1; 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The size of font*/ 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int WORD_TEXT_SIZE = 16; 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 86e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** The color of background (unfocused item) */ 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int UNFOCUS_BACKGROUND_COLOR = 0xFF242424; 88e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** The color of background (focused item) */ 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int FOCUS_BACKGROUND_COLOR = 0xFFFF8500; 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The minimum count of registered words */ 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int MIN_WORD_COUNT = 0; 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The maximum count of registered words */ 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int MAX_WORD_COUNT = 100; 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Maximum word count to display */ 96e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private final int MAX_LIST_WORD_COUNT = 100; 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The threshold time of the double tapping */ 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private final int DOUBLE_TAP_TIME = 300; 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Widgets which constitute this screen of activity */ 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private Menu mMenu; 103e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Table layout for the lists */ 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private TableLayout mTableLayout; 105e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Focusing view */ 106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static View sFocusingView = null; 107e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Focusing pair view */ 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static View sFocusingPairView = null; 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Objects which control state transitions */ 111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private Intent mIntent; 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The number of the registered words */ 114e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private int mWordCount = 0; 115053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 116e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** The state of "Add" menu item */ 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mAddMenuEnabled; 118e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** The state of "Edit" menu item */ 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mEditMenuEnabled; 120e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** The state of "Delete" menu item */ 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mDeleteMenuEnabled; 122e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** The state of "Initialize" menu item */ 123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mInitMenuEnabled; 124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1257b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** {@code true} if the menu option is initialized */ 126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mInitializedMenu = false; 1277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** {@code true} if one of word is selected */ 128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean mSelectedWords; 129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The viewID which is selected */ 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private int mSelectedViewID = -1; 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The viewID which was selected previously */ 132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static int sBeforeSelectedViewID = -1; 133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The time of previous action */ 134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static long sJustBeforeActionTime = -1; 135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 136e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** List of the words in the user dictionary */ 137e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private ArrayList<WnnWord> mWordList = null; 138e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 139e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Work area for sorting the word list */ 140e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private WnnWord[] mSortData; 141e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 142e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Whether the view is initialized */ 143e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private boolean mInit = false; 144e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 145e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Page left button */ 146e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private Button mLeftButton = null; 147e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 148e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Page right button */ 149e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private Button mRightButton = null; 150053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 15159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** for isXLarge */ 15259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma private static boolean mIsXLarge = false; 15359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Send the specified event to IME 156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param ev The event object 1587b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * @return {@code true} if this event is processed 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected abstract boolean sendEventToIME(OpenWnnEvent ev); 161e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** Get the comparator for sorting the list */ 162e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa protected abstract Comparator<WnnWord> getComparator(); 163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 16459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** Show Dialog Num */ 16559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma private int mDialogShow = -1; 166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.app.Activity#onCreate */ 168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override protected void onCreate(Bundle savedInstanceState) { 169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.onCreate(savedInstanceState); 172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* create XML layout */ 174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project setContentView(R.layout.user_dictionary_tools_list); 175e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mTableLayout = (TableLayout)findViewById(R.id.user_dictionary_tools_table); 176e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 177e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa Button b = (Button)findViewById(R.id.user_dictionary_left_button); 178e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa b.setOnClickListener(new View.OnClickListener() { 179e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa public void onClick(View v) { 180e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int pos = mWordCount - MAX_LIST_WORD_COUNT; 181e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (0 <= pos) { 182e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordCount = pos; 183e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa updateWordList(); 184e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mTableLayout.findViewById(1).requestFocus(); 185e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 186e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 187e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa }); 188e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mLeftButton = b; 189e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 190e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa b = (Button)findViewById(R.id.user_dictionary_right_button); 191e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa b.setOnClickListener(new View.OnClickListener() { 192e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa public void onClick(View v) { 193e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int pos = mWordCount + MAX_LIST_WORD_COUNT; 194e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (pos < mWordList.size()) { 195e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordCount = pos; 196e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa updateWordList(); 197e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mTableLayout.findViewById(1).requestFocus(); 198e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 199e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 200e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa }); 201e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mRightButton = b; 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 2033feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa } 2043feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa 2053feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa /** @see android.app.Activity#onStart */ 2063feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa @Override protected void onStart() { 2073feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa super.onStart(); 20859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = -1; 2093feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa sBeforeSelectedViewID = -1; 2103feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa sJustBeforeActionTime = -1; 211e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordList = getWords(); 212e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 213e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count); 214e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa leftText.setText(mWordList.size() + "/" + MAX_WORD_COUNT); 215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 21659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mIsXLarge = ((getResources().getConfiguration().screenLayout & 21759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma Configuration.SCREENLAYOUT_SIZE_MASK) 21859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma == Configuration.SCREENLAYOUT_SIZE_XLARGE); 219e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa updateWordList(); 220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 22359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Called when the system is about to start resuming a previous activity. 22459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 22559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @see android.app.Activity#onPause 22659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 22759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma @Override protected void onPause() { 22859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 22959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (mDialogShow == DIALOG_CONTROL_DELETE_CONFIRM) { 23059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma dismissDialog(DIALOG_CONTROL_DELETE_CONFIRM); 23159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = -1; 23259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } else if (mDialogShow == DIALOG_CONTROL_INIT_CONFIRM){ 23359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma dismissDialog(DIALOG_CONTROL_INIT_CONFIRM); 23459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = -1; 23559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 23659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 23759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma super.onPause(); 23859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 23959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 24059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Set parameters of table 242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param w The width of the table 244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param h The height of the table 245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @return The information of the layout 246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private TableLayout.LayoutParams tableCreateParam(int w, int h) { 248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return new TableLayout.LayoutParams(w, h); 249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.app.Activity#onCreateOptionsMenu */ 252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public boolean onCreateOptionsMenu(Menu menu) { 253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* initialize the menu */ 256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project menu.clear(); 257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* set the menu item enable/disable */ 258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project setOptionsMenuEnabled(); 259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] add a word */ 260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project menu.add(0, MENU_ITEM_ADD, 0, R.string.user_dictionary_add) 261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setIcon(android.R.drawable.ic_menu_add) 262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setEnabled(mAddMenuEnabled); 263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] edit a word */ 264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project menu.add(0, MENU_ITEM_EDIT, 0, R.string.user_dictionary_edit) 265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setIcon(android.R.drawable.ic_menu_edit) 266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setEnabled(mEditMenuEnabled); 267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] delete a word */ 268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project menu.add(0, MENU_ITEM_DELETE, 0, R.string.user_dictionary_delete) 269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setIcon(android.R.drawable.ic_menu_delete) 270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setEnabled(mDeleteMenuEnabled); 271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] clear the dictionary */ 272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project menu.add(1, MENU_ITEM_INIT, 0, R.string.user_dictionary_init) 273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setIcon(android.R.drawable.ic_menu_delete) 274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setEnabled(mInitMenuEnabled); 275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mMenu = menu; 277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mInitializedMenu = true; 278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return super.onCreateOptionsMenu(menu); 281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Change state of the option menus according to a current state of the list widget 285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void setOptionsMenuEnabled() { 287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] add a word */ 290e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (mWordList.size() >= MAX_WORD_COUNT) { 291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* disable if the number of registered word exceeds MAX_WORD_COUNT */ 292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mAddMenuEnabled = false; 293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mAddMenuEnabled = true; 295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] edit a word/delete a word */ 298e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (mWordList.size() <= MIN_WORD_COUNT) { 299053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* disable if no word is registered or no word is selected */ 300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEditMenuEnabled = false; 301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mDeleteMenuEnabled = false; 302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEditMenuEnabled = true; 304e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (mSelectedWords) { 305e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mDeleteMenuEnabled = true; 306e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } else { 307e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mDeleteMenuEnabled = false; 308e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* [menu] clear the dictionary (always enabled) */ 312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mInitMenuEnabled = true; 313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.app.Activity#onOptionsItemSelected */ 317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public boolean onOptionsItemSelected(MenuItem item) { 318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project boolean ret; 320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (item.getItemId()) { 321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case MENU_ITEM_ADD: 322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* add a word */ 323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wordAdd(); 324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = true; 325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case MENU_ITEM_EDIT: 328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* edit the word (show dialog) */ 329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wordEdit(sFocusingView, sFocusingPairView); 330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = true; 331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 333053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case MENU_ITEM_DELETE: 334053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* delete the word (show dialog) */ 335053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project showDialog(DIALOG_CONTROL_DELETE_CONFIRM); 33659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = DIALOG_CONTROL_DELETE_CONFIRM; 337053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = true; 338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 340053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case MENU_ITEM_INIT: 341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* clear the dictionary (show dialog) */ 342053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project showDialog(DIALOG_CONTROL_INIT_CONFIRM); 34359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = DIALOG_CONTROL_INIT_CONFIRM; 344053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = true; 345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 346053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 348053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = false; 349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.app.Activity#onKeyUp */ 355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override public boolean onKeyUp(int keyCode, KeyEvent event) { 356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* open the menu if KEYCODE_DPAD_CENTER is pressed */ 357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project openOptionsMenu(); 359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 3610470b8581ba08779a7cc223c050e7b3556891f45Daisuke Miyakawa return super.onKeyUp(keyCode, event); 362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.app.Activity#onCreateDialog */ 365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project @Override protected Dialog onCreateDialog(int id) { 366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (id) { 367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case DIALOG_CONTROL_DELETE_CONFIRM: 368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return new AlertDialog.Builder(UserDictionaryToolsList.this) 369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setMessage(R.string.user_dictionary_delete_confirm) 370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setNegativeButton(android.R.string.cancel, null) 371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setPositiveButton(android.R.string.ok, mDialogDeleteWords) 372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setCancelable(true) 373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .create(); 374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case DIALOG_CONTROL_INIT_CONFIRM: 376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return new AlertDialog.Builder(UserDictionaryToolsList.this) 377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setMessage(R.string.dialog_clear_user_dictionary_message) 378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setNegativeButton(android.R.string.cancel, null) 379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setPositiveButton(android.R.string.ok, mDialogInitWords) 380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setCancelable(true) 381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .create(); 382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Log.e("OpenWnn", "onCreateDialog : Invaled Get DialogID. ID=" + id); 385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return super.onCreateDialog(id); 390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Process the event when the button on the "Delete word" dialog is pushed 394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param dialog The information of the dialog 396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param button The button that is pushed 397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 398053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private DialogInterface.OnClickListener mDialogDeleteWords = 399053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project new DialogInterface.OnClickListener() { 400053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onClick(DialogInterface dialog, int button) { 401053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 40259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = -1; 403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project CharSequence focusString = ((TextView)sFocusingView).getText(); 404053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project CharSequence focusPairString = ((TextView)sFocusingPairView).getText(); 405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord wnnWordSearch = new WnnWord(); 406053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 407e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (mSelectedViewID > MAX_WORD_COUNT) { 408053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wnnWordSearch.stroke = focusPairString.toString(); 409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wnnWordSearch.candidate = focusString.toString(); 410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wnnWordSearch.stroke = focusString.toString(); 412053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wnnWordSearch.candidate = focusPairString.toString(); 413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project boolean deleted = deleteWord(wnnWordSearch); 415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (deleted) { 416053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.makeText(getApplicationContext(), 417053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project R.string.user_dictionary_delete_complete, 418053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.LENGTH_LONG).show(); 419053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 420053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.makeText(getApplicationContext(), 421053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project R.string.user_dictionary_delete_fail, 422053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.LENGTH_LONG).show(); 423e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa return; 424053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 425053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 426e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordList = getWords(); 427e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int size = mWordList.size(); 428e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (size <= mWordCount) { 429e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int newPos = (mWordCount - MAX_LIST_WORD_COUNT); 430e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordCount = (0 <= newPos) ? newPos : 0; 431053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 432e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa updateWordList(); 433053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 434053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count); 435e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa leftText.setText(size + "/" + MAX_WORD_COUNT); 436053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 437053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInitializedMenu) { 438053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project onCreateOptionsMenu(mMenu); 439053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 440053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 441053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project }; 442053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 443053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 444053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Process the event when the button on the "Initialize" dialog is pushed 445053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 446053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param dialog The information of the dialog 447053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param button The button that is pushed 448053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 449053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private DialogInterface.OnClickListener mDialogInitWords = 450053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project new DialogInterface.OnClickListener() { 451053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onClick(DialogInterface dialog, int button) { 452053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 45359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma mDialogShow = -1; 454053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* clear the user dictionary */ 455053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project OpenWnnEvent ev = new OpenWnnEvent(OpenWnnEvent.INITIALIZE_USER_DICTIONARY, new WnnWord()); 456053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 457053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sendEventToIME(ev); 458053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* show the message */ 459053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.makeText(getApplicationContext(), R.string.dialog_clear_user_dictionary_done, 460053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.LENGTH_LONG).show(); 461e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordList = new ArrayList<WnnWord>(); 462e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mWordCount = 0; 463053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project updateWordList(); 464e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count); 465e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa leftText.setText(mWordList.size() + "/" + MAX_WORD_COUNT); 466e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 467e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (mInitializedMenu) { 468e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa onCreateOptionsMenu(mMenu); 469e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 470053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 471053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project }; 472053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 473053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 4743feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa /** @see android.view.View.OnClickListener#onClick */ 475053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onClick(View arg0) { 476053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 477053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 478053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** @see android.view.View.OnTouchListener#onTouch */ 479053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean onTouch(View v, MotionEvent e) { 480053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 481053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 482053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSelectedViewID = ((TextView)v).getId(); 483053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (e.getAction()) { 484053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case MotionEvent.ACTION_DOWN: 485053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* double tap handling */ 486053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (sBeforeSelectedViewID != ((TextView)v).getId()) { 487053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* save the view id if the id is not same as previously selected one */ 488053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sBeforeSelectedViewID = ((TextView)v).getId(); 489053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 490053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((e.getDownTime() - sJustBeforeActionTime) < DOUBLE_TAP_TIME) { 491053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* edit the word if double tapped */ 492053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingView = v; 493053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingPairView = ((UserDictionaryToolsListFocus)v).getPairView(); 494053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wordEdit(sFocusingView, sFocusingPairView); 495053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 496053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 497053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /* save the action time */ 498053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sJustBeforeActionTime = e.getDownTime(); 499053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 500053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 501053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 502053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 503053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 504053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 5053feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa /** @see android.view.View.OnFocusChangeListener#onFocusChange */ 506053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onFocusChange(View v, boolean hasFocus) { 507053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 508053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSelectedViewID = ((TextView)v).getId(); 509053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingView = v; 510053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingPairView = ((UserDictionaryToolsListFocus)v).getPairView(); 511053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (hasFocus) { 512053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ((TextView)v).setTextColor(Color.BLACK); 513053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project v.setBackgroundColor(FOCUS_BACKGROUND_COLOR); 514053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ((TextView)sFocusingPairView).setTextColor(Color.BLACK); 515053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingPairView.setBackgroundColor(FOCUS_BACKGROUND_COLOR); 516053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mSelectedWords = true; 517053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 518e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mSelectedWords = false; 519053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ((TextView)v).setTextColor(Color.LTGRAY); 520053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project v.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR); 521053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ((TextView)sFocusingPairView).setTextColor(Color.LTGRAY); 522053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingPairView.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR); 523053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 524053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInitializedMenu) { 525053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project onCreateOptionsMenu(mMenu); 526053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 527053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 528053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 529053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 530053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Add the word 531053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 532053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void wordAdd() { 533e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /** change to the edit window */ 534053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project screenTransition(Intent.ACTION_INSERT, mEditViewName); 535053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 536053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 537053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 538053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Edit the specified word 539053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 540053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param focusView The information of view 541053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param focusPairView The information of pair of view 542053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 543053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void wordEdit(View focusView, View focusPairView) { 5447b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa if (mSelectedViewID > MAX_WORD_COUNT) { 5457b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa createUserDictionaryToolsEdit(focusPairView, focusView); 546053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 5477b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa createUserDictionaryToolsEdit(focusView, focusPairView); 548053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 549053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project screenTransition(Intent.ACTION_EDIT, mEditViewName); 550053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 551053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 552053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 553053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * The internal process of editing the specified word 554053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 555053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param focusView The information of view 556053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param focusPairView The information of pair of view 557053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 5587b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa protected abstract UserDictionaryToolsEdit createUserDictionaryToolsEdit(View focusView, View focusPairView); 559053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 560053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 561053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Delete the specified word 562053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 56377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @param searchword The information of searching 56477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @return {@code true} if success; {@code false} if fail. 565053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 566053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public boolean deleteWord(WnnWord searchword) { 567053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project OpenWnnEvent event = new OpenWnnEvent(OpenWnnEvent.LIST_WORDS_IN_USER_DICTIONARY, 568053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnEngine.DICTIONARY_TYPE_USER, 569053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project searchword); 570053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 571053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project boolean deleted = false; 572053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sendEventToIME(event); 573053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project for( int i=0; i < MAX_WORD_COUNT; i++) { 574053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord getword = new WnnWord(); 575053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project event = new OpenWnnEvent(OpenWnnEvent.GET_WORD, 576053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project getword); 577053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sendEventToIME(event); 578053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project getword = event.word; 579053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int len = getword.candidate.length(); 580053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (len == 0) { 581053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 582053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 583053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (searchword.candidate.equals(getword.candidate)) { 584053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord delword = new WnnWord(); 585053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project delword.stroke = searchword.stroke; 586053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project delword.candidate = searchword.candidate; 587053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project delword.id = i; 588053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project event = new OpenWnnEvent(OpenWnnEvent.DELETE_WORD, 589053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project delword); 590053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project deleted = sendEventToIME(event); 591053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 592053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 593053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 594053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 595053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (mInitializedMenu) { 596053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project onCreateOptionsMenu(mMenu); 597053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 598053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 599053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return deleted; 600053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 601053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 602053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 603053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 604053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Processing the transition of screen 605053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 606053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param action The string of action 607053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param classname The class name 608053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 609053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void screenTransition(String action, String classname) { 610053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 611053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (action.equals("")) { 612053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mIntent = new Intent(); 613053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 614053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mIntent = new Intent(action); 615053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 616053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mIntent.setClassName(mPackageName, classname); 617053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project startActivity(mIntent); 618053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project finish(); 619053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 620053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 621053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 622e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * Get the list of words in the user dictionary. 623e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * @return The list of words 624053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 625e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private ArrayList<WnnWord> getWords() { 626e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa WnnWord word = new WnnWord(); 627e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa OpenWnnEvent event = new OpenWnnEvent(OpenWnnEvent.LIST_WORDS_IN_USER_DICTIONARY, 628e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa WnnEngine.DICTIONARY_TYPE_USER, 629e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa word); 630e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa sendEventToIME(event); 631053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 632e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa ArrayList<WnnWord> list = new ArrayList<WnnWord>(); 633e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa for (int i = 0; i < MAX_WORD_COUNT; i++) { 634e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa event = new OpenWnnEvent(OpenWnnEvent.GET_WORD, word); 635e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (!sendEventToIME(event)) { 636e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa break; 637053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 638e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa list.add(event.word); 639053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 640e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 641e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa compareTo(list); 642e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 643e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa return list; 644053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 645053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 646053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 647e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * Sort the list of words 648e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * @param array The array list of the words 649053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 650e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa protected void compareTo(ArrayList<WnnWord> array) { 651e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mSortData = new WnnWord[array.size()]; 652e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa array.toArray(mSortData); 653e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa Arrays.sort(mSortData, getComparator()); 654e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 655e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 656e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 657053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 658e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa * Update the word list. 659053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 660e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa private void updateWordList() { 661e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (!mInit) { 662e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mInit = true; 663e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mSelectedViewID = 1; 664e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 665e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa Window window = getWindow(); 666e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa WindowManager windowManager = window.getWindowManager(); 667e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa Display display = windowManager.getDefaultDisplay(); 668e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int system_width = display.getWidth(); 669e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 67059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma UserDictionaryToolsListFocus dummy = new UserDictionaryToolsListFocus(this); 67159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma dummy.setTextSize(WORD_TEXT_SIZE); 67259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma TextPaint paint = dummy.getPaint(); 67359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma FontMetricsInt fontMetrics = paint.getFontMetricsInt(); 67459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma int row_hight = (Math.abs(fontMetrics.top) + fontMetrics.bottom) * 2; 67559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 676e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa for (int i = 1; i <= MAX_LIST_WORD_COUNT; i++) { 677e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa TableRow row = new TableRow(this); 678e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa UserDictionaryToolsListFocus stroke = new UserDictionaryToolsListFocus(this); 679e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setId(i); 680e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setWidth(system_width/2); 681e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setTextSize(WORD_TEXT_SIZE); 682e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setTextColor(Color.LTGRAY); 683e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR); 684e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setSingleLine(); 685e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setPadding(1,0,1,1); 686e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setEllipsize(TextUtils.TruncateAt.END); 687e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setClickable(true); 688e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setFocusable(true); 689e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setFocusableInTouchMode(true); 690e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setOnTouchListener(this); 691e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setOnFocusChangeListener(this); 69259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (isXLarge()) { 69359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma stroke.setHeight(row_hight); 69459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma stroke.setGravity(Gravity.CENTER_VERTICAL); 69559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 696e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 697e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa UserDictionaryToolsListFocus candidate = new UserDictionaryToolsListFocus(this); 698e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setId(i+MAX_WORD_COUNT); 699e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setWidth(system_width/2); 700e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setTextSize(WORD_TEXT_SIZE); 701e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setTextColor(Color.LTGRAY); 702e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR); 703e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setSingleLine(); 704e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setPadding(1,0,1,1); 705e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setEllipsize(TextUtils.TruncateAt.END); 706e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setClickable(true); 707e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setFocusable(true); 708e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setFocusableInTouchMode(true); 709e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setOnTouchListener(this); 710e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setOnFocusChangeListener(this); 711e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 71259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma if (isXLarge()) { 71359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma candidate.setHeight(row_hight); 71459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma candidate.setGravity(Gravity.CENTER_VERTICAL); 71559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 716e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa stroke.setPairView(candidate); 717e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa candidate.setPairView(stroke); 718e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 719e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa row.addView(stroke); 720e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa row.addView(candidate); 7210f28cd7d2d4967ce9a796497387e8dbfd19666c6Romain Guy mTableLayout.addView(row, tableCreateParam(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 722e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 723e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 724e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 725e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int size = mWordList.size(); 726e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int start = mWordCount; 727e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 728e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa TextView t = (TextView)findViewById(R.id.user_dictionary_position_indicator); 729e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (size <= MAX_LIST_WORD_COUNT) { 730e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa ((View)mLeftButton.getParent()).setVisibility(View.GONE); 731e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } else { 732e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa ((View)mLeftButton.getParent()).setVisibility(View.VISIBLE); 733e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int last = (start + MAX_LIST_WORD_COUNT); 734e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa t.setText((start + 1) + " - " + Math.min(last, size)); 735e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 736e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mLeftButton.setEnabled(start != 0); 737e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mRightButton.setEnabled(last < size); 738053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 739e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 740e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa int selectedId = mSelectedViewID - ((MAX_WORD_COUNT < mSelectedViewID) ? MAX_WORD_COUNT : 0); 741053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 742e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa for (int i = 0; i < MAX_LIST_WORD_COUNT; i++) { 743e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if ((size - 1) < (start + i)) { 744e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if ((0 < i) && (selectedId == (i + 1))) { 745e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mTableLayout.findViewById(i).requestFocus(); 746e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 747e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 748e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa ((View)(mTableLayout.findViewById(i + 1)).getParent()).setVisibility(View.GONE); 749e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa continue; 750053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 751e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 752e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa WnnWord wnnWordGet; 753e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa wnnWordGet = mSortData[start + i]; 754053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int len_stroke = wnnWordGet.stroke.length(); 755053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int len_candidate = wnnWordGet.candidate.length(); 756053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (len_stroke == 0 || len_candidate == 0) { 757053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 758053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 759053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 760e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa if (selectedId == i + 1) { 761e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mTableLayout.findViewById(i + 1).requestFocus(); 762e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 763e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 764e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa TextView text = (TextView)mTableLayout.findViewById(i + 1); 765e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa text.setText(wnnWordGet.stroke); 766e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa text = (TextView)mTableLayout.findViewById(i + 1 + MAX_WORD_COUNT); 767e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa text.setText(wnnWordGet.candidate); 768e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa ((View)text.getParent()).setVisibility(View.VISIBLE); 769053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 770053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mTableLayout.requestLayout(); 771053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 77259aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 77359aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma /** 77459aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * Whether the x large mode. 77559aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * 77659aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma * @return {@code true} if x large; {@code false} if not x large. 77759aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma */ 77859aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma public static boolean isXLarge() { 77959aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma return mIsXLarge; 78059aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma } 78159aefa242169b7a51c2381daee58ff22fd1834ceJunichi Monma 782053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 783