Added full screen browser support for context menu card
This commit is contained in:
parent
c3452f3bbb
commit
0930a72819
3 changed files with 126 additions and 11 deletions
|
@ -1,10 +1,23 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders.cards;
|
package net.osmand.plus.mapcontextmenu.builders.cards;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.util.TypedValue;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.webkit.WebSettings;
|
||||||
|
import android.webkit.WebView;
|
||||||
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
|
||||||
public abstract class AbstractCard {
|
public abstract class AbstractCard {
|
||||||
|
@ -35,4 +48,107 @@ public abstract class AbstractCard {
|
||||||
public OsmandApplication getMyApplication() {
|
public OsmandApplication getMyApplication() {
|
||||||
return app;
|
return app;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("SetJavaScriptEnabled")
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
protected static void openUrl(Context ctx, OsmandApplication app,
|
||||||
|
String title, String url, boolean externalLink) {
|
||||||
|
if (externalLink) {
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
intent.setData(Uri.parse(url));
|
||||||
|
ctx.startActivity(intent);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Dialog dialog = new Dialog(ctx,
|
||||||
|
app.getSettings().isLightContent() ?
|
||||||
|
R.style.OsmandLightTheme :
|
||||||
|
R.style.OsmandDarkTheme);
|
||||||
|
LinearLayout ll = new LinearLayout(ctx);
|
||||||
|
ll.setOrientation(LinearLayout.VERTICAL);
|
||||||
|
|
||||||
|
final Toolbar topBar = new Toolbar(ctx);
|
||||||
|
topBar.setClickable(true);
|
||||||
|
Drawable back = app.getIconsCache().getIcon(R.drawable.ic_action_remove_dark);
|
||||||
|
topBar.setNavigationIcon(back);
|
||||||
|
topBar.setNavigationContentDescription(R.string.shared_string_close);
|
||||||
|
topBar.setTitle(title);
|
||||||
|
topBar.setBackgroundColor(ContextCompat.getColor(ctx, getResIdFromAttribute(ctx, R.attr.pstsTabBackground)));
|
||||||
|
topBar.setTitleTextColor(ContextCompat.getColor(ctx, getResIdFromAttribute(ctx, R.attr.pstsTextColor)));
|
||||||
|
topBar.setNavigationOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(final View v) {
|
||||||
|
dialog.dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
final WebView wv = new WebView(ctx);
|
||||||
|
WebSettings settings = wv.getSettings();
|
||||||
|
/*
|
||||||
|
settings.setDefaultTextEncodingName("utf-8");
|
||||||
|
settings.setBuiltInZoomControls(true);
|
||||||
|
settings.setDisplayZoomControls(false);
|
||||||
|
settings.setSupportZoom(true);
|
||||||
|
|
||||||
|
//Scale web view font size with system font size
|
||||||
|
float scale = ctx.getResources().getConfiguration().fontScale;
|
||||||
|
if (android.os.Build.VERSION.SDK_INT >= 14) {
|
||||||
|
settings.setTextZoom((int) (scale * 100f));
|
||||||
|
} else {
|
||||||
|
if (scale <= 0.7f) {
|
||||||
|
settings.setTextSize(WebSettings.TextSize.SMALLEST);
|
||||||
|
} else if (scale <= 0.85f) {
|
||||||
|
settings.setTextSize(WebSettings.TextSize.SMALLER);
|
||||||
|
} else if (scale <= 1.0f) {
|
||||||
|
settings.setTextSize(WebSettings.TextSize.NORMAL);
|
||||||
|
} else if (scale <= 1.15f) {
|
||||||
|
settings.setTextSize(WebSettings.TextSize.LARGER);
|
||||||
|
} else {
|
||||||
|
settings.setTextSize(WebSettings.TextSize.LARGEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
wv.setBackgroundColor(Color.argb(1, 0, 0, 0));
|
||||||
|
//wv.setScrollContainer(false);
|
||||||
|
wv.getSettings().setJavaScriptEnabled(true);
|
||||||
|
wv.loadUrl(url);
|
||||||
|
|
||||||
|
ll.addView(topBar);
|
||||||
|
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);
|
||||||
|
lp.weight = 1;
|
||||||
|
ll.addView(wv, lp);
|
||||||
|
dialog.setContentView(ll);
|
||||||
|
|
||||||
|
/*
|
||||||
|
wv.setFocusable(true);
|
||||||
|
wv.setFocusableInTouchMode(true);
|
||||||
|
wv.requestFocus(View.FOCUS_DOWN);
|
||||||
|
wv.setOnTouchListener(new View.OnTouchListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onTouch(View v, MotionEvent event) {
|
||||||
|
switch (event.getAction()) {
|
||||||
|
case MotionEvent.ACTION_DOWN:
|
||||||
|
case MotionEvent.ACTION_UP:
|
||||||
|
if (!v.hasFocus()) {
|
||||||
|
v.requestFocus();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
dialog.setCancelable(true);
|
||||||
|
dialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getResIdFromAttribute(Context ctx, int attr) {
|
||||||
|
if (attr == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
TypedValue typedvalueattr = new TypedValue();
|
||||||
|
ctx.getTheme().resolveAttribute(attr, typedvalueattr, true);
|
||||||
|
return typedvalueattr.resourceId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,8 @@ public abstract class ImageCard extends AbstractCard {
|
||||||
private String imageUrl;
|
private String imageUrl;
|
||||||
// Image high resolution bitmap url
|
// Image high resolution bitmap url
|
||||||
private String imageHiresUrl;
|
private String imageHiresUrl;
|
||||||
|
// true if external browser should to be opened, open webview otherwise
|
||||||
|
private boolean externalLink;
|
||||||
|
|
||||||
protected int topIconId;
|
protected int topIconId;
|
||||||
protected int buttonIconId;
|
protected int buttonIconId;
|
||||||
|
@ -117,6 +119,9 @@ public abstract class ImageCard extends AbstractCard {
|
||||||
if (imageObject.has("imageHiresUrl")) {
|
if (imageObject.has("imageHiresUrl")) {
|
||||||
this.imageHiresUrl = imageObject.getString("imageHiresUrl");
|
this.imageHiresUrl = imageObject.getString("imageHiresUrl");
|
||||||
}
|
}
|
||||||
|
if (imageObject.has("externalLink") && !imageObject.isNull("externalLink")) {
|
||||||
|
this.externalLink = imageObject.getBoolean("externalLink");
|
||||||
|
}
|
||||||
if (imageObject.has("topIcon") && !imageObject.isNull("topIcon")) {
|
if (imageObject.has("topIcon") && !imageObject.isNull("topIcon")) {
|
||||||
this.topIconId = getDrawableId(imageObject.getString("topIcon"));
|
this.topIconId = getDrawableId(imageObject.getString("topIcon"));
|
||||||
}
|
}
|
||||||
|
@ -215,6 +220,10 @@ public abstract class ImageCard extends AbstractCard {
|
||||||
return imageHiresUrl;
|
return imageHiresUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isExternalLink() {
|
||||||
|
return externalLink;
|
||||||
|
}
|
||||||
|
|
||||||
public int getTopIconId() {
|
public int getTopIconId() {
|
||||||
return topIconId;
|
return topIconId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders.cards;
|
package net.osmand.plus.mapcontextmenu.builders.cards;
|
||||||
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.res.ColorStateList;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.support.v7.widget.AppCompatButton;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import net.osmand.plus.R;
|
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.mapillary.MapillaryPlugin;
|
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
@ -24,9 +16,7 @@ public class UrlImageCard extends ImageCard {
|
||||||
OnClickListener onClickListener = new OnClickListener() {
|
OnClickListener onClickListener = new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
openUrl(getMapActivity(), getMyApplication(), "", getUrl(), isExternalLink());
|
||||||
intent.setData(Uri.parse(getUrl()));
|
|
||||||
v.getContext().startActivity(intent);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (!Algorithms.isEmpty(buttonText)) {
|
if (!Algorithms.isEmpty(buttonText)) {
|
||||||
|
|
Loading…
Reference in a new issue