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