]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/DictionaryEditActivity.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryEditActivity.java
1 package com.hughes.android.dictionary;
2
3 import java.io.File;
4 import java.io.IOException;
5 import java.io.RandomAccessFile;
6
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;
24
25 import com.hughes.android.dictionary.engine.Dictionary;
26 import com.hughes.android.dictionary.engine.Index;
27 import com.hughes.android.util.PersistentObjectCache;
28
29 public class DictionaryEditActivity extends Activity {
30
31   static final String LOG = "QuickDic";
32
33   QuickDicConfig quickDicConfig;
34   private DictionaryConfig dictionaryConfig;
35   
36   final Handler uiHandler = new Handler();
37
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);
43     return intent;
44   }
45
46   /** Called when the activity is first created. */
47   @Override
48   public void onCreate(final Bundle savedInstanceState) {
49     ((DictionaryApplication)getApplication()).applyTheme(this);
50
51     super.onCreate(savedInstanceState);
52     setContentView(R.layout.edit_activity);
53
54     final Intent intent = getIntent();
55
56     final int dictIndex = intent.getIntExtra(C.DICT_INDEX, 0);
57       
58     PersistentObjectCache.init(this);
59     try {
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);
67     }
68     
69     // Write stuff from object into fields.
70
71     ((EditText) findViewById(R.id.dictionaryName))
72         .setText(dictionaryConfig.name);
73     ((EditText) findViewById(R.id.localFile))
74         .setText(dictionaryConfig.localFile);
75
76     final TextWatcher textWatcher = new TextWatcher() {
77       @Override
78       public void onTextChanged(CharSequence s, int start, int before,
79           int count) {
80       }
81
82       @Override
83       public void beforeTextChanged(CharSequence s, int start, int count,
84           int after) {
85       }
86
87       @Override
88       public void afterTextChanged(Editable s) {
89         updateDictInfo();
90       }
91     };
92
93     ((EditText) findViewById(R.id.localFile)).addTextChangedListener(textWatcher);
94
95     final EditText downloadUrl = (EditText) findViewById(R.id.downloadUrl);
96     downloadUrl.setText(dictionaryConfig.downloadUrl);
97     downloadUrl.addTextChangedListener(textWatcher);
98     
99     final Button downloadButton = (Button) findViewById(R.id.downloadButton);
100     downloadButton.setOnClickListener(new OnClickListener() {
101       @Override
102       public void onClick(View v) {
103         startDownloadDictActivity(DictionaryEditActivity.this,
104             dictionaryConfig);
105       }
106     });
107
108     final Button openButton = (Button) findViewById(R.id.openButton);
109     openButton.setOnClickListener(new OnClickListener() {
110       @Override
111       public void onClick(View v) {
112         final Intent intent = DictionaryActivity.getIntent(DictionaryEditActivity.this, dictIndex, 0, "");
113         startActivity(intent);
114       }
115     });
116
117   }
118   
119   protected void onResume() {
120     super.onResume();
121     
122     updateDictInfo();
123   }
124
125   @Override
126   protected void onPause() {
127     super.onPause();
128
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();
136
137     PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS,
138         quickDicConfig);
139   }
140
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,
147                 dictionaryConfig);
148             return false;
149           }
150         });
151     
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));
156         return false;
157       }
158     });
159
160
161     return true;
162   }
163
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();
169
170     final Button downloadButton = (Button) findViewById(R.id.downloadButton);
171     downloadButton.setEnabled(downloadUrl.length() > 0 && localFile.length() > 0);
172
173     final Button openButton = (Button) findViewById(R.id.openButton);
174     openButton.setEnabled(false);
175
176     final TextView dictInfo = (TextView) findViewById(R.id.dictionaryInfo);
177     if (!new File(localFile).canRead()) {
178       dictInfo.setText(getString(R.string.fileNotFound, localFile));
179       return;
180     }
181
182     try {
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");
187       builder.append(
188           getString(R.string.numPairEntries, dict.pairEntries.size())).append(
189           "\n");
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()))
195             .append("\n");
196         builder.append("  ").append(
197             getString(R.string.numRows, index.rows.size())).append("\n");
198       }
199       raf.close();
200       dictInfo.setText(builder.toString());
201       openButton.setEnabled(true);
202       
203     } catch (IOException e) {
204       dictInfo.setText(getString(R.string.invalidDictionary, localFile, e
205           .toString()));
206     }
207   }
208
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);
215   }
216   
217   @Override
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);
222     }
223     return super.onKeyDown(keyCode, event);
224   }
225
226 }