This commit is contained in:
Victor Shcherb 2015-10-19 22:18:03 +02:00
parent 6f1b683629
commit 6fd9bafa51
7 changed files with 157 additions and 132 deletions

View file

@ -32,6 +32,7 @@ public class WorldRegion {
private String regionId;
private String downloadsId;
private String name;
private String searchText;
// Hierarchy
private WorldRegion superregion;
@ -95,10 +96,11 @@ public class WorldRegion {
private WorldRegion init(String regionId, OsmandRegions osmandRegions, String name) {
this.regionId = regionId;
String downloadName = osmandRegions.getDownloadName(regionId);
this.searchText = osmandRegions.getDownloadNameIndexLowercase(downloadName);
if (downloadName != null) {
downloadsId = downloadName.toLowerCase();
} else {
this.downloadsId = regionId.toLowerCase();
downloadsId = regionId.toLowerCase();
}
if (name != null) {
this.name = name;
@ -110,6 +112,10 @@ public class WorldRegion {
}
return this;
}
public String getSearchText() {
return searchText;
}
private void addSubregion(WorldRegion subregion, WorldRegion world) {
subregion.superregion = this;

View file

@ -1,6 +1,7 @@
package net.osmand.plus.download.ui;
import java.util.ArrayList;
import java.util.List;
import net.osmand.plus.R;
import net.osmand.plus.download.DownloadActivity;
@ -8,7 +9,6 @@ import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
import net.osmand.plus.download.IndexItem;
import android.app.AlertDialog;
import android.app.Dialog;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
@ -26,7 +26,7 @@ public class ActiveDownloadsDialogFragment extends DialogFragment implements Dow
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.downloads).setNegativeButton(R.string.shared_string_dismiss, null);
adapter = new IndexItemAdapter(getDownloadActivity());
adapter = new IndexItemAdapter(this, getDownloadActivity());
builder.setAdapter(adapter, null);
return builder.create();
}
@ -50,20 +50,22 @@ public class ActiveDownloadsDialogFragment extends DialogFragment implements Dow
}
public static class IndexItemAdapter extends ArrayAdapter<IndexItem> {
private final Drawable deleteDrawable;
private final DownloadActivity context;
private DialogFragment dlgFragment;
public IndexItemAdapter(DownloadActivity context) {
public IndexItemAdapter(DialogFragment dlgFragment, DownloadActivity context) {
super(context, R.layout.two_line_with_images_list_item, new ArrayList<IndexItem>());
this.dlgFragment = dlgFragment;
this.context = context;
deleteDrawable = context.getMyApplication().getIconsCache()
.getPaintedContentIcon(R.drawable.ic_action_remove_dark,
context.getResources().getColor(R.color.dash_search_icon_dark));
refreshAllData();
}
public void refreshAllData() {
clear();
List<IndexItem> items = context.getDownloadThread().getCurrentDownloadingItems();
if(items.isEmpty()) {
dlgFragment.dismissAllowingStateLoss();
}
addAll(context.getDownloadThread().getCurrentDownloadingItems());
}
@ -72,70 +74,20 @@ public class ActiveDownloadsDialogFragment extends DialogFragment implements Dow
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.two_line_with_images_list_item, parent, false);
DownloadEntryViewHolder viewHolder =
new DownloadEntryViewHolder(convertView, context, deleteDrawable, this);
ItemViewHolder viewHolder =
new ItemViewHolder(convertView, context);
viewHolder.setSilentCancelDownload(true);
viewHolder.setShowProgressInDescr(true);
convertView.setTag(viewHolder);
}
DownloadEntryViewHolder viewHolder = (DownloadEntryViewHolder) convertView.getTag();
ItemViewHolder viewHolder = (ItemViewHolder) convertView.getTag();
IndexItem item = getItem(position);
IndexItem cdi = context.getDownloadThread().getCurrentDownloadingItem();
viewHolder.bindDownloadEntry(getItem(position),
cdi == item ? context.getDownloadThread().getCurrentDownloadingItemProgress() : -1,
context.getDownloadThread().isDownloading(item));
viewHolder.bindIndexItem(item);
return convertView;
}
}
// FIXME review view holder
private static class DownloadEntryViewHolder extends ItemViewHolder {
private final Drawable deleteDrawable;
private final IndexItemAdapter adapter;
private DownloadEntryViewHolder(View convertView, final DownloadActivity context,
Drawable deleteDrawable, IndexItemAdapter adapter) {
super(convertView, context);
this.deleteDrawable = deleteDrawable;
this.adapter = adapter;
progressBar.setVisibility(View.VISIBLE);
rightImageButton.setImageDrawable(deleteDrawable);
}
public void bindDownloadEntry(final IndexItem item, final int progress,
boolean isDownloaded) {
nameTextView.setText(item.getVisibleName(context,
context.getMyApplication().getRegions()));
rightImageButton.setVisibility(View.VISIBLE);
int localProgress = progress;
boolean isIndeterminate = true;
if (progress != -1) {
isIndeterminate = false;
double downloaded = item.getContentSizeMB() * progress / 100;
descrTextView.setText(context.getString(R.string.value_downloaded_from_max, downloaded,
item.getContentSizeMB()));
} else if (isDownloaded) {
isIndeterminate = false;
localProgress = progressBar.getMax();
descrTextView.setText(context.getString(R.string.file_size_in_mb,
item.getContentSizeMB()));
rightImageButton.setVisibility(View.GONE);
} else {
descrTextView.setText(context.getString(R.string.file_size_in_mb,
item.getContentSizeMB()));
}
rightImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.getDownloadThread().cancelDownload(item);
adapter.refreshAllData();
}
});
progressBar.setIndeterminate(isIndeterminate);
progressBar.setProgress(localProgress);
}
}
}

View file

@ -36,6 +36,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.TextView;
@ -170,16 +171,27 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow
return true;
} else if (child instanceof IndexItem) {
IndexItem indexItem = (IndexItem) child;
if (indexItem.getType() == DownloadActivityType.ROADS_FILE) {
// FIXME
// if (regularMap.getType() == DownloadActivityType.NORMAL_FILE
// && regularMap.isAlreadyDownloaded(getMyActivity().getIndexFileNames())) {
// ConfirmDownloadUnneededMapDialogFragment.createInstance(indexItem)
// .show(getChildFragmentManager(), "dialog");
// return true;
// }
DownloadResourceGroup groupObj = listAdapter.getGroupObj(groupPosition);
boolean handled = false;
if (indexItem.getType() == DownloadActivityType.ROADS_FILE && groupObj != null
&& !activity.getDownloadThread().isDownloading(indexItem)) {
for (IndexItem ii : groupObj.getIndividualResources()) {
if (ii.getType() == DownloadActivityType.NORMAL_FILE) {
if (ii.isDownloaded()) {
handled = true;
ConfirmDownloadUnneededMapDialogFragment.createInstance(indexItem).show(
getChildFragmentManager(), "dialog");
}
break;
}
}
}
((DownloadActivity) getActivity()).startDownload(indexItem);
if (!handled) {
ItemViewHolder vh = (ItemViewHolder) v.getTag();
OnClickListener ls = vh.getRightButtonAction(indexItem, vh.getClickAction(indexItem));
ls.onClick(v);
}
return true;
}
return false;
@ -220,8 +232,7 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow
getDownloadActivity().getDownloadThread().runReloadIndexFiles();
return true;
case SEARCH_ID:
// FIXME
//getDownloadActivity().showDialog(getActivity(), SearchDialogFragment.createInstance(""));
getDownloadActivity().showDialog(getActivity(), SearchDialogFragment.createInstance(""));
return true;
default:
return super.onOptionsItemSelected(item);
@ -237,7 +248,6 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow
}
public static class ConfirmDownloadUnneededMapDialogFragment extends DialogFragment {
private static final String INDEX_ITEM = "index_item";
private static IndexItem item = null;
@NonNull
@ -421,6 +431,10 @@ public class DownloadResourceGroupFragment extends DialogFragment implements Dow
public int getChildrenCount(int groupPosition) {
return data.get(groupPosition).size();
}
public DownloadResourceGroup getGroupObj(int groupPosition) {
return data.get(groupPosition);
}
@Override
public String getGroup(int groupPosition) {

View file

@ -16,6 +16,7 @@ import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.TypedValue;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
@ -24,7 +25,6 @@ import android.widget.Toast;
public class ItemViewHolder {
private final java.text.DateFormat dateFormat;
protected final TextView nameTextView;
protected final TextView descrTextView;
@ -42,10 +42,11 @@ public class ItemViewHolder {
private int textColorPrimary;
private int textColorSecondary;
private RightButtonAction clickAction;
boolean showTypeInDesc;
boolean showRemoteDate;
boolean silentCancelDownload;
boolean showProgressInDesc;
@ -67,7 +68,6 @@ public class ItemViewHolder {
rightImageButton = (ImageView) view.findViewById(R.id.rightImageButton);
nameTextView = (TextView) view.findViewById(R.id.name);
this.dateFormat = context.getMyApplication().getResourceManager().getDateFormat();
TypedValue typedValue = new TypedValue();
Resources.Theme theme = context.getTheme();
@ -81,6 +81,14 @@ public class ItemViewHolder {
this.showRemoteDate = showRemoteDate;
}
public void setShowProgressInDescr(boolean b) {
showProgressInDesc = b;
}
public void setSilentCancelDownload(boolean silentCancelDownload) {
this.silentCancelDownload = silentCancelDownload;
}
public void setShowTypeInDesc(boolean showTypeInDesc) {
this.showTypeInDesc = showTypeInDesc;
}
@ -111,7 +119,7 @@ public class ItemViewHolder {
nameTextView.setTextColor(textColorSecondary);
}
int color = textColorSecondary;
if(indexItem.isDownloaded()) {
if(indexItem.isDownloaded() && !isDownloading) {
int colorId = indexItem.isOutdated() ? R.color.color_distance : R.color.color_ok;
color = context.getResources().getColor(colorId);
}
@ -125,11 +133,9 @@ public class ItemViewHolder {
leftImageView.setImageDrawable(getContentIcon(context,
indexItem.getType().getIconResource()));
}
descrTextView.setTextColor(color);
if (!isDownloading) {
progressBar.setVisibility(View.GONE);
descrTextView.setTextColor(color);
descrTextView.setVisibility(View.VISIBLE);
if ((indexItem.getType() == DownloadActivityType.SRTM_COUNTRY_FILE ||
indexItem.getType() == DownloadActivityType.HILLSHADE_FILE) && srtmDisabled) {
@ -151,15 +157,31 @@ public class ItemViewHolder {
});
} else {
progressBar.setVisibility(View.VISIBLE);
progressBar.setIndeterminate(progress == -1);
progressBar.setProgress(progress);
descrTextView.setVisibility(View.GONE);
if (showProgressInDesc) {
double mb = indexItem.getContentSizeMB();
if (progress != -1) {
descrTextView.setText(context.getString(R.string.value_downloaded_from_max, mb * progress / 100,
mb));
} else {
descrTextView.setText(context.getString(R.string.file_size_in_mb, mb));
}
descrTextView.setVisibility(View.VISIBLE);
} else {
descrTextView.setVisibility(View.GONE);
}
rightImageButton.setImageDrawable(getContentIcon(context, R.drawable.ic_action_remove_dark));
rightImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.makeSureUserCancelDownload(indexItem);
if(silentCancelDownload) {
context.getDownloadThread().cancelDownload(indexItem);
} else {
context.makeSureUserCancelDownload(indexItem);
}
}
});
}
@ -167,12 +189,26 @@ public class ItemViewHolder {
private boolean checkDisabledAndClickAction(final IndexItem indexItem) {
boolean disabled = false;
clickAction = RightButtonAction.DOWNLOAD;
RightButtonAction clickAction = getClickAction(indexItem);
boolean disabled = clickAction != RightButtonAction.DOWNLOAD;
if (clickAction != RightButtonAction.DOWNLOAD) {
rightButton.setText(R.string.get_plugin);
rightButton.setVisibility(View.VISIBLE);
rightImageButton.setVisibility(View.GONE);
rightButton.setOnClickListener(getRightButtonAction(indexItem, clickAction));
} else {
rightButton.setVisibility(View.GONE);
rightImageButton.setVisibility(View.VISIBLE);
}
return disabled;
}
public RightButtonAction getClickAction(final IndexItem indexItem) {
RightButtonAction clickAction = RightButtonAction.DOWNLOAD;
if (indexItem.getBasename().toLowerCase().equals(DownloadResources.WORLD_SEAMARKS_KEY)
&& nauticalPluginDisabled) {
clickAction = RightButtonAction.ASK_FOR_SEAMARKS_PLUGIN;
disabled = true;
} else if ((indexItem.getType() == DownloadActivityType.SRTM_COUNTRY_FILE ||
indexItem.getType() == DownloadActivityType.HILLSHADE_FILE) && srtmDisabled) {
if (srtmNeedsInstallation) {
@ -181,55 +217,61 @@ public class ItemViewHolder {
clickAction = RightButtonAction.ASK_FOR_SRTM_PLUGIN_ENABLE;
}
disabled = true;
} else if (indexItem.getType() == DownloadActivityType.WIKIPEDIA_FILE && freeVersion) {
clickAction = RightButtonAction.ASK_FOR_FULL_VERSION_PURCHASE;
disabled = true;
}
if (clickAction != RightButtonAction.DOWNLOAD) {
rightButton.setText(R.string.get_plugin);
rightButton.setVisibility(View.VISIBLE);
rightImageButton.setVisibility(View.GONE);
final RightButtonAction action = clickAction;
return clickAction;
}
rightButton.setOnClickListener(new View.OnClickListener() {
public OnClickListener getRightButtonAction(final IndexItem item, final RightButtonAction clickAction) {
if (clickAction != RightButtonAction.DOWNLOAD) {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (action) {
case ASK_FOR_FULL_VERSION_PURCHASE:
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(Version.marketPrefix(context.getMyApplication())
+ "net.osmand.plus"));
context.startActivity(intent);
break;
case ASK_FOR_SEAMARKS_PLUGIN:
context.startActivity(new Intent(context,
context.getMyApplication().getAppCustomization().getPluginsActivity()));
AccessibleToast.makeText(context.getApplicationContext(),
context.getString(R.string.activate_seamarks_plugin), Toast.LENGTH_SHORT).show();
break;
case ASK_FOR_SRTM_PLUGIN_PURCHASE:
OsmandPlugin plugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(plugin.getInstallURL())));
break;
case ASK_FOR_SRTM_PLUGIN_ENABLE:
context.startActivity(new Intent(context,
context.getMyApplication().getAppCustomization().getPluginsActivity()));
AccessibleToast.makeText(context,
context.getString(R.string.activate_srtm_plugin), Toast.LENGTH_SHORT).show();
break;
case DOWNLOAD:
break;
switch (clickAction) {
case ASK_FOR_FULL_VERSION_PURCHASE:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(Version.marketPrefix(context
.getMyApplication()) + "net.osmand.plus"));
context.startActivity(intent);
break;
case ASK_FOR_SEAMARKS_PLUGIN:
context.startActivity(new Intent(context, context.getMyApplication().getAppCustomization()
.getPluginsActivity()));
AccessibleToast.makeText(context.getApplicationContext(),
context.getString(R.string.activate_seamarks_plugin), Toast.LENGTH_SHORT).show();
break;
case ASK_FOR_SRTM_PLUGIN_PURCHASE:
OsmandPlugin plugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(plugin.getInstallURL())));
break;
case ASK_FOR_SRTM_PLUGIN_ENABLE:
context.startActivity(new Intent(context, context.getMyApplication().getAppCustomization()
.getPluginsActivity()));
AccessibleToast.makeText(context, context.getString(R.string.activate_srtm_plugin),
Toast.LENGTH_SHORT).show();
break;
case DOWNLOAD:
break;
}
}
});
};
} else {
rightButton.setVisibility(View.GONE);
rightImageButton.setVisibility(View.VISIBLE);
final boolean isDownloading = context.getDownloadThread().isDownloading(item);
return new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isDownloading) {
if(silentCancelDownload) {
context.getDownloadThread().cancelDownload(item);
} else {
context.makeSureUserCancelDownload(item);
}
} else {
context.startDownload(item);
}
}
};
}
return disabled;
}
private Drawable getContentIcon(DownloadActivity context, int resourceId) {
@ -240,7 +282,5 @@ public class ItemViewHolder {
return context.getMyApplication().getIconsCache().getPaintedContentIcon(resourceId, color);
}
public boolean isItemAvailable() {
return clickAction == RightButtonAction.DOWNLOAD;
}
}

View file

@ -16,7 +16,16 @@ import net.osmand.plus.R;
import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents;
public class SearchDialogFragment { /*extends DialogFragment implements DownloadEvents {
// FIXME
public class SearchDialogFragment extends DialogFragment {
public static DialogFragment createInstance(String tg) {
return new SearchDialogFragment();
}
/*extends DialogFragment implements DownloadEvents {
public static final String TAG = "SearchDialogFragment";
private static final String SEARCH_TEXT_DLG_KEY = "search_text_dlg_key";

View file

@ -29,6 +29,7 @@ import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ListView;
//FIXME merge into search dialog fragment
public class SearchItemsFragment { /*extends Fragment implements DownloadEvents {
public static final String TAG = "SearchItemsFragment";

View file

@ -20,6 +20,7 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
@ -118,7 +119,9 @@ public class UpdatesIndexFragment extends OsmAndListFragment implements Download
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
final IndexItem e = (IndexItem) getListAdapter().getItem(position);
getMyActivity().startDownload(e);
ItemViewHolder vh = (ItemViewHolder) v.getTag();
OnClickListener ls = vh.getRightButtonAction(e, vh.getClickAction(e));
ls.onClick(v);
}
public DownloadActivity getMyActivity() {