style issues
This commit is contained in:
parent
8dd5bda3fc
commit
8505f67d68
10 changed files with 97 additions and 379 deletions
|
@ -7,7 +7,7 @@
|
|||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
|
||||
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.STORAGE" />
|
||||
|
@ -52,7 +52,7 @@
|
|||
<application android:allowBackup="true" android:backupAgent="net.osmand.plus.OsmandBackupAgent"
|
||||
android:icon="@mipmap/icon" android:label="@string/app_name"
|
||||
android:name="net.osmand.plus.OsmandApplication" android:configChanges="locale"
|
||||
android:theme="@style/OsmandDarkTheme" android:restoreAnyVersion="true" android:largeHeap="true"
|
||||
android:theme="@style/OsmandDarkTheme" android:restoreAnyVersion="true" android:largeHeap="true"
|
||||
android:supportsRtl="true" android:usesCleartextTraffic="true">
|
||||
|
||||
<meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIqF3tNGT66etVBn_vgzpfAY1wmIzKV1Ss6Ku-2A" />
|
||||
|
@ -66,7 +66,7 @@
|
|||
<activity android:name="net.osmand.plus.activities.HelpActivity" />
|
||||
<activity android:name="net.osmand.plus.activities.ExitActivity" />
|
||||
|
||||
<provider
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="net.osmand.plus.fileprovider"
|
||||
android:exported="false"
|
||||
|
@ -952,7 +952,7 @@
|
|||
|
||||
<!-- keep android:process on a separate line !! -->
|
||||
<service
|
||||
android:process="net.osmand.plus"
|
||||
android:process="net.osmand.plus"
|
||||
android:label="@string/process_navigation_service"
|
||||
android:name="net.osmand.plus.NavigationService"
|
||||
android:foregroundServiceType="location"
|
||||
|
|
|
@ -1,110 +0,0 @@
|
|||
body {
|
||||
margin:0;
|
||||
padding:20px;
|
||||
max-width: 1250px;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.send-private-giveaway, .register-giveaway, .access-server-logs, .update-btc-report {
|
||||
margin: 20px 0px;
|
||||
border: 1px solid #e6e6e6;
|
||||
width: 50%;
|
||||
|
||||
}
|
||||
.wrapper {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
border-radius: 3px;
|
||||
|
||||
}
|
||||
.form-row {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
padding: 5px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.form-row > label {
|
||||
flex: 1;
|
||||
}
|
||||
.form-row > input {
|
||||
flex: 1;
|
||||
width: auto;
|
||||
}
|
||||
.form-row > button {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
th, td {
|
||||
text-align: left;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
tr:nth-child(even){background-color: #f2f2f2}
|
||||
tr:hover {background-color: #d5d5d5;}
|
||||
|
||||
th {
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
}
|
||||
.loader,
|
||||
.loader:before,
|
||||
.loader:after {
|
||||
border-radius: 50%;
|
||||
width: 2.5em;
|
||||
height: 2.5em;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
-webkit-animation: load7 1.8s infinite ease-in-out;
|
||||
animation: load7 1.8s infinite ease-in-out;
|
||||
}
|
||||
.loader {
|
||||
color: #00ffff;
|
||||
font-size: 10px;
|
||||
margin: 25px auto;
|
||||
position: relative;
|
||||
text-indent: -9999em;
|
||||
-webkit-transform: translateZ(0);
|
||||
-ms-transform: translateZ(0);
|
||||
transform: translateZ(0);
|
||||
-webkit-animation-delay: -0.16s;
|
||||
animation-delay: -0.16s;
|
||||
}
|
||||
.loader:before,
|
||||
.loader:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.loader:before {
|
||||
left: -3.5em;
|
||||
-webkit-animation-delay: -0.32s;
|
||||
animation-delay: -0.32s;
|
||||
}
|
||||
.loader:after {
|
||||
left: 3.5em;
|
||||
}
|
||||
@-webkit-keyframes load7 {
|
||||
0%,
|
||||
80%,
|
||||
100% {
|
||||
box-shadow: 0 2.5em 0 -1.3em;
|
||||
}
|
||||
40% {
|
||||
box-shadow: 0 2.5em 0 0;
|
||||
}
|
||||
}
|
||||
@keyframes load7 {
|
||||
0%,
|
||||
80%,
|
||||
100% {
|
||||
box-shadow: 0 2.5em 0 -1.3em;
|
||||
}
|
||||
40% {
|
||||
box-shadow: 0 2.5em 0 0;
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
var blogArticles = [
|
||||
{title:'OsmAnd for iPhone is released', url:'blog.html?id=osmand-ios', id:'osmand-ios', gatag:'osmand_ios'},
|
||||
{title:'Nautical charts', url:'blog.html?id=nautical-charts', id:'nautical-charts', gatag:'nautical_charts'},
|
||||
{title:'OsmAnd DVR goes live', url:'blog.html?id=osmand-dvr-goes-live', id:'osmand-dvr-goes-live', gatag:'osmand_dvr_goes_live'},
|
||||
{title:'OsmAnd 1.9', url:'blog.html?id=osmand-1-9-released', id:'osmand-1-9-released', gatag:'osmand_1_9'},
|
||||
{title:'OsmAnd 1.8', url:'blog.html?id=osmand-1-8-released', id:'osmand-1-8-released', gatag:'osmand_1_8'},
|
||||
{title:'OsmAnd 1.7', url:'blog.html?id=osmand-1-7-released', id:'osmand-1-7-released', gatag:'osmand_1_7'},
|
||||
{title:'OsmAnd 1.6 Released', url:'blog.html?id=osmand-1-6-released', id:'osmand-1-6-released', gatag:'osmand_1_6'},
|
||||
{title:'OsmAnd 1.5 Released', url:'blog.html?id=osmand-1-5-released', id:'osmand-1-5-released', gatag:'osmand_1_5'}
|
||||
];
|
||||
|
||||
var webSiteUrl = "http://osmand.net";
|
||||
|
||||
$.urlParam = function(url, name){
|
||||
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(url);
|
||||
if (results==null){
|
||||
return null;
|
||||
}
|
||||
else{
|
||||
return results[1] || 0;
|
||||
}
|
||||
}
|
||||
|
||||
function blog(container){
|
||||
|
||||
var getFullArticleUrl = function(articleObj){
|
||||
return webSiteUrl + "/" + articleObj.url;
|
||||
}
|
||||
|
||||
var fixTwitter =function (){
|
||||
$('#___plusone_0 iframe').css('height', '21px');
|
||||
}
|
||||
|
||||
var updateMetaTags = function(articleObj){
|
||||
if (articleObj && articleObj != null){
|
||||
var articleFullUrl = getFullArticleUrl(articleObj);
|
||||
$('meta[property="og:title"]').attr('content', articleObj.title);
|
||||
$('meta[property="og:url"]').attr('content', articleFullUrl);
|
||||
$('meta[property="og:description"]').attr('content', articleObj.title);
|
||||
|
||||
$('link[rel="canonical"]').attr('href', articleFullUrl);
|
||||
|
||||
$('div.fb-like').attr('data-href', articleFullUrl);
|
||||
$('.twitter-share-button').attr('data-url', articleFullUrl);
|
||||
}
|
||||
}
|
||||
|
||||
var getArticleById = function(articleid){
|
||||
for(var i=0; i < blogArticles.length;++i){
|
||||
if (blogArticles[i].id === articleid){
|
||||
return blogArticles[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
var init = function(){
|
||||
container.empty();
|
||||
|
||||
for(var i=0; i < blogArticles.length; ++i){
|
||||
var link = blogArticles[i];
|
||||
container.append('<li><a data-gatag="' +link.gatag+ '" data-index="' + link.index+ '" href="' + link.url + '">' + link.title + '</a></li>');
|
||||
}
|
||||
|
||||
var articleid = $.urlParam(window.location.href, 'id');
|
||||
if (!articleid || articleid == null){
|
||||
articleid = blogArticles[0].id;
|
||||
}
|
||||
//hide share buttons
|
||||
$('.share_buttons').css('display', 'none');
|
||||
updateMetaTags(getArticleById(articleid));
|
||||
var url = 'blog_articles' + '/' + articleid + ".html";
|
||||
$( ".article" ).load(url, function( response, status, xhr) {
|
||||
if ( status != "error" ) {
|
||||
|
||||
$('.share_buttons').css('display', 'block');
|
||||
setTimeout(fixTwitter, 5000);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
init();
|
||||
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
function applyPolStyles(){
|
||||
|
||||
if ($('.pds-box').length > 0){
|
||||
$('.pds-box').css('border', 'none');
|
||||
$('.pds-vote-button').css('float', 'left');
|
||||
$('.pds-vote-button').css('background', 'none');
|
||||
$('.pds-vote-button').css('background-color', '#FF8F00');
|
||||
$('.pds-vote-button').css('color', '#fff');
|
||||
$('.pds-vote-button').css('border', 'none');
|
||||
$('.pds-vote-button').css('border-radius', '5px');
|
||||
$('.pds-box-outer').css('padding', '0');
|
||||
$('.pds-view-results').on('click', function(){
|
||||
subscribeToReturnToPoll();
|
||||
});
|
||||
}else{
|
||||
setTimeout(applyPolStyles, timeout);
|
||||
}
|
||||
}
|
||||
|
||||
function subscribeToReturnToPoll(){
|
||||
if ($('.pds-return-poll').length > 0){
|
||||
$('.pds-return-poll').on('click', function(){applyStyleOnBackToPoll();});
|
||||
applyPolStyles();
|
||||
}else{
|
||||
setTimeout(subscribeToReturnToPoll, timeout);
|
||||
}
|
||||
}
|
||||
|
||||
function applyStyleOnBackToPoll(){
|
||||
if ($('.pds-view-results').length >0){
|
||||
applyPolStyles();
|
||||
}else{
|
||||
setTimeout(applyStyleOnBackToPoll, timeout);
|
||||
}
|
||||
}
|
|
@ -1,129 +0,0 @@
|
|||
var images_android=[
|
||||
"promo-1s.png",
|
||||
"promo-2s.png",
|
||||
"promo-3s.png",
|
||||
"promo-4s.png",
|
||||
"promo-5s.png",
|
||||
"promo-6s.png",
|
||||
"promo-7s.png",
|
||||
"promo-8s.png",
|
||||
"promo-9s.png",
|
||||
"promo-10s.png",
|
||||
"promo-11s.png",
|
||||
"promo-12s.png"
|
||||
];
|
||||
|
||||
var images_ios=[
|
||||
"ios-1s.png",
|
||||
"ios-2s.png",
|
||||
"ios-3s.png",
|
||||
"ios-4s.png",
|
||||
"ios-5s.png"
|
||||
];
|
||||
|
||||
function slider(container){
|
||||
var $cnt = $(container);
|
||||
var $img1 = $cnt.find("#screenshot1");
|
||||
var $img2 =$cnt.find("#screenshot2");
|
||||
var $img3 = $cnt.find("#screenshot3");
|
||||
var $img4 = $cnt.find("#screenshot4");
|
||||
var $leftarrow = $cnt.find(".arrow.left");
|
||||
var $rightarrow = $cnt.find(".arrow.right");
|
||||
var $btnleft = $cnt.find(".button.left");
|
||||
var $btnright = $cnt.find(".button.right");
|
||||
var currentPosition =0;
|
||||
var count =4;
|
||||
|
||||
var images = images_android;
|
||||
|
||||
var init = function(){
|
||||
updatePictures();
|
||||
updateArrows();
|
||||
$leftarrow.on('click', function(){
|
||||
if (currentPosition > 0){
|
||||
currentPosition-=count;
|
||||
updatePictures();
|
||||
updateArrows();
|
||||
}
|
||||
});
|
||||
$rightarrow.on('click', function(){
|
||||
if (currentPosition + count < images.length){
|
||||
currentPosition+=count;
|
||||
updatePictures();
|
||||
updateArrows();
|
||||
}
|
||||
});
|
||||
$btnleft.on('click', function(){
|
||||
if (!$btnleft.hasClass("active")){
|
||||
$btnleft.addClass("active");
|
||||
$btnright.removeClass("active");
|
||||
$btnright.addClass
|
||||
images = images_android;
|
||||
currentPosition = 0;
|
||||
updatePictures();
|
||||
updateArrows();
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
$btnright.on('click', function(){
|
||||
if (!$btnright.hasClass("active")){
|
||||
$btnright.addClass("active");
|
||||
$btnleft.removeClass("active");
|
||||
images = images_ios;
|
||||
currentPosition = 0;
|
||||
updatePictures();
|
||||
updateArrows();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
var changePicture = function(img, index){
|
||||
if (index < images.length){
|
||||
img.attr("src", "images/" + images[index]);
|
||||
}else{
|
||||
img.attr("src", "images/empty.png");
|
||||
}
|
||||
}
|
||||
var updatePictures = function(){
|
||||
changePicture( $img1, currentPosition);
|
||||
changePicture( $img2, currentPosition+1);
|
||||
changePicture( $img3, currentPosition+2);
|
||||
changePicture( $img4, currentPosition+3);
|
||||
}
|
||||
var updateArrows = function(){
|
||||
if (currentPosition + count < images.length){
|
||||
enableRightArrow();
|
||||
}else{
|
||||
disableRightArrow();
|
||||
}
|
||||
if (currentPosition== 0 ){
|
||||
disableLeftArrow();
|
||||
}else{
|
||||
enableLeftArrow();
|
||||
}
|
||||
}
|
||||
var enableLeftArrow = function(){
|
||||
$leftarrow.attr("src", "images/left_arrow_orange.png");
|
||||
while ($leftarrow.hasClass("disabled")){
|
||||
$leftarrow.removeClass("disabled");
|
||||
}
|
||||
}
|
||||
var disableLeftArrow = function(){
|
||||
$leftarrow.attr("src", "images/left_arrow_grey.png");
|
||||
$leftarrow.addClass("disabled");
|
||||
}
|
||||
var enableRightArrow = function(){
|
||||
$rightarrow.attr("src", "images/right_arrow_orange.png");
|
||||
while ($rightarrow.hasClass("disabled")){
|
||||
$rightarrow.removeClass("disabled");
|
||||
}
|
||||
}
|
||||
var disableRightArrow = function(){
|
||||
$rightarrow.attr("src", "images/right_arrow_grey.png");
|
||||
$rightarrow.addClass("disabled");
|
||||
}
|
||||
init();
|
||||
|
||||
}
|
8
OsmAnd/src/net/osmand/plus/server/IMapOnImageDrawn.java
Normal file
8
OsmAnd/src/net/osmand/plus/server/IMapOnImageDrawn.java
Normal file
|
@ -0,0 +1,8 @@
|
|||
package net.osmand.plus.server;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
|
||||
public interface IMapOnImageDrawn {
|
||||
void onDraw(RotatedTileBox viewport, Bitmap bmp);
|
||||
}
|
|
@ -1,10 +1,14 @@
|
|||
package net.osmand.plus.server;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.util.Log;
|
||||
import android.webkit.MimeTypeMap;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import fi.iki.elonen.NanoHTTPD;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.server.endpoints.TileEndpoint;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -12,13 +16,14 @@ import java.io.InputStream;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class OsmAndHttpServer extends NanoHTTPD {
|
||||
public class OsmAndHttpServer extends NanoHTTPD{
|
||||
private static final String FOLDER_NAME = "server";
|
||||
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(OsmAndHttpServer.class);
|
||||
public static final int PORT = 24990;
|
||||
public static String HOSTNAME = "0.0.0.0";
|
||||
private final Map<String, ApiEndpoint> endpoints = new HashMap<>();
|
||||
private OsmandApplication application;
|
||||
private MapActivity mapActivity;
|
||||
|
||||
public OsmAndHttpServer() throws IOException {
|
||||
super(HOSTNAME, PORT);
|
||||
|
@ -72,7 +77,7 @@ public class OsmAndHttpServer extends NanoHTTPD {
|
|||
}
|
||||
|
||||
private void registerEndpoints() {
|
||||
register("/tile", new TileEndpoint(application));
|
||||
register("/tile", new TileEndpoint(application,mapActivity));
|
||||
}
|
||||
|
||||
private void register(String path, ApiEndpoint endpoint) {
|
||||
|
@ -95,6 +100,7 @@ public class OsmAndHttpServer extends NanoHTTPD {
|
|||
is,
|
||||
is.available());
|
||||
} catch (IOException e) {
|
||||
LOG.error(e);
|
||||
return ErrorResponses.response404;
|
||||
}
|
||||
}
|
||||
|
@ -111,6 +117,17 @@ public class OsmAndHttpServer extends NanoHTTPD {
|
|||
return type;
|
||||
}
|
||||
|
||||
public void setActivity(FragmentActivity activity) {
|
||||
if (activity instanceof MapActivity){
|
||||
this.mapActivity = (MapActivity)activity;
|
||||
}
|
||||
for (String endpoint : endpoints.keySet()){
|
||||
if (endpoints.get(endpoint) instanceof TileEndpoint){
|
||||
((TileEndpoint) endpoints.get(endpoint)).setMapActivity(mapActivity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class ErrorResponses {
|
||||
public static NanoHTTPD.Response response404 =
|
||||
newFixedLengthResponse(NanoHTTPD.Response.Status.NOT_FOUND,
|
||||
|
|
|
@ -12,15 +12,18 @@ import android.widget.TextView;
|
|||
import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static android.content.Context.WIFI_SERVICE;
|
||||
|
||||
public class ServerFragment extends BaseOsmAndFragment {
|
||||
private final static Log LOG = PlatformUtil.getLog(ServerFragment.class);
|
||||
private boolean initialized = false;
|
||||
private OsmAndHttpServer server;
|
||||
private View view;
|
||||
|
@ -85,13 +88,14 @@ public class ServerFragment extends BaseOsmAndFragment {
|
|||
try {
|
||||
server = new OsmAndHttpServer();
|
||||
server.setApplication((OsmandApplication) getMyApplication());
|
||||
server.setActivity(this.getActivity());
|
||||
initialized = true;
|
||||
updateTextView("Server started at: http://" + getDeviceAddress() + ":" + OsmAndHttpServer.PORT);
|
||||
} catch (IOException e) {
|
||||
Toast.makeText(requireContext(),
|
||||
e.getLocalizedMessage(),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
e.printStackTrace();
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
package net.osmand.plus.server.endpoints;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.util.Log;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import fi.iki.elonen.NanoHTTPD;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.data.RotatedTileBox;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.render.MapRenderRepositories;
|
||||
import net.osmand.plus.resources.AsyncLoadingThread;
|
||||
import net.osmand.plus.server.ApiEndpoint;
|
||||
import net.osmand.plus.server.IMapOnImageDrawn;
|
||||
import net.osmand.plus.server.OsmAndHttpServer;
|
||||
import net.osmand.plus.server.ServerFragment;
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
|
@ -20,21 +24,33 @@ import java.util.Scanner;
|
|||
|
||||
import static fi.iki.elonen.NanoHTTPD.newFixedLengthResponse;
|
||||
|
||||
public class TileEndpoint implements ApiEndpoint {
|
||||
public class TileEndpoint implements ApiEndpoint, IMapOnImageDrawn {
|
||||
private static final int RENDER_WAIT_THRESHOLD = 5000;
|
||||
private static final Object lock = new Object();
|
||||
private static final int TILE_SIZE_PX = 512;
|
||||
private static final Log LOG = PlatformUtil.getLog(TileEndpoint.class);
|
||||
Map<RotatedTileBox, Bitmap> hashMap = new HashMap<>();
|
||||
Map<RotatedTileBox, Bitmap> map = Collections.synchronizedMap(hashMap);
|
||||
OsmandApplication application;
|
||||
private RotatedTileBox viewPort;
|
||||
private Bitmap resultBitmap;
|
||||
private MapActivity mapActivity;
|
||||
|
||||
public TileEndpoint(OsmandApplication application) {
|
||||
@Override
|
||||
public void onDraw(RotatedTileBox viewport, Bitmap bmp) {
|
||||
map.put(viewport, bmp);
|
||||
}
|
||||
|
||||
public TileEndpoint(OsmandApplication application, MapActivity mapActivity) {
|
||||
this.application = application;
|
||||
this.mapActivity = mapActivity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NanoHTTPD.Response process(NanoHTTPD.IHTTPSession session) {
|
||||
synchronized (lock) {
|
||||
this.mapActivity.getMapView().setOnImageDrawnListener(this);
|
||||
RotatedTileBox tileBoxCopy = mapActivity.getMapView().getCurrentRotatedTileBox().copy();
|
||||
int zoom;
|
||||
double lat;
|
||||
double lon;
|
||||
|
@ -52,6 +68,7 @@ public class TileEndpoint implements ApiEndpoint {
|
|||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
|
||||
byte[] byteArray = stream.toByteArray();
|
||||
ByteArrayInputStream str = new ByteArrayInputStream(byteArray);
|
||||
mapActivity.getMapView().setCurrentViewport(tileBoxCopy);
|
||||
return newFixedLengthResponse(
|
||||
NanoHTTPD.Response.Status.OK,
|
||||
"image/png",
|
||||
|
@ -65,25 +82,42 @@ public class TileEndpoint implements ApiEndpoint {
|
|||
this.application = application;
|
||||
}
|
||||
|
||||
public void setMapActivity(MapActivity mapActivity) {
|
||||
this.mapActivity = mapActivity;
|
||||
}
|
||||
|
||||
private Bitmap requestTile(double lat, double lon, int zoom) {
|
||||
final RotatedTileBox rotatedTileBox = new RotatedTileBox.RotatedTileBoxBuilder()
|
||||
.setLocation(lat, lon)
|
||||
.setZoom(zoom)
|
||||
.setPixelDimensions(TILE_SIZE_PX, TILE_SIZE_PX, 0.5f, 0.5f).build();
|
||||
final MapRenderRepositories renderer = application.getResourceManager().getRenderer();
|
||||
application.getResourceManager().updateRendererMap(rotatedTileBox, new AsyncLoadingThread.OnMapLoadedListener() {
|
||||
@Override
|
||||
public void onMapLoaded(boolean interrupted) {
|
||||
map.put(rotatedTileBox, renderer.getBitmap());
|
||||
}
|
||||
});
|
||||
Bitmap bmp;
|
||||
mapActivity.getMapView().setCurrentViewport(rotatedTileBox);
|
||||
// application.getResourceManager().updateRendererMap(rotatedTileBox, new AsyncLoadingThread.OnMapLoadedListener() {
|
||||
// @Override
|
||||
// public void onMapLoaded(boolean interrupted) {
|
||||
// map.put(rotatedTileBox, renderer.getBitmap());
|
||||
// }
|
||||
// });
|
||||
Bitmap bmp = null;
|
||||
int sleepTime = 500;
|
||||
int timeout = 0;
|
||||
|
||||
|
||||
// try {
|
||||
// while ((viewPort == null && !rotatedTileBox.equals(viewPort)) || timeout < 5000) {
|
||||
// Thread.sleep(100);
|
||||
// timeout += 100;
|
||||
// }
|
||||
// return resultBitmap;
|
||||
// } catch (InterruptedException e) {
|
||||
// LOG.error(e);
|
||||
// }
|
||||
while ((bmp = map.get(rotatedTileBox)) == null) {
|
||||
try {
|
||||
Thread.sleep(sleepTime);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
LOG.error(e);
|
||||
}
|
||||
sleepTime += 500;
|
||||
if (sleepTime > RENDER_WAIT_THRESHOLD) {
|
||||
|
|
|
@ -46,6 +46,8 @@ import net.osmand.plus.OsmandApplication;
|
|||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.activities.MapActivity;
|
||||
import net.osmand.plus.helpers.TwoFingerTapDetector;
|
||||
import net.osmand.plus.server.IMapOnImageDrawn;
|
||||
import net.osmand.plus.server.endpoints.TileEndpoint;
|
||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||
import net.osmand.plus.views.MultiTouchSupport.MultiTouchZoomListener;
|
||||
import net.osmand.plus.views.OsmandMapLayer.DrawSettings;
|
||||
|
@ -77,6 +79,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
protected OsmandSettings settings = null;
|
||||
private CanvasColors canvasColors = null;
|
||||
private Boolean nightMode = null;
|
||||
private IMapOnImageDrawn mapOnImageDrawnListener;
|
||||
|
||||
private class CanvasColors {
|
||||
int colorDay = MAP_DEFAULT_COLOR;
|
||||
|
@ -86,7 +89,7 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
private class FPSMeasurement {
|
||||
int fpsMeasureCount = 0;
|
||||
int fpsMeasureMs = 0;
|
||||
long fpsFirstMeasurement = 0;
|
||||
long fpsFirstMeasurement = 0 ;
|
||||
float fps;
|
||||
|
||||
void calculateFPS(long start, long end) {
|
||||
|
@ -341,6 +344,10 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
return application;
|
||||
}
|
||||
|
||||
public void setOnImageDrawnListener(IMapOnImageDrawn iMapOnImageDrawn) {
|
||||
this.mapOnImageDrawnListener = iMapOnImageDrawn;
|
||||
}
|
||||
|
||||
// ///////////////////////// NON UI PART (could be extracted in common) /////////////////////////////
|
||||
public LatLon getFirstTouchPointLatLon() {
|
||||
return firstTouchPointLatLon;
|
||||
|
@ -574,6 +581,9 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
if (!bufferBitmap.isRecycled()) {
|
||||
RectF rct = new RectF(x1, y1, x2, y2);
|
||||
canvas.drawBitmap(bufferBitmap, null, rct, paintImg);
|
||||
if (mapOnImageDrawnListener != null){
|
||||
mapOnImageDrawnListener.onDraw(currentViewport,bufferBitmap);
|
||||
}
|
||||
}
|
||||
canvas.rotate(-rot, currentViewport.getCenterPixelX(), currentViewport.getCenterPixelY());
|
||||
}
|
||||
|
@ -869,6 +879,11 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
|
|||
return currentViewport;
|
||||
}
|
||||
|
||||
public void setCurrentViewport(RotatedTileBox viewport) {
|
||||
currentViewport = viewport;
|
||||
refreshMap();
|
||||
}
|
||||
|
||||
public float getDensity() {
|
||||
return currentViewport.getDensity();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue