1 package com.hughes.android.dictionary;
4 import java.io.IOException;
5 import java.io.RandomAccessFile;
7 import android.app.Activity;
8 import android.content.Context;
9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.os.Handler;
12 import android.text.Editable;
13 import android.text.TextWatcher;
14 import android.util.Log;
15 import android.view.KeyEvent;
16 import android.view.Menu;
17 import android.view.MenuItem;
18 import android.view.View;
19 import android.view.MenuItem.OnMenuItemClickListener;
20 import android.view.View.OnClickListener;
21 import android.widget.Button;
22 import android.widget.EditText;
23 import android.widget.TextView;
25 import com.hughes.android.dictionary.engine.Dictionary;
26 import com.hughes.android.dictionary.engine.Index;
27 import com.hughes.android.util.PersistentObjectCache;
29 public class DictionaryEditActivity extends Activity {
31 static final String LOG = "QuickDic";
33 QuickDicConfig quickDicConfig;
34 private DictionaryConfig dictionaryConfig;
36 final Handler uiHandler = new Handler();
38 public static Intent getIntent(final int dictIndex) {
39 final Intent intent = new Intent();
40 intent.setClassName(DictionaryEditActivity.class.getPackage().getName(),
41 DictionaryEditActivity.class.getName());
42 intent.putExtra(C.DICT_INDEX, dictIndex);
46 /** Called when the activity is first created. */
48 public void onCreate(final Bundle savedInstanceState) {
49 ((DictionaryApplication)getApplication()).applyTheme(this);
51 super.onCreate(savedInstanceState);
52 setContentView(R.layout.edit_activity);
54 final Intent intent = getIntent();
56 final int dictIndex = intent.getIntExtra(C.DICT_INDEX, 0);
58 PersistentObjectCache.init(this);
60 quickDicConfig = PersistentObjectCache.init(this).read(
61 C.DICTIONARY_CONFIGS, QuickDicConfig.class);
62 dictionaryConfig = quickDicConfig.dictionaryConfigs.get(dictIndex);
63 } catch (Exception e) {
64 Log.e(LOG, "Failed to read QuickDicConfig.", e);
65 quickDicConfig = new QuickDicConfig();
66 dictionaryConfig = quickDicConfig.dictionaryConfigs.get(0);
69 // Write stuff from object into fields.
71 ((EditText) findViewById(R.id.dictionaryName))
72 .setText(dictionaryConfig.name);
73 ((EditText) findViewById(R.id.localFile))
74 .setText(dictionaryConfig.localFile);
76 final TextWatcher textWatcher = new TextWatcher() {
78 public void onTextChanged(CharSequence s, int start, int before,
83 public void beforeTextChanged(CharSequence s, int start, int count,
88 public void afterTextChanged(Editable s) {
93 ((EditText) findViewById(R.id.localFile)).addTextChangedListener(textWatcher);
95 final EditText downloadUrl = (EditText) findViewById(R.id.downloadUrl);
96 downloadUrl.setText(dictionaryConfig.downloadUrl);
97 downloadUrl.addTextChangedListener(textWatcher);
99 final Button downloadButton = (Button) findViewById(R.id.downloadButton);
100 downloadButton.setOnClickListener(new OnClickListener() {
102 public void onClick(View v) {
103 startDownloadDictActivity(DictionaryEditActivity.this,
108 final Button openButton = (Button) findViewById(R.id.openButton);
109 openButton.setOnClickListener(new OnClickListener() {
111 public void onClick(View v) {
112 final Intent intent = DictionaryActivity.getIntent(DictionaryEditActivity.this, dictIndex, 0, "");
113 startActivity(intent);
119 protected void onResume() {
126 protected void onPause() {
129 // Read stuff from fields into object.
130 dictionaryConfig.name = ((EditText) findViewById(R.id.dictionaryName))
131 .getText().toString();
132 dictionaryConfig.localFile = ((EditText) findViewById(R.id.localFile))
133 .getText().toString();
134 dictionaryConfig.downloadUrl = ((EditText) findViewById(R.id.downloadUrl))
135 .getText().toString();
137 PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS,
141 public boolean onCreateOptionsMenu(final Menu menu) {
142 final MenuItem newDictionaryMenuItem = menu
143 .add(R.string.downloadDictionary);
144 newDictionaryMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
145 public boolean onMenuItemClick(final MenuItem menuItem) {
146 startDownloadDictActivity(DictionaryEditActivity.this,
152 final MenuItem dictionaryList = menu.add(getString(R.string.dictionaryList));
153 dictionaryList.setOnMenuItemClickListener(new OnMenuItemClickListener() {
154 public boolean onMenuItemClick(final MenuItem menuItem) {
155 startActivity(DictionaryListActivity.getIntent(DictionaryEditActivity.this));
164 void updateDictInfo() {
165 final String downloadUrl = ((EditText) findViewById(R.id.downloadUrl))
166 .getText().toString();
167 final String localFile = ((EditText) findViewById(R.id.localFile))
168 .getText().toString();
170 final Button downloadButton = (Button) findViewById(R.id.downloadButton);
171 downloadButton.setEnabled(downloadUrl.length() > 0 && localFile.length() > 0);
173 final Button openButton = (Button) findViewById(R.id.openButton);
174 openButton.setEnabled(false);
176 final TextView dictInfo = (TextView) findViewById(R.id.dictionaryInfo);
177 if (!new File(localFile).canRead()) {
178 dictInfo.setText(getString(R.string.fileNotFound, localFile));
183 final RandomAccessFile raf = new RandomAccessFile(localFile, "r");
184 final Dictionary dict = new Dictionary(raf);
185 final StringBuilder builder = new StringBuilder();
186 builder.append(dict.dictInfo).append("\n");
188 getString(R.string.numPairEntries, dict.pairEntries.size())).append(
190 for (final Index index : dict.indices) {
191 builder.append("\n");
192 builder.append(index.longName).append("\n");
193 builder.append(" ").append(
194 getString(R.string.numTokens, index.sortedIndexEntries.size()))
196 builder.append(" ").append(
197 getString(R.string.numRows, index.rows.size())).append("\n");
200 dictInfo.setText(builder.toString());
201 openButton.setEnabled(true);
203 } catch (IOException e) {
204 dictInfo.setText(getString(R.string.invalidDictionary, localFile, e
209 static void startDownloadDictActivity(final Context context,
210 final DictionaryConfig dictionaryConfig) {
211 final Intent intent = new Intent(context, DownloadActivity.class);
212 intent.putExtra(DownloadActivity.SOURCE, dictionaryConfig.downloadUrl);
213 intent.putExtra(DownloadActivity.DEST, dictionaryConfig.localFile + ".zip");
214 context.startActivity(intent);
218 public boolean onKeyDown(final int keyCode, final KeyEvent event) {
219 if (keyCode == KeyEvent.KEYCODE_BACK) {
220 Log.d(LOG, "Clearing dictionary prefs.");
221 DictionaryActivity.clearDictionaryPrefs(this);
223 return super.onKeyDown(keyCode, event);