X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2FDictionaryManagerActivity.java;h=f7db7de6cd886223fd0d2e81e619445fea89dcd1;hb=cbcff0e7ca442adc1064f60b56ff2e551243576f;hp=3638aac7f34f18fdb55dbc2744cbf6595e71c5ac;hpb=c332b9768f8b6d1b81137dba2aa6e0cb06c76046;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java index 3638aac..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; @@ -31,7 +32,6 @@ import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; -import android.view.ViewGroup.LayoutParams; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -41,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; @@ -56,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(), @@ -65,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); @@ -115,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, ""); @@ -149,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()); } @@ -168,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 @@ -190,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 { @@ -213,41 +265,51 @@ 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); 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); - row.addView(textView); - // Add the information about each index. final LinearLayout row2 = new LinearLayout(parent.getContext()); row2.setOrientation(LinearLayout.HORIZONTAL); @@ -279,7 +341,7 @@ public class DictionaryManagerActivity extends ListActivity { DictionaryManagerActivity.this.onClick(position); } }); - + return result; } }