refactoring p.2
This commit is contained in:
parent
e3c257b255
commit
1ec3189a86
8 changed files with 300 additions and 161 deletions
|
@ -29,7 +29,6 @@ import java.util.Map;
|
|||
|
||||
import static net.osmand.IndexConstants.BINARY_MAP_INDEX_EXT;
|
||||
import static net.osmand.plus.activities.LocalIndexHelper.LocalIndexType.SRTM_DATA;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.getSRTMExt;
|
||||
|
||||
public class DownloadActivityType {
|
||||
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy", Locale.US);
|
||||
|
@ -231,7 +230,7 @@ public class DownloadActivityType {
|
|||
} else if (FONT_FILE == this) {
|
||||
return IndexConstants.FONT_INDEX_EXT;
|
||||
} else if (SRTM_COUNTRY_FILE == this) {
|
||||
return getSRTMExt(indexItem);
|
||||
return SrtmDownloadItem.getExtension(indexItem);
|
||||
} else if (WIKIPEDIA_FILE == this) {
|
||||
return IndexConstants.BINARY_WIKI_MAP_INDEX_EXT;
|
||||
} else if (WIKIVOYAGE_FILE == this) {
|
||||
|
@ -427,7 +426,7 @@ public class DownloadActivityType {
|
|||
}
|
||||
String baseNameWithoutVersion = fileName.substring(0, l);
|
||||
if (this == SRTM_COUNTRY_FILE) {
|
||||
return baseNameWithoutVersion + getSRTMExt(item);
|
||||
return baseNameWithoutVersion + SrtmDownloadItem.getExtension(item);
|
||||
}
|
||||
if (this == WIKIPEDIA_FILE) {
|
||||
return baseNameWithoutVersion + IndexConstants.BINARY_WIKI_MAP_INDEX_EXT;
|
||||
|
@ -505,14 +504,4 @@ public class DownloadActivityType {
|
|||
return fileName;
|
||||
}
|
||||
|
||||
public static boolean isSRTMItem(Object item) {
|
||||
if (item instanceof IndexItem) {
|
||||
return ((IndexItem) item).getType() == SRTM_COUNTRY_FILE;
|
||||
} else if (item instanceof DownloadItem) {
|
||||
return ((DownloadItem) item).getType() == SRTM_COUNTRY_FILE;
|
||||
} else if (item instanceof LocalIndexInfo) {
|
||||
return ((LocalIndexInfo) item).getType() == SRTM_DATA;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -471,14 +471,49 @@ public class DownloadResources extends DownloadResourceGroup {
|
|||
addGroup(otherGroup);
|
||||
|
||||
createHillshadeSRTMGroups();
|
||||
collectMultipleIndexesItems();
|
||||
replaceIndividualSrtmWithGroups(region);
|
||||
collectMultipleIndexesItems(region);
|
||||
trimEmptyGroups();
|
||||
updateLoadedFiles();
|
||||
return true;
|
||||
}
|
||||
|
||||
private void collectMultipleIndexesItems() {
|
||||
collectMultipleIndexesItems(region);
|
||||
private void replaceIndividualSrtmWithGroups(@NonNull WorldRegion region) {
|
||||
DownloadResourceGroup group = getRegionMapsGroup(region);
|
||||
if (group != null) {
|
||||
boolean useMetersByDefault = SrtmDownloadItem.shouldUseMetersByDefault(app);
|
||||
boolean listModified = false;
|
||||
DownloadActivityType srtmType = DownloadActivityType.SRTM_COUNTRY_FILE;
|
||||
List<IndexItem> indexesList = group.getIndividualResources();
|
||||
List<DownloadItem> individualDownloadItems = group.getIndividualDownloadItems();
|
||||
if (doesListContainIndexWithType(indexesList, srtmType)) {
|
||||
IndexItem meters = null;
|
||||
IndexItem feet = null;
|
||||
for (IndexItem item : indexesList) {
|
||||
if (item.getType() == srtmType) {
|
||||
if (SrtmDownloadItem.isMetersItem(item)) {
|
||||
meters = item;
|
||||
} else {
|
||||
feet = item;
|
||||
}
|
||||
}
|
||||
}
|
||||
individualDownloadItems.remove(meters);
|
||||
individualDownloadItems.remove(feet);
|
||||
group.addItem(new SrtmDownloadItem(meters, feet, useMetersByDefault));
|
||||
listModified = true;
|
||||
}
|
||||
if (listModified) {
|
||||
sortDownloadItems(individualDownloadItems);
|
||||
}
|
||||
}
|
||||
|
||||
List<WorldRegion> subRegions = region.getSubregions();
|
||||
if (!Algorithms.isEmpty(subRegions)) {
|
||||
for (WorldRegion subRegion : subRegions) {
|
||||
replaceIndividualSrtmWithGroups(subRegion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void collectMultipleIndexesItems(@NonNull WorldRegion region) {
|
||||
|
|
|
@ -12,7 +12,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import static net.osmand.plus.download.DownloadActivityType.SRTM_COUNTRY_FILE;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.isBaseSRTMItem;
|
||||
|
||||
public class MultipleIndexItem extends DownloadItem {
|
||||
|
||||
|
@ -121,7 +120,8 @@ public class MultipleIndexItem extends DownloadItem {
|
|||
if (this.type == SRTM_COUNTRY_FILE) {
|
||||
for (IndexItem item : items) {
|
||||
if (item.hasActualDataToDownload()) {
|
||||
if (baseSRTM && isBaseSRTMItem(item) || !baseSRTM && !isBaseSRTMItem(item)) {
|
||||
boolean isBase = SrtmDownloadItem.isMetersItem(item);
|
||||
if (baseSRTM && isBase || !baseSRTM && !isBase) {
|
||||
totalSizeMb += item.getSizeToDownloadInMb();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,11 +6,9 @@ import android.view.View;
|
|||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.map.OsmandRegions;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
import net.osmand.plus.base.SelectMultipleItemsBottomSheet;
|
||||
import net.osmand.plus.base.SelectMultipleItemsBottomSheet.SelectionUpdateListener;
|
||||
import net.osmand.plus.base.SelectModeBottomSheet;
|
||||
|
@ -19,7 +17,6 @@ import net.osmand.plus.base.SelectionBottomSheet;
|
|||
import net.osmand.plus.base.SelectionBottomSheet.OnApplySelectionListener;
|
||||
import net.osmand.plus.base.SelectionBottomSheet.OnUiInitializedListener;
|
||||
import net.osmand.plus.base.SelectionBottomSheet.SelectableItem;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
import net.osmand.plus.widgets.MultiStateToggleButton.OnRadioItemClickListener;
|
||||
import net.osmand.plus.widgets.MultiStateToggleButton.RadioItem;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
@ -29,35 +26,56 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.IndexConstants.BINARY_SRTM_MAP_INDEX_EXT;
|
||||
import static net.osmand.IndexConstants.BINARY_SRTM_MAP_INDEX_EXT_ZIP;
|
||||
import static net.osmand.plus.download.DownloadActivityType.SRTM_COUNTRY_FILE;
|
||||
|
||||
public class SelectIndexesUiHelper {
|
||||
|
||||
public static void showDialog(@NonNull DownloadItem item,
|
||||
private OsmandApplication app;
|
||||
private AppCompatActivity activity;
|
||||
|
||||
private DateFormat dateFormat;
|
||||
private boolean showRemoteDate;
|
||||
private DownloadItem downloadItem;
|
||||
private SelectItemsToDownloadListener listener;
|
||||
private SelectionBottomSheet dialog;
|
||||
|
||||
private SelectIndexesUiHelper(@NonNull DownloadItem item,
|
||||
@NonNull AppCompatActivity activity,
|
||||
@NonNull final OsmandApplication app,
|
||||
@NonNull DateFormat dateFormat,
|
||||
boolean showRemoteDate,
|
||||
@NonNull final SelectItemsToDownloadListener listener) {
|
||||
if (item.getType() == SRTM_COUNTRY_FILE) {
|
||||
if (item instanceof MultipleIndexItem) {
|
||||
showMultipleSrtmDialog(item, activity, app, dateFormat, showRemoteDate, listener);
|
||||
} else {
|
||||
showSingleSrtmDialog(item, activity, app, dateFormat, showRemoteDate, listener);
|
||||
@NonNull SelectItemsToDownloadListener listener) {
|
||||
this.activity = activity;
|
||||
this.app = (OsmandApplication) activity.getApplicationContext();
|
||||
this.downloadItem = item;
|
||||
this.dateFormat = dateFormat;
|
||||
this.showRemoteDate = showRemoteDate;
|
||||
this.listener = listener;
|
||||
}
|
||||
} else if (item instanceof MultipleIndexItem) {
|
||||
showBaseDialog((MultipleIndexItem) item, activity, app, dateFormat, showRemoteDate, listener);
|
||||
|
||||
public static void showDialog(@NonNull DownloadItem item,
|
||||
@NonNull AppCompatActivity activity,
|
||||
@NonNull DateFormat dateFormat,
|
||||
boolean showRemoteDate,
|
||||
@NonNull SelectItemsToDownloadListener listener) {
|
||||
SelectIndexesUiHelper helper =
|
||||
new SelectIndexesUiHelper(item, activity, dateFormat, showRemoteDate, listener);
|
||||
helper.showDialogInternal();
|
||||
}
|
||||
|
||||
private void showDialogInternal() {
|
||||
if (downloadItem.getType() == SRTM_COUNTRY_FILE) {
|
||||
if (downloadItem instanceof MultipleIndexItem) {
|
||||
showMultipleSrtmDialog();
|
||||
} else {
|
||||
showSingleSrtmDialog();
|
||||
}
|
||||
} else if (downloadItem instanceof MultipleIndexItem) {
|
||||
showBaseDialog();
|
||||
}
|
||||
}
|
||||
|
||||
public static void showBaseDialog(@NonNull MultipleIndexItem multipleIndexItem,
|
||||
@NonNull AppCompatActivity activity,
|
||||
@NonNull final OsmandApplication app,
|
||||
@NonNull DateFormat dateFormat,
|
||||
boolean showRemoteDate,
|
||||
@NonNull final SelectItemsToDownloadListener listener) {
|
||||
private void showBaseDialog() {
|
||||
MultipleIndexItem multipleIndexItem = (MultipleIndexItem) downloadItem;
|
||||
List<IndexItem> indexesToDownload = getIndexesToDownload(multipleIndexItem);
|
||||
List<SelectableItem> allItems = new ArrayList<>();
|
||||
List<SelectableItem> selectedItems = new ArrayList<>();
|
||||
|
@ -65,10 +83,12 @@ public class SelectIndexesUiHelper {
|
|||
for (IndexItem indexItem : multipleIndexItem.getAllIndexes()) {
|
||||
SelectableItem selectableItem = new SelectableItem();
|
||||
selectableItem.setTitle(indexItem.getVisibleName(app, osmandRegions, false));
|
||||
|
||||
String size = indexItem.getSizeDescription(app);
|
||||
String date = indexItem.getDate(dateFormat, showRemoteDate);
|
||||
String description = app.getString(R.string.ltr_or_rtl_combine_via_bold_point, size, date);
|
||||
selectableItem.setDescription(description);
|
||||
|
||||
selectableItem.setIconId(indexItem.getType().getIconResource());
|
||||
selectableItem.setObject(indexItem);
|
||||
allItems.add(selectableItem);
|
||||
|
@ -91,90 +111,37 @@ public class SelectIndexesUiHelper {
|
|||
dialog.setSelectionUpdateListener(new SelectionUpdateListener() {
|
||||
@Override
|
||||
public void onSelectionUpdate() {
|
||||
updateSize(app, dialog, true);
|
||||
updateSize(dialog, true);
|
||||
}
|
||||
});
|
||||
dialog.setOnApplySelectionListener(getOnApplySelectionListener(listener));
|
||||
}
|
||||
|
||||
public static void showSingleSrtmDialog(@NonNull final DownloadItem downloadItem,
|
||||
@NonNull AppCompatActivity activity,
|
||||
@NonNull final OsmandApplication app,
|
||||
@NonNull final DateFormat dateFormat,
|
||||
final boolean showRemoteDate,
|
||||
@NonNull final SelectItemsToDownloadListener listener) {
|
||||
List<IndexItem> allIndexes = getIndexesToDownload(downloadItem);
|
||||
boolean baseSRTM = isBaseSRTMMetricSystem(app);
|
||||
private void showSingleSrtmDialog() {
|
||||
boolean baseSRTM = SrtmDownloadItem.shouldUseMetersByDefault(app);
|
||||
SrtmDownloadItem srtmItem = (SrtmDownloadItem) downloadItem;
|
||||
|
||||
SelectableItem meterItem = createSrtmSelectableItem(srtmItem.getMeterItem());
|
||||
SelectableItem feetItem = createSrtmSelectableItem(srtmItem.getFeetItem());
|
||||
|
||||
List<RadioItem> radioItems = new ArrayList<>();
|
||||
final RadioItem meters = new RadioItem(Algorithms.capitalizeFirstLetter(app.getString(R.string.shared_string_meters)));
|
||||
RadioItem feet = new RadioItem(Algorithms.capitalizeFirstLetter(app.getString(R.string.shared_string_feets)));
|
||||
RadioItem meters = createRadioItem(meterItem, R.string.shared_string_meters);
|
||||
RadioItem feet = createRadioItem(feetItem, R.string.shared_string_feets);
|
||||
radioItems.add(meters);
|
||||
radioItems.add(feet);
|
||||
SelectableItem meterItem = null;
|
||||
SelectableItem feetItem = null;
|
||||
for (IndexItem indexItem : allIndexes) {
|
||||
boolean baseItem = isBaseSRTMItem(indexItem);
|
||||
SelectableItem selectableItem = new SelectableItem();
|
||||
selectableItem.setTitle(indexItem.getVisibleName(app, app.getRegions(), false));
|
||||
String size = indexItem.getSizeDescription(app);
|
||||
size += " (" + getSRTMAbbrev(app, baseItem) + ")";
|
||||
String date = indexItem.getDate(dateFormat, showRemoteDate);
|
||||
String description = app.getString(R.string.ltr_or_rtl_combine_via_bold_point, size, date);
|
||||
selectableItem.setDescription(description);
|
||||
selectableItem.setIconId(indexItem.getType().getIconResource());
|
||||
selectableItem.setObject(indexItem);
|
||||
if (baseItem) {
|
||||
meterItem = selectableItem;
|
||||
} else {
|
||||
feetItem = selectableItem;
|
||||
}
|
||||
}
|
||||
|
||||
final SelectableItem initMeter = meterItem;
|
||||
final SelectableItem initFeet = feetItem;
|
||||
|
||||
final SelectModeBottomSheet dialog = SelectModeBottomSheet.showInstance(activity,
|
||||
dialog = SelectModeBottomSheet.showInstance(activity,
|
||||
baseSRTM ? meterItem : feetItem, radioItems, true);
|
||||
|
||||
meters.setOnClickListener(new OnRadioItemClickListener() {
|
||||
@Override
|
||||
public boolean onRadioItemClick(RadioItem radioItem, View view) {
|
||||
dialog.setPreviewItem(initMeter);
|
||||
updateSize(app, dialog, false);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
feet.setOnClickListener(new OnRadioItemClickListener() {
|
||||
@Override
|
||||
public boolean onRadioItemClick(RadioItem radioItem, View view) {
|
||||
dialog.setPreviewItem(initFeet);
|
||||
|
||||
double sizeToDownload = getDownloadSizeInMb(Collections.singletonList(initFeet));
|
||||
String size = DownloadItem.getFormattedMb(app, sizeToDownload);
|
||||
String btnTitle = app.getString(R.string.shared_string_download);
|
||||
if (sizeToDownload > 0) {
|
||||
btnTitle = app.getString(R.string.ltr_or_rtl_combine_via_dash, btnTitle, size);
|
||||
}
|
||||
dialog.setApplyButtonTitle(btnTitle);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
final RadioItem initRadio = baseSRTM ? meters : feet;
|
||||
final SelectableItem initItem = baseSRTM ? meterItem : feetItem;
|
||||
dialog.setUiInitializedListener(new OnUiInitializedListener() {
|
||||
@Override
|
||||
public void onUiInitialized() {
|
||||
SelectModeBottomSheet dialog = (SelectModeBottomSheet) SelectIndexesUiHelper.this.dialog;
|
||||
dialog.setTitle(app.getString(R.string.srtm_unit_format));
|
||||
dialog.setDescription(app.getString(R.string.srtm_download_single_help_message));
|
||||
double sizeToDownload = getDownloadSizeInMb(Collections.singletonList(initFeet));
|
||||
String size = DownloadItem.getFormattedMb(app, sizeToDownload);
|
||||
String btnTitle = app.getString(R.string.shared_string_download);
|
||||
if (sizeToDownload > 0) {
|
||||
btnTitle = app.getString(R.string.ltr_or_rtl_combine_via_dash, btnTitle, size);
|
||||
}
|
||||
dialog.setApplyButtonTitle(btnTitle);
|
||||
updateSize(dialog, false);
|
||||
dialog.setSelectedMode(initRadio);
|
||||
}
|
||||
});
|
||||
|
@ -182,17 +149,40 @@ public class SelectIndexesUiHelper {
|
|||
dialog.setOnApplySelectionListener(getOnApplySelectionListener(listener));
|
||||
}
|
||||
|
||||
public static void showMultipleSrtmDialog(@NonNull final DownloadItem downloadItem,
|
||||
@NonNull AppCompatActivity activity,
|
||||
@NonNull final OsmandApplication app,
|
||||
@NonNull final DateFormat dateFormat,
|
||||
final boolean showRemoteDate,
|
||||
@NonNull final SelectItemsToDownloadListener listener) {
|
||||
private SelectableItem createSrtmSelectableItem(IndexItem indexItem) {
|
||||
boolean baseItem = SrtmDownloadItem.isMetersItem(indexItem);
|
||||
SelectableItem selectableItem = new SelectableItem();
|
||||
selectableItem.setTitle(indexItem.getVisibleName(app, app.getRegions(), false));
|
||||
String size = indexItem.getSizeDescription(app);
|
||||
size += " (" + SrtmDownloadItem.getAbbreviation(app, baseItem) + ")";
|
||||
String date = indexItem.getDate(dateFormat, showRemoteDate);
|
||||
String description = app.getString(R.string.ltr_or_rtl_combine_via_bold_point, size, date);
|
||||
selectableItem.setDescription(description);
|
||||
selectableItem.setIconId(indexItem.getType().getIconResource());
|
||||
selectableItem.setObject(indexItem);
|
||||
return selectableItem;
|
||||
}
|
||||
|
||||
private RadioItem createRadioItem(final SelectableItem selectableItem, int titleId) {
|
||||
String title = Algorithms.capitalizeFirstLetter(app.getString(titleId));
|
||||
RadioItem radioItem = new RadioItem(title);
|
||||
radioItem.setOnClickListener(new OnRadioItemClickListener() {
|
||||
@Override
|
||||
public boolean onRadioItemClick(RadioItem radioItem, View view) {
|
||||
((SelectModeBottomSheet)dialog).setPreviewItem(selectableItem);
|
||||
updateSize(dialog, false);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return radioItem;
|
||||
}
|
||||
|
||||
private void showMultipleSrtmDialog() {
|
||||
List<SelectableItem> selectedItems = new ArrayList<>();
|
||||
final List<SelectableItem> meterItems = new ArrayList<>();
|
||||
final List<SelectableItem> feetItems = new ArrayList<>();
|
||||
List<IndexItem> indexesToDownload = getIndexesToDownload(downloadItem);
|
||||
boolean baseSRTM = isBaseSRTMMetricSystem(app);
|
||||
boolean baseSRTM = SrtmDownloadItem.shouldUseMetersByDefault(app);
|
||||
|
||||
List<IndexItem> allIndexes = new ArrayList<>();
|
||||
if (downloadItem instanceof MultipleIndexItem) {
|
||||
|
@ -206,11 +196,11 @@ public class SelectIndexesUiHelper {
|
|||
}
|
||||
|
||||
for (IndexItem indexItem : allIndexes) {
|
||||
boolean baseItem = isBaseSRTMItem(indexItem);
|
||||
boolean baseItem = SrtmDownloadItem.isMetersItem(indexItem);
|
||||
SelectableItem selectableItem = new SelectableItem();
|
||||
selectableItem.setTitle(indexItem.getVisibleName(app, app.getRegions(), false));
|
||||
String size = indexItem.getSizeDescription(app);
|
||||
size += " (" + getSRTMAbbrev(app, baseItem) + ")";
|
||||
size += " (" + SrtmDownloadItem.getAbbreviation(app, baseItem) + ")";
|
||||
String date = indexItem.getDate(dateFormat, showRemoteDate);
|
||||
String description = app.getString(R.string.ltr_or_rtl_combine_via_bold_point, size, date);
|
||||
selectableItem.setDescription(description);
|
||||
|
@ -232,7 +222,7 @@ public class SelectIndexesUiHelper {
|
|||
List<RadioItem> radioItems = new ArrayList<>();
|
||||
RadioItem meters = new RadioItem(Algorithms.capitalizeFirstLetter(app.getString(R.string.shared_string_meters)));
|
||||
RadioItem feet = new RadioItem(Algorithms.capitalizeFirstLetter(app.getString(R.string.shared_string_feets)));
|
||||
final RadioItem selectedMode = isBaseSRTMItem(downloadItem) ? meters : feet;
|
||||
final RadioItem selectedMode = SrtmDownloadItem.isMetersItem(downloadItem) ? meters : feet;
|
||||
radioItems.add(meters);
|
||||
radioItems.add(feet);
|
||||
|
||||
|
@ -267,13 +257,13 @@ public class SelectIndexesUiHelper {
|
|||
dialog.setSelectionUpdateListener(new SelectionUpdateListener() {
|
||||
@Override
|
||||
public void onSelectionUpdate() {
|
||||
updateSize(app, dialog, true);
|
||||
updateSize(dialog, true);
|
||||
}
|
||||
});
|
||||
dialog.setOnApplySelectionListener(getOnApplySelectionListener(listener));
|
||||
}
|
||||
|
||||
private static OnApplySelectionListener getOnApplySelectionListener(final SelectItemsToDownloadListener listener) {
|
||||
private OnApplySelectionListener getOnApplySelectionListener(final SelectItemsToDownloadListener listener) {
|
||||
return new OnApplySelectionListener() {
|
||||
@Override
|
||||
public void onSelectionApplied(List<SelectableItem> selectedItems) {
|
||||
|
@ -289,8 +279,7 @@ public class SelectIndexesUiHelper {
|
|||
};
|
||||
}
|
||||
|
||||
private static void updateSize(OsmandApplication app,
|
||||
SelectionBottomSheet dialog,
|
||||
private void updateSize(SelectionBottomSheet dialog,
|
||||
boolean updateDescription) {
|
||||
double sizeToDownload = getDownloadSizeInMb(dialog.getSelection());
|
||||
String size = DownloadItem.getFormattedMb(app, sizeToDownload);
|
||||
|
@ -306,28 +295,6 @@ public class SelectIndexesUiHelper {
|
|||
dialog.setApplyButtonTitle(btnTitle);
|
||||
}
|
||||
|
||||
public static String getSRTMAbbrev(Context context, boolean base) {
|
||||
return context.getString(base ? R.string.m : R.string.foot);
|
||||
}
|
||||
|
||||
public static String getSRTMExt(IndexItem indexItem) {
|
||||
return isBaseSRTMItem(indexItem)
|
||||
? IndexConstants.BINARY_SRTM_MAP_INDEX_EXT : IndexConstants.BINARY_SRTM_FEET_MAP_INDEX_EXT;
|
||||
}
|
||||
|
||||
public static boolean isBaseSRTMItem(Object item) {
|
||||
if (item instanceof IndexItem) {
|
||||
return ((IndexItem) item).getFileName().endsWith(BINARY_SRTM_MAP_INDEX_EXT_ZIP);
|
||||
} else if (item instanceof LocalIndexInfo) {
|
||||
return ((LocalIndexInfo) item).getFileName().endsWith(BINARY_SRTM_MAP_INDEX_EXT);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isBaseSRTMMetricSystem(OsmandApplication app) {
|
||||
return app.getSettings().METRIC_SYSTEM.get() != MetricsConstants.MILES_AND_FEET;
|
||||
}
|
||||
|
||||
private static List<IndexItem> getIndexesToDownload(DownloadItem downloadItem) {
|
||||
if (downloadItem instanceof MultipleIndexItem) {
|
||||
if (downloadItem.hasActualDataToDownload()) {
|
||||
|
|
137
OsmAnd/src/net/osmand/plus/download/SrtmDownloadItem.java
Normal file
137
OsmAnd/src/net/osmand/plus/download/SrtmDownloadItem.java
Normal file
|
@ -0,0 +1,137 @@
|
|||
package net.osmand.plus.download;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import net.osmand.IndexConstants;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.LocalIndexInfo;
|
||||
import net.osmand.plus.helpers.enums.MetricsConstants;
|
||||
|
||||
import java.io.File;
|
||||
import java.text.DateFormat;
|
||||
import java.util.List;
|
||||
|
||||
import static net.osmand.IndexConstants.BINARY_SRTM_MAP_INDEX_EXT;
|
||||
import static net.osmand.IndexConstants.BINARY_SRTM_MAP_INDEX_EXT_ZIP;
|
||||
import static net.osmand.plus.activities.LocalIndexHelper.LocalIndexType.SRTM_DATA;
|
||||
import static net.osmand.plus.download.DownloadActivityType.SRTM_COUNTRY_FILE;
|
||||
|
||||
public class SrtmDownloadItem extends DownloadItem {
|
||||
|
||||
private IndexItem meterItem;
|
||||
private IndexItem feetItem;
|
||||
|
||||
private boolean useMetersByDefault;
|
||||
|
||||
public SrtmDownloadItem(IndexItem meterItem,
|
||||
IndexItem feetItem,
|
||||
boolean useMetersByDefault) {
|
||||
super(SRTM_COUNTRY_FILE);
|
||||
this.meterItem = meterItem;
|
||||
this.feetItem = feetItem;
|
||||
this.useMetersByDefault = useMetersByDefault;
|
||||
}
|
||||
|
||||
public boolean isUseMetersByDefault() {
|
||||
return useMetersByDefault;
|
||||
}
|
||||
|
||||
public void setUseMetersByDefault(boolean useMetersByDefault) {
|
||||
this.useMetersByDefault = useMetersByDefault;
|
||||
}
|
||||
|
||||
public IndexItem getIndexItem() {
|
||||
return useMetersByDefault ? getMeterItem() : getFeetItem();
|
||||
}
|
||||
|
||||
public IndexItem getMeterItem() {
|
||||
return meterItem;
|
||||
}
|
||||
|
||||
public IndexItem getFeetItem() {
|
||||
return feetItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected double getSizeToDownloadInMb() {
|
||||
return getIndexItem().getSizeToDownloadInMb();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getArchiveSizeMB() {
|
||||
return getIndexItem().getArchiveSizeMB();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDownloaded() {
|
||||
return getIndexItem().isDownloaded();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOutdated() {
|
||||
return getIndexItem().isOutdated();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasActualDataToDownload() {
|
||||
return getIndexItem().hasActualDataToDownload();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDownloading(@NonNull DownloadIndexesThread thread) {
|
||||
return getMeterItem().isDownloading(thread) || getFeetItem().isDownloading(thread);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFileName() {
|
||||
return getIndexItem().getFileName();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public List<File> getDownloadedFiles(@NonNull OsmandApplication app) {
|
||||
return getIndexItem().getDownloadedFiles(app);
|
||||
}
|
||||
|
||||
public String getDate(@NonNull DateFormat dateFormat, boolean remote) {
|
||||
return getIndexItem().getDate(dateFormat, remote);
|
||||
}
|
||||
|
||||
public static boolean shouldUseMetersByDefault(@NonNull OsmandApplication app) {
|
||||
return app.getSettings().METRIC_SYSTEM.get() != MetricsConstants.MILES_AND_FEET;
|
||||
}
|
||||
|
||||
public static String getAbbreviation(Context context, boolean base) {
|
||||
return context.getString(base ? R.string.m : R.string.foot);
|
||||
}
|
||||
|
||||
public static String getExtension(IndexItem indexItem) {
|
||||
return isMetersItem(indexItem) ?
|
||||
IndexConstants.BINARY_SRTM_MAP_INDEX_EXT :
|
||||
IndexConstants.BINARY_SRTM_FEET_MAP_INDEX_EXT;
|
||||
}
|
||||
|
||||
public static boolean isMetersItem(Object item) {
|
||||
if (item instanceof IndexItem) {
|
||||
return ((IndexItem) item).getFileName().endsWith(BINARY_SRTM_MAP_INDEX_EXT_ZIP);
|
||||
} else if (item instanceof LocalIndexInfo) {
|
||||
return ((LocalIndexInfo) item).getFileName().endsWith(BINARY_SRTM_MAP_INDEX_EXT);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isSRTMItem(Object item) {
|
||||
if (item instanceof IndexItem) {
|
||||
return ((IndexItem) item).getType() == SRTM_COUNTRY_FILE;
|
||||
} else if (item instanceof DownloadItem) {
|
||||
return ((DownloadItem) item).getType() == SRTM_COUNTRY_FILE;
|
||||
} else if (item instanceof LocalIndexInfo) {
|
||||
return ((LocalIndexInfo) item).getType() == SRTM_DATA;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -44,6 +44,7 @@ import net.osmand.plus.download.IndexItem;
|
|||
import net.osmand.plus.download.SelectIndexesUiHelper;
|
||||
import net.osmand.plus.download.SelectIndexesUiHelper.SelectItemsToDownloadListener;
|
||||
import net.osmand.plus.download.MultipleIndexItem;
|
||||
import net.osmand.plus.download.SrtmDownloadItem;
|
||||
import net.osmand.plus.download.ui.LocalIndexesFragment.LocalIndexOperationTask;
|
||||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
|
@ -55,10 +56,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import static net.osmand.plus.download.DownloadActivityType.SRTM_COUNTRY_FILE;
|
||||
import static net.osmand.plus.download.DownloadActivityType.isSRTMItem;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.getSRTMAbbrev;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.isBaseSRTMItem;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.isBaseSRTMMetricSystem;
|
||||
|
||||
public class ItemViewHolder {
|
||||
|
||||
|
@ -196,8 +193,8 @@ public class ItemViewHolder {
|
|||
}
|
||||
descrTextView.setTextColor(textColorSecondary);
|
||||
if (!isDownloading) {
|
||||
boolean srtmItem = isSRTMItem(downloadItem);
|
||||
boolean baseMetricSystem = isBaseSRTMMetricSystem(context.getMyApplication());
|
||||
boolean srtmItem = SrtmDownloadItem.isSRTMItem(downloadItem);
|
||||
boolean baseMetricSystem = SrtmDownloadItem.shouldUseMetersByDefault(context.getMyApplication());
|
||||
progressBar.setVisibility(View.GONE);
|
||||
descrTextView.setVisibility(View.VISIBLE);
|
||||
if (downloadItem instanceof CustomIndexItem && (((CustomIndexItem) downloadItem).getSubName(context) != null)) {
|
||||
|
@ -218,10 +215,10 @@ public class ItemViewHolder {
|
|||
String regionsHeader = context.getString(R.string.regions);
|
||||
String allRegionsCount;
|
||||
String leftToDownloadCount;
|
||||
if (isSRTMItem(item)) {
|
||||
if (SrtmDownloadItem.isSRTMItem(item)) {
|
||||
List<IndexItem> items = new ArrayList<>();
|
||||
for (IndexItem indexItem : item.getAllIndexes()) {
|
||||
boolean baseItem = isBaseSRTMItem(indexItem);
|
||||
boolean baseItem = SrtmDownloadItem.isMetersItem(indexItem);
|
||||
if (baseMetricSystem && baseItem || !baseMetricSystem && !baseItem) {
|
||||
items.add(indexItem);
|
||||
}
|
||||
|
@ -229,7 +226,7 @@ public class ItemViewHolder {
|
|||
allRegionsCount = String.valueOf(items.size());
|
||||
items.clear();
|
||||
for (IndexItem indexItem : item.getIndexesToDownload()) {
|
||||
boolean baseItem = isBaseSRTMItem(indexItem);
|
||||
boolean baseItem = SrtmDownloadItem.isMetersItem(indexItem);
|
||||
if (!indexItem.isDownloaded()
|
||||
&& (baseMetricSystem && baseItem || !baseMetricSystem && !baseItem)) {
|
||||
items.add(indexItem);
|
||||
|
@ -259,7 +256,7 @@ public class ItemViewHolder {
|
|||
}
|
||||
String fullDescription = context.getString(R.string.ltr_or_rtl_combine_via_colon, header, count);
|
||||
if (srtmItem) {
|
||||
fullDescription += " (" + getSRTMAbbrev(context, baseMetricSystem) + ")";
|
||||
fullDescription += " (" + SrtmDownloadItem.getAbbreviation(context, baseMetricSystem) + ")";
|
||||
}
|
||||
if (item.hasActualDataToDownload()) {
|
||||
fullDescription = context.getString(
|
||||
|
@ -267,14 +264,23 @@ public class ItemViewHolder {
|
|||
? item.getSizeDescription(context, baseMetricSystem) : item.getSizeDescription(context));
|
||||
}
|
||||
descrTextView.setText(fullDescription);
|
||||
} else if (downloadItem instanceof SrtmDownloadItem) {
|
||||
SrtmDownloadItem item = (SrtmDownloadItem) downloadItem;
|
||||
String pattern = context.getString(R.string.ltr_or_rtl_combine_via_bold_point);
|
||||
String type = item.getType().getString(context);
|
||||
String size = item.getSizeDescription(context)
|
||||
+ " (" + SrtmDownloadItem.getAbbreviation(context, SrtmDownloadItem.isMetersItem(item)) + ")";
|
||||
String date = item.getDate(dateFormat, showRemoteDate);
|
||||
String fullDescription = String.format(pattern, size, date);
|
||||
if (showTypeInDesc) {
|
||||
fullDescription = String.format(pattern, type, fullDescription);
|
||||
}
|
||||
descrTextView.setText(fullDescription);
|
||||
} else {
|
||||
IndexItem item = (IndexItem) downloadItem;
|
||||
String pattern = context.getString(R.string.ltr_or_rtl_combine_via_bold_point);
|
||||
String type = item.getType().getString(context);
|
||||
String size = item.getSizeDescription(context);
|
||||
if (srtmItem) {
|
||||
size += " (" + getSRTMAbbrev(context, isBaseSRTMItem(item)) + ")";
|
||||
}
|
||||
String date = item.getDate(dateFormat, showRemoteDate);
|
||||
String fullDescription = String.format(pattern, size, date);
|
||||
if (showTypeInDesc) {
|
||||
|
@ -522,8 +528,7 @@ public class ItemViewHolder {
|
|||
}
|
||||
|
||||
private void selectIndexesToDownload(DownloadItem item) {
|
||||
OsmandApplication app = context.getMyApplication();
|
||||
SelectIndexesUiHelper.showDialog(item, context, app, dateFormat, showRemoteDate,
|
||||
SelectIndexesUiHelper.showDialog(item, context, dateFormat, showRemoteDate,
|
||||
new SelectItemsToDownloadListener() {
|
||||
@Override
|
||||
public void onItemsToDownloadSelected(List<IndexItem> indexes) {
|
||||
|
|
|
@ -55,6 +55,7 @@ import net.osmand.plus.dialogs.DirectionsDialogs;
|
|||
import net.osmand.plus.download.DownloadActivity;
|
||||
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
|
||||
import net.osmand.plus.download.IndexItem;
|
||||
import net.osmand.plus.download.SrtmDownloadItem;
|
||||
import net.osmand.plus.helpers.FileNameTranslationHelper;
|
||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||
import net.osmand.plus.mapsource.EditMapSourceDialogFragment.OnMapSourceUpdateListener;
|
||||
|
@ -74,9 +75,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static net.osmand.plus.download.DownloadActivityType.isSRTMItem;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.getSRTMAbbrev;
|
||||
import static net.osmand.plus.download.SelectIndexesUiHelper.isBaseSRTMItem;
|
||||
|
||||
public class LocalIndexesFragment extends OsmandExpandableListFragment implements DownloadEvents,
|
||||
OnMapSourceUpdateListener, RenameCallback {
|
||||
|
@ -1034,8 +1032,8 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
|
|||
builder.append(AndroidUtils.formatSize(ctx, child.getSize() * 1024l));
|
||||
}
|
||||
|
||||
if (isSRTMItem(child)) {
|
||||
builder.append(" (").append(getSRTMAbbrev(ctx, isBaseSRTMItem(child))).append(")");
|
||||
if (SrtmDownloadItem.isSRTMItem(child)) {
|
||||
builder.append(" (").append(SrtmDownloadItem.getAbbreviation(ctx, SrtmDownloadItem.isMetersItem(child))).append(")");
|
||||
}
|
||||
|
||||
if (!Algorithms.isEmpty(child.getDescription())) {
|
||||
|
|
|
@ -18,6 +18,7 @@ import net.osmand.plus.UiUtilities;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class MultiStateToggleButton {
|
||||
|
@ -37,6 +38,13 @@ public class MultiStateToggleButton {
|
|||
this.nightMode = nightMode;
|
||||
}
|
||||
|
||||
public void setItems(Collection<RadioItem> radioItems) {
|
||||
if (radioItems == null || radioItems.size() < 2) return;
|
||||
items.clear();
|
||||
items.addAll(radioItems);
|
||||
initView();
|
||||
}
|
||||
|
||||
public void setItems(RadioItem firstBtn, RadioItem secondBtn, RadioItem... other) {
|
||||
items.clear();
|
||||
items.add(firstBtn);
|
||||
|
|
Loading…
Reference in a new issue