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