]> gitweb.fperrin.net Git - Dictionary.git/blob - src/com/hughes/android/dictionary/DictionaryListActivity.java
Added Apache license.
[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 about = menu.add(getString(R.string.about));
143     about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
144       public boolean onMenuItemClick(final MenuItem menuItem) {
145         final Intent intent = new Intent().setClassName(AboutActivity.class
146             .getPackage().getName(), AboutActivity.class.getCanonicalName());
147         startActivity(intent);
148         return false;
149       }
150     });
151     
152     final MenuItem preferences = menu.add(getString(R.string.preferences));
153     preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
154       public boolean onMenuItemClick(final MenuItem menuItem) {
155         startActivity(new Intent(DictionaryListActivity.this,
156             PreferenceActivity.class));
157         return false;
158       }
159     });
160     
161     return true;
162   }
163   
164
165   @Override
166   public void onCreateContextMenu(final ContextMenu menu, final View view,
167       final ContextMenuInfo menuInfo) {
168     super.onCreateContextMenu(menu, view, menuInfo);
169     
170     final AdapterContextMenuInfo adapterContextMenuInfo = (AdapterContextMenuInfo) menuInfo;
171     
172     final MenuItem editMenuItem = menu.add(R.string.editDictionary);
173     editMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
174       @Override
175       public boolean onMenuItemClick(MenuItem item) {
176         startActivity(DictionaryEditActivity.getIntent(adapterContextMenuInfo.position));
177         return true;
178       }
179     });
180
181     if (adapterContextMenuInfo.position > 0) {
182       final MenuItem moveUpMenuItem = menu.add(R.string.moveUp);
183       moveUpMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
184         @Override
185         public boolean onMenuItemClick(MenuItem item) {
186           final DictionaryConfig dictionaryConfig = quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
187           quickDicConfig.dictionaryConfigs.add(adapterContextMenuInfo.position - 1, dictionaryConfig);
188           dictionaryConfigsChanged();
189           return true;
190         }
191       });
192     }
193
194     final MenuItem deleteMenuItem = menu.add(R.string.deleteDictionary);
195     deleteMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
196       @Override
197       public boolean onMenuItemClick(MenuItem item) {
198         quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
199         dictionaryConfigsChanged();
200         return true;
201       }
202     });
203
204   }
205
206   private void dictionaryConfigsChanged() {
207     PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, quickDicConfig);
208     setListAdapter(getListAdapter());
209   }
210
211   class Adapter extends BaseAdapter {
212
213     @Override
214     public int getCount() {
215       return quickDicConfig.dictionaryConfigs.size();
216     }
217
218     @Override
219     public DictionaryConfig getItem(int position) {
220       return quickDicConfig.dictionaryConfigs.get(position);
221     }
222
223     @Override
224     public long getItemId(int position) {
225       return position;
226     }
227     
228     @Override
229     public View getView(int position, View convertView, ViewGroup parent) {
230       final DictionaryConfig dictionaryConfig = getItem(position);
231       final TableLayout tableLayout = new TableLayout(parent.getContext());
232       final TextView view = new TextView(parent.getContext());
233
234       view.setText(dictionaryConfig.name);
235       view.setTextSize(20);
236       tableLayout.addView(view);
237
238       return tableLayout;
239     }
240     
241   }
242
243   public static Intent getIntent(final Context context) {
244     DictionaryActivity.clearDictionaryPrefs(context);
245     final Intent intent = new Intent();
246     intent.setClassName(DictionaryListActivity.class.getPackage().getName(),
247         DictionaryListActivity.class.getName());
248     return intent;
249   }
250
251 }