Fix webgl. Added photo_id to Mapillary start intent.

This commit is contained in:
Alexey Kulish 2017-05-08 22:01:00 +03:00
parent e3ae8e6493
commit a6b99f1e41
11 changed files with 89 additions and 30 deletions

View file

@ -19,6 +19,7 @@
android:minHeight="@dimen/dashboard_map_toolbar"
android:background="@color/osmand_orange"
android:gravity="center_vertical"
android:clickable="true"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatImageView
@ -69,13 +70,13 @@
</LinearLayout>
<android.support.v7.widget.AppCompatImageView
android:id="@+id/refresh_button"
android:id="@+id/more_button"
style="@style/Widget.AppCompat.ActionButton"
android:layout_width="48dp"
android:layout_height="56dp"
android:layout_gravity="top"
android:contentDescription="@string/shared_string_refresh"
android:src="@drawable/ic_action_refresh_dark"
android:contentDescription="@string/shared_string_more"
android:src="@drawable/ic_overflow_menu_white"
android:visibility="gone"/>
</LinearLayout>

View file

@ -13,6 +13,7 @@
android:minHeight="@dimen/dashboard_map_toolbar"
android:background="@color/osmand_orange"
android:gravity="center_vertical"
android:clickable="true"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatImageView
@ -63,13 +64,13 @@
</LinearLayout>
<android.support.v7.widget.AppCompatImageView
android:id="@+id/refresh_button"
android:id="@+id/more_button"
style="@style/Widget.AppCompat.ActionButton"
android:layout_width="48dp"
android:layout_height="56dp"
android:layout_gravity="top"
android:contentDescription="@string/shared_string_refresh"
android:src="@drawable/ic_action_refresh_dark"
android:contentDescription="@string/shared_string_more"
android:src="@drawable/ic_overflow_menu_white"
android:visibility="gone"/>
</LinearLayout>

View file

@ -9,6 +9,7 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
-->
<string name="open_mapillary">Open Mapillary</string>
<string name="shared_string_install">Install</string>
<string name="improve_coverage_mapillary">Improve coverage with Mapillary</string>
<string name="improve_coverage_install_mapillary_desc">You can take your own photos or series of photos and add it to this map location.\n\nTo do this you need install Mapillary app from Google Play.</string>

View file

@ -23,7 +23,7 @@ public class NoImagesCard extends AbstractCard {
view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MapillaryPlugin.openMapillary(getMapActivity());
MapillaryPlugin.openMapillary(getMapActivity(), null);
}
});
}

View file

@ -22,22 +22,10 @@ public class UrlImageCard extends ImageCard {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(getImageUrl()));
intent.setData(Uri.parse(getUrl()));
v.getContext().startActivity(intent);
}
};
}
}
@Override
public void update() {
super.update();
if (view != null) {
ImageView image = (ImageView) view.findViewById(R.id.image);
image.setVisibility(View.GONE);
TextView urlText = (TextView) view.findViewById(R.id.url);
urlText.setText(getImageUrl());
urlText.setVisibility(View.VISIBLE);
}
}
}

View file

@ -2,6 +2,8 @@ package net.osmand.plus.mapcontextmenu.builders.cards.dialogs;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import net.osmand.plus.OsmandSettings;
@ -10,6 +12,8 @@ import net.osmand.plus.helpers.AndroidUiHelper;
import net.osmand.plus.mapillary.MapillaryImageDialog;
import net.osmand.plus.views.OsmandMapTileView;
import java.util.List;
public abstract class ContextMenuCardDialog {
private MapActivity mapActivity;
@ -56,6 +60,13 @@ public abstract class ContextMenuCardDialog {
return description;
}
protected boolean haveMenuItems() {
return false;
}
protected void createMenuItems(Menu menu) {
}
public void saveMenu(Bundle bundle) {
bundle.putString(KEY_CARD_DIALOG_TYPE, type.name());
if (title != null) {

View file

@ -4,6 +4,8 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.AppCompatImageView;
import android.support.v7.widget.PopupMenu;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -13,6 +15,7 @@ import android.widget.TextView;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.dialogs.DirectionsDialogs;
import net.osmand.util.Algorithms;
public class ContextMenuCardDialogFragment extends Fragment {
@ -51,6 +54,21 @@ public class ContextMenuCardDialogFragment extends Fragment {
if (!Algorithms.isEmpty(dialog.getDescription())) {
((TextView) view.findViewById(R.id.description)).setText(dialog.getDescription());
}
AppCompatImageView moreButton = (AppCompatImageView) view.findViewById(R.id.more_button);
if (dialog.haveMenuItems()) {
moreButton.setVisibility(View.VISIBLE);
moreButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final PopupMenu optionsMenu = new PopupMenu(getContext(), v);
DirectionsDialogs.setupPopUpMenuIcon(optionsMenu);
dialog.createMenuItems(optionsMenu.getMenu());
optionsMenu.show();
}
});
} else {
moreButton.setVisibility(View.GONE);
}
return view;
}

View file

@ -25,7 +25,7 @@ public class MapillaryContributeCard extends ImageCard {
view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MapillaryPlugin.openMapillary(getMapActivity());
MapillaryPlugin.openMapillary(getMapActivity(), null);
}
});
}

View file

@ -17,7 +17,7 @@ public class MapillaryImageCard extends ImageCard {
@Override
public void onClick(View v) {
getMapActivity().getContextMenu().hideMenues();
MapillaryImageDialog.show(getMapActivity(), getImageHiresUrl(), getUrl(), getLocation(),
MapillaryImageDialog.show(getMapActivity(), getKey(), getImageHiresUrl(), getUrl(), getLocation(),
getCa(), getMyApplication().getString(R.string.mapillary), null);
}
};

View file

@ -8,6 +8,8 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ConsoleMessage;
@ -21,6 +23,7 @@ import android.widget.ProgressBar;
import net.osmand.AndroidNetworkUtils;
import net.osmand.AndroidUtils;
import net.osmand.data.LatLon;
import net.osmand.plus.R;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard;
import net.osmand.plus.mapcontextmenu.builders.cards.dialogs.ContextMenuCardDialog;
@ -30,6 +33,7 @@ import net.osmand.util.Algorithms;
public class MapillaryImageDialog extends ContextMenuCardDialog {
private static final String KEY_MAPILLARY_DIALOG_IMAGE_KEY = "key_mapillary_dialog_image_key";
private static final String KEY_MAPILLARY_DIALOG_IMAGE_URL = "key_mapillary_dialog_image_url";
private static final String KEY_MAPILLARY_DIALOG_VIEWER_URL = "key_mapillary_dialog_viewer_url";
private static final String KEY_MAPILLARY_DIALOG_LATLON = "key_mapillary_dialog_latlon";
@ -42,6 +46,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
private static final String WEBGL_ERROR_MESSAGE = "Error creating WebGL context";
private String key;
private String imageUrl;
private String viewerUrl;
private LatLon latLon;
@ -52,17 +57,22 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
restoreFields(bundle);
}
public MapillaryImageDialog(MapActivity mapActivity, String imageUrl, String viewerUrl, LatLon latLon, double ca,
public MapillaryImageDialog(MapActivity mapActivity, String key, String imageUrl, String viewerUrl, LatLon latLon, double ca,
String title, String description) {
super(mapActivity, CardDialogType.MAPILLARY);
this.title = title;
this.description = description;
this.key = key;
this.imageUrl = imageUrl;
this.viewerUrl = viewerUrl;
this.latLon = latLon;
this.ca = ca;
}
public String getKey() {
return key;
}
public String getViewerUrl() {
return viewerUrl;
}
@ -77,6 +87,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
public void saveMenu(Bundle bundle) {
super.saveMenu(bundle);
bundle.putSerializable(KEY_MAPILLARY_DIALOG_IMAGE_KEY, key);
bundle.putSerializable(KEY_MAPILLARY_DIALOG_IMAGE_URL, imageUrl);
bundle.putSerializable(KEY_MAPILLARY_DIALOG_VIEWER_URL, viewerUrl);
bundle.putSerializable(KEY_MAPILLARY_DIALOG_LATLON, latLon);
@ -86,6 +97,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
@Override
protected void restoreFields(Bundle bundle) {
super.restoreFields(bundle);
this.key = bundle.getString(KEY_MAPILLARY_DIALOG_IMAGE_KEY);
this.imageUrl = bundle.getString(KEY_MAPILLARY_DIALOG_IMAGE_URL);
this.viewerUrl = bundle.getString(KEY_MAPILLARY_DIALOG_VIEWER_URL);
Object latLonObj = bundle.getSerializable(KEY_MAPILLARY_DIALOG_LATLON);
@ -136,11 +148,31 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
}
}
@Override
protected boolean haveMenuItems() {
return true;
}
@Override
protected void createMenuItems(Menu menu) {
MenuItem item = menu.add(R.string.open_mapillary)
.setIcon(getMapActivity().getMyApplication().getIconsCache().getThemedIcon(
R.drawable.ic_action_mapillary));
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
MapillaryPlugin.openMapillary(getMapActivity(), key);
return true;
}
});
}
@SuppressLint({"SetJavaScriptEnabled", "AddJavascriptInterface"})
private WebView getWebView() {
final WebView webView = new WebView(getMapActivity());
webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
//webView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
webView.setScrollContainer(false);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MapillaryWebAppInterface(), "Android");
@ -153,7 +185,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
if (!Algorithms.isEmpty(consoleMessage.message()) && consoleMessage.message().contains(WEBGL_ERROR_MESSAGE)) {
MapillaryPlugin.setWebGlSupported(false);
show(getMapActivity(), imageUrl, viewerUrl, getLatLon(), getCa(), getTitle(), getDescription());
show(getMapActivity(), key, imageUrl, viewerUrl, getLatLon(), getCa(), getTitle(), getDescription());
}
return false;
}
@ -172,6 +204,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
MapillaryImageDialog.this.latLon = latLon;
MapillaryImageDialog.this.ca = ca;
if (!Algorithms.isEmpty(key)) {
MapillaryImageDialog.this.key = key;
MapillaryImageDialog.this.imageUrl = MAPILLARY_HIRES_IMAGE_URL_TEMPLATE + key;
MapillaryImageDialog.this.viewerUrl = MAPILLARY_VIEWER_URL_TEMPLATE + key;
}
@ -182,6 +215,7 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
private View getStaticImageView() {
LinearLayout ll = new LinearLayout(getMapActivity());
ll.setClickable(true);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
isPortrait() ? ViewGroup.LayoutParams.MATCH_PARENT : AndroidUtils.dpToPx(getMapActivity(), 360f),
isPortrait() ? AndroidUtils.dpToPx(getMapActivity(), 270f) : ViewGroup.LayoutParams.MATCH_PARENT);
@ -205,9 +239,11 @@ public class MapillaryImageDialog extends ContextMenuCardDialog {
}
public static MapillaryImageDialog show(MapActivity mapActivity, String imageUrl, String viewerUrl, LatLon latLon, double ca,
String title, String description) {
MapillaryImageDialog dialog = new MapillaryImageDialog(mapActivity, imageUrl, viewerUrl, latLon, ca, title, description);
public static MapillaryImageDialog show(MapActivity mapActivity, String key, String imageUrl,
String viewerUrl, LatLon latLon, double ca,
String title, String description) {
MapillaryImageDialog dialog = new MapillaryImageDialog(mapActivity, key, imageUrl, viewerUrl,
latLon, ca, title, description);
ContextMenuCardDialogFragment.showInstance(dialog);
return dialog;
}

View file

@ -184,7 +184,7 @@ public class MapillaryPlugin extends OsmandPlugin {
mapillaryControl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openMapillary(map);
openMapillary(map, null);
}
});
@ -205,12 +205,15 @@ public class MapillaryPlugin extends OsmandPlugin {
}
}
public static boolean openMapillary(FragmentActivity activity) {
public static boolean openMapillary(FragmentActivity activity, String imageKey) {
boolean success = false;
OsmandApplication app = (OsmandApplication) activity.getApplication();
if (isPackageInstalled(MAPILLARY_PACKAGE_ID, app)) {
Intent launchIntent = app.getPackageManager().getLaunchIntentForPackage(MAPILLARY_PACKAGE_ID);
if (launchIntent != null) {
if (imageKey != null) {
launchIntent.putExtra("photo_id", imageKey);
}
app.startActivity(launchIntent);
success = true;
}