X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2FDictionaryManagerActivity.java;h=f7db7de6cd886223fd0d2e81e619445fea89dcd1;hb=cbcff0e7ca442adc1064f60b56ff2e551243576f;hp=b3df7f30e392432fba2170d8acdb3d9476058491;hpb=345055ac4070d908ac2d954a580bddf622c1ed00;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java index b3df7f3..f7db7de 100644 --- a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java @@ -23,6 +23,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; +import android.os.Handler; import android.preference.PreferenceManager; import android.util.Log; import android.util.TypedValue; @@ -40,9 +41,11 @@ import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.hughes.android.dictionary.C.Theme; import com.hughes.android.dictionary.DictionaryInfo.IndexInfo; import com.hughes.android.util.IntentLauncher; import com.hughes.util.StringUtil; @@ -55,6 +58,8 @@ public class DictionaryManagerActivity extends ListActivity { DictionaryApplication application; Adapter adapter; + Handler uiHandler; + public static Intent getLaunchIntent() { final Intent intent = new Intent(); intent.setClassName(DictionaryManagerActivity.class.getPackage().getName(), @@ -64,6 +69,8 @@ public class DictionaryManagerActivity extends ListActivity { } public void onCreate(Bundle savedInstanceState) { + setTheme(((DictionaryApplication)getApplication()).getSelectedTheme().themeId); + super.onCreate(savedInstanceState); Log.d(LOG, "onCreate:" + this); @@ -114,14 +121,23 @@ public class DictionaryManagerActivity extends ListActivity { } } + @Override + protected void onStart() { + super.onStart(); + uiHandler = new Handler(); + } + + @Override + protected void onStop() { + super.onStop(); + uiHandler = null; + } + 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 = DownloadActivity - .getLaunchIntent(downloadable.downloadUrl, - application.getPath(dictionaryInfo.uncompressedFilename).getPath() + ".zip", - dictionaryInfo.dictInfo); + final Intent intent = getDownloadIntent(downloadable); startActivity(intent); } else { final Intent intent = DictionaryActivity.getLaunchIntent(application.getPath(dictionaryInfo.uncompressedFilename), 0, ""); @@ -148,6 +164,21 @@ public class DictionaryManagerActivity extends ListActivity { //finish(); return; } + + application.backgroundUpdateDictionaries(new Runnable() { + @Override + public void run() { + if (uiHandler == null) { + return; + } + uiHandler.post(new Runnable() { + @Override + public void run() { + setListAdapter(adapter = new Adapter()); + } + }); + } + }); setListAdapter(adapter = new Adapter()); } @@ -167,7 +198,7 @@ public class DictionaryManagerActivity extends ListActivity { final int position = adapterContextMenuInfo.position; final DictionaryInfo dictionaryInfo = adapter.getItem(position); - if (position > 0) { + if (position > 0 && application.isDictionaryOnDevice(dictionaryInfo.uncompressedFilename)) { final MenuItem moveToTopMenuItem = menu.add(R.string.moveToTop); moveToTopMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override @@ -189,6 +220,28 @@ public class DictionaryManagerActivity extends ListActivity { } }); + 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; + } + + }); + } + + } + + private Intent getDownloadIntent(final DictionaryInfo downloadable) { + final Intent intent = DownloadActivity.getLaunchIntent(downloadable.downloadUrl, + application.getPath(downloadable.uncompressedFilename).getPath() + ".zip", + downloadable.dictInfo); + return intent; } class Adapter extends BaseAdapter { @@ -212,43 +265,69 @@ public class DictionaryManagerActivity extends ListActivity { @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); - final LinearLayout result = new LinearLayout(parent.getContext()); + 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)); - downloadButton.setOnClickListener(new IntentLauncher(parent.getContext(), DownloadActivity - .getLaunchIntent(downloadable.downloadUrl, - application.getPath(dictionaryInfo.uncompressedFilename).getPath() + ".zip", - dictionaryInfo.dictInfo)) { - @Override - protected void onGo() { - application.invalidateDictionaryInfo(dictionaryInfo.uncompressedFilename); - } - }); + 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); - result.addView(downloadButton); + row.addView(downloadButton); + } else { + final ImageView checkMark = new ImageView(parent.getContext()); + checkMark.setImageResource(R.drawable.btn_check_buttonless_on); + row.addView(checkMark); } - final TextView textView = new TextView(parent.getContext()); - final String name = application.getDictionaryName(dictionaryInfo.uncompressedFilename); - textView.setText(name); - textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); - result.addView(textView); - // 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) { - final TextView indexView = new TextView(parent.getContext()); - indexView.setText(getString(R.string.indexInfo, indexInfo.shortName, indexInfo.mainTokenCount)); - result.addView(indexView); + if (builder.length() > 0) { + builder.append(" | "); + } + 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); @@ -262,7 +341,7 @@ public class DictionaryManagerActivity extends ListActivity { DictionaryManagerActivity.this.onClick(position); } }); - + return result; } }