Downdload map design in progress. Voice now has no aggreagation. Icons. Back is now working.

This commit is contained in:
GaidamakUA 2015-09-28 14:56:08 +03:00
parent 3114e2187a
commit 80798e4f8e
7 changed files with 166 additions and 77 deletions

View file

@ -1,6 +1,8 @@
package net.osmand.plus.download; package net.osmand.plus.download;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
@ -24,34 +26,53 @@ import java.util.Map;
import static net.osmand.IndexConstants.BINARY_MAP_INDEX_EXT; import static net.osmand.IndexConstants.BINARY_MAP_INDEX_EXT;
public class DownloadActivityType { public class DownloadActivityType implements Parcelable {
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy"); private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
private static Map<String, DownloadActivityType> byTag = new HashMap<String, DownloadActivityType>(); private static Map<String, DownloadActivityType> byTag = new HashMap<>();
public static final DownloadActivityType NORMAL_FILE = new DownloadActivityType(R.string.download_regular_maps, "map"); public static final DownloadActivityType NORMAL_FILE = new DownloadActivityType(R.string.download_regular_maps, "map");
public static final DownloadActivityType VOICE_FILE = new DownloadActivityType(R.string.voices, "voice"); public static final DownloadActivityType VOICE_FILE =
new DownloadActivityType(R.string.voices, R.drawable.ic_action_volume_up, "voice");
public static final DownloadActivityType ROADS_FILE = new DownloadActivityType(R.string.download_roads_only_maps, "road_map"); public static final DownloadActivityType ROADS_FILE = new DownloadActivityType(R.string.download_roads_only_maps, "road_map");
public static final DownloadActivityType SRTM_COUNTRY_FILE = new DownloadActivityType(R.string.download_srtm_maps, "srtm_map"); public static final DownloadActivityType SRTM_COUNTRY_FILE =
public static final DownloadActivityType HILLSHADE_FILE = new DownloadActivityType(R.string.download_hillshade_maps, "hillshade"); new DownloadActivityType(R.string.download_srtm_maps,
public static final DownloadActivityType WIKIPEDIA_FILE = new DownloadActivityType(R.string.download_wikipedia_maps, "wikimap"); R.drawable.ic_plugin_srtm, "srtm_map");
public static final DownloadActivityType HILLSHADE_FILE =
new DownloadActivityType(R.string.download_hillshade_maps,
R.drawable.ic_action_hillshade_dark, "hillshade");
public static final DownloadActivityType WIKIPEDIA_FILE =
new DownloadActivityType(R.string.download_wikipedia_maps,
R.drawable.ic_world_globe_dark, "wikimap");
public static final DownloadActivityType LIVE_UPDATES_FILE = new DownloadActivityType(R.string.download_live_updates, "live_updates"); public static final DownloadActivityType LIVE_UPDATES_FILE = new DownloadActivityType(R.string.download_live_updates, "live_updates");
private int resource; private final int stringResource;
private String[] tags; private final int iconResource;
public DownloadActivityType(int resource, String... tags) { private String tag;
this.resource = resource;
this.tags = tags; public DownloadActivityType(int stringResource, int iconResource, String tag) {
for(String st : tags) { this.stringResource = stringResource;
byTag.put(st, this); this.tag = tag;
} byTag.put(tag, this);
this.iconResource = iconResource;
} }
public int getResource(){ public DownloadActivityType(int stringResource, String tag) {
return resource; this.stringResource = stringResource;
this.tag = tag;
byTag.put(tag, this);
iconResource = R.drawable.ic_map;
} }
public int getStringResource(){
return stringResource;
}
public int getIconResource() {
return iconResource;
}
public String getTag() { public String getTag() {
return tags[0]; return tag;
} }
@ -66,7 +87,7 @@ public class DownloadActivityType {
} }
public String getString(Context c) { public String getString(Context c) {
return c.getString(resource); return c.getString(stringResource);
} }
public static DownloadActivityType getIndexType(String tagName) { public static DownloadActivityType getIndexType(String tagName) {
@ -271,8 +292,7 @@ public class DownloadActivityType {
if (l == -1) { if (l == -1) {
l = fileName.length(); l = fileName.length();
} }
String s = fileName.substring(0, l); return fileName.substring(0, l);
return s;
} else if (this == HILLSHADE_FILE) { } else if (this == HILLSHADE_FILE) {
return fileName.replace('_', ' '); return fileName.replace('_', ' ');
} else if (this == LIVE_UPDATES_FILE) { } else if (this == LIVE_UPDATES_FILE) {
@ -322,8 +342,7 @@ public class DownloadActivityType {
if (l == -1) { if (l == -1) {
l = fileName.length(); l = fileName.length();
} }
String s = fileName.substring(0, l); return fileName.substring(0, l);
return s;
} }
if (this == LIVE_UPDATES_FILE) { if (this == LIVE_UPDATES_FILE) {
if(fileName.indexOf('.') > 0){ if(fileName.indexOf('.') > 0){
@ -341,5 +360,32 @@ public class DownloadActivityType {
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.stringResource);
dest.writeInt(this.iconResource);
dest.writeString(this.tag);
}
protected DownloadActivityType(Parcel in) {
this.stringResource = in.readInt();
this.iconResource = in.readInt();
this.tag = in.readString();
byTag.put(tag, this);
}
public static final Parcelable.Creator<DownloadActivityType> CREATOR = new Parcelable.Creator<DownloadActivityType>() {
public DownloadActivityType createFromParcel(Parcel source) {
return new DownloadActivityType(source);
}
public DownloadActivityType[] newArray(int size) {
return new DownloadActivityType[size];
}
};
} }

View file

@ -1,6 +1,8 @@
package net.osmand.plus.download; package net.osmand.plus.download;
import android.content.Context; import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
@ -18,7 +20,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class IndexItem implements Comparable<IndexItem>, HasName { public class IndexItem implements Comparable<IndexItem>, HasName, Parcelable {
private static final Log log = PlatformUtil.getLog(IndexItem.class); private static final Log log = PlatformUtil.getLog(IndexItem.class);
String description; String description;
@ -114,9 +116,9 @@ public class IndexItem implements Comparable<IndexItem>, HasName {
@Override @Override
public int compareTo(@NonNull IndexItem another) { public int compareTo(@NonNull IndexItem another) {
if(another == null) { // if(another == null) {
return -1; // return -1;
} // }
return getFileName().compareTo(another.getFileName()); return getFileName().compareTo(another.getFileName());
} }
@ -146,7 +148,7 @@ public class IndexItem implements Comparable<IndexItem>, HasName {
@Override @Override
public String getName() { public String getName() {
return initializedName; return initializedName + " must be fixed";
} }
public void setName(String initializedName) { public void setName(String initializedName) {
@ -166,4 +168,44 @@ public class IndexItem implements Comparable<IndexItem>, HasName {
", extra=" + extra + ", extra=" + extra +
'}'; '}';
} }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.description);
dest.writeString(this.fileName);
dest.writeString(this.size);
dest.writeLong(this.timestamp);
dest.writeLong(this.contentSize);
dest.writeLong(this.containerSize);
dest.writeParcelable(this.type, flags);
dest.writeByte(extra ? (byte) 1 : (byte) 0);
dest.writeString(this.initializedName);
}
protected IndexItem(Parcel in) {
this.description = in.readString();
this.fileName = in.readString();
this.size = in.readString();
this.timestamp = in.readLong();
this.contentSize = in.readLong();
this.containerSize = in.readLong();
this.type = in.readParcelable(DownloadActivityType.class.getClassLoader());
this.extra = in.readByte() != 0;
this.initializedName = in.readString();
}
public static final Parcelable.Creator<IndexItem> CREATOR = new Parcelable.Creator<IndexItem>() {
public IndexItem createFromParcel(Parcel source) {
return new IndexItem(source);
}
public IndexItem[] newArray(int size) {
return new IndexItem[size];
}
};
} }

View file

@ -40,7 +40,7 @@ public class UpdatesIndexFragment extends OsmAndListFragment {
private OsmandRegions osmandRegions; private OsmandRegions osmandRegions;
private java.text.DateFormat format; private java.text.DateFormat format;
private UpdateIndexAdapter listAdapter; private UpdateIndexAdapter listAdapter;
List<IndexItem> indexItems = new ArrayList<IndexItem>(); List<IndexItem> indexItems = new ArrayList<>();
@Override @Override
@ -233,7 +233,7 @@ public class UpdatesIndexFragment extends OsmAndListFragment {
private void filterExisting() { private void filterExisting() {
final Map<String, String> listAlreadyDownloaded = DownloadActivity.downloadListIndexThread.getDownloadedIndexFileNames(); final Map<String, String> listAlreadyDownloaded = DownloadActivity.downloadListIndexThread.getDownloadedIndexFileNames();
final List<IndexItem> filtered = new ArrayList<IndexItem>(); final List<IndexItem> filtered = new ArrayList<>();
for (IndexItem fileItem : listAdapter.getIndexFiles()) { for (IndexItem fileItem : listAdapter.getIndexFiles()) {
if (fileItem.isAlreadyDownloaded(listAlreadyDownloaded)) { if (fileItem.isAlreadyDownloaded(listAlreadyDownloaded)) {
filtered.add(fileItem); filtered.add(fileItem);
@ -329,7 +329,7 @@ public class UpdatesIndexFragment extends OsmAndListFragment {
} }
private String getMapDescription(IndexItem item){ private String getMapDescription(IndexItem item){
String typeName = getTypeName(item, item.getType().getResource()); String typeName = getTypeName(item, item.getType().getStringResource());
String date = item.getDate(format); String date = item.getDate(format);
String size = item.getSizeDescription(getActivity()); String size = item.getSizeDescription(getActivity());
return typeName + " " + date + " " + size; return typeName + " " + date + " " + size;

View file

@ -9,7 +9,6 @@ import net.osmand.OsmAndCollator;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.map.OsmandRegions; import net.osmand.map.OsmandRegions;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R;
import net.osmand.plus.Version; import net.osmand.plus.Version;
import net.osmand.plus.download.DownloadActivityType; import net.osmand.plus.download.DownloadActivityType;
import net.osmand.plus.download.IndexItem; import net.osmand.plus.download.IndexItem;
@ -133,30 +132,32 @@ public class IndexItemCategoryWithSubcat implements Comparable<IndexItemCategory
} }
} }
IndexItemCategoryWithSubcat region; if (i.getType() == DownloadActivityType.VOICE_FILE){
region = cats.get(i.getBasename()); // TODO remove
final String visibleName = i.getVisibleName(ctx, ctx.getRegions()); final String visibleName = i.getVisibleName(ctx, ctx.getRegions());
i.setName(visibleName); i.setName(visibleName);
if (region == null) { category.items.add(i);
final CategoryStaticData regionStaticData = new CategoryStaticData(0, 0); } else {
regionStaticData.setName(visibleName); IndexItemCategoryWithSubcat region;
region = new IndexItemCategoryWithSubcat(regionStaticData); region = cats.get(i.getBasename());
cats.put(i.getBasename(), region); // TODO remove
category.subcats.add(region); final String visibleName = i.getVisibleName(ctx, ctx.getRegions());
i.setName(visibleName);
if (region == null) {
final CategoryStaticData regionStaticData = new CategoryStaticData(0, 0);
regionStaticData.setName(visibleName);
region = new IndexItemCategoryWithSubcat(regionStaticData);
cats.put(i.getBasename(), region);
category.subcats.add(region);
}
region.items.add(i);
if (i.getType() == DownloadActivityType.NORMAL_FILE
|| i.getType() == DownloadActivityType.WIKIPEDIA_FILE
|| i.getType() == DownloadActivityType.SRTM_COUNTRY_FILE
|| i.getType() == DownloadActivityType.HILLSHADE_FILE) {
region.types.add(i.getType().getStringResource());
}
} }
region.items.add(i);
if (i.getType() == DownloadActivityType.NORMAL_FILE) {
region.types.add(R.string.shared_string_map);
}
if (i.getType() == DownloadActivityType.WIKIPEDIA_FILE) {
region.types.add(R.string.shared_string_wikipedia);
}
if (i.getType() == DownloadActivityType.ROADS_FILE) {
region.types.add(R.string.roads);
}
final CategoryStaticData parent = category.categoryStaticData.getParent();
} }
final Collator collator = OsmAndCollator.primaryCollator(); final Collator collator = OsmAndCollator.primaryCollator();
for (IndexItemCategoryWithSubcat ct : mainList) { for (IndexItemCategoryWithSubcat ct : mainList) {

View file

@ -57,8 +57,7 @@ public class MapsInCategoryFragment extends DialogFragment {
public void onCategorySelected(@NonNull IndexItemCategoryWithSubcat category) { public void onCategorySelected(@NonNull IndexItemCategoryWithSubcat category) {
LOG.debug("onCategorySelected()"); LOG.debug("onCategorySelected()");
getChildFragmentManager().beginTransaction().replace(R.id.fragmentContainer, createInstance(category).show(getChildFragmentManager(), TAG);
SubcategoriesFragment.createInstance(category)).addToBackStack(null).commit();
} }
public void onIndexItemSelected(@NonNull IndexItem indexItem) { public void onIndexItemSelected(@NonNull IndexItem indexItem) {

View file

@ -14,7 +14,6 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.ProgressBar; import android.widget.ProgressBar;
@ -55,13 +54,6 @@ public class NewLocalIndexesFragment extends OsmAndListFragment {
ListView listView = (ListView) view.findViewById(android.R.id.list); ListView listView = (ListView) view.findViewById(android.R.id.list);
mAdapter = new CategoriesAdapter(getActivity(), getMyApplication()); mAdapter = new CategoriesAdapter(getActivity(), getMyApplication());
listView.setAdapter(mAdapter); listView.setAdapter(mAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
LOG.debug("onItemClick()");
}
});
View header = inflater.inflate(R.layout.local_index_fragment_header, listView, false); View header = inflater.inflate(R.layout.local_index_fragment_header, listView, false);
initMemoryConsumedCard(header); initMemoryConsumedCard(header);
@ -116,7 +108,6 @@ public class NewLocalIndexesFragment extends OsmAndListFragment {
fragmentTransaction.addToBackStack(null); fragmentTransaction.addToBackStack(null);
MapsInCategoryFragment.createInstance(mAdapter.getItem(position-1)) MapsInCategoryFragment.createInstance(mAdapter.getItem(position-1))
.show(fragmentTransaction, MapsInCategoryFragment.TAG); .show(fragmentTransaction, MapsInCategoryFragment.TAG);
LOG.debug("onListItemClick()");
} }
private DownloadActivity getDownloadActivity() { private DownloadActivity getDownloadActivity() {
@ -124,7 +115,6 @@ public class NewLocalIndexesFragment extends OsmAndListFragment {
} }
public void onCategorizationFinished(List<IndexItem> filtered, List<IndexItemCategoryWithSubcat> cats) { public void onCategorizationFinished(List<IndexItem> filtered, List<IndexItemCategoryWithSubcat> cats) {
LOG.debug("cats=" + cats);
mAdapter.clear(); mAdapter.clear();
mAdapter.addAll(cats); mAdapter.addAll(cats);
} }

View file

@ -20,6 +20,7 @@ import net.osmand.plus.IconsCache;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.download.DownloadActivityType;
import net.osmand.plus.download.IndexItem; import net.osmand.plus.download.IndexItem;
import net.osmand.plus.helpers.HasName; import net.osmand.plus.helpers.HasName;
@ -38,8 +39,9 @@ public class SubcategoriesFragment extends Fragment {
assert category != null; assert category != null;
ListView listView = new ListView(getActivity()); ListView listView = new ListView(getActivity());
final OsmandApplication application = (OsmandApplication) getActivity().getApplication();
final MapFilesAdapter mAdapter = new MapFilesAdapter(getActivity(), final MapFilesAdapter mAdapter = new MapFilesAdapter(getActivity(),
((OsmandApplication) getActivity().getApplication()).getIconsCache()); application.getIconsCache(), application);
listView.setAdapter(mAdapter); listView.setAdapter(mAdapter);
mAdapter.addAll(category.items); mAdapter.addAll(category.items);
mAdapter.addAll(category.subcats); mAdapter.addAll(category.subcats);
@ -51,8 +53,7 @@ public class SubcategoriesFragment extends Fragment {
}); });
View freeVersionBanner = inflater.inflate(R.layout.free_version_banner, listView, false); View freeVersionBanner = inflater.inflate(R.layout.free_version_banner, listView, false);
final OsmandSettings settings = final OsmandSettings settings = application.getSettings();
((OsmandApplication) getActivity().getApplication()).getSettings();
DownloadsUiInitHelper.initFreeVersionBanner(freeVersionBanner, settings, getResources()); DownloadsUiInitHelper.initFreeVersionBanner(freeVersionBanner, settings, getResources());
listView.addHeaderView(freeVersionBanner); listView.addHeaderView(freeVersionBanner);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@ -85,10 +86,12 @@ public class SubcategoriesFragment extends Fragment {
private static class MapFilesAdapter extends ArrayAdapter<HasName> { private static class MapFilesAdapter extends ArrayAdapter<HasName> {
private final IconsCache iconsCache; private final IconsCache iconsCache;
private final OsmandApplication application;
public MapFilesAdapter(Context context, IconsCache iconsCache) { public MapFilesAdapter(Context context, IconsCache iconsCache, OsmandApplication application) {
super(context, R.layout.two_line_with_images_list_item); super(context, R.layout.two_line_with_images_list_item);
this.iconsCache = iconsCache; this.iconsCache = iconsCache;
this.application = application;
} }
@Override @Override
@ -117,20 +120,28 @@ public class SubcategoriesFragment extends Fragment {
stringBuilder.append(resources.getString(mapType)); stringBuilder.append(resources.getString(mapType));
stringBuilder.append(", "); stringBuilder.append(", ");
} }
LOG.debug("stringBuilder=" + stringBuilder); stringBuilder.delete(stringBuilder.length() - 2, stringBuilder.capacity());
stringBuilder.delete(stringBuilder.capacity() - 3, stringBuilder.capacity());
viewHolder.descrTextView.setText(stringBuilder.toString()); viewHolder.descrTextView.setText(stringBuilder.toString());
} else { } else {
// TODO replace with string constant // TODO replace with string constant
viewHolder.descrTextView.setText("Others"); viewHolder.descrTextView.setText("Others");
} }
viewHolder.leftImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_map));
LOG.debug("category.types=" + category.types); LOG.debug("category.types=" + category.types);
} else if (item instanceof IndexItem) {
IndexItem indexItem = (IndexItem) item;
if (indexItem.getType() == DownloadActivityType.VOICE_FILE) {
viewHolder.nameTextView.setText(indexItem.getVisibleName(getContext(),
application.getRegions()));
} else {
viewHolder.nameTextView.setText(indexItem.getType().getString(getContext()));
}
viewHolder.descrTextView.setText(indexItem.getSizeDescription(getContext()));
viewHolder.leftImageView.setImageResource(indexItem.getType().getIconResource());
} else { } else {
viewHolder.nameTextView.setText(item.getName()); throw new IllegalArgumentException("Item must be of type IndexItem or " +
// TODO replace with real values "IndexItemCategory but is of type:" + item.getClass());
viewHolder.descrTextView.setText("Temp values");
} }
viewHolder.leftImageView.setImageDrawable(iconsCache.getContentIcon(R.drawable.ic_map));
return convertView; return convertView;
} }