]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryManagerActivity.java
Got the flags set to a reasonable size.
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryManagerActivity.java
index 7cdb4b3cb4af768b2fff08c60952760a4f2d2758..c06ccc30504cfcac927e063629a67c424a709cd7 100644 (file)
 
 package com.hughes.android.dictionary;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import android.app.AlertDialog;
-import android.app.ListActivity;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
@@ -30,369 +23,347 @@ import android.preference.PreferenceManager;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.util.Log;
-import android.util.TypedValue;
 import android.view.ContextMenu;
 import android.view.ContextMenu.ContextMenuInfo;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.webkit.WebView;
 import android.widget.AdapterView;
 import android.widget.AdapterView.AdapterContextMenuInfo;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.BaseAdapter;
 import android.widget.Button;
-import android.widget.CheckBox;
 import android.widget.CompoundButton;
 import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.EditText;
+import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.ToggleButton;
 
+import com.actionbarsherlock.app.SherlockActivity;
+import com.actionbarsherlock.app.SherlockListActivity;
+import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuInflater;
+import com.actionbarsherlock.widget.SearchView;
+import com.actionbarsherlock.widget.SearchView.OnQueryTextListener;
 import com.hughes.android.dictionary.DictionaryInfo.IndexInfo;
+import com.hughes.android.dictionary.engine.Language;
+import com.hughes.android.dictionary.engine.Language.LanguageResources;
 import com.hughes.android.util.IntentLauncher;
-import com.hughes.util.StringUtil;
-
-public class DictionaryManagerActivity extends ListActivity {
-
-  static final String LOG = "QuickDic";
-  static boolean blockAutoLaunch = false;
-
-  DictionaryApplication application;
-  Adapter adapter;
-  
-  EditText filterText;
-  CheckBox showLocal;
-  
-  Handler uiHandler;
-  
-  public static Intent getLaunchIntent() {
-    final Intent intent = new Intent();
-    intent.setClassName(DictionaryManagerActivity.class.getPackage().getName(),
-        DictionaryManagerActivity.class.getName());
-    intent.putExtra(C.CAN_AUTO_LAUNCH_DICT, false);
-    return intent;
-  }
-  
-  public void onCreate(Bundle savedInstanceState) {
-    setTheme(((DictionaryApplication)getApplication()).getSelectedTheme().themeId);
-
-    super.onCreate(savedInstanceState);
-    Log.d(LOG, "onCreate:" + this);
-    
-    application = (DictionaryApplication) getApplication();
-
-    // UI init.
-    setContentView(R.layout.dictionary_manager_activity);
-    
-    filterText = (EditText) findViewById(R.id.filterText);
-    showLocal = (CheckBox) findViewById(R.id.showLocal);
-    
-    filterText.addTextChangedListener(new TextWatcher() {
-      @Override
-      public void onTextChanged(CharSequence s, int start, int before, int count) {
-      }
-      
-      @Override
-      public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-      }
-      
-      @Override
-      public void afterTextChanged(Editable s) {
-        onFilterTextChanged();
-      }
-    });
-    
-    showLocal.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-      @Override
-      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-        onShowLocalChanged();
-      }
-    });
-
-    getListView().setOnItemClickListener(new OnItemClickListener() {
-      @Override
-      public void onItemClick(AdapterView<?> arg0, View arg1, int index,
-          long id) {
-        onClick(index);
-      }
-    });
-    
-    getListView().setClickable(true);
-
-    // ContextMenu.
-    registerForContextMenu(getListView());
-
-    blockAutoLaunch = false;
-    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-    final String thanksForUpdatingLatestVersion = getString(R.string.thanksForUpdatingVersion);
-    if (!prefs.getString(C.THANKS_FOR_UPDATING_VERSION, "").equals(thanksForUpdatingLatestVersion)) {
-      blockAutoLaunch = true;
-      startActivity(HtmlDisplayActivity.getWhatsNewLaunchIntent());
-      prefs.edit().putString(C.THANKS_FOR_UPDATING_VERSION, thanksForUpdatingLatestVersion).commit();
-    }
-  }
-  
-  @Override
-  protected void onStart() {
-    super.onStart();
-    uiHandler = new Handler();
-  }
-  
-  @Override
-  protected void onStop() {
-    super.onStop();
-    uiHandler = null;
-  }
-  
-  @Override
-  protected void onResume() {
-    super.onResume();
-    
-    if (PreferenceActivity.prefsMightHaveChanged) {
-      PreferenceActivity.prefsMightHaveChanged = false;
-      finish();
-      startActivity(getIntent());
-    }
-    
-    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
-    showLocal.setChecked(prefs.getBoolean(C.SHOW_LOCAL, false));
-    
-    if (!blockAutoLaunch &&
-        getIntent().getBooleanExtra(C.CAN_AUTO_LAUNCH_DICT, true) &&
-        prefs.contains(C.DICT_FILE) && 
-        prefs.contains(C.INDEX_INDEX)) {
-      Log.d(LOG, "Skipping Dictionary List, going straight to dictionary.");
-      startActivity(DictionaryActivity.getLaunchIntent(new File(prefs.getString(C.DICT_FILE, "")), prefs.getInt(C.INDEX_INDEX, 0), prefs.getString(C.SEARCH_TOKEN, "")));
-      finish();
-      return;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DictionaryManagerActivity extends SherlockActivity {
+
+    static final String LOG = "QuickDic";
+    static boolean blockAutoLaunch = false;
+
+    DictionaryApplication application;
+//    Adapter adapter;
+
+    // EditText filterText;
+    SearchView filterSearchView;
+    ToggleButton showDownloadable;
+
+    LinearLayout dictionariesOnDevice;
+    LinearLayout downloadableDictionaries;
+
+    Handler uiHandler;
+
+    public static Intent getLaunchIntent() {
+        final Intent intent = new Intent();
+        intent.setClassName(DictionaryManagerActivity.class.getPackage().getName(),
+                DictionaryManagerActivity.class.getName());
+        intent.putExtra(C.CAN_AUTO_LAUNCH_DICT, false);
+        return intent;
     }
-    
-    application.backgroundUpdateDictionaries(new Runnable() {
-      @Override
-      public void run() {
-        if (uiHandler == null) {
-          return;
-        }
-        uiHandler.post(new Runnable() {
-          @Override
-          public void run() {
-            setListAdapter(adapter = new Adapter());
-          }
+
+    public void onCreate(Bundle savedInstanceState) {
+        setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId);
+
+        super.onCreate(savedInstanceState);
+        Log.d(LOG, "onCreate:" + this);
+
+        application = (DictionaryApplication) getApplication();
+
+        // UI init.
+        setContentView(R.layout.dictionary_manager_activity);
+
+        dictionariesOnDevice = (LinearLayout) findViewById(R.id.dictionariesOnDeviceGoHere);
+        downloadableDictionaries = (LinearLayout) findViewById(R.id.downloadableDictionariesGoHere);
+
+        // filterText = (EditText) findViewById(R.id.filterText);
+        //
+        // filterText.addTextChangedListener(new TextWatcher() {
+        // @Override
+        // public void onTextChanged(CharSequence s, int start, int before, int
+        // count) {
+        // }
+        //
+        // @Override
+        // public void beforeTextChanged(CharSequence s, int start, int count,
+        // int after) {
+        // }
+        //
+        // @Override
+        // public void afterTextChanged(Editable s) {
+        // onFilterTextChanged();
+        // }
+        // });
+
+        // final ImageButton clearSearchText = (ImageButton)
+        // findViewById(R.id.ClearSearchTextButton);
+        // clearSearchText.setOnClickListener(new View.OnClickListener() {
+        // @Override
+        // public void onClick(View arg0) {
+        // filterText.setText("");
+        // filterText.requestFocus();
+        // }
+        // });
+
+        showDownloadable = (ToggleButton) findViewById(R.id.hideDownloadable);
+        showDownloadable.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                onShowLocalChanged();
+            }
         });
-      }
-    });
-
-    setListAdapter(adapter = new Adapter());
-  }
-
-  public boolean onCreateOptionsMenu(final Menu menu) {
-    application.onCreateGlobalOptionsMenu(this, menu);
-    return true;
-  }
-  
-
-  @Override
-  public void onCreateContextMenu(final ContextMenu menu, final View view,
-      final ContextMenuInfo menuInfo) {
-    super.onCreateContextMenu(menu, view, menuInfo);
-    
-    final AdapterContextMenuInfo adapterContextMenuInfo = (AdapterContextMenuInfo) menuInfo;
-    final int position = adapterContextMenuInfo.position;
-    final DictionaryInfo dictionaryInfo = adapter.getItem(position);
-    
-    if (position > 0 && application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename)) {
-      final MenuItem moveToTopMenuItem = menu.add(R.string.moveToTop);
-      moveToTopMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
-        @Override
-        public boolean onMenuItemClick(MenuItem item) {
-          application.moveDictionaryToTop(dictionaryInfo);
-          setListAdapter(adapter = new Adapter());
-          return true;
+
+        // ContextMenu.
+        // registerForContextMenu(getListView());
+
+        blockAutoLaunch = false;
+        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+        final String thanksForUpdatingLatestVersion = getString(R.string.thanksForUpdatingVersion);
+        if (!prefs.getString(C.THANKS_FOR_UPDATING_VERSION, "").equals(
+                thanksForUpdatingLatestVersion)) {
+            blockAutoLaunch = true;
+            startActivity(HtmlDisplayActivity.getWhatsNewLaunchIntent());
+            prefs.edit().putString(C.THANKS_FOR_UPDATING_VERSION, thanksForUpdatingLatestVersion)
+                    .commit();
         }
-      });
     }
 
-    final MenuItem deleteMenuItem = menu.add(R.string.deleteDictionary);
-    deleteMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
-      @Override
-      public boolean onMenuItemClick(MenuItem item) {
-        application.deleteDictionary(dictionaryInfo);
-        setListAdapter(adapter = new Adapter());
-        return true;
-      }
-    });
-
-    final DictionaryInfo downloadable = application.getDownloadable(dictionaryInfo.uncompressedFilename);
-    if (downloadable != null) {
-      final MenuItem downloadMenuItem = menu.add(getString(R.string.downloadButton, downloadable.zipBytes/1024.0/1024.0));
-      downloadMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
-        @Override
-        public boolean onMenuItemClick(MenuItem item) {
-          final Intent intent = getDownloadIntent(downloadable);
-          startActivity(intent);
-          setListAdapter(adapter = new Adapter());
-          return true;
-        }
-      });
+    @Override
+    protected void onStart() {
+        super.onStart();
+        uiHandler = new Handler();
     }
 
-  }
-
-  private Intent getDownloadIntent(final DictionaryInfo downloadable) {
-    final Intent intent = DownloadActivity.getLaunchIntent(downloadable.downloadUrl,
-        application.getPath(downloadable.uncompressedFilename).getPath() + ".zip",
-        downloadable.dictInfo);
-    return intent;
-  }
-  
-  private void onFilterTextChanged() {
-    setListAdapter(adapter = new Adapter());
-
-  }
-
-  private void onShowLocalChanged() {
-    setListAdapter(adapter = new Adapter());
-    Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
-    prefs.putBoolean(C.SHOW_LOCAL, showLocal.isChecked());
-    prefs.commit();
-  }
-  
-  private void onClick(int index) {
-    final DictionaryInfo dictionaryInfo = adapter.getItem(index);
-    final DictionaryInfo downloadable = application.getDownloadable(dictionaryInfo.uncompressedFilename);
-    if (!application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename) && downloadable != null) {
-      final Intent intent = getDownloadIntent(downloadable);
-      startActivity(intent);
-    } else {
-      final Intent intent = DictionaryActivity.getLaunchIntent(application.getPath(dictionaryInfo.uncompressedFilename), 0, "");
-      startActivity(intent);
+    @Override
+    protected void onStop() {
+        super.onStop();
+        uiHandler = null;
     }
-  }
-  
-  class Adapter extends BaseAdapter {
-    
-    final List<DictionaryInfo> dictionaryInfos = new ArrayList<DictionaryInfo>();
-    
-    Adapter() {
-      final String filter = filterText.getText().toString().trim().toLowerCase();
-      for (final DictionaryInfo dictionaryInfo : application.getAllDictionaries()) {
-        boolean canShow = true;
-        if (showLocal.isChecked() && !application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename)) {
-          canShow = false;
-        }
-        if (canShow && filter.length() > 0) {
-          if (!application.getDictionaryName(dictionaryInfo.uncompressedFilename).toLowerCase().contains(filter)) {
-            canShow = false;
-          }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+
+        if (PreferenceActivity.prefsMightHaveChanged) {
+            PreferenceActivity.prefsMightHaveChanged = false;
+            finish();
+            startActivity(getIntent());
         }
-        if (canShow) {
-          dictionaryInfos.add(dictionaryInfo);
-          
+
+        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+        showDownloadable.setChecked(prefs.getBoolean(C.SHOW_DOWNLOADABLE, false));
+
+        if (!blockAutoLaunch &&
+                getIntent().getBooleanExtra(C.CAN_AUTO_LAUNCH_DICT, true) &&
+                prefs.contains(C.DICT_FILE) &&
+                prefs.contains(C.INDEX_SHORT_NAME)) {
+            Log.d(LOG, "Skipping Dictionary List, going straight to dictionary.");
+            startActivity(DictionaryActivity.getLaunchIntent(
+                    new File(prefs.getString(C.DICT_FILE, "")), prefs.getString(C.INDEX_SHORT_NAME, ""),
+                    prefs.getString(C.SEARCH_TOKEN, "")));
+            finish();
+            return;
         }
-      }
+
+        application.backgroundUpdateDictionaries(new Runnable() {
+            @Override
+            public void run() {
+                if (uiHandler == null) {
+                    return;
+                }
+                uiHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        populateDictionaryLists("");
+                    }
+                });
+            }
+        });
+
+        populateDictionaryLists("");
     }
 
     @Override
-    public int getCount() {
-      return dictionaryInfos.size();
+    public boolean onCreateOptionsMenu(final Menu menu) {
+        MenuInflater inflater = getSupportMenuInflater();
+        inflater.inflate(R.menu.dictionary_manager_options_menu, menu);
+        
+        filterSearchView = (SearchView) menu.findItem(R.id.filterText).getActionView();
+        filterSearchView.setOnQueryTextListener(new OnQueryTextListener() {
+            @Override
+            public boolean onQueryTextSubmit(String query) {
+                return true;
+            }
+            
+            @Override
+            public boolean onQueryTextChange(String filterText) {
+                populateDictionaryLists(filterText);
+                return true;
+            }
+        });
+
+        application.onCreateGlobalOptionsMenu(this, menu);
+        return true;
     }
 
-    @Override
-    public DictionaryInfo getItem(int position) {
-      return dictionaryInfos.get(position);
+        // @Override
+        // public void onCreateContextMenu(final ContextMenu menu, final View
+        // view,
+        // final ContextMenuInfo menuInfo) {
+        // super.onCreateContextMenu(menu, view, menuInfo);
+        //
+        // final AdapterContextMenuInfo adapterContextMenuInfo =
+        // (AdapterContextMenuInfo) menuInfo;
+        // final int position = adapterContextMenuInfo.position;
+        // final DictionaryInfo dictionaryInfo = adapter.getItem(position);
+        //
+        // if (position > 0 &&
+        // application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename))
+        // {
+        // final android.view.MenuItem moveToTopMenuItem =
+        // menu.add(R.string.moveToTop);
+        // moveToTopMenuItem.setOnMenuItemClickListener(new
+        // android.view.MenuItem.OnMenuItemClickListener() {
+        // @Override
+        // public boolean onMenuItemClick(android.view.MenuItem item) {
+        // application.moveDictionaryToTop(dictionaryInfo);
+        // setListAdapter(adapter = new Adapter());
+        // return true;
+        // }
+        // });
+        // }
+//
+//        final android.view.MenuItem deleteMenuItem = menu.add(R.string.deleteDictionary);
+//        deleteMenuItem
+//                .setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
+//                    @Override
+//                    public boolean onMenuItemClick(android.view.MenuItem item) {
+//                        application.deleteDictionary(dictionaryInfo);
+//                        setListAdapter(adapter = new Adapter());
+//                        return true;
+//                    }
+//                });
+//
+//        final DictionaryInfo downloadable = application
+//                .getDownloadable(dictionaryInfo.uncompressedFilename);
+//        if (downloadable != null) {
+//            final android.view.MenuItem downloadMenuItem = menu.add(getString(
+//                    R.string.downloadButton, downloadable.zipBytes / 1024.0 / 1024.0));
+//            downloadMenuItem
+//                    .setOnMenuItemClickListener(new android.view.MenuItem.OnMenuItemClickListener() {
+//                        @Override
+//                        public boolean onMenuItemClick(android.view.MenuItem item) {
+//                            final Intent intent = getDownloadIntent(downloadable);
+//                            startActivity(intent);
+//                            setListAdapter(adapter = new Adapter());
+//                            return true;
+//                        }
+//                    });
+//        }
+//
+//    }
+
+    private Intent getDownloadIntent(final DictionaryInfo downloadable) {
+        // DownloadManager downloadManager = (DownloadManager)
+        // getSystemService(DOWNLOAD_SERVICE);
+        // DownloadManager.Request request = new
+        // DownloadManager.Request(Uri.parse(""));
+        // long id = downloadManager.enqueue(request);
+        // DownloadManager.Query query;
+        return null;
     }
 
-    @Override
-    public long getItemId(int position) {
-      return position;
+    private void onShowLocalChanged() {
+//        downloadableDictionaries.setVisibility(showDownloadable.isChecked() ? View.GONE
+//                : View.VISIBLE);
+        if (filterSearchView != null) {
+            populateDictionaryLists(filterSearchView.getQuery().toString());
+        } else {
+            populateDictionaryLists("");
+        }
+        Editor prefs = PreferenceManager.getDefaultSharedPreferences(this).edit();
+        prefs.putBoolean(C.SHOW_DOWNLOADABLE, showDownloadable.isChecked());
+        prefs.commit();
     }
-    
-    @Override
-    public View getView(final int position, final View convertView, final ViewGroup parent) {
-      final LinearLayout result;
-      // Android 4.0.3 leaks memory like crazy if we don't do this.
-      if (convertView instanceof LinearLayout) {
-        result = (LinearLayout) convertView;
-        result.removeAllViews();
-      } else {
-        result = new LinearLayout(parent.getContext());
-      }
-      
-      final DictionaryInfo dictionaryInfo = getItem(position);
-      result.setOrientation(LinearLayout.VERTICAL);
-
-      final LinearLayout row = new LinearLayout(parent.getContext());
-      row.setOrientation(LinearLayout.HORIZONTAL);
-      result.addView(row);
-
-      {
-      final TextView textView = new TextView(parent.getContext());
-      final String name = application.getDictionaryName(dictionaryInfo.uncompressedFilename);
-      textView.setText(name);
-      textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22);
-      row.addView(textView);
-      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
-      layoutParams.weight = 1.0f;
-      textView.setLayoutParams(layoutParams);
-      }
-      
-      final boolean updateAvailable = application.updateAvailable(dictionaryInfo);
-      final DictionaryInfo downloadable = application.getDownloadable(dictionaryInfo.uncompressedFilename); 
-      if ((!application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename) || updateAvailable) && downloadable != null) {
-        final Button downloadButton = new Button(parent.getContext());
-        downloadButton.setText(getString(updateAvailable ? R.string.updateButton : R.string.downloadButton, downloadable.zipBytes / 1024.0 / 1024.0));
-        final Intent intent = getDownloadIntent(downloadable);
-        downloadButton.setOnClickListener(new IntentLauncher(parent.getContext(), intent));
-        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
-        layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
-        layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
-        downloadButton.setLayoutParams(layoutParams);
-        row.addView(downloadButton);
-      } else {
-        final ImageView checkMark = new ImageView(parent.getContext());
-        checkMark.setImageResource(R.drawable.btn_check_buttonless_on);
-        row.addView(checkMark);
-      }
-
-      // Add the information about each index.
-      final LinearLayout row2 = new LinearLayout(parent.getContext());
-      row2.setOrientation(LinearLayout.HORIZONTAL);
-      final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
-      row2.setLayoutParams(layoutParams);
-      result.addView(row2);
-      final StringBuilder builder = new StringBuilder();
-      for (final IndexInfo indexInfo : dictionaryInfo.indexInfos) {
-        if (builder.length() > 0) {
-          builder.append(" | ");
+
+    // private void onClick(int index) {
+    // final DictionaryInfo dictionaryInfo = adapter.getItem(index);
+    // final DictionaryInfo downloadable =
+    // application.getDownloadable(dictionaryInfo.uncompressedFilename);
+    // if
+    // (!application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename)
+    // && downloadable != null) {
+    // final Intent intent = getDownloadIntent(downloadable);
+    // startActivity(intent);
+    // } else {
+    // final Intent intent =
+    // DictionaryActivity.getLaunchIntent(application.getPath(dictionaryInfo.uncompressedFilename),
+    // 0, "");
+    // startActivity(intent);
+    // }
+    // }
+
+    private void populateDictionaryLists(String filterText) {
+        // On device.
+        dictionariesOnDevice.removeAllViews();
+        {
+            final List<DictionaryInfo> dictionaryInfos = application.getDictionariesOnDevice();
+            for (final DictionaryInfo dictionaryInfo : dictionaryInfos) {
+                View row = LayoutInflater.from(dictionariesOnDevice.getContext()).inflate(
+                        R.layout.dictionary_on_device_row, dictionariesOnDevice, false);
+                final TextView name = (TextView) row.findViewById(R.id.dictionaryName);
+                name.setText(application.getDictionaryName(dictionaryInfo.uncompressedFilename));
+                
+                LinearLayout buttons = (LinearLayout) row.findViewById(R.id.dictionaryLauncherButtons);
+                final List<IndexInfo> sortedIndexInfos = application.sortedIndexInfos(dictionaryInfo.indexInfos);
+                for (IndexInfo indexInfo : sortedIndexInfos) {
+                    final View button = application.createButton(buttons.getContext(), dictionaryInfo, indexInfo);
+                    buttons.addView(button);
+                }
+                
+                dictionariesOnDevice.addView(row);
+            }
         }
-        builder.append(getString(R.string.indexInfo, indexInfo.shortName, indexInfo.mainTokenCount));
-      }
-      final TextView indexView = new TextView(parent.getContext());
-      indexView.setText(builder.toString());
-      row2.addView(indexView);
-      
-      
-      // Because we have a Button inside a ListView row:
-      // http://groups.google.com/group/android-developers/browse_thread/thread/3d96af1530a7d62a?pli=1
-      result.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
-      result.setClickable(true);
-      result.setFocusable(true);
-      result.setLongClickable(true);
-      result.setBackgroundResource(android.R.drawable.menuitem_background);
-      result.setOnClickListener(new TextView.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-          DictionaryManagerActivity.this.onClick(position);
+
+        // Downloadable.
+        downloadableDictionaries.removeAllViews();
+        if (showDownloadable.isChecked()) {
+            final List<DictionaryInfo> dictionaryInfos = application.getDownloadableDictionaries();
+            for (final DictionaryInfo dictionaryInfo : dictionaryInfos) {
+                View row = LayoutInflater.from(dictionariesOnDevice.getContext()).inflate(
+                        R.layout.dictionary_on_device_row, dictionariesOnDevice, false);
+                final TextView name = (TextView) row.findViewById(R.id.dictionaryName);
+                name.setText(application.getDictionaryName(dictionaryInfo.uncompressedFilename));
+                
+                LinearLayout buttons = (LinearLayout) row.findViewById(R.id.dictionaryLauncherButtons);
+                final List<IndexInfo> sortedIndexInfos = application.sortedIndexInfos(dictionaryInfo.indexInfos);
+                for (IndexInfo indexInfo : sortedIndexInfos) {
+                    final View button = application.createButton(buttons.getContext(), dictionaryInfo, indexInfo);
+                    buttons.addView(button);
+                }
+                downloadableDictionaries.addView(row);
+            }
         }
-      });
-      
-      return result;
     }
-  }
 
 }