Refactoring main activity

This commit is contained in:
Victor Shcherb 2011-05-03 21:48:53 +02:00
parent 90821ab59c
commit 842702da38
4 changed files with 305 additions and 247 deletions

1
.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
* text=auto

View file

@ -136,6 +136,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
/** Called when the activity is first created. */ /** Called when the activity is first created. */
private OsmandMapTileView mapView; private OsmandMapTileView mapView;
private MapActivityActions mapActions = new MapActivityActions(this);
private ImageButton backToLocation; private ImageButton backToLocation;
private ImageButton backToMenu; private ImageButton backToMenu;
@ -173,8 +174,6 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
private Dialog progressDlg = null; private Dialog progressDlg = null;
private SharedPreferences settings; private SharedPreferences settings;
private boolean isMapLinkedToLocation(){ private boolean isMapLinkedToLocation(){
return OsmandSettings.isMapSyncToGpsLocation(settings); return OsmandSettings.isMapSyncToGpsLocation(settings);
} }
@ -438,6 +437,14 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
super.onStart(); super.onStart();
} }
protected void setProgressDlg(Dialog progressDlg) {
this.progressDlg = progressDlg;
}
protected Dialog getProgressDlg() {
return progressDlg;
}
@Override @Override
protected void onStop() { protected void onStop() {
// TODO keep this check? // TODO keep this check?
@ -483,6 +490,24 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
} }
} }
protected void backToLocationImpl() {
backToLocation.setVisibility(View.INVISIBLE);
if(!isMapLinkedToLocation()){
OsmandSettings.setSyncMapToGpsLocation(MapActivity.this, true);
if(locationLayer.getLastKnownLocation() != null){
Location lastKnownLocation = locationLayer.getLastKnownLocation();
AnimateDraggingMapThread thread = mapView.getAnimatedDraggingThread();
int fZoom = mapView.getZoom() < 15 ? 15 : mapView.getZoom();
thread.startMoving(mapView.getLatitude(), mapView.getLongitude(),
lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude(), mapView.getZoom(), fZoom,
mapView.getSourceTileSize(), mapView.getRotate(), false);
}
}
if(locationLayer.getLastKnownLocation() == null){
Toast.makeText(this, R.string.unknown_location, Toast.LENGTH_LONG).show();
}
}
private void updateSpeedBearing(Location location) { private void updateSpeedBearing(Location location) {
// For network/gps it's bad way (not accurate). It's widely used for testing purposes // For network/gps it's bad way (not accurate). It's widely used for testing purposes
// possibly keep using only for emulator case // possibly keep using only for emulator case
@ -1047,7 +1072,8 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
openLayerSelectionDialog(); openLayerSelectionDialog();
return true; return true;
} else if (item.getItemId() == R.id.map_specify_point) { } else if (item.getItemId() == R.id.map_specify_point) {
openChangeLocationDialog(); NavigatePointActivity dlg = new NavigatePointActivity(this);
dlg.showDialog();
return true; return true;
} else if (item.getItemId() == R.id.map_mute) { } else if (item.getItemId() == R.id.map_mute) {
routingHelper.getVoiceRouter().setMute(!routingHelper.getVoiceRouter().isMute()); routingHelper.getVoiceRouter().setMute(!routingHelper.getVoiceRouter().isMute());
@ -1206,41 +1232,7 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
} }
protected void reloadTile(final int zoom, final double latitude, final double longitude){
Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.context_menu_item_update_map_confirm);
builder.setNegativeButton(R.string.default_buttons_cancel, null);
builder.setPositiveButton(R.string.context_menu_item_update_map, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Rect pixRect = new Rect(0, 0, mapView.getWidth(), mapView.getHeight());
RectF tilesRect = new RectF();
mapView.calculateTileRectangle(pixRect, mapView.getCenterPointX(), mapView.getCenterPointY(),
mapView.getXTile(), mapView.getYTile(), tilesRect);
int left = (int) FloatMath.floor(tilesRect.left);
int top = (int) FloatMath.floor(tilesRect.top);
int width = (int) (FloatMath.ceil(tilesRect.right) - left);
int height = (int) (FloatMath.ceil(tilesRect.bottom) - top);
for (int i = 0; i <width; i++) {
for (int j = 0; j< height; j++) {
((OsmandApplication)getApplication()).getResourceManager().
clearTileImageForMap(null, mapView.getMap(), i + left, j + top, zoom);
}
}
mapView.refreshMap();
}
});
builder.setNeutralButton(R.string.context_menu_item_update_poi, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
updatePoiDb(zoom, latitude, longitude);
}
});
builder.create().show();
}
protected void parseLaunchIntentLocation(){ protected void parseLaunchIntentLocation(){
Intent intent = getIntent(); Intent intent = getIntent();
@ -1271,67 +1263,6 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
} }
protected void showToast(final String msg){
runOnUiThread(new Runnable(){
@Override
public void run() {
Toast.makeText(MapActivity.this, msg, Toast.LENGTH_LONG).show();
}
});
}
protected void updatePoiDb(int zoom, double latitude, double longitude){
if(zoom < 15){
Toast.makeText(this, getString(R.string.update_poi_is_not_available_for_zoom), Toast.LENGTH_SHORT).show();
return;
}
final List<AmenityIndexRepository> repos = ((OsmandApplication) getApplication()).
getResourceManager().searchAmenityRepositories(latitude, longitude);
if(repos.isEmpty()){
Toast.makeText(this, getString(R.string.update_poi_no_offline_poi_index), Toast.LENGTH_SHORT).show();
return;
}
Rect pixRect = new Rect(-mapView.getWidth()/2, -mapView.getHeight()/2, 3*mapView.getWidth()/2, 3*mapView.getHeight()/2);
RectF tileRect = new RectF();
mapView.calculateTileRectangle(pixRect, mapView.getCenterPointX(), mapView.getCenterPointY(),
mapView.getXTile(), mapView.getYTile(), tileRect);
final double leftLon = MapUtils.getLongitudeFromTile(zoom, tileRect.left);
final double topLat = MapUtils.getLatitudeFromTile(zoom, tileRect.top);
final double rightLon = MapUtils.getLongitudeFromTile(zoom, tileRect.right);
final double bottomLat = MapUtils.getLatitudeFromTile(zoom, tileRect.bottom);
progressDlg = ProgressDialog.show(this, getString(R.string.loading), getString(R.string.loading_data));
new Thread(new Runnable(){
@Override
public void run() {
try {
List<Amenity> amenities = new ArrayList<Amenity>();
boolean loadingPOIs = AmenityIndexRepositoryOdb.loadingPOIs(amenities, leftLon, topLat, rightLon, bottomLat);
if(!loadingPOIs){
showToast(getString(R.string.update_poi_error_loading));
} else {
for(AmenityIndexRepository r : repos){
if(r instanceof AmenityIndexRepositoryOdb){
((AmenityIndexRepositoryOdb) r).updateAmenities(amenities, leftLon, topLat, rightLon, bottomLat);
}
}
showToast(MessageFormat.format(getString(R.string.update_poi_success), amenities.size()));
mapView.refreshMap();
}
} catch(Exception e) {
Log.e(LogUtil.TAG, "Error updating local data", e); //$NON-NLS-1$
showToast(getString(R.string.update_poi_error_local));
} finally {
if(progressDlg !=null){
progressDlg.dismiss();
progressDlg = null;
}
}
}
}, "LoadingPOI").start(); //$NON-NLS-1$
}
private void openLayerSelectionDialog(){ private void openLayerSelectionDialog(){
List<String> layersList = new ArrayList<String>(); List<String> layersList = new ArrayList<String>();
layersList.add(getString(R.string.layer_map)); layersList.add(getString(R.string.layer_map));
@ -1671,18 +1602,18 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
intent.putExtra(SearchTransportActivity.LON_KEY, longitude); intent.putExtra(SearchTransportActivity.LON_KEY, longitude);
startActivity(intent); startActivity(intent);
} else if(standardId == R.string.context_menu_item_add_favorite){ } else if(standardId == R.string.context_menu_item_add_favorite){
addFavouritePoint(latitude, longitude); mapActions.addFavouritePoint(latitude, longitude);
} else if(standardId == R.string.context_menu_item_share_location){ } else if(standardId == R.string.context_menu_item_share_location){
shareLocation(latitude, longitude, mapView.getZoom()); mapActions.shareLocation(latitude, longitude, mapView.getZoom());
} else if(standardId == R.string.context_menu_item_search_poi){ } else if(standardId == R.string.context_menu_item_search_poi){
EditingPOIActivity activity = new EditingPOIActivity(MapActivity.this, (OsmandApplication) getApplication(), mapView); EditingPOIActivity activity = new EditingPOIActivity(MapActivity.this, (OsmandApplication) getApplication(), mapView);
activity.showCreateDialog(latitude, longitude); activity.showCreateDialog(latitude, longitude);
} else if(standardId == R.string.context_menu_item_add_waypoint){ } else if(standardId == R.string.context_menu_item_add_waypoint){
addWaypoint(latitude, longitude); mapActions.addWaypoint(latitude, longitude, savingTrackHelper);
} else if(standardId == R.string.context_menu_item_open_bug){ } else if(standardId == R.string.context_menu_item_open_bug){
osmBugsLayer.openBug(MapActivity.this, getLayoutInflater(), mapView, latitude, longitude); osmBugsLayer.openBug(MapActivity.this, getLayoutInflater(), mapView, latitude, longitude);
} else if(standardId == R.string.context_menu_item_update_map){ } else if(standardId == R.string.context_menu_item_update_map){
reloadTile(mapView.getZoom(), latitude, longitude); mapActions.reloadTile(mapView.getZoom(), latitude, longitude);
} else if(standardId == R.string.context_menu_item_download_map){ } else if(standardId == R.string.context_menu_item_download_map){
DownloadTilesDialog dlg = new DownloadTilesDialog(MapActivity.this, DownloadTilesDialog dlg = new DownloadTilesDialog(MapActivity.this,
(OsmandApplication) getApplication(), mapView); (OsmandApplication) getApplication(), mapView);
@ -1693,148 +1624,10 @@ public class MapActivity extends Activity implements IMapLocationListener, Senso
builder.create().show(); builder.create().show();
} }
protected void addFavouritePoint(final double latitude, final double longitude){
final Resources resources = this.getResources();
final FavouritePoint p = new FavouritePoint(latitude, longitude, resources.getString(R.string.add_favorite_dialog_default_favourite_name));
Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.add_favorite_dialog_top_text);
final EditText editText = new EditText(this);
builder.setView(editText);
builder.setNegativeButton(R.string.default_buttons_cancel, null);
builder.setNeutralButton(R.string.update_existing, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Builder b = new AlertDialog.Builder(MapActivity.this);
final FavouritesDbHelper helper = ((OsmandApplication)getApplication()).getFavorites();
final Collection<FavouritePoint> points = helper.getFavouritePoints();
final String[] ar = new String[points.size()];
Iterator<FavouritePoint> it = points.iterator();
int i=0;
while(it.hasNext()){
ar[i++] = it.next().getName();
}
b.setItems(ar, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
FavouritePoint fv = helper.getFavoritePointByName(ar[which]);
if(helper.editFavourite(fv, latitude, longitude)){
Toast.makeText(MapActivity.this, getString(R.string.fav_points_edited), Toast.LENGTH_SHORT).show();
}
mapView.refreshMap();
}
});
if(ar.length == 0){
Toast.makeText(MapActivity.this, getString(R.string.fav_points_not_exist), Toast.LENGTH_SHORT).show();
helper.close();
} else {
b.show();
}
}
});
builder.setPositiveButton(R.string.default_buttons_add, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final FavouritesDbHelper helper = ((OsmandApplication)getApplication()).getFavorites();
p.setName(editText.getText().toString());
boolean added = helper.addFavourite(p);
if (added) {
Toast.makeText(MapActivity.this, MessageFormat.format(getString(R.string.add_favorite_dialog_favourite_added_template), p.getName()), Toast.LENGTH_SHORT)
.show();
}
mapView.refreshMap();
}
});
builder.create().show();
}
protected void addWaypoint(final double latitude, final double longitude){
Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.add_waypoint_dialog_title);
final EditText editText = new EditText(this);
builder.setView(editText);
builder.setNegativeButton(R.string.default_buttons_cancel, null);
builder.setPositiveButton(R.string.default_buttons_add, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = editText.getText().toString();
savingTrackHelper.insertPointData(latitude, longitude, System.currentTimeMillis(), name);
Toast.makeText(MapActivity.this, MessageFormat.format(getString(R.string.add_waypoint_dialog_added), name), Toast.LENGTH_SHORT)
.show();
}
});
builder.create().show();
}
protected void shareLocation(final double latitude, final double longitude, int zoom){
final String shortOsmUrl = MapUtils.buildShortOsmUrl(latitude, longitude, zoom);
// final String simpleGeo = "geo:"+((float) latitude)+","+((float)longitude) +"?z="+zoom;
final String appLink = "http://download.osmand.net/go?lat="+((float) latitude)+"&lon="+((float)longitude) +"&z="+zoom;
AlertDialog.Builder builder = new Builder(this);
builder.setTitle(R.string.send_location_way_choose_title);
builder.setItems(new String[]{
"Email", "SMS", "Clipboard"
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String sms = MessageFormat.format(getString(R.string.send_location_sms_pattern), shortOsmUrl, appLink);
String email = MessageFormat.format(getString(R.string.send_location_email_pattern), shortOsmUrl, appLink );
if(which == 0){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("vnd.android.cursor.dir/email"); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_SUBJECT, "Mine location"); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(email));
intent.setType("text/html");
startActivity(Intent.createChooser(intent, getString(R.string.send_location)));
} else if(which == 1){
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", sms);
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
} else if (which == 2){
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboard.setText(sms);
}
}
});
builder.show();
}
private void openChangeLocationDialog() {
NavigatePointActivity dlg = new NavigatePointActivity(this);
dlg.showDialog();
}
@Override @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { public void onAccuracyChanged(Sensor sensor, int accuracy) {
} }
protected void backToLocationImpl() {
backToLocation.setVisibility(View.INVISIBLE);
if(!isMapLinkedToLocation()){
OsmandSettings.setSyncMapToGpsLocation(MapActivity.this, true);
if(locationLayer.getLastKnownLocation() != null){
Location lastKnownLocation = locationLayer.getLastKnownLocation();
AnimateDraggingMapThread thread = mapView.getAnimatedDraggingThread();
int fZoom = mapView.getZoom() < 15 ? 15 : mapView.getZoom();
thread.startMoving(mapView.getLatitude(), mapView.getLongitude(),
lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude(), mapView.getZoom(), fZoom,
mapView.getSourceTileSize(), mapView.getRotate(), false);
}
}
if(locationLayer.getLastKnownLocation() == null){
Toast.makeText(this, R.string.unknown_location, Toast.LENGTH_LONG).show();
}
}
} }

View file

@ -0,0 +1,262 @@
package net.osmand.plus.activities;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import net.osmand.FavouritePoint;
import net.osmand.LogUtil;
import net.osmand.data.Amenity;
import net.osmand.osm.MapUtils;
import net.osmand.plus.AmenityIndexRepository;
import net.osmand.plus.AmenityIndexRepositoryOdb;
import net.osmand.plus.FavouritesDbHelper;
import net.osmand.plus.R;
import net.osmand.plus.views.OsmandMapTileView;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.RectF;
import android.text.ClipboardManager;
import android.text.Html;
import android.util.FloatMath;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
public class MapActivityActions {
private final MapActivity mapActivity;
public MapActivityActions(MapActivity mapActivity){
this.mapActivity = mapActivity;
}
protected void addFavouritePoint(final double latitude, final double longitude){
final Resources resources = mapActivity.getResources();
final FavouritePoint p = new FavouritePoint(latitude, longitude, resources.getString(R.string.add_favorite_dialog_default_favourite_name));
Builder builder = new AlertDialog.Builder(mapActivity);
builder.setTitle(R.string.add_favorite_dialog_top_text);
final EditText editText = new EditText(mapActivity);
builder.setView(editText);
builder.setNegativeButton(R.string.default_buttons_cancel, null);
builder.setNeutralButton(R.string.update_existing, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Builder b = new AlertDialog.Builder(mapActivity);
final FavouritesDbHelper helper = ((OsmandApplication)mapActivity.getApplication()).getFavorites();
final Collection<FavouritePoint> points = helper.getFavouritePoints();
final String[] ar = new String[points.size()];
Iterator<FavouritePoint> it = points.iterator();
int i=0;
while(it.hasNext()){
ar[i++] = it.next().getName();
}
b.setItems(ar, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
FavouritePoint fv = helper.getFavoritePointByName(ar[which]);
if(helper.editFavourite(fv, latitude, longitude)){
Toast.makeText(mapActivity, getString(R.string.fav_points_edited), Toast.LENGTH_SHORT).show();
}
mapActivity.getMapView().refreshMap();
}
});
if(ar.length == 0){
Toast.makeText(mapActivity, getString(R.string.fav_points_not_exist), Toast.LENGTH_SHORT).show();
helper.close();
} else {
b.show();
}
}
});
builder.setPositiveButton(R.string.default_buttons_add, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final FavouritesDbHelper helper = ((OsmandApplication)mapActivity.getApplication()).getFavorites();
p.setName(editText.getText().toString());
boolean added = helper.addFavourite(p);
if (added) {
Toast.makeText(mapActivity, MessageFormat.format(getString(R.string.add_favorite_dialog_favourite_added_template), p.getName()), Toast.LENGTH_SHORT)
.show();
}
mapActivity.getMapView().refreshMap();
}
});
builder.create().show();
}
protected void addWaypoint(final double latitude, final double longitude, final SavingTrackHelper savingTrackHelper){
Builder builder = new AlertDialog.Builder(mapActivity);
builder.setTitle(R.string.add_waypoint_dialog_title);
final EditText editText = new EditText(mapActivity);
builder.setView(editText);
builder.setNegativeButton(R.string.default_buttons_cancel, null);
builder.setPositiveButton(R.string.default_buttons_add, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = editText.getText().toString();
savingTrackHelper.insertPointData(latitude, longitude, System.currentTimeMillis(), name);
Toast.makeText(mapActivity, MessageFormat.format(getString(R.string.add_waypoint_dialog_added), name), Toast.LENGTH_SHORT)
.show();
}
});
builder.create().show();
}
protected void reloadTile(final int zoom, final double latitude, final double longitude){
Builder builder = new AlertDialog.Builder(mapActivity);
builder.setMessage(R.string.context_menu_item_update_map_confirm);
builder.setNegativeButton(R.string.default_buttons_cancel, null);
final OsmandMapTileView mapView = mapActivity.getMapView();
builder.setPositiveButton(R.string.context_menu_item_update_map, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
Rect pixRect = new Rect(0, 0, mapView.getWidth(), mapView.getHeight());
RectF tilesRect = new RectF();
mapView.calculateTileRectangle(pixRect, mapView.getCenterPointX(), mapView.getCenterPointY(),
mapView.getXTile(), mapView.getYTile(), tilesRect);
int left = (int) FloatMath.floor(tilesRect.left);
int top = (int) FloatMath.floor(tilesRect.top);
int width = (int) (FloatMath.ceil(tilesRect.right) - left);
int height = (int) (FloatMath.ceil(tilesRect.bottom) - top);
for (int i = 0; i <width; i++) {
for (int j = 0; j< height; j++) {
((OsmandApplication)mapActivity.getApplication()).getResourceManager().
clearTileImageForMap(null, mapView.getMap(), i + left, j + top, zoom);
}
}
mapView.refreshMap();
}
});
builder.setNeutralButton(R.string.context_menu_item_update_poi, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
updatePoiDb(zoom, latitude, longitude);
}
});
builder.create().show();
}
protected String getString(int res){
return getString(res);
}
protected void updatePoiDb(int zoom, double latitude, double longitude){
if(zoom < 15){
Toast.makeText(mapActivity, getString(R.string.update_poi_is_not_available_for_zoom), Toast.LENGTH_SHORT).show();
return;
}
final List<AmenityIndexRepository> repos = ((OsmandApplication) mapActivity.getApplication()).
getResourceManager().searchAmenityRepositories(latitude, longitude);
if(repos.isEmpty()){
Toast.makeText(mapActivity, getString(R.string.update_poi_no_offline_poi_index), Toast.LENGTH_SHORT).show();
return;
}
final OsmandMapTileView mapView = mapActivity.getMapView();
Rect pixRect = new Rect(-mapView.getWidth()/2, -mapView.getHeight()/2, 3*mapView.getWidth()/2, 3*mapView.getHeight()/2);
RectF tileRect = new RectF();
mapView.calculateTileRectangle(pixRect, mapView.getCenterPointX(), mapView.getCenterPointY(),
mapView.getXTile(), mapView.getYTile(), tileRect);
final double leftLon = MapUtils.getLongitudeFromTile(zoom, tileRect.left);
final double topLat = MapUtils.getLatitudeFromTile(zoom, tileRect.top);
final double rightLon = MapUtils.getLongitudeFromTile(zoom, tileRect.right);
final double bottomLat = MapUtils.getLatitudeFromTile(zoom, tileRect.bottom);
ProgressDialog progressDlg = ProgressDialog.show(mapActivity, getString(R.string.loading), getString(R.string.loading_data));
mapActivity.setProgressDlg(progressDlg);
new Thread(new Runnable(){
@Override
public void run() {
try {
List<Amenity> amenities = new ArrayList<Amenity>();
boolean loadingPOIs = AmenityIndexRepositoryOdb.loadingPOIs(amenities, leftLon, topLat, rightLon, bottomLat);
if(!loadingPOIs){
showToast(getString(R.string.update_poi_error_loading));
} else {
for(AmenityIndexRepository r : repos){
if(r instanceof AmenityIndexRepositoryOdb){
((AmenityIndexRepositoryOdb) r).updateAmenities(amenities, leftLon, topLat, rightLon, bottomLat);
}
}
showToast(MessageFormat.format(getString(R.string.update_poi_success), amenities.size()));
mapView.refreshMap();
}
} catch(Exception e) {
Log.e(LogUtil.TAG, "Error updating local data", e); //$NON-NLS-1$
showToast(getString(R.string.update_poi_error_local));
} finally {
Dialog prog = mapActivity.getProgressDlg();
if(prog !=null){
prog.dismiss();
mapActivity.setProgressDlg(prog);
}
}
}
}, "LoadingPOI").start(); //$NON-NLS-1$
}
protected void showToast(final String msg){
mapActivity.runOnUiThread(new Runnable(){
@Override
public void run() {
Toast.makeText(mapActivity, msg, Toast.LENGTH_LONG).show();
}
});
}
protected void shareLocation(final double latitude, final double longitude, int zoom){
final String shortOsmUrl = MapUtils.buildShortOsmUrl(latitude, longitude, zoom);
// final String simpleGeo = "geo:"+((float) latitude)+","+((float)longitude) +"?z="+zoom;
final String appLink = "http://download.osmand.net/go?lat="+((float) latitude)+"&lon="+((float)longitude) +"&z="+zoom;
AlertDialog.Builder builder = new Builder(mapActivity);
builder.setTitle(R.string.send_location_way_choose_title);
builder.setItems(new String[]{
"Email", "SMS", "Clipboard"
}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String sms = MessageFormat.format(getString(R.string.send_location_sms_pattern), shortOsmUrl, appLink);
String email = MessageFormat.format(getString(R.string.send_location_email_pattern), shortOsmUrl, appLink );
if(which == 0){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("vnd.android.cursor.dir/email"); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_SUBJECT, "Mine location"); //$NON-NLS-1$
intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(email));
intent.setType("text/html");
mapActivity.startActivity(Intent.createChooser(intent, getString(R.string.send_location)));
} else if(which == 1){
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", sms);
sendIntent.setType("vnd.android-dir/mms-sms");
mapActivity.startActivity(sendIntent);
} else if (which == 2){
ClipboardManager clipboard = (ClipboardManager) mapActivity.getSystemService(Activity.CLIPBOARD_SERVICE);
clipboard.setText(sms);
}
}
});
builder.show();
}
}

View file

@ -127,12 +127,14 @@ public class OsmandApplication extends Application {
}); });
builder.setTitle(R.string.voice_is_not_available_title); builder.setTitle(R.string.voice_is_not_available_title);
builder.setMessage(R.string.voice_is_not_available_msg); builder.setMessage(R.string.voice_is_not_available_msg);
builder.show(); builder.show();
} } else {
if(player == null if(player == null
|| !Algoritms.objectEquals(voiceProvider, player.getCurrentVoice())){ || !Algoritms.objectEquals(voiceProvider, player.getCurrentVoice())){
initVoiceDataInDifferentThread(uiContext); initVoiceDataInDifferentThread(uiContext);
}
} }
} }
private void initVoiceDataInDifferentThread(Context uiContext) { private void initVoiceDataInDifferentThread(Context uiContext) {