1 // Copyright 2011 Google Inc. All Rights Reserved.
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
7 // http://www.apache.org/licenses/LICENSE-2.0
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.
15 package com.hughes.android.dictionary;
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;
43 import com.hughes.android.util.PersistentObjectCache;
45 public class DictionaryListActivity extends ListActivity {
47 static final String LOG = "QuickDic";
49 QuickDicConfig quickDicConfig = new QuickDicConfig();
52 public void onCreate(Bundle savedInstanceState) {
53 ((DictionaryApplication)getApplication()).applyTheme(this);
55 super.onCreate(savedInstanceState);
56 Log.d(LOG, "onCreate:" + this);
59 setContentView(R.layout.list_activity);
61 getListView().setOnItemClickListener(new OnItemClickListener() {
63 public void onItemClick(AdapterView<?> arg0, View arg1, int index,
70 registerForContextMenu(getListView());
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) {
85 final AlertDialog alert = builder.create();
87 prefs.edit().putInt(C.INTRO_MESSAGE_SHOWN, introMessageId).commit();
91 private void onClick(int dictIndex) {
92 final Intent intent = DictionaryActivity.getIntent(this, dictIndex, 0, "");
93 startActivity(intent);
97 protected void onResume() {
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, "")));
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);
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;
119 setListAdapter(new Adapter());
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();
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();
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();
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);
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));
177 public void onCreateContextMenu(final ContextMenu menu, final View view,
178 final ContextMenuInfo menuInfo) {
179 super.onCreateContextMenu(menu, view, menuInfo);
181 final AdapterContextMenuInfo adapterContextMenuInfo = (AdapterContextMenuInfo) menuInfo;
183 final MenuItem editMenuItem = menu.add(R.string.editDictionary);
184 editMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
186 public boolean onMenuItemClick(MenuItem item) {
187 startActivity(DictionaryEditActivity.getIntent(adapterContextMenuInfo.position));
192 if (adapterContextMenuInfo.position > 0) {
193 final MenuItem moveToTopMenuItem = menu.add(R.string.moveToTop);
194 moveToTopMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
196 public boolean onMenuItemClick(MenuItem item) {
197 final DictionaryConfig dictionaryConfig = quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
198 quickDicConfig.dictionaryConfigs.add(0, dictionaryConfig);
199 dictionaryConfigsChanged();
205 final MenuItem deleteMenuItem = menu.add(R.string.deleteDictionary);
206 deleteMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
208 public boolean onMenuItemClick(MenuItem item) {
209 quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
210 dictionaryConfigsChanged();
217 private void dictionaryConfigsChanged() {
218 PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, quickDicConfig);
219 setListAdapter(getListAdapter());
222 class Adapter extends BaseAdapter {
225 public int getCount() {
226 return quickDicConfig.dictionaryConfigs.size();
230 public DictionaryConfig getItem(int position) {
231 return quickDicConfig.dictionaryConfigs.get(position);
235 public long getItemId(int position) {
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());
245 String name = dictionaryConfig.name;
246 if (!new File(dictionaryConfig.localFile).canRead()) {
247 name = getString(R.string.notOnDevice, dictionaryConfig.name);
251 view.setTextSize(22);
252 tableLayout.addView(view);
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());