]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/DictionaryEditActivity.java
cc21132c504d1d75a413cb662564b66c5ccdce90
[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.text.Editable;
12 import android.text.TextWatcher;
13 import android.util.Log;
14 import android.view.Menu;
15 import android.view.MenuItem;
16 import android.view.MenuItem.OnMenuItemClickListener;
17 import android.widget.EditText;
18 import android.widget.TextView;
19
20 import com.hughes.android.dictionary.engine.Dictionary;
21 import com.hughes.android.dictionary.engine.Index;
22 import com.hughes.android.util.PersistentObjectCache;
23
24 public class DictionaryEditActivity extends Activity {
25
26   static final String LOG = "QuickDic";
27
28   QuickDicConfig quickDicConfig;
29   private DictionaryConfig dictionaryConfig;
30
31   public static Intent getIntent(final int dictIndex) {
32     final Intent intent = new Intent();
33     intent.setClassName(DictionaryEditActivity.class.getPackage().getName(),
34         DictionaryEditActivity.class.getName());
35     intent.putExtra(C.DICT_INDEX, dictIndex);
36     return intent;
37   }
38
39   /** Called when the activity is first created. */
40   @Override
41   public void onCreate(final Bundle savedInstanceState) {
42     super.onCreate(savedInstanceState);
43     setContentView(R.layout.edit_activity);
44
45     final Intent intent = getIntent();
46
47     PersistentObjectCache.init(this);
48     try {
49       quickDicConfig = PersistentObjectCache.init(this).read(
50           C.DICTIONARY_CONFIGS, QuickDicConfig.class);
51       dictionaryConfig = quickDicConfig.dictionaryConfigs.get(intent
52           .getIntExtra(C.DICT_INDEX, 0));
53     } catch (Exception e) {
54       Log.e(LOG, "Failed to read QuickDicConfig.", e);
55       quickDicConfig = new QuickDicConfig();
56       dictionaryConfig = quickDicConfig.dictionaryConfigs.get(0);
57     }
58     
59     // Write stuff from object into fields.
60
61     ((EditText) findViewById(R.id.dictionaryName))
62         .setText(dictionaryConfig.name);
63     ((EditText) findViewById(R.id.localFile))
64         .setText(dictionaryConfig.localFile);
65     ((EditText) findViewById(R.id.downloadUrl))
66         .setText(dictionaryConfig.downloadUrl);
67
68     updateDictInfo();
69     ((EditText) findViewById(R.id.localFile))
70         .addTextChangedListener(new TextWatcher() {
71           @Override
72           public void onTextChanged(CharSequence s, int start, int before,
73               int count) {
74           }
75
76           @Override
77           public void beforeTextChanged(CharSequence s, int start, int count,
78               int after) {
79           }
80
81           @Override
82           public void afterTextChanged(Editable s) {
83             updateDictInfo();
84           }
85         });
86
87   }
88
89   @Override
90   protected void onPause() {
91     super.onPause();
92
93     // Read stuff from fields into object.
94     dictionaryConfig.name = ((EditText) findViewById(R.id.dictionaryName))
95         .getText().toString();
96     dictionaryConfig.localFile = ((EditText) findViewById(R.id.localFile))
97         .getText().toString();
98     dictionaryConfig.downloadUrl = ((EditText) findViewById(R.id.downloadUrl))
99         .getText().toString();
100
101     PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS,
102         quickDicConfig);
103   }
104
105   public boolean onCreateOptionsMenu(final Menu menu) {
106     final MenuItem newDictionaryMenuItem = menu
107         .add(R.string.downloadDictionary);
108     newDictionaryMenuItem
109         .setOnMenuItemClickListener(new OnMenuItemClickListener() {
110           public boolean onMenuItemClick(final MenuItem menuItem) {
111             startDownloadDictActivity(DictionaryEditActivity.this,
112                 dictionaryConfig);
113             return false;
114           }
115         });
116
117     return true;
118   }
119
120   void updateDictInfo() {
121     final TextView dictInfo = (TextView) findViewById(R.id.dictionaryInfo);
122     final String localFile = ((EditText) findViewById(R.id.localFile))
123         .getText().toString();
124
125     if (!new File(localFile).canRead()) {
126       dictInfo.setText(getString(R.string.fileNotFound, localFile));
127       return;
128     }
129
130     try {
131       final RandomAccessFile raf = new RandomAccessFile(localFile, "r");
132       final Dictionary dict = new Dictionary(raf);
133       final StringBuilder builder = new StringBuilder();
134       builder.append(dict.dictInfo).append("\n");
135       builder.append(
136           getString(R.string.numPairEntries, dict.pairEntries.size())).append(
137           "\n");
138       for (final Index index : dict.indices) {
139         builder.append("\n");
140         builder.append(index.longName).append("\n");
141         builder.append("  ").append(
142             getString(R.string.numTokens, index.sortedIndexEntries.size()))
143             .append("\n");
144         builder.append("  ").append(
145             getString(R.string.numRows, index.rows.size())).append("\n");
146       }
147       raf.close();
148       dictInfo.setText(builder.toString());
149     } catch (IOException e) {
150       dictInfo.setText(getString(R.string.invalidDictionary, localFile, e
151           .toString()));
152     }
153   }
154
155   static void startDownloadDictActivity(final Context context,
156       final DictionaryConfig dictionaryConfig) {
157     final Intent intent = new Intent(context, DownloadActivity.class);
158     intent.putExtra(DownloadActivity.SOURCE, dictionaryConfig.downloadUrl);
159     intent.putExtra(DownloadActivity.DEST, dictionaryConfig.localFile);
160     context.startActivity(intent);
161   }
162
163 }