diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java index 199572a4ab..e0dd7b0dd9 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivity.java @@ -14,7 +14,6 @@ import android.support.v4.app.NotificationManagerCompat; import android.support.v4.view.ViewPager; import android.view.View; import android.widget.*; -import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.view.Window; import net.osmand.IndexConstants; @@ -29,6 +28,7 @@ import net.osmand.plus.srtmplugin.SRTMPlugin; import net.osmand.plus.voice.TTSCommandPlayerImpl; import java.io.File; +import java.lang.ref.WeakReference; import java.text.MessageFormat; import java.util.*; @@ -51,8 +51,8 @@ public class DownloadActivity extends SherlockFragmentActivity { private TextView progressMessage; private TextView progressPercent; private ImageView cancel; - private UpdatesIndexFragment updatesIndexFragment; private List localIndexInfos = new ArrayList(); + List> fragList = new ArrayList>(); public static final String FILTER_KEY = "filter"; @@ -94,6 +94,7 @@ public class DownloadActivity extends SherlockFragmentActivity { } else { downloadListIndexThread.runReloadIndexFiles(); } + downloadListIndexThread.setUiActivity(this); settings = ((OsmandApplication)getApplication()).getSettings(); @@ -192,8 +193,8 @@ public class DownloadActivity extends SherlockFragmentActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - public void setUpdatesIndexFragment(UpdatesIndexFragment fragment){ - this.updatesIndexFragment = fragment; + public Map getIndexActivatedFileNames() { + return downloadListIndexThread != null ? downloadListIndexThread.getIndexActivatedFileNames() : null; } @Override @@ -224,7 +225,7 @@ public class DownloadActivity extends SherlockFragmentActivity { return localIndexInfos; } - public DownloadActivityType getType() { return type;} + public DownloadActivityType getDownloadType() { return type;} public void setType(DownloadActivityType type) { this.type = type;} @@ -395,10 +396,52 @@ public class DownloadActivity extends SherlockFragmentActivity { } public void updateDownloadList(List list){ - if(updatesIndexFragment == null){ - return; + for(WeakReference ref : fragList) { + Fragment f = ref.get(); + if(f instanceof UpdatesIndexFragment) { + if(!f.isDetached()) { + ((UpdatesIndexFragment) f).updateItemsList(list); + } + } } - updatesIndexFragment.updateItemsList(list); + } + + public void categorizationFinished(List filtered, List cats){ + for(WeakReference ref : fragList) { + Fragment f = ref.get(); + if(f instanceof DownloadIndexFragment) { + if(!f.isDetached()) { + ((DownloadIndexFragment) f).categorizationFinished(filtered, cats); + } + } + } + } + + public void downloadListUpdated(){ + for(WeakReference ref : fragList) { + Fragment f = ref.get(); + if(f instanceof DownloadIndexFragment) { + if(!f.isDetached()) { + ((DownloadIndexAdapter)((DownloadIndexFragment) f).getExpandableListAdapter()).notifyDataSetInvalidated(); + } + } + } + } + + public void downloadedIndexes(){ + for(WeakReference ref : fragList) { + Fragment f = ref.get(); + if(f instanceof DownloadIndexFragment) { + if(!f.isDetached()) { + DownloadIndexAdapter adapter = ((DownloadIndexAdapter)((DownloadIndexFragment) f).getExpandableListAdapter()); + if (adapter != null) { + adapter.setLoadedFiles(getIndexActivatedFileNames(), getIndexFileNames()); + + } + } + } + } + } public void updateDownloadButton(boolean scroll) { @@ -428,7 +471,7 @@ public class DownloadActivity extends SherlockFragmentActivity { boolean excessLimit = left < 0; if (left < 0) left = 0; - if (DownloadActivityType.isCountedInDownloads(getType())) { + if (DownloadActivityType.isCountedInDownloads(getDownloadType())) { text += " (" + (excessLimit ? "! " : "") + getString(R.string.files_limit, left).toLowerCase() + ")"; } } @@ -456,6 +499,11 @@ public class DownloadActivity extends SherlockFragmentActivity { return ((OsmandApplication) getApplication()).getSettings().isLightActionBar(); } + @Override + public void onAttachFragment(Fragment fragment) { + fragList.add(new WeakReference(fragment)); + } + private void copyFilesForAndroid19(final String newLoc) { SettingsGeneralActivity.MoveFilesToDifferentDirectory task = new SettingsGeneralActivity.MoveFilesToDifferentDirectory(this, @@ -474,6 +522,11 @@ public class DownloadActivity extends SherlockFragmentActivity { task.execute(); } + + public Map getIndexFileNames() { + return downloadListIndexThread != null ? downloadListIndexThread.getIndexFileNames() : null; + } + public void showDialogToDownloadMaps(Collection maps) { int count = 0; int sz = 0; diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java b/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java index 8ca5c544e2..24d7da3ec6 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadActivityType.java @@ -124,6 +124,8 @@ public class DownloadActivityType { return IndexConstants.EXTRA_EXT; } else if (indexItem.fileName.endsWith(IndexConstants.SQLITE_EXT)) { return IndexConstants.SQLITE_EXT; + } else if (indexItem.fileName.endsWith(IndexConstants.ANYVOICE_INDEX_EXT_ZIP)){ + return ""; } } else if (ROADS_FILE == this) { return "-roads" + BINARY_MAP_INDEX_EXT; diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadIndexFragment.java b/OsmAnd/src/net/osmand/plus/download/DownloadIndexFragment.java index ca2109ef88..404dd69629 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadIndexFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadIndexFragment.java @@ -9,30 +9,24 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import android.content.ActivityNotFoundException; +import android.net.Uri; import android.view.LayoutInflater; import android.view.ViewGroup; import android.widget.*; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.MenuInflater; -import net.osmand.IndexConstants; -import net.osmand.access.AccessibleAlertBuilder; import net.osmand.access.AccessibleToast; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; -import net.osmand.plus.Version; import net.osmand.plus.activities.OsmandExpandableListFragment; -import net.osmand.plus.activities.SettingsGeneralActivity.MoveFilesToDifferentDirectory; import net.osmand.plus.base.BasicProgressAsyncTask; -import net.osmand.plus.base.SuggestExternalDirectoryDialog; import net.osmand.plus.srtmplugin.SRTMPlugin; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; import android.content.Intent; -import android.os.AsyncTask.Status; -import android.os.Build; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; @@ -100,8 +94,6 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment { setHasOptionsMenu(true); - DownloadActivity.downloadListIndexThread.setUiFragment(this); - settings = getMyApplication().getSettings(); @@ -207,7 +199,7 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment { if (!getDownloadActivity().getEntriesToDownload().containsKey(es)) { selected++; getDownloadActivity().getEntriesToDownload().put(es, es.createDownloadEntry(getMyApplication(), - getDownloadActivity().getType(), new ArrayList(1))); + getDownloadActivity().getDownloadType(), new ArrayList(1))); } } } @@ -232,7 +224,7 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment { return true; } - List download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getType(), new ArrayList()); + List download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getDownloadType(), new ArrayList()); if (download.size() > 0) { // if(!fileToUnzip.exists()){ // builder.setMessage(MessageFormat.format(getString(R.string.download_question), baseName, extractDateAndSize(e.getValue()))); @@ -288,7 +280,7 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment { EditText filterText = (EditText) getView().findViewById(R.id.search_box); filterText.removeTextChangedListener(textWatcher); } - DownloadActivity.downloadListIndexThread.setUiFragment(null); + DownloadActivity.downloadListIndexThread.setUiActivity(null); } public List toString(List t) { @@ -309,4 +301,39 @@ public class DownloadIndexFragment extends OsmandExpandableListFragment { public void updateProgress(boolean b) { getDownloadActivity().updateProgress(b); } + + public void categorizationFinished(List filtered, List cats) { + Map indexActivatedFileNames = getDownloadActivity().getIndexActivatedFileNames(); + Map indexFileNames = getDownloadActivity().getIndexFileNames(); + DownloadActivityType type = getDownloadActivity().getDownloadType(); + DownloadIndexAdapter a = ((DownloadIndexAdapter) getExpandableListAdapter()); + if (a == null){ + return; + } + a.setLoadedFiles(indexActivatedFileNames, indexFileNames); + a.setIndexFiles(filtered, cats); + + a.notifyDataSetChanged(); + a.getFilter().filter(getFilterText()); + if ((type == DownloadActivityType.SRTM_COUNTRY_FILE || type == DownloadActivityType.HILLSHADE_FILE) + && OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) instanceof SRTMPlugin + && !OsmandPlugin.getEnabledPlugin(SRTMPlugin.class).isPaid()) { + AlertDialog.Builder msg = new AlertDialog.Builder(getDownloadActivity()); + msg.setTitle(R.string.srtm_paid_version_title); + msg.setMessage(R.string.srtm_paid_version_msg); + msg.setNegativeButton(R.string.button_upgrade_osmandplus, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:net.osmand.srtmPlugin.paid")); + try { + getDownloadActivity().startActivity(intent); + } catch (ActivityNotFoundException e) { + } + } + }); + msg.setPositiveButton(R.string.default_buttons_ok, null); + msg.show(); + } + + } } diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java b/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java index 7c92e38080..a079ae9d00 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadIndexesThread.java @@ -19,20 +19,17 @@ import net.osmand.IndexConstants; import net.osmand.PlatformUtil; import net.osmand.access.AccessibleToast; import net.osmand.plus.OsmandApplication; -import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings.OsmandPreference; import net.osmand.plus.R; import net.osmand.plus.Version; import net.osmand.plus.base.BasicProgressAsyncTask; import net.osmand.plus.download.DownloadFileHelper.DownloadFileShowWarning; import net.osmand.plus.resources.ResourceManager; -import net.osmand.plus.srtmplugin.SRTMPlugin; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; import android.app.AlertDialog; -import android.app.AlertDialog.Builder; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; @@ -46,7 +43,7 @@ import android.view.View; import android.widget.Toast; public class DownloadIndexesThread { - private DownloadIndexFragment uiFragment = null; + private DownloadActivity uiActivity = null; private IndexFileList indexFiles = null; private Map> entriesToDownload = new ConcurrentHashMap>(); private Set currentDownloads = new HashSet(); @@ -72,8 +69,8 @@ public class DownloadIndexesThread { indexFiles = null; } - public void setUiFragment(DownloadIndexFragment uiFragment) { - this.uiFragment = uiFragment; + public void setUiActivity(DownloadActivity uiActivity) { + this.uiActivity = uiActivity; } public List flattenDownloadEntries() { @@ -89,6 +86,14 @@ public class DownloadIndexesThread { public List getCachedIndexFiles() { return indexFiles != null ? indexFiles.getIndexFiles() : null; } + + public Map getIndexFileNames(){ + return indexFileNames; + } + + public Map getIndexActivatedFileNames(){ + return indexActivatedFileNames; + } public void updateLoadedFiles() { Map indexActivatedFileNames = app.getResourceManager().getIndexFileNames(); @@ -137,15 +142,15 @@ public class DownloadIndexesThread { protected void onProgressUpdate(Object... values) { for (Object o : values) { if (o instanceof DownloadEntry) { - if (uiFragment != null) { - ((DownloadIndexAdapter) uiFragment.getExpandableListAdapter()).notifyDataSetInvalidated(); - uiFragment.getDownloadActivity().updateDownloadButton(false); + if (uiActivity != null) { + uiActivity.downloadListUpdated(); + uiActivity.updateDownloadButton(false); } } else if (o instanceof IndexItem) { entriesToDownload.remove(o); - if (uiFragment != null) { - ((DownloadIndexAdapter) uiFragment.getExpandableListAdapter()).notifyDataSetInvalidated(); - uiFragment.getDownloadActivity().updateDownloadButton(false); + if (uiActivity != null) { + uiActivity.downloadListUpdated(); + uiActivity.updateDownloadButton(false); } } else if (o instanceof String) { AccessibleToast.makeText(ctx, (String) o, Toast.LENGTH_LONG).show(); @@ -158,9 +163,9 @@ public class DownloadIndexesThread { protected void onPreExecute() { currentRunningTask.add( this); super.onPreExecute(); - if (uiFragment != null) { + if (uiActivity != null) { downloadFileHelper.setInterruptDownloading(false); - View mainView = uiFragment.findViewById(R.id.MainLayout); + View mainView = uiActivity.findViewById(R.id.MainLayout); if (mainView != null) { mainView.setKeepScreenOn(true); } @@ -174,21 +179,18 @@ public class DownloadIndexesThread { AccessibleToast.makeText(ctx, result, Toast.LENGTH_LONG).show(); } currentDownloads.clear(); - if (uiFragment != null) { - View mainView = uiFragment.findViewById(R.id.MainLayout); + if (uiActivity != null) { + View mainView = uiActivity.findViewById(R.id.MainLayout); if (mainView != null) { mainView.setKeepScreenOn(false); } - DownloadIndexAdapter adapter = ((DownloadIndexAdapter) uiFragment.getExpandableListAdapter()); - if (adapter != null) { - adapter.setLoadedFiles(indexActivatedFileNames, indexFileNames); - updateFilesToUpdate(); - } + uiActivity.downloadedIndexes(); } currentRunningTask.remove(this); - if(uiFragment != null) { - uiFragment.updateProgress(false); + if(uiActivity != null) { + uiActivity.updateProgress(false); } + updateFilesToUpdate(); } @@ -326,8 +328,8 @@ public class DownloadIndexesThread { boolean res = false; if (de.isAsset) { try { - if (uiFragment != null) { - ResourceManager.copyAssets(uiFragment.getDownloadActivity().getAssets(), de.assetName, de.targetFile); + if (uiActivity != null) { + ResourceManager.copyAssets(uiActivity.getAssets(), de.assetName, de.targetFile); boolean changedDate = de.targetFile.setLastModified(de.dateModified); if(!changedDate) { log.error("Set last timestamp is not supported"); @@ -348,8 +350,8 @@ public class DownloadIndexesThread { @Override protected void updateProgress(boolean updateOnlyProgress) { - if(uiFragment != null) { - uiFragment.updateProgress(updateOnlyProgress); + if(uiActivity != null) { + uiActivity.updateProgress(updateOnlyProgress); } } } @@ -380,19 +382,20 @@ public class DownloadIndexesThread { protected void onPostExecute(IndexFileList result) { indexFiles = result; - if (indexFiles != null && uiFragment != null) { - boolean basemapExists = uiFragment.getMyApplication().getResourceManager().containsBasemap(); + if (indexFiles != null && uiActivity != null) { + prepareFilesToUpdate(); + boolean basemapExists = uiActivity.getMyApplication().getResourceManager().containsBasemap(); IndexItem basemap = indexFiles.getBasemap(); if (basemap != null ) { - String dt = uiFragment.getMyApplication().getResourceManager().getIndexFileNames().get(basemap.getTargetFileName()); + String dt = uiActivity.getMyApplication().getResourceManager().getIndexFileNames().get(basemap.getTargetFileName()); if (!basemapExists || !Algorithms.objectEquals(dt, basemap.getDate(dateFormat))) { List downloadEntry = basemap - .createDownloadEntry(uiFragment.getMyApplication(), DownloadActivityType.NORMAL_FILE, + .createDownloadEntry(uiActivity.getMyApplication(), DownloadActivityType.NORMAL_FILE, new ArrayList()); - uiFragment.getDownloadActivity().getEntriesToDownload().put(basemap, downloadEntry); - AccessibleToast.makeText(uiFragment.getDownloadActivity(), R.string.basemap_was_selected_to_download, + uiActivity.getEntriesToDownload().put(basemap, downloadEntry); + AccessibleToast.makeText(uiActivity, R.string.basemap_was_selected_to_download, Toast.LENGTH_LONG).show(); - uiFragment.getDownloadActivity().findViewById(R.id.DownloadButton).setVisibility(View.VISIBLE); + uiActivity.findViewById(R.id.DownloadButton).setVisibility(View.VISIBLE); } } if (indexFiles.isIncreasedMapVersion()) { @@ -402,9 +405,9 @@ public class DownloadIndexesThread { AccessibleToast.makeText(ctx, R.string.list_index_files_was_not_loaded, Toast.LENGTH_LONG).show(); } currentRunningTask.remove(this); - if (uiFragment != null) { - uiFragment.updateProgress(false); - runCategorization(uiFragment.getDownloadActivity().getType()); + if (uiActivity != null) { + uiActivity.updateProgress(false); + runCategorization(uiActivity.getDownloadType()); } } @@ -433,8 +436,8 @@ public class DownloadIndexesThread { @Override protected void updateProgress(boolean updateOnlyProgress) { - if (uiFragment != null) { - uiFragment.updateProgress(updateOnlyProgress); + if (uiActivity != null) { + uiActivity.updateProgress(updateOnlyProgress); } }; @@ -473,8 +476,8 @@ public class DownloadIndexesThread { super.onPreExecute(); currentRunningTask.add(this); this.message = ctx.getString(R.string.downloading_list_indexes); - if(uiFragment != null) { - uiFragment.updateProgress(false); + if(uiActivity != null) { + uiActivity.updateProgress(false); } } @@ -502,43 +505,18 @@ public class DownloadIndexesThread { @Override protected void onPostExecute(List filtered) { - if (uiFragment != null) { - DownloadIndexAdapter a = ((DownloadIndexAdapter) uiFragment.getExpandableListAdapter()); - a.setLoadedFiles(indexActivatedFileNames, indexFileNames); - a.setIndexFiles(filtered, cats); - prepareFilesToUpdate(filtered); - a.notifyDataSetChanged(); - a.getFilter().filter(uiFragment.getFilterText()); - if ((type == DownloadActivityType.SRTM_COUNTRY_FILE || type == DownloadActivityType.HILLSHADE_FILE) - && OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) instanceof SRTMPlugin - && !OsmandPlugin.getEnabledPlugin(SRTMPlugin.class).isPaid()) { - Builder msg = new AlertDialog.Builder(uiFragment.getDownloadActivity()); - msg.setTitle(R.string.srtm_paid_version_title); - msg.setMessage(R.string.srtm_paid_version_msg); - msg.setNegativeButton(R.string.button_upgrade_osmandplus, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:net.osmand.srtmPlugin.paid")); - try { - ctx.startActivity(intent); - } catch (ActivityNotFoundException e) { - } - } - }); - msg.setPositiveButton(R.string.default_buttons_ok, null); - msg.show(); - } - } + prepareFilesToUpdate(); currentRunningTask.remove(this); - if(uiFragment != null) { - uiFragment.updateProgress(false); + if(uiActivity != null) { + uiActivity.categorizationFinished(filtered, cats); + uiActivity.updateProgress(false); } } @Override protected void updateProgress(boolean updateOnlyProgress) { - if(uiFragment != null) { - uiFragment.updateProgress(updateOnlyProgress); + if(uiActivity != null) { + uiActivity.updateProgress(updateOnlyProgress); } }; @@ -547,11 +525,12 @@ public class DownloadIndexesThread { execute(inst, new Void[0]); } - private void prepareFilesToUpdate(List filtered) { + private void prepareFilesToUpdate() { + List filtered = getCachedIndexFiles(); itemsToUpdate.clear(); for (IndexItem item : filtered) { String sfName = item.getTargetFileName(); - java.text.DateFormat format = uiFragment.getDownloadActivity().getMyApplication().getResourceManager().getDateFormat(); + java.text.DateFormat format = uiActivity.getMyApplication().getResourceManager().getDateFormat(); String date = item.getDate(format); String indexactivateddate = indexActivatedFileNames.get(sfName); String indexfilesdate = indexFileNames.get(sfName); @@ -562,14 +541,16 @@ public class DownloadIndexesThread { itemsToUpdate.add(item); } } - uiFragment.getDownloadActivity().updateDownloadList(itemsToUpdate); + if (uiActivity != null){ + uiActivity.updateDownloadList(itemsToUpdate); + } } private void updateFilesToUpdate(){ List stillUpdate = new ArrayList(); for (IndexItem item : itemsToUpdate) { String sfName = item.getTargetFileName(); - java.text.DateFormat format = uiFragment.getDownloadActivity().getMyApplication().getResourceManager().getDateFormat(); + java.text.DateFormat format = uiActivity.getMyApplication().getResourceManager().getDateFormat(); String date = item.getDate(format); String indexactivateddate = indexActivatedFileNames.get(sfName); String indexfilesdate = indexFileNames.get(sfName); @@ -581,7 +562,9 @@ public class DownloadIndexesThread { } } itemsToUpdate = stillUpdate; - uiFragment.getDownloadActivity().updateDownloadList(itemsToUpdate); + if (uiActivity != null){ + uiActivity.updateDownloadList(itemsToUpdate); + } } diff --git a/OsmAnd/src/net/osmand/plus/download/UpdatesIndexFragment.java b/OsmAnd/src/net/osmand/plus/download/UpdatesIndexFragment.java index f58be933c3..f82ae8a760 100644 --- a/OsmAnd/src/net/osmand/plus/download/UpdatesIndexFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/UpdatesIndexFragment.java @@ -1,6 +1,7 @@ package net.osmand.plus.download; import android.content.Context; +import android.graphics.Typeface; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -16,7 +17,6 @@ import net.osmand.access.AccessibleToast; import net.osmand.map.OsmandRegions; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; -import net.osmand.plus.activities.OsmandExpandableListFragment; import java.text.MessageFormat; import java.util.ArrayList; @@ -48,7 +48,6 @@ public class UpdatesIndexFragment extends SherlockListFragment { }); setListAdapter(listAdapter); setHasOptionsMenu(true); - getDownloadActivity().setUpdatesIndexFragment(this); } @Override @@ -66,7 +65,25 @@ public class UpdatesIndexFragment extends SherlockListFragment { @Override public void onListItemClick(ListView l, View v, int position, long id) { - super.onListItemClick(l, v, position, id); + final CheckBox ch = (CheckBox) v.findViewById(R.id.check_download_item); + onItemSelected(ch, position); + } + + private void onItemSelected(CheckBox ch, int position){ + final IndexItem e = (IndexItem) getListAdapter().getItem(position); + if (ch.isChecked()) { + ch.setChecked(!ch.isChecked()); + getDownloadActivity().getEntriesToDownload().remove(e); + getDownloadActivity().updateDownloadButton(true); + return; + } + + List download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getDownloadType(), new ArrayList()); + if (download.size() > 0) { + getDownloadActivity().getEntriesToDownload().put(e, download); + getDownloadActivity().updateDownloadButton(true); + ch.setChecked(!ch.isChecked()); + } } public DownloadActivity getDownloadActivity() { @@ -124,7 +141,7 @@ public class UpdatesIndexFragment extends SherlockListFragment { if (!getDownloadActivity().getEntriesToDownload().containsKey(es)) { selected++; getDownloadActivity().getEntriesToDownload().put(es, es.createDownloadEntry(getMyApplication(), - getDownloadActivity().getType(), new ArrayList(1))); + getDownloadActivity().getDownloadType(), new ArrayList(1))); } } @@ -179,7 +196,7 @@ public class UpdatesIndexFragment extends SherlockListFragment { TextView name = (TextView) v.findViewById(R.id.download_item); TextView description = (TextView) v.findViewById(R.id.download_descr); IndexItem e = items.get(position); - String eName = e.getVisibleName(getMyApplication(), osmandRegions); + String eName = e.getVisibleDescription(getMyApplication()) + "\n" + e.getVisibleName(getMyApplication(), osmandRegions); name.setText(eName.trim()); //$NON-NLS-1$ String d = e.getDate(format) + "\n" + e.getSizeDescription(getMyApplication()); description.setText(d); @@ -190,24 +207,37 @@ public class UpdatesIndexFragment extends SherlockListFragment { @Override public void onClick(View v) { ch.setChecked(!ch.isChecked()); - final IndexItem e = (IndexItem) getListAdapter().getItem(position); - if (ch.isChecked()) { - ch.setChecked(!ch.isChecked()); - getDownloadActivity().getEntriesToDownload().remove(e); - getDownloadActivity().updateDownloadButton(true); - return; - } - - List download = e.createDownloadEntry(getMyApplication(), getDownloadActivity().getType(), new ArrayList()); - if (download.size() > 0) { - getDownloadActivity().getEntriesToDownload().put(e, download); - getDownloadActivity().updateDownloadButton(true); - ch.setChecked(!ch.isChecked()); - } - + onItemSelected(ch, position); } }); + if (e.getDate(format) != null) { + Map indexActivatedFileNames = getDownloadActivity().getIndexActivatedFileNames(); + Map indexFileNames = getDownloadActivity().getIndexFileNames(); + + if (indexActivatedFileNames != null && indexFileNames != null){ + String sfName = e.getTargetFileName(); + if (e.getDate(format).equals(indexActivatedFileNames.get(sfName))) { + name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : " + + indexActivatedFileNames.get(sfName)); + name.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); + } else if (e.getDate(format).equals(indexFileNames.get(sfName))) { + name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : " + + indexFileNames.get(sfName)); + name.setTypeface(Typeface.DEFAULT, Typeface.ITALIC); + } else if (indexActivatedFileNames.containsKey(sfName)) { + name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : " + + indexActivatedFileNames.get(sfName)); + name.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); + } else { + name.setText(name.getText() + "\n" + getResources().getString(R.string.local_index_installed) + " : " + + indexFileNames.get(sfName)); + name.setTypeface(Typeface.DEFAULT, Typeface.ITALIC); + } + } + } + + return v; }