]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryListActivity.java
Add Slovak, increment version, show what's new.
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryListActivity.java
index faeb8fe47e2be94ee9de0d6046b5bb57dd52697f..123e0b5354eba7876142a352cedd20e976ef9401 100644 (file)
@@ -1,12 +1,31 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
 package com.hughes.android.dictionary;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.io.File;
 
+import android.app.AlertDialog;
 import android.app.ListActivity;
+import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.os.Bundle;
+import android.preference.PreferenceManager;
 import android.util.Log;
+import android.util.TypedValue;
 import android.view.ContextMenu;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -14,14 +33,13 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.ContextMenu.ContextMenuInfo;
 import android.view.MenuItem.OnMenuItemClickListener;
-import android.view.View.OnFocusChangeListener;
+import android.webkit.WebView;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
-import android.widget.EditText;
-import android.widget.ListView;
 import android.widget.TableLayout;
 import android.widget.TextView;
 import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.AdapterView.OnItemClickListener;
 
 import com.hughes.android.util.PersistentObjectCache;
 
@@ -29,46 +47,86 @@ public class DictionaryListActivity extends ListActivity {
 
   static final String LOG = "QuickDic";
   
-  static final String DICTIONARY_CONFIGS = "dictionaryConfigs";
+  QuickDicConfig quickDicConfig = new QuickDicConfig();
   
-  List<DictionaryConfig> dictionaries = new ArrayList<DictionaryConfig>();
   
   public void onCreate(Bundle savedInstanceState) {
+    ((DictionaryApplication)getApplication()).applyTheme(this);
+
     super.onCreate(savedInstanceState);
     Log.d(LOG, "onCreate:" + this);
 
     // UI init.
     setContentView(R.layout.list_activity);
-    
-    getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
-      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int row,
-          long arg3) {
-        return false;
+
+    getListView().setOnItemClickListener(new OnItemClickListener() {
+      @Override
+      public void onItemClick(AdapterView<?> arg0, View arg1, int index,
+          long id) {
+        onClick(index);
       }
     });
-    
+
     // ContextMenu.
     registerForContextMenu(getListView());
-    
-    getListView().setItemsCanFocus(true);
+
+    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+    final int introMessageId = 100;
+    if (prefs.getInt(C.INTRO_MESSAGE_SHOWN, 0) < introMessageId) {
+      final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+      builder.setCancelable(false);
+      final WebView webView = new WebView(getApplicationContext());
+      webView.loadData(getString(R.string.thanksForUpdating), "text/html", "utf-8");
+      builder.setView(webView);
+      builder.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+          public void onClick(DialogInterface dialog, int id) {
+               dialog.cancel();
+          }
+      });
+      final AlertDialog alert = builder.create();
+      alert.show();
+      prefs.edit().putInt(C.INTRO_MESSAGE_SHOWN, introMessageId).commit();
+    }
+  }
+  
+  private void onClick(int dictIndex) {
+    final Intent intent = DictionaryActivity.getIntent(this, dictIndex, 0, "");
+    startActivity(intent);
   }
   
-  @SuppressWarnings("unchecked")
   @Override
   protected void onResume() {
     super.onResume();
+    
+    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+    if (prefs.contains(C.DICT_INDEX) && prefs.contains(C.INDEX_INDEX)) {
+      Log.d(LOG, "Skipping Dictionary List, going straight to dictionary.");
+      startActivity(DictionaryActivity.getIntent(this, prefs.getInt(C.DICT_INDEX, 0), prefs.getInt(C.INDEX_INDEX, 0), prefs.getString(C.SEARCH_TOKEN, "")));
+      //finish();
+      return;
+    }
 
-    dictionaries = (List<DictionaryConfig>) PersistentObjectCache.init(this).read(DICTIONARY_CONFIGS);
-    if (dictionaries == null) {
-      dictionaries = new ArrayList<DictionaryConfig>();
+    quickDicConfig = PersistentObjectCache.init(this).read(C.DICTIONARY_CONFIGS, QuickDicConfig.class);
+    if (quickDicConfig == null) {
+      quickDicConfig = new QuickDicConfig();
+      PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, quickDicConfig);
     }
-    if (dictionaries.size() == 0) {
-      final DictionaryConfig dictionaryConfig = DictionaryConfig.defaultConfig();
-      dictionaries.add(dictionaryConfig);
-      PersistentObjectCache.getInstance().write(DICTIONARY_CONFIGS, dictionaries);
+    if (quickDicConfig.currentVersion < QuickDicConfig.LATEST_VERSION) {
+      Log.d(LOG, "Dictionary list is old, updating it.");
+      
+      // Replace <-> with -
+      if (quickDicConfig.currentVersion < 5) {
+        for (final DictionaryConfig config : quickDicConfig.dictionaryConfigs) {
+          config.name = config.name.replace("<->", "-");
+        }
+      }
+      quickDicConfig.addDefaultDictionaries();
+      quickDicConfig.currentVersion = QuickDicConfig.LATEST_VERSION;
+      PersistentObjectCache.init(this).write(C.DICTIONARY_CONFIGS, quickDicConfig);
     }
 
     setListAdapter(new Adapter());
+    
   }
 
   public boolean onCreateOptionsMenu(final Menu menu) {
@@ -77,11 +135,48 @@ public class DictionaryListActivity extends ListActivity {
           public boolean onMenuItemClick(final MenuItem menuItem) {
             final DictionaryConfig dictionaryConfig = new DictionaryConfig();
             dictionaryConfig.name = getString(R.string.newDictionary);
-            dictionaries.add(0, dictionaryConfig);
+            quickDicConfig.dictionaryConfigs.add(0, dictionaryConfig);
+            dictionaryConfigsChanged();
+            return false;
+          }
+        });
+
+    final MenuItem addDefaultDictionariesMenuItem = menu.add(R.string.addDefaultDictionaries);
+    addDefaultDictionariesMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+          public boolean onMenuItemClick(final MenuItem menuItem) {
+            quickDicConfig.addDefaultDictionaries();
+            dictionaryConfigsChanged();
+            return false;
+          }
+        });
+
+    final MenuItem removeAllDictionariesMenuItem = menu.add(R.string.removeAllDictionaries);
+    removeAllDictionariesMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+          public boolean onMenuItemClick(final MenuItem menuItem) {
+            quickDicConfig.dictionaryConfigs.clear();
             dictionaryConfigsChanged();
             return false;
           }
         });
+
+    final MenuItem about = menu.add(getString(R.string.about));
+    about.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+      public boolean onMenuItemClick(final MenuItem menuItem) {
+        final Intent intent = new Intent().setClassName(AboutActivity.class
+            .getPackage().getName(), AboutActivity.class.getCanonicalName());
+        startActivity(intent);
+        return false;
+      }
+    });
+    
+    final MenuItem preferences = menu.add(getString(R.string.preferences));
+    preferences.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+      public boolean onMenuItemClick(final MenuItem menuItem) {
+        startActivity(new Intent(DictionaryListActivity.this,
+            PreferenceActivity.class));
+        return false;
+      }
+    });
     
     return true;
   }
@@ -98,20 +193,18 @@ public class DictionaryListActivity extends ListActivity {
     editMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
       @Override
       public boolean onMenuItemClick(MenuItem item) {
-        final Intent intent = new Intent(DictionaryListActivity.this, DictionaryEditActivity.class);
-        intent.putExtra(DictionaryEditActivity.DICT_INDEX, adapterContextMenuInfo.position);
-        startActivity(intent);
+        startActivity(DictionaryEditActivity.getIntent(adapterContextMenuInfo.position));
         return true;
       }
     });
 
     if (adapterContextMenuInfo.position > 0) {
-      final MenuItem moveUpMenuItem = menu.add(R.string.moveUp);
-      moveUpMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+      final MenuItem moveToTopMenuItem = menu.add(R.string.moveToTop);
+      moveToTopMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
         @Override
         public boolean onMenuItemClick(MenuItem item) {
-          final DictionaryConfig dictionaryConfig = dictionaries.remove(adapterContextMenuInfo.position);
-          dictionaries.add(adapterContextMenuInfo.position - 1, dictionaryConfig);
+          final DictionaryConfig dictionaryConfig = quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
+          quickDicConfig.dictionaryConfigs.add(0, dictionaryConfig);
           dictionaryConfigsChanged();
           return true;
         }
@@ -122,7 +215,7 @@ public class DictionaryListActivity extends ListActivity {
     deleteMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
       @Override
       public boolean onMenuItemClick(MenuItem item) {
-        dictionaries.remove(adapterContextMenuInfo.position);
+        quickDicConfig.dictionaryConfigs.remove(adapterContextMenuInfo.position);
         dictionaryConfigsChanged();
         return true;
       }
@@ -131,33 +224,20 @@ public class DictionaryListActivity extends ListActivity {
   }
 
   private void dictionaryConfigsChanged() {
-    PersistentObjectCache.getInstance().write(DICTIONARY_CONFIGS, dictionaries);
+    PersistentObjectCache.getInstance().write(C.DICTIONARY_CONFIGS, quickDicConfig);
     setListAdapter(getListAdapter());
   }
 
-  static final OnFocusChangeListener focusListener = new OnFocusChangeListener() {
-    @Override
-    public void onFocusChange(View v, boolean hasFocus) {
-      final TextView textView = (TextView) v;
-      if (hasFocus) {
-        textView.setTextAppearance(v.getContext(), R.style.Theme_QuickDic);
-      } else {
-        //textView.setTextAppearance(v.getContext(), android.R.style.TextAppearance_Medium);
-      }
-    }
-  };
-
-
   class Adapter extends BaseAdapter {
 
     @Override
     public int getCount() {
-      return dictionaries.size();
+      return quickDicConfig.dictionaryConfigs.size();
     }
 
     @Override
     public DictionaryConfig getItem(int position) {
-      return dictionaries.get(position);
+      return quickDicConfig.dictionaryConfigs.get(position);
     }
 
     @Override
@@ -170,23 +250,27 @@ public class DictionaryListActivity extends ListActivity {
       final DictionaryConfig dictionaryConfig = getItem(position);
       final TableLayout tableLayout = new TableLayout(parent.getContext());
       final TextView view = new TextView(parent.getContext());
+      
+      String name = dictionaryConfig.name;
+      if (!new File(dictionaryConfig.localFile).canRead()) {
+        name = getString(R.string.notOnDevice, dictionaryConfig.name);
+      }
 
-      view.setText(dictionaryConfig.name);
-      view.setTextSize(20);
-      view.setFocusable(true);
-      view.setOnFocusChangeListener(focusListener);
+      view.setText(name);
+      view.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);
       tableLayout.addView(view);
 
-      final EditText view2 = new EditText(parent.getContext());
-      view2.setText(dictionaryConfig.name + "2");
-      view2.setFocusable(true);
-      view2.setOnFocusChangeListener(focusListener);
-      tableLayout.addView(view2);
-
       return tableLayout;
     }
     
   }
 
+  public static Intent getIntent(final Context context) {
+    DictionaryActivity.clearDictionaryPrefs(context);
+    final Intent intent = new Intent();
+    intent.setClassName(DictionaryListActivity.class.getPackage().getName(),
+        DictionaryListActivity.class.getName());
+    return intent;
+  }
 
 }