]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/DictionaryListActivity.java
6dad97e5fcd3789925d2eedd2ebe1cf73c8ea1a2
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryListActivity.java
1 // Copyright 2011 Google Inc. All Rights Reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package com.hughes.android.dictionary;
16
17 import java.io.File;
18
19 import android.app.AlertDialog;
20 import android.app.ListActivity;
21 import android.content.Context;
22 import android.content.DialogInterface;
23 import android.content.Intent;
24 import android.content.SharedPreferences;
25 import android.os.Bundle;
26 import android.preference.PreferenceManager;
27 import android.util.Log;
28 import android.view.ContextMenu;
29 import android.view.Menu;
30 import android.view.MenuItem;
31 import android.view.View;
32 import android.view.ViewGroup;
33 import android.view.ContextMenu.ContextMenuInfo;
34 import android.view.MenuItem.OnMenuItemClickListener;
35 import android.webkit.WebView;
36 import android.widget.AdapterView;
37 import android.widget.BaseAdapter;
38 import android.widget.TableLayout;
39 import android.widget.TextView;
40 import android.widget.AdapterView.AdapterContextMenuInfo;
41 import android.widget.AdapterView.OnItemClickListener;
42
43 import com.hughes.android.util.PersistentObjectCache;
44
45 public class DictionaryListActivity extends ListActivity {
46
47   static final String LOG = "QuickDic";
48   
49   QuickDicConfig quickDicConfig = new QuickDicConfig();
50   
51   
52   public void onCreate(Bundle savedInstanceState) {
53     ((DictionaryApplication)getApplication()).applyTheme(this);
54
55     super.onCreate(savedInstanceState);
56     Log.d(LOG, "onCreate:" + this);
57
58     // UI init.
59     setContentView(R.layout.list_activity);
60
61     getListView().setOnItemClickListener(new OnItemClickListener() {
62       @Override
63       public void onItemClick(AdapterView<?> arg0, View arg1, int index,
64           long id) {
65         onClick(index);
66       }
67     });
68
69     // ContextMenu.
70     registerForContextMenu(getListView());
71
72     final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
73     final int introMessageId = -1;
74     if (prefs.getInt(C.INTRO_MESSAGE_SHOWN, 0) < introMessageId) {
75       final AlertDialog.Builder builder = new AlertDialog.Builder(this);
76       builder.setCancelable(false);
77       final WebView webView = new WebView(getApplicationContext());
78       webView.loadData(getString(R.string.thanksForUpdating), "text/html", "utf-8");
79       builder.setView(webView);
80       builder.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
81           public void onClick(DialogInterface dialog, int id) {
82                dialog.cancel();
83           }
84       });
85       final AlertDialog alert = builder.create();
86       alert.show();
87       prefs.edit().putInt(C.INTRO_MESSAGE_SHOWN, introMessageId).commit();
88     }
89   }
90   
91   private void onClick(int dictIndex) {
92     final Intent intent = DictionaryActivity.getIntent(this, dictIndex, 0, "");
93     startActivity(intent);
94   }
95   
96   @Override
97   protected void onResume() {
98     super.onResume();
99     
100     final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
101     if (prefs.contains(C.DICT_INDEX) && prefs.contains(C.INDEX_INDEX)) {
102       Log.d(LOG, "Skipping Dictionary List, going straight to dictionary.");
103       startActivity(DictionaryActivity.getIntent(this, prefs.getInt(C.DICT_INDEX, 0), prefs.getInt(C.INDEX_INDEX, 0), prefs.getString(C.SEARCH_TOKEN, "")));
104       //finish();
105       return;
106     }
107
108     quickDicConfig = PersistentObjectCache.init(this).read(C.DICTIONARY_CONFIGS, QuickDicConfig.class);
109     if (quickDicConfig == null) {
110       quickDicConfig = new QuickDicConfig();
111       PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, quickDicConfig);
112     }
113     if (quickDicConfig.currentVersion < QuickDicConfig.LATEST_VERSION) {
114       Log.d(LOG, "Dictionary list is old, updating it.");
115       quickDicConfig.addDefaultDictionaries();
116       quickDicConfig.currentVersion = QuickDicConfig.LATEST_VERSION;
117     }
118
119     setListAdapter(new Adapter());
120     
121   }
122
123   public boolean onCreateOptionsMenu(final Menu menu) {
124     final MenuItem newDictionaryMenuItem = menu.add(R.string.addDictionary);
125     newDictionaryMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
126           public boolean onMenuItemClick(final MenuItem menuItem) {
127             final DictionaryConfig dictionaryConfig = new DictionaryConfig();
128             dictionaryConfig.name = getString(R.string.newDictionary);
129             quickDicConfig.dictionaryConfigs.add(0, dictionaryConfig);
130             dictionaryConfigsChanged();
131             return false;
132           }
133         });
134
135     final MenuItem addDefaultDictionariesMenuItem = menu.add(R.string.addDefaultDictionaries);
136     addDefaultDictionariesMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
137           public boolean onMenuItemClick(final MenuItem menuItem) {
138             quickDicConfig.addDefaultDictionaries();
139             dictionaryConfigsChanged();
140             return false;
141           }
142         });
143
144     final MenuItem removeAllDictionariesMenuItem = menu.add(R.string.removeAllDictionaries);
145     removeAllDictionariesMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
146           public boolean onMenuItemClick(final MenuItem menuItem) {
147             quickDicConfig.dictionaryConfigs.clear();
148             dictionaryConfigsChanged();
149             return false;
150           }
151         });
152
153     final MenuItem about = menu.add(getString(R.string.about));
154     about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
155       public boolean onMenuItemClick(final MenuItem menuItem) {
156         final Intent intent = new Intent().setClassName(AboutActivity.class
157             .getPackage().getName(), AboutActivity.class.getCanonicalName());
158         startActivity(intent);
159         return false;
160       }
161     });
162     
163     final MenuItem preferences = menu.add(getString(R.string.preferences));
164     preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
165       public boolean onMenuItemClick(final MenuItem menuItem) {
166         startActivity(new Intent(DictionaryListActivity.this,
167             PreferenceActivity.class));
168         return false;
169       }
170     });
171     
172     return true;
173   }
174   
175
176   @Override
177   public void onCreateContextMenu(final ContextMenu menu, final View view,
178       final ContextMenuInfo menuInfo) {
179     super.onCreateContextMenu(menu, view, menuInfo);
180     
181     final AdapterContextMenuInfo adapterContextMenuInfo = (AdapterContextMenuInfo) menuInfo;
182     
183     final MenuItem editMenuItem = menu.add(R.string.editDictionary);
184     editMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
185       @Override
186       public boolean onMenuItemClick(MenuItem item) {
187         startActivity(DictionaryEditActivity.getIntent(adapterContextMenuInfo.position));
188         return true;
189       }
190     });
191
192     if (adapterContextMenuInfo.position > 0) {
193       final MenuItem moveToTopMenuItem = menu.add(R.string.moveToTop);
194       moveToTopMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
195         @Override
196         public boolean onMenuItemClick(MenuItem item) {
197           final DictionaryConfig dictionaryConfig = quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
198           quickDicConfig.dictionaryConfigs.add(0, dictionaryConfig);
199           dictionaryConfigsChanged();
200           return true;
201         }
202       });
203     }
204
205     final MenuItem deleteMenuItem = menu.add(R.string.deleteDictionary);
206     deleteMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
207       @Override
208       public boolean onMenuItemClick(MenuItem item) {
209         quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
210         dictionaryConfigsChanged();
211         return true;
212       }
213     });
214
215   }
216
217   private void dictionaryConfigsChanged() {
218     PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, quickDicConfig);
219     setListAdapter(getListAdapter());
220   }
221
222   class Adapter extends BaseAdapter {
223
224     @Override
225     public int getCount() {
226       return quickDicConfig.dictionaryConfigs.size();
227     }
228
229     @Override
230     public DictionaryConfig getItem(int position) {
231       return quickDicConfig.dictionaryConfigs.get(position);
232     }
233
234     @Override
235     public long getItemId(int position) {
236       return position;
237     }
238     
239     @Override
240     public View getView(int position, View convertView, ViewGroup parent) {
241       final DictionaryConfig dictionaryConfig = getItem(position);
242       final TableLayout tableLayout = new TableLayout(parent.getContext());
243       final TextView view = new TextView(parent.getContext());
244       
245       String name = dictionaryConfig.name;
246       if (!new File(dictionaryConfig.localFile).canRead()) {
247         name = getString(R.string.notOnDevice, dictionaryConfig.name);
248       }
249
250       view.setText(name);
251       view.setTextSize(22);
252       tableLayout.addView(view);
253
254       return tableLayout;
255     }
256     
257   }
258
259   public static Intent getIntent(final Context context) {
260     DictionaryActivity.clearDictionaryPrefs(context);
261     final Intent intent = new Intent();
262     intent.setClassName(DictionaryListActivity.class.getPackage().getName(),
263         DictionaryListActivity.class.getName());
264     return intent;
265   }
266
267 }