UserDictionaryToolsList.java revision 77ffa9b0b986a2d70143f63cdaa8451bf1674f84
1053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/*
2053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Copyright (C) 2008,2009  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;
24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.graphics.Color;
25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.os.Bundle;
26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.os.Handler;
27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.text.TextUtils;
28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log;
29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Display;
30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Menu;
31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.MenuItem;
32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.MotionEvent;
33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.KeyEvent;
34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View;
35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.ViewGroup;
36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Window;
37053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.WindowManager;
38053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View.OnFocusChangeListener;
39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View.OnTouchListener;
40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TableLayout;
41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TableRow;
42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TextView;
43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.Toast;
44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/**
463feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The abstract class for user dictionary tool.
47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project *
487b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD.  All Rights Reserved.
49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */
50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic abstract class UserDictionaryToolsList extends Activity
51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    implements View.OnClickListener, OnTouchListener, OnFocusChangeListener {
52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The class name of the user dictionary tool */
54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected String  mListViewName;
55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The class name of the user dictionary editor */
56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected String  mEditViewName;
57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The package name of the user dictionary editor */
58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected String  mPackageName;
59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** ID of the menu item (add) */
61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MENU_ITEM_ADD = 0;
62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** ID of the menu item (edit) */
63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MENU_ITEM_EDIT = 1;
64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** ID of the menu item (delete) */
65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MENU_ITEM_DELETE = 2;
66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** ID of the menu item (initialize) */
67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MENU_ITEM_INIT = 3;
68053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** ID of the dialog control (confirm deletion) */
70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int DIALOG_CONTROL_DELETE_CONFIRM = 0;
71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** ID of the dialog control (confirm initialize) */
72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int DIALOG_CONTROL_INIT_CONFIRM = 1;
73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The size of font*/
75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int WORD_TEXT_SIZE = 16;
76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The color of background */
78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int UNFOCUS_BACKGROUND_COLOR = 0xFF242424;
79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int FOCUS_BACKGROUND_COLOR = 0xFFFF8500;
80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The minimum count of registered words */
82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MIN_WORD_COUNT = 0;
83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The maximum count of registered words */
84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MAX_WORD_COUNT = 100;
85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Maximum word count to display */
86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MAX_LIST_WORD_COUNT = 50;
87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Maximum word count to display (at the first step) */
88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int MAX_LIST_WORD_DELAY_COUNT = 50;
89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The threshold time of the double tapping */
91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final int DOUBLE_TAP_TIME = 300;
92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Widgets which constitute this screen of activity */
94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private Menu mMenu;
95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private TableLayout mTableLayout;
96053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static View sFocusingView = null;
97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static View sFocusingPairView = null;
98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** Objects which control state transitions */
100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private Intent mIntent;
101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private OpenWnnEvent mEvent;
102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private Handler mDelayUpdateHandler;
103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The number of the registered words */
105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int mWordCount = -1;
106053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The state of menu items */
108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mAddMenuEnabled;
109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mEditMenuEnabled;
110053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mDeleteMenuEnabled;
111053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mInitMenuEnabled;
112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1137b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** {@code true} if the menu option is initialized */
114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mInitializedMenu = false;
1157b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    /** {@code true} if one of word is selected */
116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mSelectedWords;
117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The viewID which is selected */
118053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private int mSelectedViewID = -1;
119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The viewID which was selected previously */
120053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static int sBeforeSelectedViewID = -1;
121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** The time of previous action */
122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private static long sJustBeforeActionTime = -1;
123053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
124053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean mHasCreatedList = false;
125053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
126053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
127053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Send the specified event to IME
128053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
129053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param ev    The event object
1307b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa     * @return      {@code true} if this event is processed
131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
132053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected abstract boolean sendEventToIME(OpenWnnEvent ev);
133053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
134053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
135053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Create the header
136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
137053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    protected abstract void  headerCreate();
138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see android.app.Activity#onCreate */
140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override protected void onCreate(Bundle savedInstanceState) {
141053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        super.onCreate(savedInstanceState);
144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mDelayUpdateHandler = new Handler();
146053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* create XML layout */
147053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
148053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        setContentView(R.layout.user_dictionary_tools_list);
149053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1503feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    }
1513feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa
1523feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    /** @see android.app.Activity#onStart */
1533feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    @Override protected void onStart() {
1543feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        super.onStart();
1553feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        sBeforeSelectedViewID = -1;
1563feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        sJustBeforeActionTime = -1;
157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        updateWordList();
1583feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    }
159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
1603feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    /** @see android.app.Activity#onStop */
1613feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    @Override protected void onStop() {
1623feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        super.onStop();
1633feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa        mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
166053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
167053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Set parameters of table
168053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
169053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  w        The width of the table
170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  h        The height of the table
171053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @return          The information of the layout
172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
173053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private TableLayout.LayoutParams tableCreateParam(int w, int h) {
174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return new TableLayout.LayoutParams(w, h);
175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
177053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see android.app.Activity#onCreateOptionsMenu */
178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public boolean onCreateOptionsMenu(Menu menu) {
179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
181053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* initialize the menu */
182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        menu.clear();
183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* set the menu item enable/disable */
184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        setOptionsMenuEnabled();
185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] add a word */
186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        menu.add(0, MENU_ITEM_ADD, 0, R.string.user_dictionary_add)
187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_add)
188053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setEnabled(mAddMenuEnabled);
189053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] edit a word */
190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        menu.add(0, MENU_ITEM_EDIT, 0, R.string.user_dictionary_edit)
191053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_edit)
192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setEnabled(mEditMenuEnabled);
193053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] delete a word */
194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        menu.add(0, MENU_ITEM_DELETE, 0, R.string.user_dictionary_delete)
195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_delete)
196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setEnabled(mDeleteMenuEnabled);
197053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] clear the dictionary */
198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        menu.add(1, MENU_ITEM_INIT, 0, R.string.user_dictionary_init)
199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setIcon(android.R.drawable.ic_menu_delete)
200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            .setEnabled(mInitMenuEnabled);
201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mMenu = menu;
203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mInitializedMenu = true;
204053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return super.onCreateOptionsMenu(menu);
207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Change state of the option menus according to a current state of the list widget
211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void setOptionsMenuEnabled() {
213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] add a word */
216053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if ((mWordCount >= MAX_WORD_COUNT) || !mHasCreatedList) {
217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* disable if the number of registered word exceeds MAX_WORD_COUNT */
218053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mAddMenuEnabled = false;
219053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
220053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mAddMenuEnabled = true;
221053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
222053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] edit a word/delete a word */
2247b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        if (mWordCount <= MIN_WORD_COUNT) {
225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* disable if no word is registered or no word is selected */
226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mEditMenuEnabled = false;
227053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mDeleteMenuEnabled = false;
228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
229053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mEditMenuEnabled = true;
230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mDeleteMenuEnabled = true;
231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
232053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* [menu] clear the dictionary (always enabled) */
234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mInitMenuEnabled = true;
235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
236053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see android.app.Activity#onOptionsItemSelected */
239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public boolean onOptionsItemSelected(MenuItem item) {
240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        boolean ret;
242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (item.getItemId()) {
243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case MENU_ITEM_ADD:
244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* add a word */
245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            wordAdd();
246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ret = true;
247053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
249053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case MENU_ITEM_EDIT:
250053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* edit the word (show dialog) */
251053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            wordEdit(sFocusingView, sFocusingPairView);
252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ret = true;
253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case MENU_ITEM_DELETE:
256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* delete the word (show dialog) */
257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            showDialog(DIALOG_CONTROL_DELETE_CONFIRM);
258053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ret = true;
259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
261053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case MENU_ITEM_INIT:
262053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* clear the dictionary (show dialog) */
263053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            showDialog(DIALOG_CONTROL_INIT_CONFIRM);
264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ret = true;
265053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
266053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ret = false;
269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return ret;
272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see android.app.Activity#onKeyUp */
275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override public boolean onKeyUp(int keyCode, KeyEvent event) {
276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        /* open the menu if KEYCODE_DPAD_CENTER is pressed */
277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            openOptionsMenu();
279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return true;
280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
281053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return false;
282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see android.app.Activity#onCreateDialog */
285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    @Override protected Dialog onCreateDialog(int id) {
286053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (id) {
287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DIALOG_CONTROL_DELETE_CONFIRM:
288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return new AlertDialog.Builder(UserDictionaryToolsList.this)
289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setMessage(R.string.user_dictionary_delete_confirm)
290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setNegativeButton(android.R.string.cancel, null)
291053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setPositiveButton(android.R.string.ok, mDialogDeleteWords)
292053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setCancelable(true)
293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .create();
294053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case DIALOG_CONTROL_INIT_CONFIRM:
296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return new AlertDialog.Builder(UserDictionaryToolsList.this)
297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setMessage(R.string.dialog_clear_user_dictionary_message)
298053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setNegativeButton(android.R.string.cancel, null)
299053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setPositiveButton(android.R.string.ok, mDialogInitWords)
300053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .setCancelable(true)
301053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                .create();
302053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
303053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        default:
304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            Log.e("OpenWnn", "onCreateDialog : Invaled Get DialogID. ID=" + id);
305053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
306053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
307053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
308053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
309053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return super.onCreateDialog(id);
310053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
312053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Process the event when the button on the "Delete word" dialog is pushed
314053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
315053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  dialog    The information of the dialog
316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  button    The button that is pushed
317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
318053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private DialogInterface.OnClickListener mDialogDeleteWords =
319053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        new DialogInterface.OnClickListener() {
320053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            public void onClick(DialogInterface dialog, int button) {
321053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
322053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                CharSequence focusString = ((TextView)sFocusingView).getText();
323053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                CharSequence focusPairString = ((TextView)sFocusingPairView).getText();
324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                WnnWord wnnWordSearch = new WnnWord();
325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
3267b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            if (mSelectedViewID > MAX_WORD_COUNT) {
327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    wnnWordSearch.stroke = focusPairString.toString();
328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    wnnWordSearch.candidate = focusString.toString();
329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else {
330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    wnnWordSearch.stroke = focusString.toString();
331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    wnnWordSearch.candidate = focusPairString.toString();
332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
333053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                boolean deleted = deleteWord(wnnWordSearch);
334053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (deleted) {
335053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    Toast.makeText(getApplicationContext(),
336053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                   R.string.user_dictionary_delete_complete,
337053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                   Toast.LENGTH_LONG).show();
338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else {
339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    Toast.makeText(getApplicationContext(),
340053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                   R.string.user_dictionary_delete_fail,
341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                   Toast.LENGTH_LONG).show();
3427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                return;
343053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
344053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                int id = mSelectedViewID;
3467b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            id = (MAX_WORD_COUNT < id) ? id - MAX_WORD_COUNT : id;
347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                View v = null;
348053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mTableLayout.removeView((View)sFocusingView.getParent());
350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
351053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                for (int i = id; i < MAX_WORD_COUNT; i++) {
352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    v = mTableLayout.findViewById(i);
353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if (v != null) {
354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        break;
355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
357053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (v == null) {
359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    for (int i = id; 0 <= i; i--) {
360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        v = mTableLayout.findViewById(i);
361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        if (v != null) {
362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                            break;
363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        }
364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (v != null) {
368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    ((View)v.getParent()).requestFocus();
369053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mWordCount--;
371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                leftText.setText(mWordCount + "/" + MAX_WORD_COUNT);
374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (mInitializedMenu) {
376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    onCreateOptionsMenu(mMenu);
377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        };
380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Process the event when the button on the "Initialize" dialog is pushed
383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  dialog    The information of the dialog
385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  button    The button that is pushed
386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private DialogInterface.OnClickListener mDialogInitWords =
388053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        new DialogInterface.OnClickListener() {
389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            public void onClick(DialogInterface dialog, int button) {
390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                /* clear the user dictionary */
392053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                OpenWnnEvent ev = new OpenWnnEvent(OpenWnnEvent.INITIALIZE_USER_DICTIONARY, new WnnWord());
393053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                sendEventToIME(ev);
395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                /* show the message */
396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                Toast.makeText(getApplicationContext(), R.string.dialog_clear_user_dictionary_done,
397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                               Toast.LENGTH_LONG).show();
398053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                updateWordList();
3997b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            if (mInitializedMenu) {
4007b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa                onCreateOptionsMenu(mMenu);
4017b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            }
402053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        };
404053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
4063feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    /** @see android.view.View.OnClickListener#onClick */
407053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void onClick(View arg0) {
408053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /** @see android.view.View.OnTouchListener#onTouch */
411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public boolean onTouch(View v, MotionEvent e) {
412053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mSelectedViewID = ((TextView)v).getId();
415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        switch (e.getAction()) {
416053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        case MotionEvent.ACTION_DOWN:
417053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* double tap handling */
418053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (sBeforeSelectedViewID != ((TextView)v).getId()) {
419053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                /* save the view id if the id is not same as previously selected one */
420053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                sBeforeSelectedViewID = ((TextView)v).getId();
421053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            } else {
422053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if ((e.getDownTime() - sJustBeforeActionTime) < DOUBLE_TAP_TIME) {
423053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    /* edit the word if double tapped */
424053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    sFocusingView = v;
425053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    sFocusingPairView = ((UserDictionaryToolsListFocus)v).getPairView();
426053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    wordEdit(sFocusingView, sFocusingPairView);
427053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
428053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
429053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            /* save the action time */
430053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            sJustBeforeActionTime = e.getDownTime();
431053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            break;
432053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
433053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
434053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return false;
435053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
436053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
4373feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa    /** @see android.view.View.OnFocusChangeListener#onFocusChange */
438053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void onFocusChange(View v, boolean hasFocus) {
439053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
440053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mSelectedViewID = ((TextView)v).getId();
441053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        sFocusingView = v;
442053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        sFocusingPairView = ((UserDictionaryToolsListFocus)v).getPairView();
443053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (hasFocus) {
444053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ((TextView)v).setTextColor(Color.BLACK);
445053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            v.setBackgroundColor(FOCUS_BACKGROUND_COLOR);
446053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ((TextView)sFocusingPairView).setTextColor(Color.BLACK);
447053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            sFocusingPairView.setBackgroundColor(FOCUS_BACKGROUND_COLOR);
448053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mSelectedWords = true;
449053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
450053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (mSelectedViewID == 0) {
451053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                mSelectedWords = false;
452053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
453053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ((TextView)v).setTextColor(Color.LTGRAY);
454053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            v.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
455053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            ((TextView)sFocusingPairView).setTextColor(Color.LTGRAY);
456053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            sFocusingPairView.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
457053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
458053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mInitializedMenu) {
459053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            onCreateOptionsMenu(mMenu);
460053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
461053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
462053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
463053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
464053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Add the word
465053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
466053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void wordAdd() {
467053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        screenTransition(Intent.ACTION_INSERT, mEditViewName);
468053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
469053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
470053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
471053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Edit the specified word
472053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
473053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  focusView       The information of view
474053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  focusPairView   The information of pair of view
475053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
476053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public void wordEdit(View focusView, View focusPairView) {
4777b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa        if (mSelectedViewID > MAX_WORD_COUNT) {
4787b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            createUserDictionaryToolsEdit(focusPairView, focusView);
479053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
4807b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa            createUserDictionaryToolsEdit(focusView, focusPairView);
481053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
482053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        screenTransition(Intent.ACTION_EDIT, mEditViewName);
483053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
484053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
485053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
486053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * The internal process of editing the specified word
487053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
488053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  focusView        The information of view
489053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  focusPairView    The information of pair of view
490053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
4917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa    protected abstract UserDictionaryToolsEdit createUserDictionaryToolsEdit(View focusView, View focusPairView);
492053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
493053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
494053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Delete the specified word
495053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
49677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param  searchword   The information of searching
49777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @return          {@code true} if success; {@code false} if fail.
498053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
499053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    public boolean deleteWord(WnnWord searchword) {
500053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        OpenWnnEvent event = new OpenWnnEvent(OpenWnnEvent.LIST_WORDS_IN_USER_DICTIONARY,
501053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                              WnnEngine.DICTIONARY_TYPE_USER,
502053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                              searchword);
503053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
504053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        boolean deleted = false;
505053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        sendEventToIME(event);
506053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        for( int i=0; i < MAX_WORD_COUNT; i++) {
507053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            WnnWord getword = new WnnWord();
508053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            event = new OpenWnnEvent(OpenWnnEvent.GET_WORD,
509053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                     getword);
510053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            sendEventToIME(event);
511053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            getword = event.word;
512053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            int len = getword.candidate.length();
513053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (len == 0) {
514053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
515053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
516053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (searchword.candidate.equals(getword.candidate)) {
517053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                WnnWord delword = new WnnWord();
518053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                delword.stroke = searchword.stroke;
519053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                delword.candidate = searchword.candidate;
520053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                delword.id = i;
521053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                event = new OpenWnnEvent(OpenWnnEvent.DELETE_WORD,
522053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                         delword);
523053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                deleted = sendEventToIME(event);
524053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
525053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
526053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
527053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
528053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (mInitializedMenu) {
529053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            onCreateOptionsMenu(mMenu);
530053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
531053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
532053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return deleted;
533053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
534053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
535053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
536053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
537053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Processing the transition of screen
538053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
539053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  action       The string of action
540053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * @param  classname    The class name
541053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
542053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void screenTransition(String action, String classname) {
543053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
544053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (action.equals("")) {
545053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mIntent = new Intent();
546053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
547053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mIntent = new Intent(action);
548053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
549053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mIntent.setClassName(mPackageName, classname);
550053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        startActivity(mIntent);
551053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        finish();
552053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
553053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
554053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
555053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
556053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Update the word list.
557053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
558053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private void updateWordList() {
559053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mWordCount = 0;
560053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        WnnWord wnnWordSearch = new WnnWord();
561053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mEvent = new OpenWnnEvent(OpenWnnEvent.LIST_WORDS_IN_USER_DICTIONARY,
562053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                  WnnEngine.DICTIONARY_TYPE_USER,
563053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                                  wnnWordSearch);
564053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        sendEventToIME(mEvent);
565053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
566053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mTableLayout = (TableLayout)findViewById(R.id.user_dictionary_tools_table);
567053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mTableLayout.removeAllViews();
568053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
569053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (createWordList(mWordCount,MAX_LIST_WORD_COUNT, this)) {
570053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            headerCreate();
571053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
572053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            leftText.setText(R.string.user_dictionary_creating_wordlist);
573053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
574053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mDelayUpdateHandler.postDelayed(updateWordListRunnable, 0);
575053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        } else {
576053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (mSelectedViewID >= 0) {
577053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                View v;
578053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                v = mTableLayout.findViewById(mSelectedViewID);
579053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (v != null) {
580053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    ((View)v.getParent()).requestFocus();
581053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else {
582053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mSelectedViewID--;
583053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if (mSelectedViewID < 0) {
584053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        mSelectedViewID = 0;
585053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
586053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    v = mTableLayout.findViewById(mSelectedViewID);
587053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if (v != null) {
588053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        ((View)v.getParent()).requestFocus();
589053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
590053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
591053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
592053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            headerCreate();
593053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
594053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            leftText.setText(mWordCount + "/" + MAX_WORD_COUNT);
595053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mHasCreatedList = true;
596053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
597053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
598053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
599053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
600053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Handler for updating the word list.
601053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
602053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private final Runnable updateWordListRunnable = new Runnable() {
603053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            public void run() {
604053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                UserDictionaryToolsList self = UserDictionaryToolsList.this;
605053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                if (createWordList(mWordCount,mWordCount+MAX_LIST_WORD_DELAY_COUNT, self)) {
606053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
607053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mDelayUpdateHandler.postDelayed(updateWordListRunnable, 0);
608053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                } else {
609053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mDelayUpdateHandler.removeCallbacks(updateWordListRunnable);
610053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    final TextView leftText = (TextView) findViewById(R.id.user_dictionary_tools_list_title_words_count);
611053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    leftText.setText(mWordCount + "/" + MAX_WORD_COUNT);
612053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    mHasCreatedList = true;
613053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    if (mInitializedMenu) {
614053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                        onCreateOptionsMenu(mMenu);
615053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                    }
616053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                }
617053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
618053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        };
619053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
620053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    /**
621053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     * Create the list of words.
622053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     *
62377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param  position     Start position to create the list
62477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param  max          Maximum number of words to display
62577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @param  self         UserDictionaryToolsList
62677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa     * @return          {@code true} if more words undisplayed; {@code false} if no more.
627053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project     */
628053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    private boolean createWordList(int position ,int max, UserDictionaryToolsList self) {
629053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        boolean ret = true;
630053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
631053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        if (position >= MAX_WORD_COUNT) {
632053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            return false;
633053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
634053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Window window = getWindow();
635053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        WindowManager windowManager = window.getWindowManager();
636053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        Display display = windowManager.getDefaultDisplay();
637053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int system_width = display.getWidth();
638053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        WnnWord wnnWordGet = new WnnWord();
639053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mEvent = new OpenWnnEvent(OpenWnnEvent.GET_WORD, wnnWordGet);
640053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
641053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        int i;
642053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        for (i = position; i < max; i++) {
643053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (!sendEventToIME(mEvent)) {
644053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                ret =  false;
645053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
646053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
647053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            wnnWordGet = mEvent.word;
648053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            int len_stroke = wnnWordGet.stroke.length();
649053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            int len_candidate = wnnWordGet.candidate.length();
650053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            if (len_stroke == 0 || len_candidate == 0) {
651053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                ret =  false;
652053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project                break;
653053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            }
654053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
655053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mWordCount++;
656053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            TableRow row = new TableRow(self);
657053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            UserDictionaryToolsListFocus stroke = new UserDictionaryToolsListFocus(self);
658053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setId(mWordCount);
659053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setText(wnnWordGet.stroke);
660053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setWidth(system_width/2);
661053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setTextSize(WORD_TEXT_SIZE);
662053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setTextColor(Color.LTGRAY);
663053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
664053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setSingleLine();
665053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setPadding(1,0,1,1);
666053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setEllipsize(TextUtils.TruncateAt.END);
667053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setClickable(true);
668053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setFocusable(true);
669053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setFocusableInTouchMode(true);
670053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setOnTouchListener(self);
671053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setOnFocusChangeListener(self);
672053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
673053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            UserDictionaryToolsListFocus candidate = new UserDictionaryToolsListFocus(self);
674053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setId(mWordCount+MAX_WORD_COUNT);
675053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setText(wnnWordGet.candidate);
676053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setWidth(system_width/2);
677053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setTextSize(WORD_TEXT_SIZE);
678053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setTextColor(Color.LTGRAY);
679053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setBackgroundColor(UNFOCUS_BACKGROUND_COLOR);
680053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setSingleLine();
681053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setPadding(1,0,1,1);
682053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setEllipsize(TextUtils.TruncateAt.END);
683053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setClickable(true);
684053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setFocusable(true);
685053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setFocusableInTouchMode(true);
686053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setOnTouchListener(self);
687053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setOnFocusChangeListener(self);
688053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
689053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            stroke.setPairView(candidate);
690053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            candidate.setPairView(stroke);
691053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project
692053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            row.addView(stroke);
693053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            row.addView(candidate);
694053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project            mTableLayout.addView(row, tableCreateParam(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
695053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        }
696053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        mTableLayout.requestLayout();
697053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project        return ret;
698053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project    }
699053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project}
700