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; 223feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawaimport android.content.DialogInterface; 23053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.content.Intent; 24053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.os.Bundle; 25053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.text.Editable; 26053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.text.TextWatcher; 27053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.util.Log; 28053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.KeyEvent; 29053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.View; 30053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.view.Window; 31053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.Button; 32053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.EditText; 33053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.TextView; 34053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectimport android.widget.Toast; 35053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 36053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project/** 373feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * The abstract class for user dictionary's word editor. 383feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa * 39053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @author Copyright (C) 2009, OMRON SOFTWARE CO., LTD. All Rights Reserved. 40053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 41053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Projectpublic abstract class UserDictionaryToolsEdit extends Activity implements View.OnClickListener { 42053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The class information for intent(Set this informations in the extend class) */ 43053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected String mListViewName; 44053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The class information for intent(Set this informations in the extend class) */ 45053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected String mPackageName; 46053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 47053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The operation mode (Unknown) */ 48053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int STATE_UNKNOWN = 0; 49053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The operation mode (Add the word) */ 50053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int STATE_INSERT = 1; 51053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The operation mode (Edit the word) */ 52053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int STATE_EDIT = 2; 53053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 54053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Maximum length of a word's string */ 55053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int MAX_TEXT_SIZE = 20; 56053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 57053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The error code (Already registered the same word) */ 58053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int RETURN_SAME_WORD = -11; 59053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 60053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The focus view and pair view */ 61053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static View sFocusingView = null; 62053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static View sFocusingPairView = null; 63053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 64053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** Widgets which constitute this screen of activity */ 65053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private EditText mReadEditText; 66053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private EditText mCandidateEditText; 67053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private Button mEntryButton; 683feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa private Button mCancelButton; 69053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 70053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The word information which contains the previous information */ 71053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private WnnWord mBeforeEditWnnWord; 72053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The instance of word list activity */ 73053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private UserDictionaryToolsList mListInstance; 74053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 75053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The constant for notifying dialog (Already exists the specified word) */ 76053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int DIALOG_CONTROL_WORDS_DUPLICATE = 0; 77053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The constant for notifying dialog (The length of specified stroke or candidate exceeds the limit) */ 78053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private static final int DIALOG_CONTROL_OVER_MAX_TEXT_SIZE = 1; 79053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 80053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** The operation mode of this activity */ 81053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private int mRequestState; 82053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 83053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 84053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 85053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 86053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public UserDictionaryToolsEdit() { 87053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super(); 88053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 89053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 90053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 91053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Constructor 92053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 93053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param focusView The information of view 94053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param focusPairView The information of pair of view 95053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 967b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa public UserDictionaryToolsEdit(View focusView, View focusPairView) { 97053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super(); 98053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingView = focusView; 99053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project sFocusingPairView = focusPairView; 100053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 101053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 102053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 103053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Send the specified event to IME 104053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 105053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param ev The event object 1067b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * @return {@code true} if this event is processed. 107053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 108053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected abstract boolean sendEventToIME(OpenWnnEvent ev); 109053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1107b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** @see android.app.Activity#onCreate */ 1117b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa @Override protected void onCreate(Bundle savedInstanceState) { 112053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 113053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project super.onCreate(savedInstanceState); 114053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1157b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* create view from XML layout */ 116053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project setContentView(R.layout.user_dictionary_tools_edit); 117053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1187b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* get widgets */ 119053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEntryButton = (Button)findViewById(R.id.addButton); 1203feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mCancelButton = (Button)findViewById(R.id.cancelButton); 121053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mReadEditText = (EditText)findViewById(R.id.editRead); 122053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateEditText = (EditText)findViewById(R.id.editCandidate); 1237b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 1247b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* set the listener */ 1257b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mEntryButton.setOnClickListener(this); 1263feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mCancelButton.setOnClickListener(this); 1277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 1287b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* initialize */ 1297b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mRequestState = STATE_UNKNOWN; 130053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mReadEditText.setSingleLine(); 131053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateEditText.setSingleLine(); 1327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 1337b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* get the request and do it */ 1347b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa Intent intent = getIntent(); 1357b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa String action = intent.getAction(); 136053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (action.equals(Intent.ACTION_INSERT)) { 13777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* add a word */ 138053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEntryButton.setEnabled(false); 139053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mRequestState = STATE_INSERT; 140053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else if (action.equals(Intent.ACTION_EDIT)) { 14177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* edit a word */ 142053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEntryButton.setEnabled(true); 143053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mReadEditText.setText(((TextView)sFocusingView).getText()); 144053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateEditText.setText(((TextView)sFocusingPairView).getText()); 145053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mRequestState = STATE_EDIT; 1467b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 1477b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* save the word's information before this edit */ 1487b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mBeforeEditWnnWord = new WnnWord(); 1497b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mBeforeEditWnnWord.stroke = ((TextView)sFocusingView).getText().toString(); 1507b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa mBeforeEditWnnWord.candidate = ((TextView)sFocusingPairView).getText().toString(); 151053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 15277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* finish if it is unknown request */ 153053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Log.e("OpenWnn", "onCreate() : Invaled Get Intent. ID=" + intent); 154053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project finish(); 155053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return; 156053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 157053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 158053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, 159053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project R.layout.user_dictionary_tools_edit_header); 160053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1617b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* set control buttons */ 162053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project setAddButtonControl(); 163053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 164053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 165053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 1667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** @see android.app.Activity#onKeyDown */ 1677b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa @Override public boolean onKeyDown(int keyCode, KeyEvent event) { 1687b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa if (keyCode == KeyEvent.KEYCODE_BACK) { 1697b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* go back to the word list view */ 170053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project screenTransition(); 1710470b8581ba08779a7cc223c050e7b3556891f45Daisuke Miyakawa return true; 172053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 1730470b8581ba08779a7cc223c050e7b3556891f45Daisuke Miyakawa return super.onKeyDown(keyCode, event); 174053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 175053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 176053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 1777b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * Change the state of the "Add" button into the depending state of input area. 178053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 179053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void setAddButtonControl() { 180053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 181e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* Text changed listener for the reading text */ 182053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mReadEditText.addTextChangedListener(new TextWatcher() { 183053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void afterTextChanged(Editable s) { 184053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 185053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void beforeTextChanged(CharSequence s, int start, int count, int after) { 186053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 187053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onTextChanged(CharSequence s, int start, int before, int count) { 188e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* Enable/disable the "Add" button */ 18977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa if ((mReadEditText.getText().toString().length() != 0) && 190053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (mCandidateEditText.getText().toString().length() != 0)) { 19177ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa mEntryButton.setEnabled(true); 192053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 19377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa mEntryButton.setEnabled(false); 194053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 195053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 196053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project }); 197e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* Text changed listener for the candidate text */ 198053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mCandidateEditText.addTextChangedListener(new TextWatcher() { 199053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void afterTextChanged(Editable s) { 200053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 201053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void beforeTextChanged(CharSequence s, int start, int count, int after) { 202053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 203053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onTextChanged(CharSequence s, int start, int before, int count) { 204e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* Enable/disable the "Add" button */ 205053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if ((mReadEditText.getText().toString().length() != 0) && 206053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project (mCandidateEditText.getText().toString().length() != 0)) { 207053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEntryButton.setEnabled(true); 208053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 209053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mEntryButton.setEnabled(false); 210053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 211053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 212053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project }); 213053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 214053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 215053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 2167b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /** @see android.view.View.OnClickListener */ 217053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project public void onClick(View v) { 2183feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa 2193feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mEntryButton.setEnabled(false); 2203feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mCancelButton.setEnabled(false); 2213feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa 22277ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa switch (v.getId()) { 223053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case R.id.addButton: 22477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* save the word */ 225053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project doSaveAction(); 226053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 2277b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 228053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case R.id.cancelButton: 22977ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* cancel the edit */ 230053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project doRevertAction(); 231053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 2327b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 233053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 234053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Log.e("OpenWnn", "onClick: Get Invalid ButtonID. ID=" + v.getId()); 235053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project finish(); 23677ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa return; 237053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 238053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 239053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 240053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 241053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Process the adding or editing action 242053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 243053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void doSaveAction() { 244053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 245053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project switch (mRequestState) { 246053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case STATE_INSERT: 24777ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* register a word */ 248053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (inputDataCheck(mReadEditText) && inputDataCheck(mCandidateEditText)) { 2497b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa String stroke = mReadEditText.getText().toString(); 2507b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa String candidate = mCandidateEditText.getText().toString(); 2517b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa if (addDictionary(stroke, candidate)) { 252053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project screenTransition(); 253053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 254053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 255053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 256053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 257053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case STATE_EDIT: 25877ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* edit a word (=delete the word selected & add the word edited) */ 259053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (inputDataCheck(mReadEditText) && inputDataCheck(mCandidateEditText)) { 260053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project deleteDictionary(mBeforeEditWnnWord); 2617b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa String stroke = mReadEditText.getText().toString(); 2627b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa String candidate = mCandidateEditText.getText().toString(); 2637b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa if (addDictionary(stroke, candidate)) { 264053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project screenTransition(); 2657b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa } else { 2667b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa addDictionary(mBeforeEditWnnWord.stroke, mBeforeEditWnnWord.candidate); 267053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 268053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 269053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 270053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 271053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project default: 272053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Log.e("OpenWnn", "doSaveAction: Invalid Add Status. Status=" + mRequestState); 273053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project break; 274053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 275053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 276053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 277053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 278053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Process the cancel action 279053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 280053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void doRevertAction() { 2817b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa /* go back to the words list */ 282053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project screenTransition(); 283053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 284053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 285053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 2867b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * Create the alert dialog for notifying the error 287053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 288053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param id The dialog ID 289053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @return The information of the dialog 290053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 2917b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa @Override protected Dialog onCreateDialog(int id) { 2927b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa switch (id) { 293053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case DIALOG_CONTROL_WORDS_DUPLICATE: 29477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* there is the same word in the dictionary */ 295053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return new AlertDialog.Builder(UserDictionaryToolsEdit.this) 296053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setIcon(android.R.drawable.ic_dialog_alert) 297053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setMessage(R.string.user_dictionary_words_duplication_message) 2983feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 2993feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa public void onClick(DialogInterface dialog, int whichButton) { 3003feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mEntryButton.setEnabled(true); 3013feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mCancelButton.setEnabled(true); 3023feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa } 3033feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa }) 304053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setCancelable(true) 305e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa .setOnCancelListener(new DialogInterface.OnCancelListener() { 306e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa public void onCancel(DialogInterface dialog) { 307e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mEntryButton.setEnabled(true); 308e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa mCancelButton.setEnabled(true); 309e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa } 310e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa }) 311053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .create(); 3127b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa 313053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project case DIALOG_CONTROL_OVER_MAX_TEXT_SIZE: 31477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa /* the length of the word exceeds the limit */ 31577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa return new AlertDialog.Builder(UserDictionaryToolsEdit.this) 316053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setIcon(android.R.drawable.ic_dialog_alert) 317053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setMessage(R.string.user_dictionary_over_max_text_size_message) 3183feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 3193feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa public void onClick(DialogInterface dialog, int witchButton) { 3203feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mEntryButton.setEnabled(true); 3213feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa mCancelButton.setEnabled(true); 3223feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa } 3233feb3d26d59be1626c59b72654020179e2b2ebe0Daisuke Miyakawa }) 324053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .setCancelable(true) 325053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project .create(); 326053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 327053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return super.onCreateDialog(id); 328053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 329053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 330053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 331053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Add the word 332053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 33377ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @param stroke The stroke of the word 33477ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @param candidate The string of the word 33577ffa9b0b986a2d70143f63cdaa8451bf1674f84Daisuke Miyakawa * @return {@code true} if success; {@code false} if fail. 336053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 3377b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa private boolean addDictionary(String stroke, String candidate) { 338053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project boolean ret; 339053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 340e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* create WnnWord from the strings */ 341053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnWord wnnWordAdd = new WnnWord(); 3427b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa wnnWordAdd.stroke = stroke; 3437b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa wnnWordAdd.candidate = candidate; 344e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* add word event */ 345053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project OpenWnnEvent event = new OpenWnnEvent(OpenWnnEvent.ADD_WORD, 346053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project WnnEngine.DICTIONARY_TYPE_USER, 347053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project wnnWordAdd); 348e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* notify the event to IME */ 349053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project ret = sendEventToIME(event); 350053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret == false) { 351e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* get error code if the process in IME is failed */ 352053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project int ret_code = event.errorCode; 353053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (ret_code == RETURN_SAME_WORD) { 354053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project showDialog(DIALOG_CONTROL_WORDS_DUPLICATE); 355053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 356053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } else { 357e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* update the dictionary */ 358053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mListInstance = createUserDictionaryToolsList(); 359053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 360053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return ret; 361053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 362053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 363053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 364053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Delete the word 365053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 366053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param word The information of word 367053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 368053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void deleteDictionary(WnnWord word) { 369e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* delete the word from the dictionary */ 370053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project mListInstance = createUserDictionaryToolsList(); 371053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project boolean deleted = mListInstance.deleteWord(word); 372053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project if (!deleted) { 373053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.makeText(getApplicationContext(), 374053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project R.string.user_dictionary_delete_fail, 375053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Toast.LENGTH_LONG).show(); 376053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 377053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 378053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 379053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 380053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Create the instance of UserDictionaryToolList object 381053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 382053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project protected abstract UserDictionaryToolsList createUserDictionaryToolsList(); 383053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 384053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 385053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Check the input string 386053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * 387053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * @param v The information of view 3887b3b414976b6b3d6d85459de79e843d5ab35ed06Daisuke Miyakawa * @return {@code true} if success; {@code false} if fail. 389053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 390053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private boolean inputDataCheck(View v) { 391053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 392e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* return false if the length of the string exceeds the limit. */ 393f66e64c9108f64da8c301fe1830e3165eccac5ffDaisuke Miyakawa if ((((TextView)v).getText().length()) > MAX_TEXT_SIZE) { 394053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project showDialog(DIALOG_CONTROL_OVER_MAX_TEXT_SIZE); 395053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Log.e("OpenWnn", "inputDataCheck() : over max string length."); 396053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return false; 397053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 398053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 399053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project return true; 400053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 401053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 402053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project /** 403053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project * Transit the new state 404053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project */ 405053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project private void screenTransition() { 406053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project finish(); 407053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 408e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa /* change to the word listing window */ 409053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project Intent intent = new Intent(); 410053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project intent.setClassName(mPackageName, mListViewName); 411053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project startActivity(intent); 412e83971e4dafd53e9fb00386355afdbae7e00c0cfDaisuke Miyakawa 413053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project } 414053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project 415053d50935e0e311286543bd7c535ae2c863c0deThe Android Open Source Project} 416