Compare commits
1252 commits
refactorMa
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
9d39e2f805 | ||
|
3ce4082997 | ||
|
f528ae4b43 | ||
|
ed0f6d6882 | ||
|
f0dc959bdc | ||
|
aa2c111e88 | ||
|
74efa9f2b8 | ||
|
92d59f6521 | ||
|
d1fb9d5129 | ||
|
22237493a6 | ||
|
3754cf7822 | ||
|
2437fb722a | ||
|
8accf25b60 | ||
|
974ad80734 | ||
|
500cb007b8 | ||
|
e6be5dcab5 | ||
|
e2d659e859 | ||
|
603f32df63 | ||
|
c1b416448f | ||
|
42604ac3b6 | ||
|
1ac919b8d3 | ||
|
4de1aa9193 | ||
|
fe9a5c43bd | ||
|
32dff8b9e2 | ||
|
72ca4055fc | ||
|
8950a05446 | ||
|
60b72f53be | ||
|
560c229277 | ||
|
c40eb96bd7 | ||
|
7f795a4e43 | ||
|
eefe1a00ac | ||
|
cb18d45e43 | ||
|
d2fe5b7e3f | ||
|
5670680d1e | ||
|
dd1195b060 | ||
|
d0d60e9d2e | ||
|
0d26b83435 | ||
|
83885c373c | ||
|
3ff1d1a39a | ||
|
5f9e931482 | ||
|
b1d1007cb6 | ||
|
6948315605 | ||
|
81687551e7 | ||
|
da89e737ec | ||
|
8c992bb4a9 | ||
|
0ca18e6d5f | ||
|
d9de7ba4b0 | ||
|
b5a27d99b8 | ||
|
a5f0fa9aac | ||
|
43564125ce | ||
|
1e23993514 | ||
|
f77f499391 | ||
|
fa17db8756 | ||
|
f1f7db7842 | ||
|
2968aad438 | ||
|
396f9354c1 | ||
|
c3818d6121 | ||
|
40c060af26 | ||
|
1629183994 | ||
|
295c6c4df4 | ||
|
fed2e356c3 | ||
|
a7efb09724 | ||
|
f1756768ce | ||
|
13037bacae | ||
|
1c6485ccea | ||
|
a2a7cb77bf | ||
|
7525c925ca | ||
|
2e9238aff8 | ||
|
658b157bb2 | ||
|
ec0ea31b53 | ||
|
d2598612ff | ||
|
6eb665c9a8 | ||
|
cbc4e1a427 | ||
|
558c0f5256 | ||
|
11ddc65409 | ||
|
109d9aa1bb | ||
|
87744e180b | ||
|
0eb64b7ecf | ||
|
cc70fcede4 | ||
|
5497bc4691 | ||
|
e65eb4cb84 | ||
|
551dd084ad | ||
|
43394ce607 | ||
|
08baaf7004 | ||
|
8aeb8b16a3 | ||
|
a657d71e06 | ||
|
d62c288e4a | ||
|
b17e985974 | ||
|
116742f348 | ||
|
cd970e85ff | ||
|
324397cc25 | ||
|
adabe9d54e | ||
|
a2a3087b68 | ||
|
ed8b9973a9 | ||
|
ced9a3555e | ||
|
2be03d04ed | ||
|
aa846ab405 | ||
|
0a18414f8f | ||
|
e6907b2153 | ||
|
f6ebee979a | ||
|
6291b18fc3 | ||
|
f6245ebce3 | ||
|
e89a6ab502 | ||
|
4a22d25721 | ||
|
608b44f213 | ||
|
73b1adb168 | ||
|
e7299f51f3 | ||
|
cf26ccc7ab | ||
|
6bf7da4290 | ||
|
cc152a64f9 | ||
|
2d2a951dde | ||
|
465ec91344 | ||
|
3de36e5eef | ||
|
7ac56c9359 | ||
|
42ea7d1d7e | ||
|
2524a3f73a | ||
|
13b6b74e13 | ||
|
f5974f7cf3 | ||
|
95a1d5c9ee | ||
|
dfdf9104c8 | ||
|
15fb2b6774 | ||
|
8487444779 | ||
|
c71253a8fd | ||
|
5c08b1d1b3 | ||
|
95e1e8e7b6 | ||
|
1ed12a42a5 | ||
|
ec33e20fe4 | ||
|
e131eeaee5 | ||
|
2995a6bc9b | ||
|
ae0fa4edc9 | ||
|
092e129f35 | ||
|
7f43d70609 | ||
|
6005f11124 | ||
|
2e955acda6 | ||
|
54069a1106 | ||
|
adbc331fce | ||
|
2f1e43147d | ||
|
9e3d072843 | ||
|
6226c00fac | ||
|
bd1ce16524 | ||
|
a6999badb1 | ||
|
3e593d9b0e | ||
|
897c6d290c | ||
|
94e1318bf9 | ||
|
6d53e37fbb | ||
|
251e64341e | ||
|
84a9f0482e | ||
|
a78e66d301 | ||
|
06102f6c96 | ||
|
a727eb862b | ||
|
1474f17c30 | ||
|
64677aa434 | ||
|
ae2eef75f3 | ||
|
fbec2abd19 | ||
|
99c42b954c | ||
|
59484136b1 | ||
|
0bdf2dfa8a | ||
|
26b7ece371 | ||
|
45be6b1919 | ||
|
aa6b04a924 | ||
|
4a6ab0c6bb | ||
|
dd1354cf3b | ||
|
149b89090b | ||
|
6a0bf98c23 | ||
|
09631d27b8 | ||
|
8bbd650a9b | ||
|
ff7aa932a3 | ||
|
6db150b4e5 | ||
|
e6ad6f3c38 | ||
|
9d9dd32503 | ||
|
a2cc187623 | ||
|
4796a68d57 | ||
|
b2bf760db1 | ||
|
273f9c1c34 | ||
|
7d3d86970f | ||
|
e7da52098a | ||
|
d9baad5644 | ||
|
ef4984f3ee | ||
|
0c6a7128ea | ||
|
6803f77e09 | ||
|
61e1680c8b | ||
|
cd3445ab39 | ||
|
4ff17ba467 | ||
|
189ff61704 | ||
|
69e983df14 | ||
|
940ccf8d8d | ||
|
63783e1d49 | ||
|
26f9e85f2a | ||
|
3370a5bab7 | ||
|
20df6ec98f | ||
|
1de54d48a6 | ||
|
5a2813e54c | ||
|
11c3203f07 | ||
|
4e70b16445 | ||
|
36a732e610 | ||
|
e6a4be79f2 | ||
|
367b2bc27e | ||
|
764231bdc7 | ||
|
f124ec279e | ||
|
312d5a376e | ||
|
f073bdc1fc | ||
|
31dbfd17ce | ||
|
fa4fe5efc6 | ||
|
2a3fed2b74 | ||
|
92b5902735 | ||
|
7d7eaf507b | ||
|
9370ead9f9 | ||
|
7c23dadc0a | ||
|
212c34ce12 | ||
|
a6ffb43768 | ||
|
0c3ef31b74 | ||
|
b0fa13f4f1 | ||
|
4a7707f1ae | ||
|
b4050c28a9 | ||
|
79ec255fcf | ||
|
dde62bfebf | ||
|
a253c4fffc | ||
|
9b7b286970 | ||
|
c3a23f6d49 | ||
|
64e9fcfa96 | ||
|
8095fbd927 | ||
|
a92e002db3 | ||
|
f17cfdf426 | ||
|
08e2c4ed26 | ||
|
1ec3189a86 | ||
|
c3ee44ffac | ||
|
3a5e8c6230 | ||
|
e3c257b255 | ||
|
9368b7383a | ||
|
ab605a035b | ||
|
9713d04c7f | ||
|
5d8f6c81d1 | ||
|
65adb8092d | ||
|
e1ea59b492 | ||
|
8fa9d4cee4 | ||
|
08c40319f6 | ||
|
d17dff2846 | ||
|
a418f94cd1 | ||
|
796f167c3d | ||
|
28df99cffb | ||
|
52f13a7e42 | ||
|
84e25fa00b | ||
|
290f3af026 | ||
|
f73fd42931 | ||
|
430ff544b3 | ||
|
1ce74b23ea | ||
|
74a534c4f3 | ||
|
3da32a65cf | ||
|
236f4c05b6 | ||
|
60b346373f | ||
|
47e08d7338 | ||
|
e28fd2d945 | ||
|
0ae3f924ad | ||
|
df7369b404 | ||
|
8ab2c8252b | ||
|
593f1b5a88 | ||
|
d34ed7d816 | ||
|
bc51f99223 | ||
|
0d59db88ce | ||
|
41412a4a9f | ||
|
e4476da783 | ||
|
80c2c119e9 | ||
|
ab28abe880 | ||
|
a7e408c3ca | ||
|
7496b6842f | ||
|
b7a44c42d5 | ||
|
58bdf9f81d | ||
|
cdbe91e273 | ||
|
218eb86d27 | ||
|
3565d4124e | ||
|
8f52e17fa3 | ||
|
54058f5650 | ||
|
7f2472df54 | ||
|
b14f62822b | ||
|
621a06b2c0 | ||
|
3560de5e3e | ||
|
1b1132148f | ||
|
42e6e3824d | ||
|
d74597f59e | ||
|
01e806a82d | ||
|
d7039a06a4 | ||
|
cb6324eacb | ||
|
841db60fce | ||
|
0375cb0101 | ||
|
430e2f7940 | ||
|
5b69eec661 | ||
|
f88348c9c3 | ||
|
68ee9b1b20 | ||
|
de79feb819 | ||
|
b27301b9b0 | ||
|
9397f503fe | ||
|
7262de045a | ||
|
793280847f | ||
|
db4c7a3566 | ||
|
a9b6c9d819 | ||
|
388be5c3ef | ||
|
9728d763b2 | ||
|
1c85b474ed | ||
|
7251ba81cc | ||
|
5d233dbfb2 | ||
|
f6948a891d | ||
|
496b8b2c86 | ||
|
3ef4cd426b | ||
|
53e93107d2 | ||
|
cbf7422938 | ||
|
31057080da | ||
|
9eb846ba83 | ||
|
21b3141487 | ||
|
45455732f0 | ||
|
ad8c940574 | ||
|
700e4c410b | ||
|
d75e9646c1 | ||
|
88b692444d | ||
|
af0f2dc9ee | ||
|
2280f42f8c | ||
|
353559ec95 | ||
|
99eb790504 | ||
|
b03b4f4d59 | ||
|
7e8d132c65 | ||
|
8a31db0b85 | ||
|
80f7aefd0c | ||
|
e2d3c25399 | ||
|
689f45e8d4 | ||
|
1487c62144 | ||
|
9352ce1201 | ||
|
069570b6f2 | ||
|
1b3f12e2a1 | ||
|
bbce82ba0a | ||
|
4ea6df5fdb | ||
|
264be920bf | ||
|
63cb87896f | ||
|
b1d3ebbaf1 | ||
|
733d152956 | ||
|
637f9f957c | ||
|
01eb699e3b | ||
|
acff47bf8a | ||
|
bb5302e2cc | ||
|
4ef66d93a7 | ||
|
9d20e4ae11 | ||
|
482acc95f1 | ||
|
077f57c830 | ||
|
14272afa44 | ||
|
687e5f6d81 | ||
|
74fcdc7ce1 | ||
|
64e2bc56e1 | ||
|
2838e408a9 | ||
|
387de3925f | ||
|
04eaaaafa2 | ||
|
edb879260a | ||
|
63b50fbc20 | ||
|
8d9ae28ddf | ||
|
336b2a8444 | ||
|
6991d7add7 | ||
|
7775338364 | ||
|
553258c09a | ||
|
294040aaf9 | ||
|
27fd305e4c | ||
|
17294eebc3 | ||
|
d9bea4ecd4 | ||
|
b5d5772428 | ||
|
037faa9793 | ||
|
e427f7d996 | ||
|
9fdfa1270b | ||
|
ac3aeacca1 | ||
|
1813a99da1 | ||
|
684571ca34 | ||
|
f08b7f2f93 | ||
|
73741c556c | ||
|
7fd107c97a | ||
|
b0b5a4cdb2 | ||
|
3ae35a8353 | ||
|
38d05b1f45 | ||
|
68dd209120 | ||
|
8c37068918 | ||
|
5f244aa249 | ||
|
0604374475 | ||
|
34f3474f12 | ||
|
96d6aff021 | ||
|
eb4a1108f8 | ||
|
f2645a064f | ||
|
529576d012 | ||
|
f8cd551085 | ||
|
516881f8a5 | ||
|
4d9d1fd18f | ||
|
d8ddb71742 | ||
|
accb726fcf | ||
|
4aa7874750 | ||
|
9e46f46a6b | ||
|
6cfc02979f | ||
|
241a2387b1 | ||
|
741f92ddcd | ||
|
9f40195d76 | ||
|
1a18eb5b58 | ||
|
98887aba71 | ||
|
adf6f49266 | ||
|
68af54e140 | ||
|
14209dbd01 | ||
|
b36d5a92d8 | ||
|
b9e886ef64 | ||
|
db296864ee | ||
|
4f35297d73 | ||
|
33a2565c41 | ||
|
bf55e86a7e | ||
|
b42a69e53f | ||
|
38523c6490 | ||
|
432f0e6abd | ||
|
74ba484ffb | ||
|
60585fdfaf | ||
|
e3c456fd95 | ||
|
a5fce381d5 | ||
|
25d0c52b9f | ||
|
4def53fc4a | ||
|
af46bd723b | ||
|
302f501109 | ||
|
40aea6b269 | ||
|
40ad509468 | ||
|
b966dfac34 | ||
|
63ec628f00 | ||
|
6853b414e4 | ||
|
3aeacf00f0 | ||
|
f202b825d7 | ||
|
19e0ad1a7c | ||
|
d7a9b44c93 | ||
|
103d2461e1 | ||
|
815e7db202 | ||
|
720c4fbf4a | ||
|
ae419ad2e1 | ||
|
d27bc71994 | ||
|
bbe3fbfcc6 | ||
|
648def04a9 | ||
|
4da1804f1a | ||
|
fc524c8232 | ||
|
99c53ce1c7 | ||
|
7da275deb0 | ||
|
86350eb65e | ||
|
bf6d5f0b83 | ||
|
169d734f47 | ||
|
762e574bf0 | ||
|
ca80f13d13 | ||
|
756fa1a510 | ||
|
cae3e339b1 | ||
|
affe7df24a | ||
|
01cc58308f | ||
|
17027c860a | ||
|
80c807cc10 | ||
|
f6212c216e | ||
|
8f8d4366d4 | ||
|
262b8d0084 | ||
|
1ce5313dfd | ||
|
34e9074cfa | ||
|
afb8adda6c | ||
|
e880f99a25 | ||
|
a24d5e607a | ||
|
135e5024f9 | ||
|
69d4c71765 | ||
|
369ce31d8c | ||
|
77e61515d8 | ||
|
8fe9fc99d3 | ||
|
32718977c7 | ||
|
84ad07a7b5 | ||
|
118721bb9e | ||
|
1affe2f602 | ||
|
446650a80e | ||
|
124b701a9f | ||
|
919e488ea0 | ||
|
2b794f9b46 | ||
|
bc249018e3 | ||
|
66717cb23c | ||
|
35de6913a4 | ||
|
a31b0c1d61 | ||
|
7f39af3310 | ||
|
412fa4d33d | ||
|
84a6d663f4 | ||
|
86bdcb9415 | ||
|
6c531bebc7 | ||
|
cd3333dd61 | ||
|
d4882a4591 | ||
|
6f5236e8b4 | ||
|
5149d6543b | ||
|
3dff56da46 | ||
|
d8b5fbacbb | ||
|
45b34cb933 | ||
|
9f9374438e | ||
|
7dd3795ebe | ||
|
211cc78189 | ||
|
82fa75db1d | ||
|
001b34c47d | ||
|
48092f0e23 | ||
|
a8f780a46c | ||
|
e9a8d28ad1 | ||
|
9a6d6049a4 | ||
|
7420b71048 | ||
|
753c963032 | ||
|
ae89349d14 | ||
|
fc35892883 | ||
|
07ee3be474 | ||
|
5e1a5e8d3e | ||
|
dacbc9b4cf | ||
|
40b5220caa | ||
|
896ae11878 | ||
|
07280935c0 | ||
|
372e4e7f49 | ||
|
0b361afaec | ||
|
7115368dd4 | ||
|
d190da742a | ||
|
3cfb56c443 | ||
|
8aa9380907 | ||
|
a77362c5e0 | ||
|
6ba23e6a3c | ||
|
78175e8a1c | ||
|
adbcb141a7 | ||
|
03a450f9e2 | ||
|
8ceef9af42 | ||
|
aa7e75bc4a | ||
|
1d56925f8e | ||
|
a557c6f2fc | ||
|
53106fd8e2 | ||
|
1cdf506212 | ||
|
99c432d9ff | ||
|
6fb2273ee4 | ||
|
1b532acbe7 | ||
|
be85c4dcd6 | ||
|
5baafa845a | ||
|
97f0f8d9e8 | ||
|
122aef6ae6 | ||
|
6322fad7b5 | ||
|
787ec5b159 | ||
|
387a92af01 | ||
|
c7c9cd7682 | ||
|
2b01201311 | ||
|
fa0dcb03aa | ||
|
239d42852a | ||
|
ae858ede93 | ||
|
7048f8c52d | ||
|
b114d4956e | ||
|
3e8dac9caf | ||
|
c5540162f4 | ||
|
d22edfd9ae | ||
|
50ac1174d0 | ||
|
e4383f21fc | ||
|
9e98fb12dd | ||
|
16efbfd7f5 | ||
|
3f0803eb08 | ||
|
ff26a082f9 | ||
|
0480d39439 | ||
|
5c83a31c77 | ||
|
e3b4786556 | ||
|
0addf8d56b | ||
|
a4e1d93f9e | ||
|
5ea797aa7a | ||
|
d04f5f6814 | ||
|
83902e281a | ||
|
ee7e8bf3eb | ||
|
aaff5c3f7c | ||
|
393e4b06d3 | ||
|
e8c0064cb7 | ||
|
199c7772ba | ||
|
befb22b218 | ||
|
a919a99a89 | ||
|
cf217b425b | ||
|
17964af6e7 | ||
|
b4b3285326 | ||
|
94a78b636a | ||
|
15bd1b01fe | ||
|
3f01136708 | ||
|
6c439350c4 | ||
|
3f62b5cc1a | ||
|
4da71a3734 | ||
|
67449365b4 | ||
|
ca03a530ff | ||
|
33968534fa | ||
|
27002fd152 | ||
|
f1aedd7ef0 | ||
|
eeaf45ea98 | ||
|
de386f5286 | ||
|
8ee7cd0736 | ||
|
9cfd0f5e36 | ||
|
ce475077fe | ||
|
be2297c967 | ||
|
27cf399bd9 | ||
|
1a149c0d63 | ||
|
483f33bccd | ||
|
11d03489cc | ||
|
ad409bc967 | ||
|
9d17f50f4b | ||
|
d9a69dd154 | ||
|
a0be550d04 | ||
|
684b0cdeb5 | ||
|
5d3e7fd0d2 | ||
|
66f4b97b91 | ||
|
89db60fbc8 | ||
|
837176a3d1 | ||
|
ffe15a976f | ||
|
d1fd273117 | ||
|
27bf5e7809 | ||
|
cf870da76a | ||
|
4d78fc77de | ||
|
83282f4b98 | ||
|
d67aa52000 | ||
|
ef59866913 | ||
|
5e6c9a335e | ||
|
bd835b0153 | ||
|
0f362fe525 | ||
|
f72482e2c2 | ||
|
4cf50ad804 | ||
|
c57c44cb0c | ||
|
b5c5627b05 | ||
|
109ae94c33 | ||
|
39630ab43b | ||
|
45672c2b47 | ||
|
4f3e522424 | ||
|
eb3584b79f | ||
|
8327496965 | ||
|
5694e4469a | ||
|
d02665032a | ||
|
9fc2fcf2bd | ||
|
f96118767d | ||
|
036ab858ef | ||
|
17334eb2cd | ||
|
8ee7043123 | ||
|
3e6d65d08a | ||
|
e292cfc030 | ||
|
eff2d35a7f | ||
|
5a68b91b0c | ||
|
2c43cf8b93 | ||
|
3dd74265fe | ||
|
67a2a447e7 | ||
|
edb329e336 | ||
|
faa8503847 | ||
|
4038f430c5 | ||
|
2277d6c4ea | ||
|
3c239cae0c | ||
|
6c31d95649 | ||
|
a8bca97b0b | ||
|
feadaa0da5 | ||
|
3ecfbfc087 | ||
|
90ee2ba501 | ||
|
03f0f19cae | ||
|
e4d9e37141 | ||
|
b7de6e8a38 | ||
|
738d282091 | ||
|
6d1b6faf20 | ||
|
c3fb538e06 | ||
|
0aaa004702 | ||
|
51dff2456b | ||
|
487d357c2f | ||
|
1310854caa | ||
|
97735bb598 | ||
|
75affd7917 | ||
|
0f037d6264 | ||
|
6bbed2571f | ||
|
509bf2b8b2 | ||
|
de93f862a7 | ||
|
3e4153a5cb | ||
|
1da3c93e5c | ||
|
edc741e84f | ||
|
294bc53ecd | ||
|
0f41f95621 | ||
|
1fe9fa2e43 | ||
|
fef3af8e5f | ||
|
1b0b76d5b2 | ||
|
a3d499b8d1 | ||
|
e7e78d8449 | ||
|
63b588d0b1 | ||
|
7c9bdb70f1 | ||
|
7487cda2c3 | ||
|
881c2214b6 | ||
|
0ea47b985a | ||
|
0cda81127d | ||
|
513cce6304 | ||
|
573b2cec9d | ||
|
3bc071c986 | ||
|
28d6dd0e4a | ||
|
1c140011ab | ||
|
334d7a11e1 | ||
|
6daf750591 | ||
|
1d66be6f4b | ||
|
6f03c5ac25 | ||
|
35d72bdbaa | ||
|
8dbe502907 | ||
|
6193387459 | ||
|
aed05f43e0 | ||
|
bd1846683d | ||
|
2651fdfa4a | ||
|
2d6ea304b2 | ||
|
f8bac862d1 | ||
|
8444e83484 | ||
|
a903353acb | ||
|
bcc6eff895 | ||
|
8195de78f0 | ||
|
fe5219f296 | ||
|
7c5b425e5a | ||
|
ca83e57932 | ||
|
7aa5e4e1a6 | ||
|
508613cf19 | ||
|
ee4beb8c45 | ||
|
bb1aef0862 | ||
|
5af4e49b30 | ||
|
e301eebcf9 | ||
|
e1da7bbadf | ||
|
f3eb10ff88 | ||
|
8e2b5a72f0 | ||
|
96b2314e15 | ||
|
695a0016b9 | ||
|
27dc55188e | ||
|
9fda0edc37 | ||
|
498b991198 | ||
|
b034db4f39 | ||
|
f3c34e1060 | ||
|
8de07a2c59 | ||
|
2c33128c76 | ||
|
0949a06f3d | ||
|
3323d0ebb7 | ||
|
04be31b26f | ||
|
5f67fbcac6 | ||
|
5ae37a101c | ||
|
4543e16b14 | ||
|
84266e5719 | ||
|
a04f7e3bec | ||
|
9e364a0103 | ||
|
a8c732df4e | ||
|
913e125968 | ||
|
ac370efcd9 | ||
|
83870f0f45 | ||
|
490d42f334 | ||
|
4117295fe8 | ||
|
47f1932ac9 | ||
|
b3f87c5036 | ||
|
984aaa36a7 | ||
|
e058dad692 | ||
|
5fdc350f1b | ||
|
476b486dba | ||
|
170c70e42b | ||
|
fcd2eed652 | ||
|
ca6c7f096f | ||
|
95ba9cc032 | ||
|
53c817e811 | ||
|
d3b0c31bb8 | ||
|
e06478d4fe | ||
|
1ee2d1cc12 | ||
|
52a725729c | ||
|
14bd85a64c | ||
|
32e0defac0 | ||
|
c2b47322a6 | ||
|
b651a18e8d | ||
|
ec564d35a0 | ||
|
f16b46295d | ||
|
5950f45ef1 | ||
|
c129ef5ce7 | ||
|
f7b74ce0a2 | ||
|
c6731760dd | ||
|
3d36bccaf6 | ||
|
fa254ad690 | ||
|
34d0d6e8d4 | ||
|
2f874ae448 | ||
|
8168fcde22 | ||
|
a8d0d60381 | ||
|
c6d66c81ad | ||
|
0bf8f35756 | ||
|
590d6392a2 | ||
|
947204be3f | ||
|
2b3fc8e809 | ||
|
524693d8cd | ||
|
a40ed4a7dd | ||
|
92d610751c | ||
|
bcae0a2de5 | ||
|
bf075cc7c6 | ||
|
3bfae7e3fe | ||
|
c1b3be76fc | ||
|
90f3102b1f | ||
|
733c115d2b | ||
|
c42f2240f9 | ||
|
e84b9ddc6d | ||
|
806e259497 | ||
|
d9cc0e33c9 | ||
|
a484fcca36 | ||
|
37f13f4ee0 | ||
|
4476217755 | ||
|
df7574c4a8 | ||
|
7c47ef847c | ||
|
dd75f3f4ec | ||
|
442e50a26c | ||
|
7a985a4c00 | ||
|
a9bd3c7a9d | ||
|
8ce078f189 | ||
|
5dd662eb99 | ||
|
35064dba01 | ||
|
fbeb657f87 | ||
|
ae249e1185 | ||
|
7ac502cb58 | ||
|
cbdf5e5a91 | ||
|
4f5f995509 | ||
|
aa95f686f4 | ||
|
3bcf8d4e3b | ||
|
94c58edb7c | ||
|
c7fa20cc69 | ||
|
d906018e3a | ||
|
83fe5fa0d8 | ||
|
d8eaaa0b22 | ||
|
025ee8e993 | ||
|
4a357e6459 | ||
|
bc1f18fcb4 | ||
|
2e04c460b3 | ||
|
d84f8bed00 | ||
|
2e685f7182 | ||
|
24bf019508 | ||
|
72ee17b4f5 | ||
|
80f8254f11 | ||
|
f02f469bf3 | ||
|
67039222c5 | ||
|
2910df88e1 | ||
|
a8e1d60af1 | ||
|
29e635bb59 | ||
|
d199c5f14f | ||
|
56b18eb70d | ||
|
a38ec28250 | ||
|
f804c9eb03 | ||
|
3bc955b5fb | ||
|
bc6f84299a | ||
|
90184a64f7 | ||
|
524694c6d8 | ||
|
24e8c0c59c | ||
|
63443597b6 | ||
|
05b32b1fd6 | ||
|
d0755df7ee | ||
|
0b33264c3e | ||
|
778b5b024c | ||
|
09205278ac | ||
|
05972cdfec | ||
|
bab68baa99 | ||
|
c90a74956a | ||
|
c4cf068f1b | ||
|
1bdc56d52a | ||
|
078e037ac2 | ||
|
307b302899 | ||
|
a6bc3b9691 | ||
|
3db082bc82 | ||
|
219321afbd | ||
|
4064e1af98 | ||
|
bce07417c6 | ||
|
a49d87de36 | ||
|
fae316efa4 | ||
|
69ba7e5ec9 | ||
|
2a445a1062 | ||
|
ef1ca9efe3 | ||
|
9fd80543d6 | ||
|
756bf183b2 | ||
|
bfb3b9934b | ||
|
61869d8b60 | ||
|
0f41bcfad5 | ||
|
45309ac2da | ||
|
37ff5c485c | ||
|
8b6613f854 | ||
|
030e2c2982 | ||
|
1a0aa569fb | ||
|
8957399696 | ||
|
9ef50a14bf | ||
|
444c5b968d | ||
|
4de561bc95 | ||
|
d721baa0f9 | ||
|
fb8f812bc4 | ||
|
769f1b82a2 | ||
|
1c057904c7 | ||
|
2fe5a6dafd | ||
|
b5545983fd | ||
|
87bc4d7718 | ||
|
f23497d70b | ||
|
ac0364ce9c | ||
|
b713b23002 | ||
|
de228ac8de | ||
|
04663ec2fc | ||
|
975bd509ba | ||
|
288cb6d917 | ||
|
eab60bed46 | ||
|
49aab1eb21 | ||
|
ccc35e4134 | ||
|
8020884d6a | ||
|
ae3480d280 | ||
|
e826a195b5 | ||
|
81f367eacb | ||
|
b1d75c3396 | ||
|
c2276920e1 | ||
|
03e632a6d0 | ||
|
130a2889c3 | ||
|
7c98fd3ee8 | ||
|
9f23adeebf | ||
|
3c9f4a4abc | ||
|
be68eefcaf | ||
|
562ed6bcdd | ||
|
91f72c1f6b | ||
|
ce4150b480 | ||
|
83884d4958 | ||
|
e377a1e44d | ||
|
6659b86580 | ||
|
ed06aaa6b6 | ||
|
ac088dd217 | ||
|
5b7bd83b83 | ||
|
b832e07ca1 | ||
|
45d3a68b4a | ||
|
e33affa764 | ||
|
1ee03a6d0b | ||
|
b8d16fe441 | ||
|
51eb0098d3 | ||
|
7fe957c712 | ||
|
499d14371a | ||
|
d6e8232793 | ||
|
c35f9c5867 | ||
|
699772a633 | ||
|
f1cbbf6de5 | ||
|
104f644dcd | ||
|
3a1e5b92f3 | ||
|
591f81169b | ||
|
04ff958512 | ||
|
c3ddc79f91 | ||
|
7191990470 | ||
|
f4ea02a698 | ||
|
f3ff1f239c | ||
|
7a84a66bdb | ||
|
6ad83e8f3d | ||
|
eb57dc34d4 | ||
|
9b9d47238d | ||
|
b7bf39d76d | ||
|
7b6eef7cb2 | ||
|
68af232843 | ||
|
b8987fc45b | ||
|
0b2cb9ee6a | ||
|
2ab0c034c7 | ||
|
388630714c | ||
|
80e02521d8 | ||
|
2a93f05578 | ||
|
d108a818ad | ||
|
a8719b542f | ||
|
d347ae32b5 | ||
|
d6bd0e4145 | ||
|
e794f3f028 | ||
|
f692339a36 | ||
|
b7dd8dca05 | ||
|
2e2f7b6dcf | ||
|
e05aab4211 | ||
|
b107c430df | ||
|
58b690ba7c | ||
|
78ce26b77f | ||
|
c640e6a79a | ||
|
6e40cd7913 | ||
|
68c07a3de4 | ||
|
98a0829d5a | ||
|
27bd894e56 | ||
|
6d87a33535 | ||
|
5f9047cc6d | ||
|
1b75863569 | ||
|
5ef83f5143 | ||
|
e33324dd10 | ||
|
a40f802a7a | ||
|
9f2da9598a | ||
|
a0aabf544d | ||
|
7218e7d4b5 | ||
|
eb5d46d441 | ||
|
bf2469a05d | ||
|
175f937319 | ||
|
efca3719e5 | ||
|
f10f3dc5cf | ||
|
fc5440120b | ||
|
a0ce545636 | ||
|
7c4b4aee2f | ||
|
b2b25c31ba | ||
|
ded818b092 | ||
|
44e7bf18df | ||
|
64336f85de | ||
|
56a033dc60 | ||
|
7015e8d25b | ||
|
ba05d8193c | ||
|
d51d24ad1b | ||
|
bbb1fd0ac6 | ||
|
979c10aba4 | ||
|
5bfbda1e0f | ||
|
db0038a050 | ||
|
a592b397fc | ||
|
d119f6ffab | ||
|
a0386129df | ||
|
ec9076dc2b | ||
|
d3cf4fade6 | ||
|
c352a04883 | ||
|
b53e8efd14 | ||
|
e5bb46e88f | ||
|
e1dab2db4c | ||
|
fa8140b74c | ||
|
e2b108aefc | ||
|
bccfe95597 | ||
|
71ae5345b1 | ||
|
5ce6dbe85a | ||
|
1c4484b44c | ||
|
6e5964de40 | ||
|
50b679dc66 | ||
|
a9423e5332 | ||
|
d698f0f500 | ||
|
1dddb08f54 | ||
|
39c1d6b7f9 | ||
|
6d356bae3d | ||
|
772df1dd46 | ||
|
0d09754376 | ||
|
6de0962608 | ||
|
edb4dc19e0 | ||
|
c473f77a4d | ||
|
e30e2e1034 | ||
|
116ec774ad | ||
|
c0e769b746 | ||
|
5f5c315955 | ||
|
b0b5528cc6 | ||
|
aa86038b70 | ||
|
158d5ac249 | ||
|
d5cf475126 | ||
|
7227478dfb | ||
|
b65b4dac81 | ||
|
6c6230f55c | ||
|
2907d49102 | ||
|
ca72d8f5d6 | ||
|
5b08660b5e | ||
|
7773335722 | ||
|
5ddfe09b27 | ||
|
82252ef0c2 | ||
|
6d5529918c | ||
|
fe1fda65ff | ||
|
693816c701 | ||
|
bd2e50ec01 | ||
|
67382d777c | ||
|
e72d10d8e7 | ||
|
ae1868c1f6 | ||
|
0f9d744338 | ||
|
185f0deab1 | ||
|
d8e36b17db | ||
|
a6cedd2767 | ||
|
0d06344869 | ||
|
893ef334a0 | ||
|
5371f429a4 | ||
|
80ea50ff96 | ||
|
1797e24f43 | ||
|
2c6204810c | ||
|
80adbc698a | ||
|
802d063142 | ||
|
acf8571ab3 | ||
|
fa38d19aff | ||
|
7cca699fdb | ||
|
0cd3428437 | ||
|
9c9acaed4d | ||
|
7a5ffdeeb6 | ||
|
9e12512d51 | ||
|
ab65c9b1c9 | ||
|
69318daf79 | ||
|
c83445eabb | ||
|
eeef038034 | ||
|
10ca9b94b1 | ||
|
09fbe4fb37 | ||
|
53e284d843 | ||
|
1625a05a27 | ||
|
5c48c1026e | ||
|
136542f0dd | ||
|
908033e0a9 | ||
|
5520f7fb75 | ||
|
37d8a9eee8 | ||
|
37d795cf7b | ||
|
56af6bf622 | ||
|
1b38cc0abe | ||
|
d4c6e92a34 | ||
|
6affa0c432 | ||
|
a6b0b08ece | ||
|
6883bf722b | ||
|
df95dbec7f | ||
|
e1d1edee43 | ||
|
1c5d01f391 | ||
|
d230a323ce | ||
|
06077bd353 | ||
|
8c029663b7 | ||
|
6efb6f27b3 | ||
|
82f2138c07 | ||
|
83bd81eea7 | ||
|
d47a19eff8 | ||
|
42e4b17054 | ||
|
64b3fc351f | ||
|
0d39173b8b | ||
|
9da63447c1 | ||
|
4ac46d74e8 | ||
|
6bf313c32e | ||
|
203734d7d3 | ||
|
08cd0db152 | ||
|
9a44cd70e6 | ||
|
368b2ff8f9 | ||
|
cf8346187f | ||
|
233463a138 | ||
|
2316c10487 | ||
|
cfd7dfef6b | ||
|
58569b1cc5 | ||
|
31f08d05b5 | ||
|
70062a98df | ||
|
949523f1d1 | ||
|
2f72ddc566 | ||
|
d942a4f683 | ||
|
c3bf4b7c3f | ||
|
16e631614e | ||
|
ade9b22e56 | ||
|
7707c1c981 | ||
|
e035824afc | ||
|
08f3cadd3f | ||
|
f400e755fd | ||
|
40286f93b2 | ||
|
a6b12f0111 | ||
|
c52a8ae021 | ||
|
0b8847206a | ||
|
e15dece046 | ||
|
77b325c6ad | ||
|
19c9dd0c71 | ||
|
be5c29f7e5 | ||
|
d2e36e0783 | ||
|
a4291472ad | ||
|
c6c8b3753c | ||
|
0dfd710013 | ||
|
f1e0ad342c | ||
|
cae7027177 | ||
|
773a0a7342 | ||
|
c762e072d2 | ||
|
c092551bda | ||
|
8d1ce38f4f | ||
|
605034783e | ||
|
ca4de9fc8a | ||
|
63530f571a | ||
|
4b93539c25 | ||
|
816cec80f2 | ||
|
8ceab0c5c3 | ||
|
8027fb1f34 | ||
|
7ca460fb80 | ||
|
2b8a233e4d | ||
|
c78a934d8f | ||
|
907354957d | ||
|
4c04c7ee19 | ||
|
1985928d60 | ||
|
098f3603ab | ||
|
b6bcf9033b | ||
|
fa353ad87c | ||
|
e5e77effac | ||
|
0bc9c0cb48 | ||
|
04e90d5284 | ||
|
a2afc8c0a2 | ||
|
d83bdd3389 | ||
|
a80f463d2b | ||
|
a4e7edc6bd | ||
|
0d29c84a6e | ||
|
54a9ca41f7 | ||
|
793bda1024 | ||
|
7afc918fac | ||
|
fab3f322b4 | ||
|
07c371f472 | ||
|
4d4783b2ea | ||
|
d114b23e30 | ||
|
29897a247e | ||
|
38d6183a43 | ||
|
110cb16860 | ||
|
d7db7387b6 | ||
|
9067da136b | ||
|
06da2fa44e | ||
|
b8f3452a1c | ||
|
11f1ba5bc2 | ||
|
27aab34bf9 | ||
|
92c6ed4501 | ||
|
fdb6570ebe | ||
|
8536aacdd7 | ||
|
bb6099d41a | ||
|
4218711971 | ||
|
1c0e5411b1 | ||
|
399ea02fdf | ||
|
33c5c562d9 | ||
|
428327c2cd | ||
|
8ec89a28e1 | ||
|
588d9b2916 | ||
|
e084416ce1 | ||
|
0d4765142a | ||
|
066ee38de2 | ||
|
a702787f09 | ||
|
16593e1a34 | ||
|
b422c8276d | ||
|
ae88e4e8a2 | ||
|
d6dc10e5cf | ||
|
b149bb47da | ||
|
0f81841c79 | ||
|
cbc77377cb | ||
|
5b590cf3ec | ||
|
b0bb03fa8f | ||
|
25390e1d42 | ||
|
7a738dd55c | ||
|
152129ec78 | ||
|
837219bebb | ||
|
775719b480 | ||
|
dbf9cb8e19 | ||
|
fc3ead429c | ||
|
e420cdb3ec | ||
|
f75a8f8b58 | ||
|
2561ee99e1 | ||
|
627cd967b1 | ||
|
cea1fa60e7 | ||
|
0125820d76 | ||
|
1be6bc7eea | ||
|
7c22585d43 | ||
|
10bab68413 | ||
|
80dd042f4f | ||
|
fab1df33a6 | ||
|
f981d4a4bb | ||
|
e44f763405 | ||
|
e67395028a | ||
|
719dbbc244 | ||
|
584e7dbf6d | ||
|
dd1c4b5311 | ||
|
48cbd60dc7 | ||
|
eb0284284f | ||
|
eb596298ec | ||
|
a5e062c849 | ||
|
96bf672ad9 | ||
|
1bc511cdc7 | ||
|
790cf6592e | ||
|
a3d65e8500 | ||
|
1d194e4083 | ||
|
b46e275193 | ||
|
face01f6b7 | ||
|
837452a568 | ||
|
f12cbd0aea | ||
|
89e953c854 | ||
|
04b18477ce | ||
|
9e6dadaa71 | ||
|
7373a2c8c2 | ||
|
c92cb7aae7 | ||
|
c445e45b60 | ||
|
8cc7ca3a39 | ||
|
ffc5e1d83e | ||
|
4576492108 | ||
|
c28d6d75a9 | ||
|
8f4d63dc4f | ||
|
90c29ef6fe | ||
|
2ca1303cf3 | ||
|
6f0e0ae21c | ||
|
4733919c3c | ||
|
2b71749199 | ||
|
cfb3ab771e | ||
|
037894f8aa | ||
|
ea1386fa4f | ||
|
ce9d6977e7 | ||
|
13a4ad38fc | ||
|
a2dfb1a8fe | ||
|
72542fce5e | ||
|
92c1ca5b96 | ||
|
f9de869e79 | ||
|
7164b12a21 | ||
|
3221f9e272 | ||
|
86c9016a6e | ||
|
ac22fd0992 | ||
|
c93341a2b6 |
700 changed files with 42136 additions and 14440 deletions
|
@ -17,6 +17,7 @@ package com.jwetherell.openmap.common;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class MGRSPoint extends ZonedUTMPoint {
|
||||
|
||||
|
@ -697,10 +698,9 @@ public class MGRSPoint extends ZonedUTMPoint {
|
|||
all.set(1, shiftChar(all.get(1), eastShift, northShift));
|
||||
String zero = "";
|
||||
}
|
||||
|
||||
|
||||
all.add(String.format("%0" + accuracy + "d", roundedEasting));
|
||||
all.add(String.format("%0" + accuracy + "d", roundedNorthing));
|
||||
|
||||
all.add(String.format(Locale.US,"%0" + accuracy + "d", roundedEasting));
|
||||
all.add(String.format(Locale.US,"%0" + accuracy + "d", roundedNorthing));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import net.osmand.binary.StringBundle;
|
|||
import net.osmand.binary.StringBundleWriter;
|
||||
import net.osmand.binary.StringBundleXmlWriter;
|
||||
import net.osmand.data.QuadRect;
|
||||
import net.osmand.router.RouteColorize.ColorizationType;
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
@ -227,6 +228,9 @@ public class GPXUtilities {
|
|||
public double hdop = Double.NaN;
|
||||
public float heading = Float.NaN;
|
||||
public boolean deleted = false;
|
||||
public int speedColor = 0;
|
||||
public int altitudeColor = 0;
|
||||
public int slopeColor = 0;
|
||||
public int colourARGB = 0; // point colour (used for altitude/speed colouring)
|
||||
public double distance = 0.0; // cumulative distance, if in a track
|
||||
|
||||
|
@ -249,6 +253,9 @@ public class GPXUtilities {
|
|||
this.hdop = wptPt.hdop;
|
||||
this.heading = wptPt.heading;
|
||||
this.deleted = wptPt.deleted;
|
||||
this.speedColor = wptPt.speedColor;
|
||||
this.altitudeColor = wptPt.altitudeColor;
|
||||
this.slopeColor = wptPt.slopeColor;
|
||||
this.colourARGB = wptPt.colourARGB;
|
||||
this.distance = wptPt.distance;
|
||||
}
|
||||
|
@ -311,6 +318,26 @@ public class GPXUtilities {
|
|||
getExtensionsToWrite().put(ICON_NAME_EXTENSION, iconName);
|
||||
}
|
||||
|
||||
public int getColor(ColorizationType type) {
|
||||
if (type == ColorizationType.SPEED) {
|
||||
return speedColor;
|
||||
} else if (type == ColorizationType.ELEVATION) {
|
||||
return altitudeColor;
|
||||
} else {
|
||||
return slopeColor;
|
||||
}
|
||||
}
|
||||
|
||||
public void setColor(ColorizationType type, int color) {
|
||||
if (type == ColorizationType.SPEED) {
|
||||
speedColor = color;
|
||||
} else if (type == ColorizationType.ELEVATION) {
|
||||
altitudeColor = color;
|
||||
} else if (type == ColorizationType.SLOPE) {
|
||||
slopeColor = color;
|
||||
}
|
||||
}
|
||||
|
||||
public String getBackgroundType() {
|
||||
return getExtensionsToRead().get(BACKGROUND_TYPE_EXTENSION);
|
||||
}
|
||||
|
@ -1086,6 +1113,15 @@ public class GPXUtilities {
|
|||
return trackBounds;
|
||||
}
|
||||
|
||||
public static QuadRect calculateTrackBounds(List<TrkSegment> segments) {
|
||||
QuadRect trackBounds = new QuadRect(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,
|
||||
Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
|
||||
for (TrkSegment segment : segments) {
|
||||
updateBounds(trackBounds, segment.points, 0);
|
||||
}
|
||||
return trackBounds;
|
||||
}
|
||||
|
||||
public static void updateBounds(QuadRect trackBounds, List<WptPt> pts, int startIndex) {
|
||||
for (int i = startIndex; i < pts.size(); i++) {
|
||||
WptPt pt = pts.get(i);
|
||||
|
@ -1662,16 +1698,16 @@ public class GPXUtilities {
|
|||
return new QuadRect(left, top, right, bottom);
|
||||
}
|
||||
|
||||
public int getGradientScaleColor(String gradientScaleType, int defColor) {
|
||||
public int[] getGradientScaleColor(String gradientScaleType) {
|
||||
String clrValue = null;
|
||||
if (extensions != null) {
|
||||
clrValue = extensions.get(gradientScaleType);
|
||||
}
|
||||
return parseColor(clrValue, defColor);
|
||||
return Algorithms.stringToGradientPalette(clrValue);
|
||||
}
|
||||
|
||||
public void setGradientScaleColor(String gradientScaleType, int gradientScaleColor) {
|
||||
getExtensionsToWrite().put(gradientScaleType, Algorithms.colorToString(gradientScaleColor));
|
||||
public void setGradientScaleColor(String gradientScaleType, int[] gradientScalePalette) {
|
||||
getExtensionsToWrite().put(gradientScaleType, Algorithms.gradientPaletteToString(gradientScalePalette));
|
||||
}
|
||||
|
||||
public String getGradientScaleType() {
|
||||
|
|
|
@ -27,7 +27,9 @@ public class IndexConstants {
|
|||
public static final String BINARY_ROAD_MAP_INDEX_EXT = ".road.obf"; //$NON-NLS-1$
|
||||
public static final String BINARY_ROAD_MAP_INDEX_EXT_ZIP = ".road.obf.zip"; //$NON-NLS-1$
|
||||
public static final String BINARY_SRTM_MAP_INDEX_EXT = ".srtm.obf"; //$NON-NLS-1$
|
||||
public static final String BINARY_SRTM_FEET_MAP_INDEX_EXT = ".srtmf.obf"; //$NON-NLS-1$
|
||||
public static final String BINARY_SRTM_MAP_INDEX_EXT_ZIP = ".srtm.obf.zip"; //$NON-NLS-1$
|
||||
public static final String BINARY_SRTM_FEET_MAP_INDEX_EXT_ZIP = ".srtmf.obf.zip"; //$NON-NLS-1$
|
||||
public static final String EXTRA_EXT = ".extra";
|
||||
public static final String EXTRA_ZIP_EXT = ".extra.zip";
|
||||
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
package net.osmand;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Calendar;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Period {
|
||||
|
||||
public enum PeriodUnit {
|
||||
YEAR("Y"),
|
||||
MONTH("M"),
|
||||
WEEK("W"),
|
||||
DAY("D");
|
||||
YEAR("Y", Calendar.YEAR),
|
||||
MONTH("M", Calendar.MONTH),
|
||||
WEEK("W", Calendar.WEEK_OF_YEAR),
|
||||
DAY("D", Calendar.DATE);
|
||||
|
||||
private String unitStr;
|
||||
private int calendarIdx;
|
||||
|
||||
PeriodUnit(String unitStr) {
|
||||
PeriodUnit(String unitStr, int calendarIdx) {
|
||||
this.calendarIdx = calendarIdx;
|
||||
this.unitStr = unitStr;
|
||||
}
|
||||
|
||||
|
@ -22,6 +25,10 @@ public class Period {
|
|||
return unitStr;
|
||||
}
|
||||
|
||||
public int getCalendarIdx() {
|
||||
return calendarIdx;
|
||||
}
|
||||
|
||||
public double getMonthsValue() {
|
||||
switch (this) {
|
||||
case YEAR:
|
||||
|
|
|
@ -1,25 +1,9 @@
|
|||
package net.osmand.binary;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import com.google.protobuf.CodedInputStream;
|
||||
import com.google.protobuf.InvalidProtocolBufferException;
|
||||
import com.google.protobuf.WireFormat;
|
||||
|
||||
import gnu.trove.iterator.TLongObjectIterator;
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
import gnu.trove.list.array.TLongArrayList;
|
||||
import gnu.trove.map.hash.TIntObjectHashMap;
|
||||
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.ResultMatcher;
|
||||
import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
|
||||
|
@ -34,6 +18,23 @@ import net.osmand.util.Algorithms;
|
|||
import net.osmand.util.MapUtils;
|
||||
import net.osmand.util.OpeningHoursParser;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import gnu.trove.iterator.TLongObjectIterator;
|
||||
import gnu.trove.list.array.TIntArrayList;
|
||||
import gnu.trove.list.array.TLongArrayList;
|
||||
import gnu.trove.map.hash.TIntObjectHashMap;
|
||||
import gnu.trove.map.hash.TLongObjectHashMap;
|
||||
|
||||
public class BinaryMapRouteReaderAdapter {
|
||||
protected static final Log LOG = PlatformUtil.getLog(BinaryMapRouteReaderAdapter.class);
|
||||
private static final int SHIFT_COORDINATES = 4;
|
||||
|
@ -303,6 +304,7 @@ public class BinaryMapRouteReaderAdapter {
|
|||
public int directionTrafficSignalsBackward = -1;
|
||||
public int trafficSignals = -1;
|
||||
public int stopSign = -1;
|
||||
public int stopMinor = -1;
|
||||
public int giveWaySign = -1;
|
||||
|
||||
int nameTypeRule = -1;
|
||||
|
@ -363,6 +365,8 @@ public class BinaryMapRouteReaderAdapter {
|
|||
destinationRefTypeRule = id;
|
||||
} else if (tags.equals("highway") && val.equals("traffic_signals")){
|
||||
trafficSignals = id;
|
||||
} else if (tags.equals("stop") && val.equals("minor")) {
|
||||
stopMinor = id;
|
||||
} else if (tags.equals("highway") && val.equals("stop")){
|
||||
stopSign = id;
|
||||
} else if (tags.equals("highway") && val.equals("give_way")){
|
||||
|
|
|
@ -282,10 +282,12 @@ public class GeocodingUtilities {
|
|||
} else {
|
||||
Collections.sort(streetsList, DISTANCE_COMPARATOR);
|
||||
double streetDistance = 0;
|
||||
boolean isBuildingFound = knownMinBuildingDistance > 0;
|
||||
for (GeocodingResult street : streetsList) {
|
||||
if (streetDistance == 0) {
|
||||
streetDistance = street.getDistance();
|
||||
} else if (street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME) {
|
||||
} else if (streetDistance > 0 && street.getDistance() > streetDistance + DISTANCE_STREET_FROM_CLOSEST_WITH_SAME_NAME &&
|
||||
isBuildingFound) {
|
||||
continue;
|
||||
}
|
||||
street.connectionPoint = road.connectionPoint;
|
||||
|
@ -296,6 +298,7 @@ public class GeocodingUtilities {
|
|||
if (knownMinBuildingDistance == 0) {
|
||||
GeocodingResult firstBld = it.next();
|
||||
knownMinBuildingDistance = firstBld.getDistance();
|
||||
isBuildingFound = true;
|
||||
res.add(firstBld);
|
||||
}
|
||||
while (it.hasNext()) {
|
||||
|
|
|
@ -4,6 +4,7 @@ import net.osmand.Location;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
|
||||
import net.osmand.data.LatLon;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
import net.osmand.util.TransliterationHelper;
|
||||
|
@ -37,7 +38,9 @@ public class RouteDataObject {
|
|||
public int[] nameIds;
|
||||
// mixed array [0, height, cumulative_distance height, cumulative_distance, height, ...] - length is length(points)*2
|
||||
public float[] heightDistanceArray = null;
|
||||
public float heightByCurrentLocation = Float.NaN;
|
||||
private static final Log LOG = PlatformUtil.getLog(RouteDataObject.class);
|
||||
|
||||
public RouteDataObject(RouteRegion region) {
|
||||
this.region = region;
|
||||
}
|
||||
|
@ -124,7 +127,7 @@ public class RouteDataObject {
|
|||
equals = this.pointTypes[i] == thatObj.pointTypes[i];
|
||||
} else if (pointTypes[i].length != thatObj.pointTypes[i].length) {
|
||||
equals = false;
|
||||
} else {
|
||||
} else {
|
||||
for (int j = 0; j < this.pointTypes[i].length && equals; j++) {
|
||||
String thisTag = region.routeEncodingRules.get(pointTypes[i][j]).getTag();
|
||||
String thisValue = region.routeEncodingRules.get(pointTypes[i][j]).getValue();
|
||||
|
@ -147,7 +150,7 @@ public class RouteDataObject {
|
|||
equals = this.pointNameTypes[i] == thatObj.pointNameTypes[i];
|
||||
} else if (pointNameTypes[i].length != thatObj.pointNameTypes[i].length) {
|
||||
equals = false;
|
||||
} else {
|
||||
} else {
|
||||
for (int j = 0; j < this.pointNameTypes[i].length && equals; j++) {
|
||||
String thisTag = region.routeEncodingRules.get(pointNameTypes[i][j]).getTag();
|
||||
String thisValue = pointNames[i][j];
|
||||
|
@ -165,53 +168,68 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public float[] calculateHeightArray() {
|
||||
if(heightDistanceArray != null) {
|
||||
return calculateHeightArray(null);
|
||||
}
|
||||
|
||||
public float[] calculateHeightArray(LatLon currentLocation) {
|
||||
if (heightDistanceArray != null) {
|
||||
return heightDistanceArray;
|
||||
}
|
||||
int startHeight = Algorithms.parseIntSilently(getValue("osmand_ele_start"), HEIGHT_UNDEFINED);
|
||||
int endHeight = Algorithms.parseIntSilently(getValue("osmand_ele_end"), startHeight);
|
||||
if(startHeight == HEIGHT_UNDEFINED) {
|
||||
if (startHeight == HEIGHT_UNDEFINED) {
|
||||
heightDistanceArray = new float[0];
|
||||
return heightDistanceArray;
|
||||
}
|
||||
|
||||
heightDistanceArray = new float[2*getPointsLength()];
|
||||
heightDistanceArray = new float[2 * getPointsLength()];
|
||||
double plon = 0;
|
||||
double plat = 0;
|
||||
float prevHeight = startHeight;
|
||||
for(int k = 0; k < getPointsLength(); k++) {
|
||||
heightByCurrentLocation = Float.NaN;
|
||||
double prevDistance = 0;
|
||||
for (int k = 0; k < getPointsLength(); k++) {
|
||||
double lon = MapUtils.get31LongitudeX(getPoint31XTile(k));
|
||||
double lat = MapUtils.get31LatitudeY(getPoint31YTile(k));
|
||||
if(k > 0) {
|
||||
if (k > 0) {
|
||||
double dd = MapUtils.getDistance(plat, plon, lat, lon);
|
||||
float height = HEIGHT_UNDEFINED;
|
||||
if(k == getPointsLength() - 1) {
|
||||
if (k == getPointsLength() - 1) {
|
||||
height = endHeight;
|
||||
} else {
|
||||
String asc = getValue(k, "osmand_ele_asc");
|
||||
if(asc != null && asc.length() > 0) {
|
||||
if (asc != null && asc.length() > 0) {
|
||||
height = (prevHeight + Float.parseFloat(asc));
|
||||
} else {
|
||||
String desc = getValue(k, "osmand_ele_desc");
|
||||
if(desc != null && desc.length() > 0) {
|
||||
if (desc != null && desc.length() > 0) {
|
||||
height = (prevHeight - Float.parseFloat(desc));
|
||||
}
|
||||
}
|
||||
}
|
||||
heightDistanceArray[2*k] = (float) dd;
|
||||
heightDistanceArray[2*k+1] = height;
|
||||
if(height != HEIGHT_UNDEFINED) {
|
||||
heightDistanceArray[2 * k] = (float) dd;
|
||||
heightDistanceArray[2 * k + 1] = height;
|
||||
|
||||
if (currentLocation != null) {
|
||||
double distance = MapUtils.getDistance(currentLocation, lat, lon);
|
||||
if (height != HEIGHT_UNDEFINED && distance < prevDistance) {
|
||||
prevDistance = distance;
|
||||
heightByCurrentLocation = height;
|
||||
}
|
||||
}
|
||||
|
||||
if (height != HEIGHT_UNDEFINED) {
|
||||
// interpolate undefined
|
||||
double totalDistance = dd;
|
||||
int startUndefined = k;
|
||||
while(startUndefined - 1 >= 0 && heightDistanceArray[2*(startUndefined - 1)+1] == HEIGHT_UNDEFINED) {
|
||||
startUndefined --;
|
||||
totalDistance += heightDistanceArray[2*(startUndefined)];
|
||||
while (startUndefined - 1 >= 0 && heightDistanceArray[2 * (startUndefined - 1) + 1] == HEIGHT_UNDEFINED) {
|
||||
startUndefined--;
|
||||
totalDistance += heightDistanceArray[2 * (startUndefined)];
|
||||
}
|
||||
if(totalDistance > 0) {
|
||||
if (totalDistance > 0) {
|
||||
double angle = (height - prevHeight) / totalDistance;
|
||||
for(int j = startUndefined; j < k; j++) {
|
||||
heightDistanceArray[2*j+1] = (float) ((heightDistanceArray[2*j] * angle) + heightDistanceArray[2*j-1]);
|
||||
for (int j = startUndefined; j < k; j++) {
|
||||
heightDistanceArray[2 * j + 1] = (float) ((heightDistanceArray[2 * j] * angle) + heightDistanceArray[2 * j - 1]);
|
||||
}
|
||||
}
|
||||
prevHeight = height;
|
||||
|
@ -223,6 +241,9 @@ public class RouteDataObject {
|
|||
}
|
||||
plat = lat;
|
||||
plon = lon;
|
||||
if (currentLocation != null) {
|
||||
prevDistance = MapUtils.getDistance(currentLocation, plat, plon);
|
||||
}
|
||||
}
|
||||
return heightDistanceArray;
|
||||
}
|
||||
|
@ -231,34 +252,34 @@ public class RouteDataObject {
|
|||
return id;
|
||||
}
|
||||
|
||||
public String getName(){
|
||||
if(names != null ) {
|
||||
public String getName() {
|
||||
if (names != null) {
|
||||
return names.get(region.nameTypeRule);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public String getName(String lang){
|
||||
public String getName(String lang) {
|
||||
return getName(lang, false);
|
||||
}
|
||||
|
||||
public String getName(String lang, boolean transliterate){
|
||||
if(names != null ) {
|
||||
if(Algorithms.isEmpty(lang)) {
|
||||
public String getName(String lang, boolean transliterate) {
|
||||
if (names != null) {
|
||||
if (Algorithms.isEmpty(lang)) {
|
||||
return names.get(region.nameTypeRule);
|
||||
}
|
||||
int[] kt = names.keys();
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(("name:"+lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (("name:" + lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
String nmDef = names.get(region.nameTypeRule);
|
||||
if(transliterate && nmDef != null && nmDef.length() > 0) {
|
||||
if (transliterate && nmDef != null && nmDef.length() > 0) {
|
||||
return TransliterationHelper.transliterate(nmDef);
|
||||
}
|
||||
return nmDef;
|
||||
|
@ -279,20 +300,20 @@ public class RouteDataObject {
|
|||
// return getDestinationRef(direction);
|
||||
//}
|
||||
if (names != null) {
|
||||
if(Algorithms.isEmpty(lang)) {
|
||||
if (Algorithms.isEmpty(lang)) {
|
||||
return names.get(region.refTypeRule);
|
||||
}
|
||||
int[] kt = names.keys();
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(("ref:"+lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (("ref:" + lang).equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
String refDefault = names.get(region.refTypeRule);
|
||||
if(transliterate && refDefault != null && refDefault.length() > 0) {
|
||||
if (transliterate && refDefault != null && refDefault.length() > 0) {
|
||||
return TransliterationHelper.transliterate(refDefault);
|
||||
}
|
||||
return refDefault;
|
||||
|
@ -307,13 +328,13 @@ public class RouteDataObject {
|
|||
String refTagDefault = "destination:ref";
|
||||
String refDefault = null;
|
||||
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(refTag.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (refTag.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return names.get(k);
|
||||
}
|
||||
if(refTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (refTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
refDefault = names.get(k);
|
||||
}
|
||||
}
|
||||
|
@ -326,12 +347,12 @@ public class RouteDataObject {
|
|||
return null;
|
||||
}
|
||||
|
||||
public String getDestinationName(String lang, boolean transliterate, boolean direction){
|
||||
public String getDestinationName(String lang, boolean transliterate, boolean direction) {
|
||||
//Issue #3289: Treat destination:ref like a destination, not like a ref
|
||||
String destRef = ((getDestinationRef(direction) == null) || getDestinationRef(direction).equals(getRef(lang, transliterate, direction))) ? "" : getDestinationRef(direction);
|
||||
String destRef1 = Algorithms.isEmpty(destRef) ? "" : destRef + ", ";
|
||||
|
||||
if(names != null) {
|
||||
if (names != null) {
|
||||
int[] kt = names.keys();
|
||||
|
||||
// Issue #3181: Parse destination keys in this order:
|
||||
|
@ -341,35 +362,35 @@ public class RouteDataObject {
|
|||
// destination
|
||||
|
||||
String destinationTagLangFB = "destination:lang:XX";
|
||||
if(!Algorithms.isEmpty(lang)) {
|
||||
if (!Algorithms.isEmpty(lang)) {
|
||||
destinationTagLangFB = (direction == true) ? "destination:lang:" + lang + ":forward" : "destination:lang:" + lang + ":backward";
|
||||
}
|
||||
String destinationTagFB = (direction == true) ? "destination:forward" : "destination:backward";
|
||||
String destinationTagLang = "destination:lang:XX";
|
||||
if(!Algorithms.isEmpty(lang)) {
|
||||
if (!Algorithms.isEmpty(lang)) {
|
||||
destinationTagLang = "destination:lang:" + lang;
|
||||
}
|
||||
String destinationTagDefault = "destination";
|
||||
String destinationDefault = null;
|
||||
|
||||
for(int i = 0 ; i < kt.length; i++) {
|
||||
for (int i = 0; i < kt.length; i++) {
|
||||
int k = kt[i];
|
||||
if(region.routeEncodingRules.size() > k) {
|
||||
if(!Algorithms.isEmpty(lang) && destinationTagLangFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (region.routeEncodingRules.size() > k) {
|
||||
if (!Algorithms.isEmpty(lang) && destinationTagLangFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if(destinationTagFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (destinationTagFB.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if(!Algorithms.isEmpty(lang) && destinationTagLang.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (!Algorithms.isEmpty(lang) && destinationTagLang.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(names.get(k)) : names.get(k));
|
||||
}
|
||||
if(destinationTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
if (destinationTagDefault.equals(region.routeEncodingRules.get(k).getTag())) {
|
||||
destinationDefault = names.get(k);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(destinationDefault != null) {
|
||||
if (destinationDefault != null) {
|
||||
return destRef1 + ((transliterate) ? TransliterationHelper.transliterate(destinationDefault) : destinationDefault);
|
||||
}
|
||||
}
|
||||
|
@ -400,14 +421,14 @@ public class RouteDataObject {
|
|||
RestrictionInfo ri = new RestrictionInfo();
|
||||
ri.toWay = getRestrictionId(k);
|
||||
ri.type = getRestrictionType(k);
|
||||
if(restrictionsVia != null && k < restrictionsVia.length) {
|
||||
if (restrictionsVia != null && k < restrictionsVia.length) {
|
||||
ri.viaWay = restrictionsVia[k];
|
||||
}
|
||||
return ri;
|
||||
}
|
||||
|
||||
public long getRestrictionVia(int i) {
|
||||
if(restrictionsVia != null && restrictionsVia.length > i) {
|
||||
if (restrictionsVia != null && restrictionsVia.length > i) {
|
||||
return restrictionsVia[i];
|
||||
}
|
||||
return 0;
|
||||
|
@ -441,7 +462,7 @@ public class RouteDataObject {
|
|||
}
|
||||
if (insNames) {
|
||||
pointNames = new String[opointNames.length + 1][];
|
||||
pointNameTypes = new int[opointNameTypes.length +1][];
|
||||
pointNameTypes = new int[opointNameTypes.length + 1][];
|
||||
}
|
||||
int i = 0;
|
||||
for (; i < pos; i++) {
|
||||
|
@ -499,6 +520,24 @@ public class RouteDataObject {
|
|||
}
|
||||
return pointTypes[ind];
|
||||
}
|
||||
|
||||
public void removePointType(int ind, int type) {
|
||||
if (pointTypes != null || ind < pointTypes.length) {
|
||||
int[] typesArr = pointTypes[ind];
|
||||
|
||||
for (int i = 0; i < typesArr.length; i++) {
|
||||
if (typesArr[i] == type) {
|
||||
int[] result = new int[typesArr.length - 1];
|
||||
System.arraycopy(typesArr, 0, result, 0, i);
|
||||
if (typesArr.length != i) {
|
||||
System.arraycopy(typesArr, i + 1, result, i, typesArr.length - 1 - i);
|
||||
pointTypes[ind] = result;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int[] getTypes() {
|
||||
return types;
|
||||
|
@ -545,7 +584,7 @@ public class RouteDataObject {
|
|||
String nonCondTag = rtr.getTag();
|
||||
int ks;
|
||||
for (ks = 0; ks < pointTypes[i].length; ks++) {
|
||||
RouteTypeRule toReplace = region.quickGetEncodingRule(pointTypes[i][j]);
|
||||
RouteTypeRule toReplace = region.quickGetEncodingRule(pointTypes[i][ks]);
|
||||
if (toReplace != null && toReplace.getTag().contentEquals(nonCondTag)) {
|
||||
break;
|
||||
}
|
||||
|
@ -590,7 +629,7 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public static float parseSpeed(String v, float def) {
|
||||
if(v.equals("none")) {
|
||||
if (v.equals("none")) {
|
||||
return RouteDataObject.NONE_MAX_SPEED;
|
||||
} else {
|
||||
int i = Algorithms.findFirstNumberEndIndex(v);
|
||||
|
@ -614,20 +653,20 @@ public class RouteDataObject {
|
|||
f += Float.parseFloat(v.substring(0, i));
|
||||
String pref = v.substring(i, v.length()).trim();
|
||||
float add = 0;
|
||||
for(int ik = 0; ik < pref.length(); ik++) {
|
||||
if(Algorithms.isDigit(pref.charAt(ik)) || pref.charAt(ik) == '.' || pref.charAt(ik) == '-') {
|
||||
for (int ik = 0; ik < pref.length(); ik++) {
|
||||
if (Algorithms.isDigit(pref.charAt(ik)) || pref.charAt(ik) == '.' || pref.charAt(ik) == '-') {
|
||||
int first = Algorithms.findFirstNumberEndIndex(pref.substring(ik));
|
||||
if(first != -1) {
|
||||
if (first != -1) {
|
||||
add = parseLength(pref.substring(ik), 0);
|
||||
pref = pref.substring(0, ik);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(pref.contains("km")) {
|
||||
if (pref.contains("km")) {
|
||||
f *= 1000;
|
||||
}
|
||||
if(pref.contains("\"") || pref.contains("in")) {
|
||||
if (pref.contains("\"") || pref.contains("in")) {
|
||||
f *= 0.0254;
|
||||
} else if (pref.contains("\'") || pref.contains("ft") || pref.contains("feet")) {
|
||||
// foot to meters
|
||||
|
@ -673,27 +712,27 @@ public class RouteDataObject {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean roundabout(){
|
||||
public boolean roundabout() {
|
||||
int sz = types.length;
|
||||
for(int i=0; i<sz; i++) {
|
||||
for (int i = 0; i < sz; i++) {
|
||||
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
|
||||
if(r.roundabout()) {
|
||||
if (r.roundabout()) {
|
||||
return true;
|
||||
} else if(r.onewayDirection() != 0 && loop()) {
|
||||
} else if (r.onewayDirection() != 0 && loop()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean tunnel(){
|
||||
public boolean tunnel() {
|
||||
int sz = types.length;
|
||||
for(int i=0; i<sz; i++) {
|
||||
for (int i = 0; i < sz; i++) {
|
||||
RouteTypeRule r = region.quickGetEncodingRule(types[i]);
|
||||
if(r.getTag().equals("tunnel") && r.getValue().equals("yes")) {
|
||||
if (r.getTag().equals("tunnel") && r.getValue().equals("yes")) {
|
||||
return true;
|
||||
}
|
||||
if(r.getTag().equals("layer") && r.getValue().equals("-1")) {
|
||||
if (r.getTag().equals("layer") && r.getValue().equals("-1")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -882,7 +921,7 @@ public class RouteDataObject {
|
|||
|
||||
public boolean bearingVsRouteDirection(Location loc) {
|
||||
boolean direction = true;
|
||||
if(loc != null && loc.hasBearing()) {
|
||||
if (loc != null && loc.hasBearing()) {
|
||||
double diff = MapUtils.alignAngleDifference(directionRoute(0, true) - loc.getBearing() / 180f * Math.PI);
|
||||
direction = Math.abs(diff) < Math.PI / 2f;
|
||||
}
|
||||
|
@ -932,13 +971,13 @@ public class RouteDataObject {
|
|||
}
|
||||
|
||||
public double distance(int startPoint, int endPoint) {
|
||||
if(startPoint > endPoint) {
|
||||
if (startPoint > endPoint) {
|
||||
int k = endPoint;
|
||||
endPoint = startPoint;
|
||||
startPoint = k;
|
||||
}
|
||||
double d = 0;
|
||||
for(int k = startPoint; k < endPoint && k < getPointsLength() -1; k++) {
|
||||
for (int k = startPoint; k < endPoint && k < getPointsLength() - 1; k++) {
|
||||
int x = getPoint31XTile(k);
|
||||
int y = getPoint31YTile(k);
|
||||
int kx = getPoint31XTile(k + 1);
|
||||
|
@ -974,16 +1013,16 @@ public class RouteDataObject {
|
|||
// translate into meters
|
||||
total += simplifyDistance(x, y, px, py);
|
||||
} while (total < dist);
|
||||
return -Math.atan2( x - px, y - py );
|
||||
return -Math.atan2(x - px, y - py);
|
||||
}
|
||||
|
||||
private double simplifyDistance(int x, int y, int px, int py) {
|
||||
return Math.abs(px - x) * 0.011d + Math.abs(py - y) * 0.01863d;
|
||||
}
|
||||
|
||||
private static void assertTrueLength(String vl, float exp){
|
||||
private static void assertTrueLength(String vl, float exp) {
|
||||
float dest = parseLength(vl, 0);
|
||||
if(exp != dest) {
|
||||
if (exp != dest) {
|
||||
System.err.println("FAIL " + vl + " " + dest);
|
||||
} else {
|
||||
System.out.println("OK " + vl);
|
||||
|
@ -992,24 +1031,24 @@ public class RouteDataObject {
|
|||
|
||||
public static void main(String[] args) {
|
||||
assertTrueLength("10 km", 10000);
|
||||
assertTrueLength("0.01 km", 10);
|
||||
assertTrueLength("0.01 km 10 m", 20);
|
||||
assertTrueLength("10 m", 10);
|
||||
assertTrueLength("10m", 10);
|
||||
assertTrueLength("3.4 m", 3.4f);
|
||||
assertTrueLength("3.40 m", 3.4f);
|
||||
assertTrueLength("10 m 10m", 20);
|
||||
assertTrueLength("14'10\"", 4.5212f);
|
||||
assertTrueLength("14.5'", 4.4196f);
|
||||
assertTrueLength("14.5 ft", 4.4196f);
|
||||
assertTrueLength("14'0\"", 4.2672f);
|
||||
assertTrueLength("15ft", 4.572f);
|
||||
assertTrueLength("15 ft 1 in", 4.5974f);
|
||||
assertTrueLength("4.1 metres", 4.1f);
|
||||
assertTrueLength("14'0''", 4.2672f);
|
||||
assertTrueLength("14 feet", 4.2672f);
|
||||
assertTrueLength("14 mile", 22530.76f);
|
||||
assertTrueLength("14 cm", 0.14f);
|
||||
assertTrueLength("0.01 km", 10);
|
||||
assertTrueLength("0.01 km 10 m", 20);
|
||||
assertTrueLength("10 m", 10);
|
||||
assertTrueLength("10m", 10);
|
||||
assertTrueLength("3.4 m", 3.4f);
|
||||
assertTrueLength("3.40 m", 3.4f);
|
||||
assertTrueLength("10 m 10m", 20);
|
||||
assertTrueLength("14'10\"", 4.5212f);
|
||||
assertTrueLength("14.5'", 4.4196f);
|
||||
assertTrueLength("14.5 ft", 4.4196f);
|
||||
assertTrueLength("14'0\"", 4.2672f);
|
||||
assertTrueLength("15ft", 4.572f);
|
||||
assertTrueLength("15 ft 1 in", 4.5974f);
|
||||
assertTrueLength("4.1 metres", 4.1f);
|
||||
assertTrueLength("14'0''", 4.2672f);
|
||||
assertTrueLength("14 feet", 4.2672f);
|
||||
assertTrueLength("14 mile", 22530.76f);
|
||||
assertTrueLength("14 cm", 0.14f);
|
||||
|
||||
// float badValue = -1;
|
||||
// assertTrueLength("none", badValue);
|
||||
|
@ -1054,7 +1093,7 @@ public class RouteDataObject {
|
|||
public RestrictionInfo next; // optional to simulate linked list
|
||||
|
||||
public int length() {
|
||||
if(next == null) {
|
||||
if (next == null) {
|
||||
return 1;
|
||||
}
|
||||
return next.length() + 1;
|
||||
|
@ -1064,16 +1103,16 @@ public class RouteDataObject {
|
|||
public void setRestriction(int k, long to, int type, long viaWay) {
|
||||
long valto = (to << RouteDataObject.RESTRICTION_SHIFT) | ((long) type & RouteDataObject.RESTRICTION_MASK);
|
||||
restrictions[k] = valto;
|
||||
if(viaWay != 0) {
|
||||
if (viaWay != 0) {
|
||||
setRestrictionVia(k, viaWay);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRestrictionVia(int k, long viaWay) {
|
||||
if(restrictionsVia != null) {
|
||||
if (restrictionsVia != null) {
|
||||
long[] nrestrictionsVia = new long[Math.max(k + 1, restrictions.length)];
|
||||
System.arraycopy(restrictions, 0, nrestrictionsVia, 0, restrictions.length);
|
||||
restrictionsVia = nrestrictionsVia;
|
||||
restrictionsVia = nrestrictionsVia;
|
||||
} else {
|
||||
restrictionsVia = new long[k + 1];
|
||||
}
|
||||
|
|
|
@ -279,6 +279,19 @@ public class Amenity extends MapObject {
|
|||
}
|
||||
|
||||
public String getTagContent(String tag, String lang) {
|
||||
String translateName = getStrictTagContent(tag, lang);
|
||||
if (translateName != null) {
|
||||
return translateName;
|
||||
}
|
||||
for (String nm : getAdditionalInfoKeys()) {
|
||||
if (nm.startsWith(tag + ":")) {
|
||||
return getAdditionalInfo(nm);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getStrictTagContent(String tag, String lang) {
|
||||
if (lang != null) {
|
||||
String translateName = getAdditionalInfo(tag + ":" + lang);
|
||||
if (!Algorithms.isEmpty(translateName)) {
|
||||
|
@ -293,11 +306,6 @@ public class Amenity extends MapObject {
|
|||
if (!Algorithms.isEmpty(enName)) {
|
||||
return enName;
|
||||
}
|
||||
for (String nm : getAdditionalInfoKeys()) {
|
||||
if (nm.startsWith(tag + ":")) {
|
||||
return getAdditionalInfo(nm);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,13 +16,11 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
|
||||
|
@ -183,8 +181,9 @@ public abstract class MapObject implements Comparable<MapObject> {
|
|||
public String getName(String lang, boolean transliterate) {
|
||||
if (lang != null && lang.length() > 0) {
|
||||
if (lang.equals("en")) {
|
||||
// ignore transliterate option here for backward compatibility
|
||||
return getEnName(true);
|
||||
// for some objects like wikipedia, english name is stored 'name' tag
|
||||
String enName = getEnName(transliterate);
|
||||
return !Algorithms.isEmpty(enName) ? enName : getName();
|
||||
} else {
|
||||
// get name
|
||||
if (names != null) {
|
||||
|
|
|
@ -163,9 +163,7 @@ public class Multipolygon {
|
|||
* @return true if this multipolygon is correct and contains the point
|
||||
*/
|
||||
public boolean containsPoint(LatLon point) {
|
||||
|
||||
return containsPoint(point.getLatitude(), point.getLongitude());
|
||||
|
||||
}
|
||||
|
||||
public int countOuterPolygons() {
|
||||
|
|
|
@ -6,6 +6,7 @@ public class QuadRect {
|
|||
public double top;
|
||||
public double bottom;
|
||||
|
||||
// left & right / top & bottom could be flipped (so it's useful for latlon bbox)
|
||||
public QuadRect(double left, double top, double right, double bottom) {
|
||||
this.left = left;
|
||||
this.right = right;
|
||||
|
@ -21,16 +22,18 @@ public class QuadRect {
|
|||
}
|
||||
|
||||
public double width() {
|
||||
return right - left;
|
||||
return Math.abs(right - left);
|
||||
}
|
||||
|
||||
public double height() {
|
||||
return bottom - top;
|
||||
return Math.abs(bottom - top);
|
||||
}
|
||||
|
||||
public boolean contains(double left, double top, double right, double bottom) {
|
||||
return this.left < this.right && this.top < this.bottom && this.left <= left && this.top <= top && this.right >= right
|
||||
&& this.bottom >= bottom;
|
||||
return Math.min(this.left, this.right) <= Math.min(left, right)
|
||||
&& Math.max(this.left, this.right) >= Math.max(left, right)
|
||||
&& Math.min(this.top, this.bottom) <= Math.min(top, bottom)
|
||||
&& Math.max(this.top, this.bottom) >= Math.max(top, bottom);
|
||||
}
|
||||
|
||||
public boolean contains(QuadRect box) {
|
||||
|
@ -38,12 +41,15 @@ public class QuadRect {
|
|||
}
|
||||
|
||||
public static boolean intersects(QuadRect a, QuadRect b) {
|
||||
return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom;
|
||||
}
|
||||
|
||||
public static boolean trivialOverlap(QuadRect a, QuadRect b) {
|
||||
return !((a.right < b.left) || (a.left > b.right) || (a.top < b.bottom) || (a.bottom > b.top));
|
||||
return Math.min(a.left, a.right) <= Math.max(b.left, b.right)
|
||||
&& Math.max(a.left, a.right) >= Math.min(b.left, b.right)
|
||||
&& Math.min(a.bottom, a.top) <= Math.max(b.bottom, b.top)
|
||||
&& Math.max(a.bottom, a.top) >= Math.min(b.bottom, b.top);
|
||||
}
|
||||
|
||||
public static boolean trivialOverlap(QuadRect a, QuadRect b) {
|
||||
return intersects(a, b);
|
||||
}
|
||||
|
||||
public double centerX() {
|
||||
return (left + right) / 2;
|
||||
|
|
|
@ -103,18 +103,16 @@ public class QuadTree<T> {
|
|||
void splitBox(QuadRect node_extent, QuadRect[] n) {
|
||||
// coord2d c=node_extent.center();
|
||||
|
||||
double width = node_extent.width();
|
||||
double height = node_extent.height();
|
||||
|
||||
double lox = node_extent.left;
|
||||
double loy = node_extent.top;
|
||||
double hix = node_extent.right;
|
||||
double hiy = node_extent.bottom;
|
||||
double lx = node_extent.left;
|
||||
double ly = node_extent.top;
|
||||
double hx = node_extent.right;
|
||||
double hy = node_extent.bottom;
|
||||
|
||||
n[0] = new QuadRect(lox, loy, lox + width * ratio, loy + height * ratio);
|
||||
n[1] = new QuadRect(hix - width * ratio, loy, hix, loy + height * ratio);
|
||||
n[2] = new QuadRect(lox, hiy - height * ratio, lox + width * ratio, hiy);
|
||||
n[3] = new QuadRect(hix - width * ratio, hiy - height * ratio, hix, hiy);
|
||||
n[0] = new QuadRect(lx, ly, lx + (hx - lx) * ratio, ly + (hy - ly) * ratio);
|
||||
n[1] = new QuadRect(lx + (hx - lx) * (1 - ratio), ly, hx, ly + (hy - ly) * ratio);
|
||||
n[2] = new QuadRect(lx, ly + (hy - ly) * (1 - ratio), lx + (hx - lx) * ratio, hy);
|
||||
n[3] = new QuadRect(lx + (hx - lx) * (1 - ratio), ly + (hy - ly) * (1 - ratio), hx, hy);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -436,7 +436,7 @@ public class OsmandRegions {
|
|||
cx /= object.getPointsLength();
|
||||
cy /= object.getPointsLength();
|
||||
rd.regionCenter = new LatLon(MapUtils.get31LatitudeY((int) cy), MapUtils.get31LongitudeX((int) cx));
|
||||
rd.boundingBox = findBoundingBox(object);
|
||||
findBoundaries(rd, object);
|
||||
}
|
||||
|
||||
rd.regionParentFullName = mapIndexFields.get(mapIndexFields.parentFullName, object);
|
||||
|
@ -462,13 +462,15 @@ public class OsmandRegions {
|
|||
return rd;
|
||||
}
|
||||
|
||||
private QuadRect findBoundingBox(BinaryMapDataObject object) {
|
||||
private void findBoundaries(WorldRegion rd, BinaryMapDataObject object) {
|
||||
if (object.getPointsLength() == 0) {
|
||||
return new QuadRect(0, 0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
List<LatLon> polygon = new ArrayList<>();
|
||||
double currentX = object.getPoint31XTile(0);
|
||||
double currentY = object.getPoint31YTile(0);
|
||||
polygon.add(new LatLon(currentX, currentY));
|
||||
double minX = currentX;
|
||||
double maxX = currentX;
|
||||
double minY = currentY;
|
||||
|
@ -488,6 +490,7 @@ public class OsmandRegions {
|
|||
} else if (currentY < minY) {
|
||||
minY = currentY;
|
||||
}
|
||||
polygon.add(new LatLon(currentX, currentY));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -496,7 +499,8 @@ public class OsmandRegions {
|
|||
double revertedMinY = MapUtils.get31LatitudeY((int) maxY);
|
||||
double revertedMaxY = MapUtils.get31LatitudeY((int) minY);
|
||||
|
||||
return new QuadRect(minX, revertedMinY, maxX, revertedMaxY);
|
||||
rd.boundingBox = new QuadRect(minX, revertedMinY, maxX, revertedMaxY);
|
||||
rd.polygon = polygon;
|
||||
}
|
||||
|
||||
private String getSearchIndex(BinaryMapDataObject object) {
|
||||
|
|
|
@ -5,8 +5,11 @@ import net.osmand.data.QuadRect;
|
|||
import net.osmand.util.Algorithms;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class WorldRegion implements Serializable {
|
||||
|
||||
|
@ -42,6 +45,7 @@ public class WorldRegion implements Serializable {
|
|||
protected boolean regionMapDownload;
|
||||
protected LatLon regionCenter;
|
||||
protected QuadRect boundingBox;
|
||||
protected List<LatLon> polygon;
|
||||
|
||||
public static class RegionParams {
|
||||
protected String regionLeftHandDriving;
|
||||
|
@ -186,12 +190,23 @@ public class WorldRegion implements Serializable {
|
|||
}
|
||||
|
||||
public boolean containsRegion(WorldRegion region) {
|
||||
if (this.boundingBox != null && region.boundingBox != null) {
|
||||
return this.boundingBox.contains(region.boundingBox);
|
||||
if (containsBoundingBox(region.boundingBox)) {
|
||||
// check polygon only if bounding box match
|
||||
return containsPolygon(region.polygon);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean containsBoundingBox(QuadRect rectangle) {
|
||||
return (boundingBox != null && rectangle != null) &&
|
||||
boundingBox.contains(rectangle);
|
||||
}
|
||||
|
||||
private boolean containsPolygon(List<LatLon> another) {
|
||||
return (polygon != null && another != null) &&
|
||||
Algorithms.isFirstPolygonInsideSecond(another, polygon);
|
||||
}
|
||||
|
||||
public boolean isContinent() {
|
||||
if (superregion != null) {
|
||||
String superRegionId = superregion.getRegionId();
|
||||
|
@ -200,4 +215,22 @@ public class WorldRegion implements Serializable {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static List<WorldRegion> removeDuplicates(List<WorldRegion> regions) {
|
||||
List<WorldRegion> copy = new ArrayList<>(regions);
|
||||
Set<WorldRegion> duplicates = new HashSet<>();
|
||||
for (int i = 0; i < copy.size() - 1; i++) {
|
||||
WorldRegion r1 = copy.get(i);
|
||||
for (int j = i + 1; j < copy.size(); j++) {
|
||||
WorldRegion r2 = copy.get(j);
|
||||
if (r1.containsRegion(r2)) {
|
||||
duplicates.add(r2);
|
||||
} else if (r2.containsRegion(r1)) {
|
||||
duplicates.add(r1);
|
||||
}
|
||||
}
|
||||
}
|
||||
copy.removeAll(duplicates);
|
||||
return copy;
|
||||
}
|
||||
}
|
|
@ -658,6 +658,8 @@ public class MapPoiTypes {
|
|||
tp.setOsmValue(parser.getAttributeValue("", "value"));
|
||||
tp.setOsmEditTagValue(parser.getAttributeValue("", "edit_tag"),
|
||||
parser.getAttributeValue("", "edit_value"));
|
||||
tp.setOsmEditTagValue2(parser.getAttributeValue("", "edit_tag2"),
|
||||
parser.getAttributeValue("", "edit_value2"));
|
||||
|
||||
tp.setOsmTag2(parser.getAttributeValue("", "tag2"));
|
||||
tp.setOsmValue2(parser.getAttributeValue("", "value2"));
|
||||
|
|
|
@ -16,9 +16,10 @@ public class PoiType extends AbstractPoiType {
|
|||
|
||||
private String editTag;
|
||||
private String editValue;
|
||||
private String editTag2;
|
||||
private String editValue2;
|
||||
private boolean filterOnly;
|
||||
|
||||
|
||||
private String nameTag;
|
||||
private boolean text;
|
||||
private boolean nameOnly;
|
||||
|
@ -68,27 +69,46 @@ public class PoiType extends AbstractPoiType {
|
|||
this.editTag = osmTag;
|
||||
this.editValue = editValue;
|
||||
}
|
||||
|
||||
|
||||
public void setOsmEditTagValue2(String osmTag, String editValue) {
|
||||
this.editTag2 = osmTag;
|
||||
this.editValue2 = editValue;
|
||||
}
|
||||
|
||||
public String getEditOsmTag() {
|
||||
if(isReference()) {
|
||||
if (isReference()) {
|
||||
return referenceType.getEditOsmTag();
|
||||
}
|
||||
if(editTag == null) {
|
||||
if (editTag == null) {
|
||||
return getOsmTag();
|
||||
}
|
||||
return editTag;
|
||||
}
|
||||
|
||||
public String getEditOsmValue() {
|
||||
if(isReference()) {
|
||||
if (isReference()) {
|
||||
return referenceType.getEditOsmValue();
|
||||
}
|
||||
if(editValue == null) {
|
||||
if (editValue == null) {
|
||||
return getOsmValue();
|
||||
}
|
||||
return editValue;
|
||||
}
|
||||
|
||||
public String getEditOsmTag2() {
|
||||
if (isReference()) {
|
||||
return referenceType.getEditOsmTag2();
|
||||
}
|
||||
return editTag2;
|
||||
}
|
||||
|
||||
public String getEditOsmValue2() {
|
||||
if (isReference()) {
|
||||
return referenceType.getEditOsmValue2();
|
||||
}
|
||||
return editValue2;
|
||||
}
|
||||
|
||||
public void setOsmTag(String osmTag) {
|
||||
this.osmTag = osmTag;
|
||||
}
|
||||
|
|
|
@ -153,35 +153,34 @@ public class OsmMapUtils {
|
|||
}
|
||||
boolean area = w.getFirstNodeId() == w.getLastNodeId();
|
||||
// double check for area (could be negative all)
|
||||
if(area) {
|
||||
if (area) {
|
||||
Node fn = w.getFirstNode();
|
||||
Node ln = w.getLastNode();
|
||||
if(fn != null && fn != null && MapUtils.getDistance(fn.getLatLon(), ln.getLatLon()) < 50) {
|
||||
if (fn != null && fn != null && MapUtils.getDistance(fn.getLatLon(), ln.getLatLon()) < 50) {
|
||||
area = true;
|
||||
} else {
|
||||
area = false;
|
||||
}
|
||||
}
|
||||
LatLon ll = area ? getComplexPolyCenter(nodes, null) : getWeightCenterForNodes(nodes);
|
||||
if(ll == null) {
|
||||
if (ll == null) {
|
||||
return null;
|
||||
}
|
||||
double flat = ll.getLatitude();
|
||||
double flon = ll.getLongitude();
|
||||
if(!area || !MapAlgorithms.containsPoint(nodes, ll.getLatitude(), ll.getLongitude())) {
|
||||
if (!area || !MapAlgorithms.containsPoint(nodes, ll.getLatitude(), ll.getLongitude())) {
|
||||
double minDistance = Double.MAX_VALUE;
|
||||
for (Node n : nodes) {
|
||||
if (n != null) {
|
||||
double d = MapUtils.getDistance(n.getLatitude(), n.getLongitude(), ll.getLatitude(), ll.getLongitude());
|
||||
if(d < minDistance) {
|
||||
if (d < minDistance) {
|
||||
flat = n.getLatitude();
|
||||
flon = n.getLongitude();
|
||||
minDistance = d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return new LatLon(flat, flon);
|
||||
|
||||
}
|
||||
|
@ -341,6 +340,30 @@ public class OsmMapUtils {
|
|||
}
|
||||
}
|
||||
|
||||
public static void simplifyDouglasPeucker(List<Node> nodes, int start, int end, List<Node> survivedNodes, double epsilon) {
|
||||
double dmax = Double.NEGATIVE_INFINITY;
|
||||
int index = -1;
|
||||
|
||||
Node startPt = nodes.get(start);
|
||||
Node endPt = nodes.get(end);
|
||||
|
||||
for (int i = start + 1; i < end; i++) {
|
||||
Node pt = nodes.get(i);
|
||||
double d = MapUtils.getOrthogonalDistance(pt.getLatitude(), pt.getLongitude(),
|
||||
startPt.getLatitude(), startPt.getLongitude(), endPt.getLatitude(), endPt.getLongitude());
|
||||
if (d > dmax) {
|
||||
dmax = d;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (dmax > epsilon) {
|
||||
simplifyDouglasPeucker(nodes, start, index, survivedNodes, epsilon);
|
||||
simplifyDouglasPeucker(nodes, index, end, survivedNodes, epsilon);
|
||||
} else {
|
||||
survivedNodes.add(nodes.get(end));
|
||||
}
|
||||
}
|
||||
|
||||
private static double orthogonalDistance(int zoom, Node nodeLineStart, Node nodeLineEnd, Node node) {
|
||||
LatLon p = MapUtils.getProjection(node.getLatitude(), node.getLongitude(), nodeLineStart.getLatitude(),
|
||||
nodeLineStart.getLongitude(), nodeLineEnd.getLatitude(), nodeLineEnd.getLongitude());
|
||||
|
|
|
@ -183,7 +183,7 @@ public class OsmBaseStorage {
|
|||
protected static final int moduleProgress = 1 << 10;
|
||||
|
||||
public void startElement(XmlPullParser parser, String name) {
|
||||
if(!parseStarted){
|
||||
if (!parseStarted) {
|
||||
initRootElement(parser, name);
|
||||
}
|
||||
if (ELEM_MODIFY.equals(name) ) {
|
||||
|
@ -283,13 +283,14 @@ public class OsmBaseStorage {
|
|||
if (type != null) {
|
||||
if(currentParsedEntity != null){
|
||||
EntityId entityId = new EntityId(type, currentParsedEntity.getId());
|
||||
if(acceptEntityToLoad(entityId, currentParsedEntity)){
|
||||
if (acceptEntityToLoad(entityId, currentParsedEntity)) {
|
||||
Entity oldEntity = entities.put(entityId, currentParsedEntity);
|
||||
if(parseEntityInfo && currentParsedEntityInfo != null){
|
||||
if (parseEntityInfo && currentParsedEntityInfo != null) {
|
||||
entityInfo.put(entityId, currentParsedEntityInfo);
|
||||
}
|
||||
if(!supressWarnings && oldEntity!= null){
|
||||
throw new UnsupportedOperationException("Entity with id=" + oldEntity.getId() +" is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
if (!supressWarnings && oldEntity != null) {
|
||||
throw new UnsupportedOperationException(
|
||||
"Entity with id=" + oldEntity.getId() + " is duplicated in osm map"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
}
|
||||
} else {
|
||||
// System.gc();
|
||||
|
@ -308,8 +309,8 @@ public class OsmBaseStorage {
|
|||
|
||||
|
||||
protected boolean acceptEntityToLoad(EntityId entityId, Entity entity) {
|
||||
for(IOsmStorageFilter f : filters){
|
||||
if(!f.acceptEntityToLoad(this, entityId, entity)){
|
||||
for (IOsmStorageFilter f : filters) {
|
||||
if (!f.acceptEntityToLoad(this, entityId, entity)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -620,9 +620,7 @@ public class GeneralRouter implements VehicleRouter {
|
|||
public double calculateTurnTime(RouteSegment segment, int segmentEnd, RouteSegment prev, int prevSegmentEnd) {
|
||||
float ts = getPenaltyTransition(segment.getRoad());
|
||||
float prevTs = getPenaltyTransition(prev.getRoad());
|
||||
|
||||
float totalPenalty = 0;
|
||||
|
||||
if (prevTs != ts) {
|
||||
totalPenalty += Math.abs(ts - prevTs) / 2;
|
||||
}
|
||||
|
@ -638,7 +636,9 @@ public class GeneralRouter implements VehicleRouter {
|
|||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
if (shortestRoute) {
|
||||
return totalPenalty;
|
||||
}
|
||||
if(segment.getRoad().roundabout() && !prev.getRoad().roundabout()) {
|
||||
double rt = getRoundaboutTurn();
|
||||
if(rt > 0) {
|
||||
|
|
501
OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java
Normal file
501
OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java
Normal file
|
@ -0,0 +1,501 @@
|
|||
package net.osmand.router;
|
||||
|
||||
import net.osmand.GPXUtilities.GPXFile;
|
||||
import net.osmand.GPXUtilities.GPXTrackAnalysis;
|
||||
import net.osmand.GPXUtilities.Track;
|
||||
import net.osmand.GPXUtilities.TrkSegment;
|
||||
import net.osmand.GPXUtilities.WptPt;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.osm.edit.Node;
|
||||
import net.osmand.osm.edit.OsmMapUtils;
|
||||
import net.osmand.util.Algorithms;
|
||||
import net.osmand.util.MapUtils;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RouteColorize {
|
||||
|
||||
public int zoom;
|
||||
public double[] latitudes;
|
||||
public double[] longitudes;
|
||||
public double[] values;
|
||||
public double minValue;
|
||||
public double maxValue;
|
||||
public double[][] palette;
|
||||
|
||||
private List<RouteColorizationPoint> dataList;
|
||||
|
||||
public static final int DARK_GREY = rgbaToDecimal(92, 92, 92, 255);
|
||||
public static final int LIGHT_GREY = rgbaToDecimal(200, 200, 200, 255);
|
||||
public static final int GREEN = rgbaToDecimal(90, 220, 95, 255);
|
||||
public static final int YELLOW = rgbaToDecimal(212, 239, 50, 255);
|
||||
public static final int RED = rgbaToDecimal(243, 55, 77, 255);
|
||||
public static final int[] colors = new int[] {GREEN, YELLOW, RED};
|
||||
|
||||
private static final float DEFAULT_BASE = 17.2f;
|
||||
private static final int MAX_SLOPE_VALUE = 25;
|
||||
|
||||
public enum ColorizationType {
|
||||
ELEVATION,
|
||||
SPEED,
|
||||
SLOPE,
|
||||
NONE
|
||||
}
|
||||
|
||||
private final int VALUE_INDEX = 0;
|
||||
private final int DECIMAL_COLOR_INDEX = 1;//sRGB decimal format
|
||||
private final int RED_COLOR_INDEX = 1;//RGB
|
||||
private final int GREEN_COLOR_INDEX = 2;//RGB
|
||||
private final int BLUE_COLOR_INDEX = 3;//RGB
|
||||
private final int ALPHA_COLOR_INDEX = 4;//RGBA
|
||||
|
||||
private ColorizationType colorizationType;
|
||||
|
||||
public static int SLOPE_RANGE = 150;//150 meters
|
||||
private static final double MIN_DIFFERENCE_SLOPE = 0.05d;//5%
|
||||
|
||||
private static final Log LOG = PlatformUtil.getLog(RouteColorize.class);
|
||||
|
||||
/**
|
||||
* @param minValue can be NaN
|
||||
* @param maxValue can be NaN
|
||||
* @param palette array {{value,color},...} - color in sRGB (decimal) format OR {{value,RED,GREEN,BLUE,ALPHA},...} - color in RGBA format
|
||||
*/
|
||||
public RouteColorize(int zoom, double[] latitudes, double[] longitudes, double[] values, double minValue, double maxValue, double[][] palette) {
|
||||
this.zoom = zoom;
|
||||
this.latitudes = latitudes;
|
||||
this.longitudes = longitudes;
|
||||
this.values = values;
|
||||
this.minValue = minValue;
|
||||
this.maxValue = maxValue;
|
||||
this.palette = palette;
|
||||
|
||||
if (Double.isNaN(minValue) || Double.isNaN(maxValue)) {
|
||||
calculateMinMaxValue();
|
||||
}
|
||||
checkPalette();
|
||||
sortPalette();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type ELEVATION, SPEED, SLOPE
|
||||
*/
|
||||
public RouteColorize(int zoom, GPXFile gpxFile, ColorizationType type) {
|
||||
this(zoom, gpxFile, null, type, 0);
|
||||
}
|
||||
|
||||
public RouteColorize(int zoom, GPXFile gpxFile, GPXTrackAnalysis analysis, ColorizationType type, float maxProfileSpeed) {
|
||||
|
||||
if (!gpxFile.hasTrkPt()) {
|
||||
LOG.warn("GPX file is not consist of track points");
|
||||
return;
|
||||
}
|
||||
|
||||
List<Double> latList = new ArrayList<>();
|
||||
List<Double> lonList = new ArrayList<>();
|
||||
List<Double> valList = new ArrayList<>();
|
||||
int wptIdx = 0;
|
||||
|
||||
if (analysis == null) {
|
||||
analysis = Algorithms.isEmpty(gpxFile.path)
|
||||
? gpxFile.getAnalysis(System.currentTimeMillis())
|
||||
: gpxFile.getAnalysis(gpxFile.modifiedTime);
|
||||
}
|
||||
for (Track t : gpxFile.tracks) {
|
||||
for (TrkSegment ts : t.segments) {
|
||||
if (ts.generalSegment || ts.points.size() < 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (WptPt p : ts.points) {
|
||||
latList.add(p.lat);
|
||||
lonList.add(p.lon);
|
||||
if (type == ColorizationType.SPEED) {
|
||||
valList.add((double) analysis.speedData.get(wptIdx).speed);
|
||||
} else {
|
||||
valList.add((double) analysis.elevationData.get(wptIdx).elevation);
|
||||
}
|
||||
wptIdx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.zoom = zoom;
|
||||
colorizationType = type;
|
||||
latitudes = listToArray(latList);
|
||||
longitudes = listToArray(lonList);
|
||||
|
||||
if (type == ColorizationType.SLOPE) {
|
||||
values = calculateSlopesByElevations(latitudes, longitudes, listToArray(valList), SLOPE_RANGE);
|
||||
} else {
|
||||
values = listToArray(valList);
|
||||
}
|
||||
calculateMinMaxValue();
|
||||
maxValue = getMaxValue(colorizationType, analysis, minValue, maxProfileSpeed);
|
||||
checkPalette();
|
||||
sortPalette();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate slopes from elevations needs for right colorizing
|
||||
*
|
||||
* @param slopeRange - in what range calculate the derivative, usually we used 150 meters
|
||||
* @return slopes array, in the begin and the end present NaN values!
|
||||
*/
|
||||
public double[] calculateSlopesByElevations(double[] latitudes, double[] longitudes, double[] elevations, double slopeRange) {
|
||||
|
||||
double[] newElevations = elevations;
|
||||
for (int i = 2; i < elevations.length - 2; i++) {
|
||||
newElevations[i] = elevations[i - 2]
|
||||
+ elevations[i - 1]
|
||||
+ elevations[i]
|
||||
+ elevations[i + 1]
|
||||
+ elevations[i + 2];
|
||||
newElevations[i] /= 5;
|
||||
}
|
||||
elevations = newElevations;
|
||||
|
||||
double[] slopes = new double[elevations.length];
|
||||
if (latitudes.length != longitudes.length || latitudes.length != elevations.length) {
|
||||
LOG.warn("Sizes of arrays latitudes, longitudes and values are not match");
|
||||
return slopes;
|
||||
}
|
||||
|
||||
double[] distances = new double[elevations.length];
|
||||
double totalDistance = 0.0d;
|
||||
distances[0] = totalDistance;
|
||||
for (int i = 0; i < elevations.length - 1; i++) {
|
||||
totalDistance += MapUtils.getDistance(latitudes[i], longitudes[i], latitudes[i + 1], longitudes[i + 1]);
|
||||
distances[i + 1] = totalDistance;
|
||||
}
|
||||
|
||||
for (int i = 0; i < elevations.length; i++) {
|
||||
if (distances[i] < slopeRange / 2 || distances[i] > totalDistance - slopeRange / 2) {
|
||||
slopes[i] = Double.NaN;
|
||||
} else {
|
||||
double[] arg = findDerivativeArguments(distances, elevations, i, slopeRange);
|
||||
slopes[i] = (arg[1] - arg[0]) / (arg[3] - arg[2]);
|
||||
}
|
||||
}
|
||||
return slopes;
|
||||
}
|
||||
|
||||
public List<RouteColorizationPoint> getResult(boolean simplify) {
|
||||
List<RouteColorizationPoint> result = new ArrayList<>();
|
||||
if (simplify) {
|
||||
result = simplify(zoom);
|
||||
} else {
|
||||
for (int i = 0; i < latitudes.length; i++) {
|
||||
result.add(new RouteColorizationPoint(i, latitudes[i], longitudes[i], values[i]));
|
||||
}
|
||||
}
|
||||
for (RouteColorizationPoint data : result) {
|
||||
data.color = getColorByValue(data.val);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int getColorByValue(double value) {
|
||||
if (Double.isNaN(value)) {
|
||||
value = colorizationType == ColorizationType.SLOPE ? minValue : (minValue + maxValue) / 2;
|
||||
}
|
||||
for (int i = 0; i < palette.length - 1; i++) {
|
||||
if (value == palette[i][VALUE_INDEX])
|
||||
return (int) palette[i][DECIMAL_COLOR_INDEX];
|
||||
if (value >= palette[i][VALUE_INDEX] && value <= palette[i + 1][VALUE_INDEX]) {
|
||||
int minPaletteColor = (int) palette[i][DECIMAL_COLOR_INDEX];
|
||||
int maxPaletteColor = (int) palette[i + 1][DECIMAL_COLOR_INDEX];
|
||||
double minPaletteValue = palette[i][VALUE_INDEX];
|
||||
double maxPaletteValue = palette[i + 1][VALUE_INDEX];
|
||||
double percent = (value - minPaletteValue) / (maxPaletteValue - minPaletteValue);
|
||||
double resultRed = getRed(minPaletteColor) + percent * (getRed(maxPaletteColor) - getRed(minPaletteColor));
|
||||
double resultGreen = getGreen(minPaletteColor) + percent * (getGreen(maxPaletteColor) - getGreen(minPaletteColor));
|
||||
double resultBlue = getBlue(minPaletteColor) + percent * (getBlue(maxPaletteColor) - getBlue(minPaletteColor));
|
||||
double resultAlpha = getAlpha(minPaletteColor) + percent * (getAlpha(maxPaletteColor) - getAlpha(minPaletteColor));
|
||||
return rgbaToDecimal((int) resultRed, (int) resultGreen, (int) resultBlue, (int) resultAlpha);
|
||||
}
|
||||
}
|
||||
return getTransparentColor();
|
||||
}
|
||||
|
||||
public void setPalette(double[][] palette) {
|
||||
this.palette = palette;
|
||||
checkPalette();
|
||||
sortPalette();
|
||||
}
|
||||
|
||||
public void setPalette(int[] gradientPalette) {
|
||||
if (gradientPalette == null || gradientPalette.length != 3) {
|
||||
return;
|
||||
}
|
||||
setPalette(new double[][] {
|
||||
{minValue, gradientPalette[0]},
|
||||
{(minValue + maxValue) / 2, gradientPalette[1]},
|
||||
{maxValue, gradientPalette[2]}
|
||||
});
|
||||
}
|
||||
|
||||
private int getTransparentColor() {
|
||||
return rgbaToDecimal(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
public List<RouteColorizationPoint> simplify(int zoom) {
|
||||
if (dataList == null) {
|
||||
dataList = new ArrayList<>();
|
||||
for (int i = 0; i < latitudes.length; i++) {
|
||||
dataList.add(new RouteColorizationPoint(i, latitudes[i], longitudes[i], values[i]));
|
||||
}
|
||||
}
|
||||
List<Node> nodes = new ArrayList<>();
|
||||
List<Node> result = new ArrayList<>();
|
||||
for (RouteColorizationPoint data : dataList) {
|
||||
nodes.add(new net.osmand.osm.edit.Node(data.lat, data.lon, data.id));
|
||||
}
|
||||
|
||||
double epsilon = Math.pow(2.0, DEFAULT_BASE - zoom);
|
||||
result.add(nodes.get(0));
|
||||
OsmMapUtils.simplifyDouglasPeucker(nodes, 0, nodes.size() - 1, result, epsilon);
|
||||
|
||||
List<RouteColorizationPoint> simplified = new ArrayList<>();
|
||||
for (int i = 1; i < result.size(); i++) {
|
||||
int prevId = (int) result.get(i - 1).getId();
|
||||
int currentId = (int) result.get(i).getId();
|
||||
List<RouteColorizationPoint> sublist = dataList.subList(prevId, currentId);
|
||||
simplified.addAll(getExtremums(sublist));
|
||||
}
|
||||
Node lastSurvivedPoint = result.get(result.size() - 1);
|
||||
simplified.add(dataList.get((int) lastSurvivedPoint.getId()));
|
||||
return simplified;
|
||||
}
|
||||
|
||||
private List<RouteColorizationPoint> getExtremums(List<RouteColorizationPoint> subDataList) {
|
||||
if (subDataList.size() <= 2) {
|
||||
return subDataList;
|
||||
}
|
||||
|
||||
List<RouteColorizationPoint> result = new ArrayList<>();
|
||||
double min;
|
||||
double max;
|
||||
min = max = subDataList.get(0).val;
|
||||
for (RouteColorizationPoint pt : subDataList) {
|
||||
if (min > pt.val) {
|
||||
min = pt.val;
|
||||
}
|
||||
if (max < pt.val) {
|
||||
max = pt.val;
|
||||
}
|
||||
}
|
||||
|
||||
double diff = max - min;
|
||||
|
||||
result.add(subDataList.get(0));
|
||||
for (int i = 1; i < subDataList.size() - 1; i++) {
|
||||
double prev = subDataList.get(i - 1).val;
|
||||
double current = subDataList.get(i).val;
|
||||
double next = subDataList.get(i + 1).val;
|
||||
RouteColorizationPoint currentData = subDataList.get(i);
|
||||
|
||||
if ((current > prev && current > next) || (current < prev && current < next)
|
||||
|| (current < prev && current == next) || (current == prev && current < next)
|
||||
|| (current > prev && current == next) || (current == prev && current > next)) {
|
||||
RouteColorizationPoint prevInResult;
|
||||
if (result.size() > 0) {
|
||||
prevInResult = result.get(0);
|
||||
if (prevInResult.val / diff > MIN_DIFFERENCE_SLOPE) {
|
||||
result.add(currentData);
|
||||
}
|
||||
} else
|
||||
result.add(currentData);
|
||||
}
|
||||
}
|
||||
result.add(subDataList.get(subDataList.size() - 1));
|
||||
return result;
|
||||
}
|
||||
|
||||
private void checkPalette() {
|
||||
if (palette == null || palette.length < 2 || palette[0].length < 2 || palette[1].length < 2) {
|
||||
LOG.info("Will use default palette");
|
||||
palette = new double[3][2];
|
||||
|
||||
double[][] defaultPalette = {
|
||||
{minValue, GREEN},
|
||||
{(minValue + maxValue) / 2, YELLOW},
|
||||
{maxValue, RED}
|
||||
};
|
||||
palette = defaultPalette;
|
||||
}
|
||||
double min;
|
||||
double max = min = palette[0][VALUE_INDEX];
|
||||
int minIndex = 0;
|
||||
int maxIndex = 0;
|
||||
double[][] sRGBPalette = new double[palette.length][2];
|
||||
for (int i = 0; i < palette.length; i++) {
|
||||
double[] p = palette[i];
|
||||
if (p.length == 2) {
|
||||
sRGBPalette[i] = p;
|
||||
} else if (p.length == 4) {
|
||||
int color = rgbaToDecimal((int) p[RED_COLOR_INDEX], (int) p[GREEN_COLOR_INDEX], (int) p[BLUE_COLOR_INDEX], 255);
|
||||
sRGBPalette[i] = new double[]{p[VALUE_INDEX], color};
|
||||
} else if (p.length >= 5) {
|
||||
int color = rgbaToDecimal((int) p[RED_COLOR_INDEX], (int) p[GREEN_COLOR_INDEX], (int) p[BLUE_COLOR_INDEX], (int) p[ALPHA_COLOR_INDEX]);
|
||||
sRGBPalette[i] = new double[]{p[VALUE_INDEX], color};
|
||||
}
|
||||
if (p[VALUE_INDEX] > max) {
|
||||
max = p[VALUE_INDEX];
|
||||
maxIndex = i;
|
||||
}
|
||||
if (p[VALUE_INDEX] < min) {
|
||||
min = p[VALUE_INDEX];
|
||||
minIndex = i;
|
||||
}
|
||||
}
|
||||
palette = sRGBPalette;
|
||||
if (minValue < min) {
|
||||
palette[minIndex][VALUE_INDEX] = minValue;
|
||||
}
|
||||
if (maxValue > max) {
|
||||
palette[maxIndex][VALUE_INDEX] = maxValue;
|
||||
}
|
||||
}
|
||||
|
||||
private void sortPalette() {
|
||||
java.util.Arrays.sort(palette, new java.util.Comparator<double[]>() {
|
||||
public int compare(double[] a, double[] b) {
|
||||
return Double.compare(a[VALUE_INDEX], b[VALUE_INDEX]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return double[minElevation, maxElevation, minDist, maxDist]
|
||||
*/
|
||||
private double[] findDerivativeArguments(double[] distances, double[] elevations, int index, double slopeRange) {
|
||||
double[] result = new double[4];
|
||||
double minDist = distances[index] - slopeRange / 2;
|
||||
double maxDist = distances[index] + slopeRange / 2;
|
||||
result[0] = Double.NaN;
|
||||
result[1] = Double.NaN;
|
||||
result[2] = minDist;
|
||||
result[3] = maxDist;
|
||||
int closestMaxIndex = -1;
|
||||
int closestMinIndex = -1;
|
||||
for (int i = index; i < distances.length; i++) {
|
||||
if (distances[i] == maxDist) {
|
||||
result[1] = elevations[i];
|
||||
break;
|
||||
}
|
||||
if (distances[i] > maxDist) {
|
||||
closestMaxIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = index; i >= 0; i--) {
|
||||
if (distances[i] == minDist) {
|
||||
result[0] = elevations[i];
|
||||
break;
|
||||
}
|
||||
if (distances[i] < minDist) {
|
||||
closestMinIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (closestMaxIndex > 0) {
|
||||
double diff = distances[closestMaxIndex] - distances[closestMaxIndex - 1];
|
||||
double coef = (maxDist - distances[closestMaxIndex - 1]) / diff;
|
||||
if (coef > 1 || coef < 0) {
|
||||
LOG.warn("Coefficient fo max must be 0..1 , coef=" + coef);
|
||||
}
|
||||
result[1] = (1 - coef) * elevations[closestMaxIndex - 1] + coef * elevations[closestMaxIndex];
|
||||
}
|
||||
if (closestMinIndex >= 0) {
|
||||
double diff = distances[closestMinIndex + 1] - distances[closestMinIndex];
|
||||
double coef = (minDist - distances[closestMinIndex]) / diff;
|
||||
if (coef > 1 || coef < 0) {
|
||||
LOG.warn("Coefficient for min must be 0..1 , coef=" + coef);
|
||||
}
|
||||
result[0] = (1 - coef) * elevations[closestMinIndex] + coef * elevations[closestMinIndex + 1];
|
||||
}
|
||||
if (Double.isNaN(result[0]) || Double.isNaN(result[1])) {
|
||||
LOG.warn("Elevations wasn't calculated");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static double getMinValue(ColorizationType type, GPXTrackAnalysis analysis) {
|
||||
return type == ColorizationType.ELEVATION ? analysis.minElevation : 0.0;
|
||||
}
|
||||
|
||||
public static double getMaxValue(ColorizationType type, GPXTrackAnalysis analysis, double minValue, double maxProfileSpeed) {
|
||||
if (type == ColorizationType.SPEED) {
|
||||
return Math.max(analysis.maxSpeed, maxProfileSpeed);
|
||||
} else if (type == ColorizationType.ELEVATION) {
|
||||
return Math.max(analysis.maxElevation, minValue + 50);
|
||||
} else {
|
||||
return MAX_SLOPE_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
private void calculateMinMaxValue() {
|
||||
if (values.length == 0)
|
||||
return;
|
||||
minValue = maxValue = Double.NaN;
|
||||
for (double value : values) {
|
||||
if ((Double.isNaN(maxValue) || Double.isNaN(minValue)) && !Double.isNaN(value))
|
||||
maxValue = minValue = value;
|
||||
if (minValue > value)
|
||||
minValue = value;
|
||||
if (maxValue < value)
|
||||
maxValue = value;
|
||||
}
|
||||
}
|
||||
|
||||
private double[] listToArray(List<Double> doubleList) {
|
||||
double[] result = new double[doubleList.size()];
|
||||
for (int i = 0; i < doubleList.size(); i++) {
|
||||
result[i] = doubleList.get(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static int rgbaToDecimal(int r, int g, int b, int a) {
|
||||
int value = ((a & 0xFF) << 24) |
|
||||
((r & 0xFF) << 16) |
|
||||
((g & 0xFF) << 8) |
|
||||
((b & 0xFF) << 0);
|
||||
return value;
|
||||
}
|
||||
|
||||
private int getRed(int value) {
|
||||
return (value >> 16) & 0xFF;
|
||||
}
|
||||
|
||||
private int getGreen(int value) {
|
||||
return (value >> 8) & 0xFF;
|
||||
}
|
||||
|
||||
private int getBlue(int value) {
|
||||
return (value >> 0) & 0xFF;
|
||||
}
|
||||
|
||||
private int getAlpha(int value) {
|
||||
return (value >> 24) & 0xff;
|
||||
}
|
||||
|
||||
public static class RouteColorizationPoint {
|
||||
public int id;
|
||||
public double lat;
|
||||
public double lon;
|
||||
public double val;
|
||||
public int color;
|
||||
|
||||
RouteColorizationPoint(int id, double lat, double lon, double val) {
|
||||
this.id = id;
|
||||
this.lat = lat;
|
||||
this.lon = lon;
|
||||
this.val = val;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,7 +6,6 @@ import net.osmand.NativeLibrary;
|
|||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.ResultMatcher;
|
||||
import net.osmand.binary.BinaryMapIndexReader;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter;
|
||||
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteRegion;
|
||||
import net.osmand.binary.RouteDataObject;
|
||||
import net.osmand.data.LatLon;
|
||||
|
@ -689,15 +688,15 @@ public class RoutePlannerFrontEnd {
|
|||
}
|
||||
}
|
||||
if (ctx.calculationMode == RouteCalculationMode.COMPLEX && routeDirection == null
|
||||
&& maxDistance > ctx.config.DEVIATION_RADIUS * 6) {
|
||||
&& maxDistance > RoutingConfiguration.DEVIATION_RADIUS * 6) {
|
||||
ctx.calculationProgress.totalIterations++;
|
||||
RoutingContext nctx = buildRoutingContext(ctx.config, ctx.nativeLib, ctx.getMaps(), RouteCalculationMode.BASE);
|
||||
nctx.calculationProgress = ctx.calculationProgress;
|
||||
List<RouteSegmentResult> ls = searchRoute(nctx, start, end, intermediates);
|
||||
if(ls == null) {
|
||||
if (ls == null) {
|
||||
return null;
|
||||
}
|
||||
routeDirection = PrecalculatedRouteDirection.build(ls, ctx.config.DEVIATION_RADIUS, ctx.getRouter().getMaxSpeed());
|
||||
routeDirection = PrecalculatedRouteDirection.build(ls, RoutingConfiguration.DEVIATION_RADIUS, ctx.getRouter().getMaxSpeed());
|
||||
}
|
||||
List<RouteSegmentResult> res ;
|
||||
if (intermediatesEmpty && ctx.nativeLib != null) {
|
||||
|
|
|
@ -176,11 +176,49 @@ public class RouteResultPreparation {
|
|||
combineWayPointsForAreaRouting(ctx, result);
|
||||
validateAllPointsConnected(result);
|
||||
splitRoadsAndAttachRoadSegments(ctx, result, recalculation);
|
||||
for (int i = 0; i < result.size(); i++) {
|
||||
filterMinorStops(result.get(i));
|
||||
}
|
||||
calculateTimeSpeed(ctx, result);
|
||||
|
||||
prepareTurnResults(ctx, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public RouteSegmentResult filterMinorStops(RouteSegmentResult seg) {
|
||||
List<Integer> stops = null;
|
||||
boolean plus = seg.getStartPointIndex() < seg.getEndPointIndex();
|
||||
int next;
|
||||
|
||||
for (int i = seg.getStartPointIndex(); i != seg.getEndPointIndex(); i = next) {
|
||||
next = plus ? i + 1 : i - 1;
|
||||
int[] pointTypes = seg.getObject().getPointTypes(i);
|
||||
if (pointTypes != null) {
|
||||
for (int j = 0; j < pointTypes.length; j++) {
|
||||
if (pointTypes[j] == seg.getObject().region.stopMinor) {
|
||||
if (stops == null) {
|
||||
stops = new ArrayList<>();
|
||||
}
|
||||
stops.add(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (stops != null) {
|
||||
for (int stop : stops) {
|
||||
List<RouteSegmentResult> attachedRoutes = seg.getAttachedRoutes(stop);
|
||||
for (RouteSegmentResult attached : attachedRoutes) {
|
||||
int attStopPriority = highwaySpeakPriority(attached.getObject().getHighway());
|
||||
int segStopPriority = highwaySpeakPriority(seg.getObject().getHighway());
|
||||
if (segStopPriority < attStopPriority) {
|
||||
seg.getObject().removePointType(stop, seg.getObject().region.stopSign);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return seg;
|
||||
}
|
||||
|
||||
public void prepareTurnResults(RoutingContext ctx, List<RouteSegmentResult> result) {
|
||||
for (int i = 0; i < result.size(); i ++) {
|
||||
|
@ -1079,8 +1117,8 @@ public class RouteResultPreparation {
|
|||
if (UNMATCHED_HIGHWAY_TYPE.equals(rr.getObject().getHighway())) {
|
||||
bearingDist = RouteSegmentResult.DIST_BEARING_DETECT_UNMATCHED;
|
||||
}
|
||||
double mpi = MapUtils.degreesDiff(prev.getBearingEnd(prev.getEndPointIndex(), bearingDist),
|
||||
rr.getBearingBegin(rr.getStartPointIndex(), bearingDist));
|
||||
double mpi = MapUtils.degreesDiff(prev.getBearingEnd(prev.getEndPointIndex(), Math.min(prev.getDistance(), bearingDist)),
|
||||
rr.getBearingBegin(rr.getStartPointIndex(), Math.min(rr.getDistance(), bearingDist)));
|
||||
if (mpi >= TURN_DEGREE_MIN) {
|
||||
if (mpi < TURN_DEGREE_MIN) {
|
||||
// Slight turn detection here causes many false positives where drivers would expect a "normal" TL. Best use limit-angle=TURN_DEGREE_MIN, this reduces TSL to the turn-lanes cases.
|
||||
|
|
|
@ -457,7 +457,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
|
|||
}
|
||||
|
||||
public float getBearingBegin() {
|
||||
return getBearingBegin(startPointIndex, DIST_BEARING_DETECT);
|
||||
return getBearingBegin(startPointIndex, distance > 0 && distance < DIST_BEARING_DETECT ? distance : DIST_BEARING_DETECT);
|
||||
}
|
||||
|
||||
public float getBearingBegin(int point, float dist) {
|
||||
|
@ -465,7 +465,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
|
|||
}
|
||||
|
||||
public float getBearingEnd() {
|
||||
return getBearingEnd(endPointIndex, DIST_BEARING_DETECT);
|
||||
return getBearingEnd(endPointIndex, distance > 0 && distance < DIST_BEARING_DETECT ? distance : DIST_BEARING_DETECT);
|
||||
}
|
||||
|
||||
public float getBearingEnd(int point, float dist) {
|
||||
|
|
|
@ -20,7 +20,7 @@ import java.util.Stack;
|
|||
public class RoutingConfiguration {
|
||||
|
||||
public static final int DEFAULT_MEMORY_LIMIT = 30;
|
||||
public final float DEVIATION_RADIUS = 3000;
|
||||
public static final float DEVIATION_RADIUS = 3000;
|
||||
public Map<String, String> attributes = new LinkedHashMap<String, String>();
|
||||
|
||||
// 1. parameters of routing and different tweaks
|
||||
|
|
|
@ -10,8 +10,6 @@ import net.osmand.router.GeneralRouter.RouteDataObjectAttribute;
|
|||
|
||||
public class TransportRoutingConfiguration {
|
||||
|
||||
public static final String KEY = "public_transport";
|
||||
|
||||
public int ZOOM_TO_LOAD_TILES = 15;
|
||||
|
||||
public int walkRadius = 1500; // ? 3000
|
||||
|
|
|
@ -8,7 +8,7 @@ public enum ObjectType {
|
|||
// LOCATION
|
||||
LOCATION(true), PARTIAL_LOCATION(false),
|
||||
// UI OBJECTS
|
||||
FAVORITE(true), FAVORITE_GROUP(false), WPT(true), RECENT_OBJ(true),
|
||||
FAVORITE(true), FAVORITE_GROUP(false), WPT(true), RECENT_OBJ(true), GPX_TRACK(false),
|
||||
|
||||
// ONLINE SEARCH
|
||||
ONLINE_SEARCH(true),
|
||||
|
|
|
@ -1317,7 +1317,13 @@ public class SearchCoreFactory {
|
|||
|| !phrase.isSearchTypeAllowed(ObjectType.HOUSE)) {
|
||||
continue;
|
||||
}
|
||||
res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
|
||||
if(interpolation) {
|
||||
res.localeName = lw;
|
||||
res.location = b.getLocation(b.interpolation(lw));
|
||||
} else {
|
||||
res.localeName = b.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
|
||||
res.location = b.getLocation();
|
||||
}
|
||||
res.otherNames = b.getAllNames(true);
|
||||
res.object = b;
|
||||
res.file = file;
|
||||
|
@ -1328,12 +1334,6 @@ public class SearchCoreFactory {
|
|||
res.relatedObject = s;
|
||||
res.localeRelatedObjectName = s.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
|
||||
res.objectType = ObjectType.HOUSE;
|
||||
if(interpolation) {
|
||||
res.location = b.getLocation(b.interpolation(lw));
|
||||
res.localeName = lw;
|
||||
} else {
|
||||
res.location = b.getLocation();
|
||||
}
|
||||
res.preferredZoom = 17;
|
||||
|
||||
resultMatcher.publish(res);
|
||||
|
|
|
@ -55,7 +55,9 @@ public class SearchResult {
|
|||
|
||||
public double getSumPhraseMatchWeight() {
|
||||
// if result is a complete match in the search we prioritize it higher
|
||||
boolean match = requiredSearchPhrase.countWords(localeName) <= getSelfWordCount();
|
||||
int localWordsMatched = alternateName != null ?
|
||||
requiredSearchPhrase.countWords(alternateName) : requiredSearchPhrase.countWords(localeName) ;
|
||||
boolean match = localWordsMatched <= getSelfWordCount();
|
||||
double res = ObjectType.getTypeWeight(match ? objectType : null);
|
||||
if (parentSearchResult != null) {
|
||||
res = res + parentSearchResult.getSumPhraseMatchWeight() / MAX_TYPE_WEIGHT;
|
||||
|
|
|
@ -2,6 +2,8 @@ package net.osmand.util;
|
|||
|
||||
import net.osmand.IProgress;
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.router.RouteColorize;
|
||||
import net.osmand.data.LatLon;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.xmlpull.v1.XmlPullParser;
|
||||
|
@ -53,6 +55,8 @@ public class Algorithms {
|
|||
public static final int XML_FILE_SIGNATURE = 0x3c3f786d;
|
||||
public static final int OBF_FILE_SIGNATURE = 0x08029001;
|
||||
public static final int SQLITE_FILE_SIGNATURE = 0x53514C69;
|
||||
public static final int BZIP_FILE_SIGNATURE = 0x425a;
|
||||
public static final int GZIP_FILE_SIGNATURE = 0x1f8b;
|
||||
|
||||
public static String normalizeSearchText(String s) {
|
||||
boolean norm = false;
|
||||
|
@ -115,7 +119,7 @@ public class Algorithms {
|
|||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
|
||||
public static int parseIntSilently(String input, int def) {
|
||||
if (input != null && input.length() > 0) {
|
||||
try {
|
||||
|
@ -138,6 +142,35 @@ public class Algorithms {
|
|||
return def;
|
||||
}
|
||||
|
||||
public static boolean isFirstPolygonInsideSecond(List<LatLon> firstPolygon,
|
||||
List<LatLon> secondPolygon) {
|
||||
for (LatLon point : firstPolygon) {
|
||||
if (!isPointInsidePolygon(point, secondPolygon)) {
|
||||
// if at least one point is not inside the boundary, return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isPointInsidePolygon(LatLon point,
|
||||
List<LatLon> polygon) {
|
||||
double pointX = point.getLongitude();
|
||||
double pointY = point.getLatitude();
|
||||
boolean result = false;
|
||||
for (int i = 0, j = polygon.size() - 1; i < polygon.size(); j = i++) {
|
||||
double x1 = polygon.get(i).getLongitude();
|
||||
double y1 = polygon.get(i).getLatitude();
|
||||
double x2 = polygon.get(j).getLongitude();
|
||||
double y2 = polygon.get(j).getLatitude();
|
||||
if ((y1 > pointY) != (y2 > pointY)
|
||||
&& (pointX < (x2 - x1) * (pointY - y1) / (y2-y1) + x1)) {
|
||||
result = !result;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String getFileNameWithoutExtension(File f) {
|
||||
return getFileNameWithoutExtension(f.getName());
|
||||
}
|
||||
|
@ -322,6 +355,24 @@ public class Algorithms {
|
|||
return test == ZIP_FILE_SIGNATURE;
|
||||
}
|
||||
|
||||
public static boolean checkFileSignature(InputStream inputStream, int fileSignature) throws IOException {
|
||||
if (inputStream == null) return false;
|
||||
int firstBytes;
|
||||
if (isSmallFileSignature(fileSignature)) {
|
||||
firstBytes = readSmallInt(inputStream);
|
||||
} else {
|
||||
firstBytes = readInt(inputStream);
|
||||
}
|
||||
if (inputStream.markSupported()) {
|
||||
inputStream.reset();
|
||||
}
|
||||
return firstBytes == fileSignature;
|
||||
}
|
||||
|
||||
public static boolean isSmallFileSignature(int fileSignature) {
|
||||
return fileSignature == BZIP_FILE_SIGNATURE || fileSignature == GZIP_FILE_SIGNATURE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks, whether the child directory is a subdirectory of the parent
|
||||
* directory.
|
||||
|
@ -358,6 +409,14 @@ public class Algorithms {
|
|||
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + ch4);
|
||||
}
|
||||
|
||||
public static int readSmallInt(InputStream in) throws IOException {
|
||||
int ch1 = in.read();
|
||||
int ch2 = in.read();
|
||||
if ((ch1 | ch2) < 0)
|
||||
throw new EOFException();
|
||||
return ((ch1 << 8) + ch2);
|
||||
}
|
||||
|
||||
public static String capitalizeFirstLetterAndLowercase(String s) {
|
||||
if (s != null && s.length() > 1) {
|
||||
// not very efficient algorithm
|
||||
|
@ -537,6 +596,13 @@ public class Algorithms {
|
|||
}
|
||||
}
|
||||
|
||||
public static ByteArrayInputStream createByteArrayIS(InputStream in) throws IOException {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
streamCopy(in, out);
|
||||
in.close();
|
||||
return new ByteArrayInputStream(out.toByteArray());
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
public static void updateAllExistingImgTilesToOsmandFormat(File f) {
|
||||
if (f.isDirectory()) {
|
||||
|
@ -723,6 +789,10 @@ public class Algorithms {
|
|||
return false;
|
||||
}
|
||||
|
||||
public static boolean isInt(double d) {
|
||||
return (d == Math.floor(d)) && !Double.isInfinite(d);
|
||||
}
|
||||
|
||||
public static boolean isInt(String value) {
|
||||
int length = value.length();
|
||||
for (int i = 0; i < length; i++) {
|
||||
|
@ -992,4 +1062,30 @@ public class Algorithms {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static int[] stringToGradientPalette(String str) {
|
||||
if (Algorithms.isBlank(str)) {
|
||||
return RouteColorize.colors;
|
||||
}
|
||||
String[] arr = str.split(" ");
|
||||
if (arr.length != 3) {
|
||||
return RouteColorize.colors;
|
||||
}
|
||||
int[] colors = new int[3];
|
||||
try {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
colors[i] = Algorithms.parseColor(arr[i]);
|
||||
}
|
||||
} catch (IllegalArgumentException e) {
|
||||
return RouteColorize.colors;
|
||||
}
|
||||
return colors;
|
||||
}
|
||||
|
||||
public static String gradientPaletteToString(int[] colors) {
|
||||
int[] src = (colors != null && colors.length == 3) ? colors : RouteColorize.colors;
|
||||
return Algorithms.colorToString(src[0]) + " " +
|
||||
Algorithms.colorToString(src[1]) + " " +
|
||||
Algorithms.colorToString(src[2]);
|
||||
}
|
||||
}
|
|
@ -747,7 +747,9 @@ public class MapUtils {
|
|||
return Math.sqrt((endX - startX) * (endX - startX) + (endY - startY) * (endY - startY));
|
||||
}
|
||||
|
||||
|
||||
public static double getSqrtDistance(float startX, float startY, float endX, float endY) {
|
||||
return Math.sqrt((endX - startX) * (endX - startX) + (endY - startY) * (endY - startY));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -80,9 +80,9 @@ public class SearchUICoreTest {
|
|||
if (files != null) {
|
||||
for (File file : files) {
|
||||
String fileName = file.getName();
|
||||
if(fileName.endsWith(".json")) {
|
||||
if (fileName.endsWith(".json")) {
|
||||
String name = fileName.substring(0, fileName.length() - ".json".length());
|
||||
arrayList.add(new Object[] {name, file});
|
||||
arrayList.add(new Object[] { name, file });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -191,10 +191,10 @@ public class SearchUICoreTest {
|
|||
if (!Algorithms.stringsEqual(expected, present)) {
|
||||
System.out.println(String.format("Phrase: %s", phrase));
|
||||
System.out.println(String.format("Mismatch for '%s' != '%s'. Result: ", expected, present));
|
||||
}
|
||||
for (SearchResult r : searchResults) {
|
||||
System.out.println(String.format("\t\"%s\",", formatResult(false, r, phrase)));
|
||||
}
|
||||
}
|
||||
Assert.assertEquals(expected, present);
|
||||
}
|
||||
}
|
||||
|
|
274
OsmAnd-telegram/res/values-b+sr+Latn/strings.xml
Normal file
274
OsmAnd-telegram/res/values-b+sr+Latn/strings.xml
Normal file
|
@ -0,0 +1,274 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="shared_string_select">Označi</string>
|
||||
<string name="shared_string_enable">Omogući</string>
|
||||
<string name="altitude">Nadmorska visina</string>
|
||||
<string name="shared_string_search">Traži</string>
|
||||
<string name="shared_string_ok">U redu</string>
|
||||
<string name="shared_string_update">Ažuriraj</string>
|
||||
<string name="average_altitude">Prosečna visina</string>
|
||||
<string name="average_speed">Prosečna brzina</string>
|
||||
<string name="shared_string_map">Karta</string>
|
||||
<string name="shared_string_add">Dodaj</string>
|
||||
<string name="shared_string_hide">Sakrij</string>
|
||||
<string name="shared_string_status">Stanje</string>
|
||||
<string name="shared_string_disable">Onemogući</string>
|
||||
<string name="shared_string_save">Sačuvaj</string>
|
||||
<string name="shared_string_name">Ime</string>
|
||||
<string name="shared_string_sort">Sortiraj</string>
|
||||
<string name="shared_string_exit">Izlaz</string>
|
||||
<string name="shared_string_close">Zatvori</string>
|
||||
<string name="shared_string_all">Sve</string>
|
||||
<string name="shared_string_off">Isključeno</string>
|
||||
<string name="shared_string_install">Instaliraj</string>
|
||||
<string name="shared_string_share">Deli</string>
|
||||
<string name="shared_string_back">Nazad</string>
|
||||
<string name="shared_string_continue">Nastavi</string>
|
||||
<string name="shared_string_cancel">Otkaži</string>
|
||||
<string name="shared_string_settings">Postavke</string>
|
||||
<string name="osmand_service">Pozadinski režim</string>
|
||||
<string name="yard">yd</string>
|
||||
<string name="foot">ft</string>
|
||||
<string name="mile">mi</string>
|
||||
<string name="km">km</string>
|
||||
<string name="m">m</string>
|
||||
<string name="nm">nmi</string>
|
||||
<string name="min_mile">min/m</string>
|
||||
<string name="min_km">min/km</string>
|
||||
<string name="m_s">m/s</string>
|
||||
<string name="km_h">km/h</string>
|
||||
<string name="mile_per_hour">mph</string>
|
||||
<string name="si_kmh">Kilometara na sat</string>
|
||||
<string name="si_mph">Milja na sat</string>
|
||||
<string name="si_m_s">Metara u sekundi</string>
|
||||
<string name="si_min_km">Minuta po kilometru</string>
|
||||
<string name="si_min_m">Minuta po milji</string>
|
||||
<string name="si_mi_feet">Milje/stope</string>
|
||||
<string name="si_mi_yard">Milje/jardi</string>
|
||||
<string name="si_km_m">Kilometri/metri</string>
|
||||
<string name="si_nm">Nautičke milje</string>
|
||||
<string name="si_mi_meters">Milje/metri</string>
|
||||
<string name="shared_string_apply">Primeni</string>
|
||||
<string name="shared_string_enabled">Uključen</string>
|
||||
<string name="units_and_formats">Merne jedinice & formatiranja</string>
|
||||
<string name="unit_of_length_descr">Promeni jedinice za dužinu.</string>
|
||||
<string name="unit_of_length">Jedinice dužine</string>
|
||||
<string name="shared_string_appearance">Izgled</string>
|
||||
<string name="timeline">Vremenska linija</string>
|
||||
<string name="live_now">Uživo sada</string>
|
||||
<string name="my_location">Moja lokacija</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Pratioc</b> omogućava vam da delite svoju lokaciju i vidite lokaciju drugih u OsmAndu.<br/><br/>Aplikacija koristi Telegram API, pa vam je potreban Telegram nalog.</string>
|
||||
<string name="shared_string_second_short">sek</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
<string name="shared_string_hour_short">č</string>
|
||||
<string name="si_nm_h">Nautičkih milja na sat (čvorovi)</string>
|
||||
<string name="nm_h">nmi/č</string>
|
||||
<string name="shared_string_welcome">Dobrodošli</string>
|
||||
<string name="shared_string_authorization_descr">Unesite vaš telefonski broj Telegrama u međunarodnom formatu</string>
|
||||
<string name="shared_string_authorization">Autorizacija</string>
|
||||
<string name="active_chats">Aktivna ćaskanja</string>
|
||||
<string name="show_users_on_map">Prikažite korisnike na mapi</string>
|
||||
<string name="install_osmand">Instalirajte OsmAnd</string>
|
||||
<string name="install_osmand_dialog_message">Prvo morate instalirati besplatnu ili plaćenu verziju OsmAnda</string>
|
||||
<string name="osmand_logo">Logo OsmAnda</string>
|
||||
<string name="process_service">Usluga OsmAnd Pratioca</string>
|
||||
<string name="sharing_location">Deljenje lokacije</string>
|
||||
<string name="share_location">Deli lokaciju</string>
|
||||
<string name="shared_string_distance">Rastojanje</string>
|
||||
<string name="osmand_service_descr">OsmAnd Pratioc radi u pozadini sa isključenim ekranom.</string>
|
||||
<string name="location_service_no_gps_available">Izaberite jednog od dobavljača lokacije da bi deliti vašu lokaciju.</string>
|
||||
<string name="gps_not_available">Uključite „Lokaciju“ u sistemskim podešavanjima</string>
|
||||
<string name="no_location_permission">Aplikaciji nedostaje dozvola za pristup podacima o lokaciji.</string>
|
||||
<string name="not_logged_in">Niste prijavljeni</string>
|
||||
<string name="gps_network_not_enabled">Uključiti „Lokaciju“\?</string>
|
||||
<string name="closing">Zatvaranje</string>
|
||||
<string name="logging_out">Odjavljivanje</string>
|
||||
<string name="initialization">Pokretanje</string>
|
||||
<string name="shared_string_logout">Odjaviti se</string>
|
||||
<string name="shared_string_login">Prijavite se</string>
|
||||
<string name="password_descr">Telegram lozinka</string>
|
||||
<string name="enter_password">Unesite lozinku</string>
|
||||
<string name="authentication_code_descr">Telegram vam je poslao kod za OsmAnd radi prijave na vaš nalog.</string>
|
||||
<string name="authentication_code">Validacioni kod</string>
|
||||
<string name="enter_code">Unesite kod</string>
|
||||
<string name="shared_string_password">Lozinka</string>
|
||||
<string name="phone_number_descr">Broj telefona u međunarodnom formatu</string>
|
||||
<string name="phone_number_title">Broj telefona</string>
|
||||
<string name="app_name">OsmAnd Onlajn GPS Pratioc</string>
|
||||
<string name="show_on_map">Prikaži na mapi</string>
|
||||
<string name="start_location_sharing">Deli lokaciju</string>
|
||||
<string name="my_location_search_hint">Pretražite: Grupu ili kontakt</string>
|
||||
<string name="location_sharing_description">Izaberite kontakte i grupe sa kojima želite da delite lokaciju.</string>
|
||||
<string name="set_time">Podesite vreme</string>
|
||||
<string name="set_time_description">Podesite vreme za koji će izabrani kontakti i grupe videti vašu lokaciju u realnom vremenu.</string>
|
||||
<string name="visible_time_for_all">Vidljivo vreme za sve</string>
|
||||
<string name="hours_format">%1$ č</string>
|
||||
<string name="minutes_format">%1$ m</string>
|
||||
<string name="hours_and_minutes_format">%1$ č %2$ m</string>
|
||||
<string name="set_visible_time_for_all">Podesite vidljivo vreme za sve</string>
|
||||
<string name="enter_authentication_code">Unesite kod za validaciju</string>
|
||||
<string name="enter_phone_number">Unesite broj telefona</string>
|
||||
<string name="do_not_have_telegram">Nemam Telegram nalog</string>
|
||||
<string name="already_registered_in_telegram">Potreban vam je registrovani Telegram nalog i broj telefona</string>
|
||||
<string name="get_telegram_after_creating_account">Tada možete da koristite ovu aplikaciju.</string>
|
||||
<string name="get_telegram_description_continue">Instalirajte Telegram i otvorite nalog.</string>
|
||||
<string name="get_telegram_account_first">Za deljenje lokacije potreban vam je Telegram nalog.</string>
|
||||
<string name="get_telegram_title">Registracija u Telegramu</string>
|
||||
<string name="shared_string_bot">Bot</string>
|
||||
<string name="shared_string_live">Uživo</string>
|
||||
<string name="open_osmand">Otvori OsmAnd</string>
|
||||
<string name="turn_off_location_sharing">Isključite deljenje lokacije</string>
|
||||
<string name="stop_sharing_all">Deljenje je uključeno (isključite)</string>
|
||||
<string name="expire_at">Ističe</string>
|
||||
<string name="sharing_time">Vreme deljenja</string>
|
||||
<string name="gps_and_location">Pozicija</string>
|
||||
<string name="send_my_location">Pošalji moju lokaciju</string>
|
||||
<string name="send_my_location_desc">Podesite minimalni interval za deljenje lokacije.</string>
|
||||
<string name="stale_location">Nepomičan</string>
|
||||
<string name="stale_location_desc">Poslednji put kada se kontakt pomerio.</string>
|
||||
<string name="location_history">Istorija lokacije</string>
|
||||
<string name="location_history_desc">Sakrijte kontakte koji se nisu pomerili u datom vremenu.</string>
|
||||
<string name="osmand_connect">Osmand veza</string>
|
||||
<string name="osmand_connect_desc">Odaberite verziju OsmAnda koju OsmAnd pratioc koristi za prikazivanje pozicija.</string>
|
||||
<string name="in_time">u %1$</string>
|
||||
<string name="shared_string_account">Nalog</string>
|
||||
<string name="connected_account">Povezani nalog</string>
|
||||
<string name="logout_help_desc">Kako isključiti OsmAnd pratioca iz Telegrama</string>
|
||||
<string name="disconnect_from_telegram">Kako isključiti OsmAnd pratioca iz Telegrama</string>
|
||||
<string name="disconnect_from_telegram_desc">Da biste opozvali pristup deljenju lokacije. Otvorite Telegram, idite na Podešavanja → Privatnost i bezbednost → Sesije i prekinete sesiju OsmAnd pratioca.</string>
|
||||
<string name="logout_no_internet_msg">Povežite se na Internet kako biste se pravilno odjavili iz Telegrama.</string>
|
||||
<string name="shared_string_group">Grupa</string>
|
||||
<string name="last_response">Poslednji odgovor</string>
|
||||
<string name="time_ago">pre</string>
|
||||
<string name="turn_off_all">Isključi sve</string>
|
||||
<string name="disable_all_sharing">Onemogući svako deljenje</string>
|
||||
<string name="disable_all_sharing_desc">Isključuje deljenje lokacije prema svim izabranim čatovima (%1$).</string>
|
||||
<string name="choose_osmand">Izaberite verziju OsmAnda koju želite da koristite</string>
|
||||
<string name="choose_osmand_desc">Izaberite verziju OsmAnda gde će se kontakti prikazati na mapi.</string>
|
||||
<string name="shared_string_sort_by">Sortiraj po</string>
|
||||
<string name="by_group">Po grupi</string>
|
||||
<string name="by_name">Po imenu</string>
|
||||
<string name="by_distance">Po udaljenosti</string>
|
||||
<string name="logout_from_osmand_telegram">Odjaviti se sa OsmAnd pratioca\?</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Jeste li sigurni da se želite odjaviti sa OsmAnd pratioca tako da ne možete da delite lokaciju ili vidite lokaciju drugih\?</string>
|
||||
<string name="live_now_description">Kontakti i grupe dele lokaciju vama.</string>
|
||||
<string name="share_location_as">Deljenje lokacije kao</string>
|
||||
<string name="add_device">Dodajte uređaj</string>
|
||||
<string name="no_internet_connection">Nema internet konekcije</string>
|
||||
<string name="no_gps_connection">Nema GPS veze</string>
|
||||
<string name="location_sharing_status">Deljenje: %1$</string>
|
||||
<string name="sharing_status">Deljenje statusa</string>
|
||||
<string name="last_available_location">Poslednja dostupna lokacija</string>
|
||||
<string name="re_send_location">Ponovo pošalji lokaciju</string>
|
||||
<string name="not_found_yet">Još nije pronađeno</string>
|
||||
<string name="not_sent_yet">Još nije poslato</string>
|
||||
<string name="shared_string_later">Kasnije</string>
|
||||
<string name="go_to_settings">Idi na Podešavanja</string>
|
||||
<string name="sharing_in_background">Deljenje u pozadini</string>
|
||||
<string name="battery_optimization_description">Isključite optimizaciju baterije za OsmAnd pratilac tako da se ne isključi iznenada kad je u pozadini.</string>
|
||||
<string name="background_work">Rad u pozadini</string>
|
||||
<string name="background_work_description">Promenite podešavanja za optimizaciju baterije da biste stabilizovali deljenje lokacije.</string>
|
||||
<string name="connecting_to_the_internet">Povezivanje sa Internetom</string>
|
||||
<string name="searching_for_gps">Pozicioniranje…</string>
|
||||
<string name="initializing">Pokretanje</string>
|
||||
<string name="sending_location_messages">Lokacija se šalje</string>
|
||||
<string name="waiting_for_response_from_telegram">Čeka se odgovor iz Telegrama</string>
|
||||
<string name="not_possible_to_send_to_telegram_chats">Nije moguće poslati u Telegram četove:</string>
|
||||
<string name="successfully_sent_and_updated">Uspešno poslato i ažurirano</string>
|
||||
<string name="last_updated_location">Poslednja ažurirana lokacija:</string>
|
||||
<string name="share_location_as_description">Ako želite da povežete više uređaja sa jednim nalogom telegrama, trebate koristiti drugi uređaj da bi delili vašu lokaciju.</string>
|
||||
<string name="share_location_as_description_second_line">Možete da kreirate i vidite ID uređaja u telegram klijentu koristeći %1$ čat bot. %2$</string>
|
||||
<string name="device_name">Ime uređaja</string>
|
||||
<string name="device_name_cannot_be_empty">Ime uređaja ne može biti prazno</string>
|
||||
<string name="device_name_is_too_long">Ime uređaja predugo</string>
|
||||
<string name="enter_device_name_description">Imenujte vaš novi uređaj sa maksimalno 200 simbola.</string>
|
||||
<string name="error_adding_new_device">Nije moguće dodati novi uređaj</string>
|
||||
<string name="device_added_successfully">%1$ dodato.</string>
|
||||
<string name="enter_another_device_name">Izaberite ime koje niste već koristili</string>
|
||||
<string name="last_update_from_telegram">Poslednje ažuriranje od Telegrama</string>
|
||||
<string name="map_and_text">Mapa i tekst</string>
|
||||
<string name="shared_string_text">Tekst</string>
|
||||
<string name="send_location_as_descr">Odaberite kako će izgledati poruke sa vašom lokacijom.</string>
|
||||
<string name="send_location_as">Pošalji lokaciju kao</string>
|
||||
<string name="start_date">Početni datum</string>
|
||||
<string name="end_date">Krajnji datum</string>
|
||||
<string name="open_in_osmand">Prikaži u OsmAndu</string>
|
||||
<string name="time_on_the_move">Vreme kretanja</string>
|
||||
<string name="monitoring_is_disabled">Praćenje je onemogućeno</string>
|
||||
<string name="monitoring_is_enabled">Praćenje je omogućeno</string>
|
||||
<string name="shared_string_sent">Poslato</string>
|
||||
<string name="gps_points">GPS tačke</string>
|
||||
<string name="shared_string_collected">Prikupljeno</string>
|
||||
<string name="shared_string_date">Datum</string>
|
||||
<string name="points_size">%1$ tačaka</string>
|
||||
<string name="gps_points_in_buffer">poslato (%1$ u baferu)</string>
|
||||
<string name="please_update_osmand">Ažurirajte OsmAnd da biste videli podatke na mapi</string>
|
||||
<string name="show_gps_points_descr">Prikaži količinu prikupljenih i poslatih GPS tačaka.</string>
|
||||
<string name="show_gps_points">Pokaži GPS tačke</string>
|
||||
<string name="received_gps_points">Primljene GPKS tačke: %1$</string>
|
||||
<string name="how_it_works">Kako radi</string>
|
||||
<string name="osmand_privacy_policy">OsmAnd politika privatnosti</string>
|
||||
<string name="telegram_privacy_policy">Politika privatnosti Telegrama</string>
|
||||
<string name="shared_string_accept">Prihvati</string>
|
||||
<string name="privacy_policy_agree">Klikom na „Nastavi“ prihvatate uslove politike privatnosti Telegrama i OsmAnda.</string>
|
||||
<string name="privacy_policy_telegram_client">OsmAnd pratilac je jedan od klijenata koji koriste otvorenu platformu Telegram. Vaši kontakti mogu da koriste bilo koji drugi Telegram klijent.</string>
|
||||
<string name="privacy_policy_use_telegram">Telegram (aplikacija za razmenu poruka) koristi se za povezivanje i komunikaciju sa ljudima.</string>
|
||||
<string name="shared_string_telegram">Telegram</string>
|
||||
<string name="app_name_short">OsmAnd pratilac</string>
|
||||
<string name="timeline_description">Omogućite praćenje da biste sačuvali sve lokacije u istoriji.</string>
|
||||
<string name="location_recording_enabled">Snimanje lokacije omogućeno</string>
|
||||
<string name="disable_monitoring">Onemogućite praćenje</string>
|
||||
<string name="timeline_available_for_free_now">Vremenska linija je funkcija koja je sada dostupna besplatno.</string>
|
||||
<string name="type_contact_or_group_name">Unesite ime kontakta ili grupe</string>
|
||||
<string name="search_contacts_descr">Pretraga po svim vašim grupama i kontaktima.</string>
|
||||
<string name="search_contacts">Pretraga kontakta</string>
|
||||
<string name="bearing">Usmerenje</string>
|
||||
<string name="precision">Preciznost</string>
|
||||
<string name="direction">Smer</string>
|
||||
<string name="privacy">Privatnost</string>
|
||||
<string name="proxy">Proksi</string>
|
||||
<string name="proxy_settings">Podešavanja proksija</string>
|
||||
<string name="proxy_disconnected">Prekinut</string>
|
||||
<string name="proxy_connected">Povezan</string>
|
||||
<string name="proxy_type">Tip proksija</string>
|
||||
<string name="shared_string_connection">Veza</string>
|
||||
<string name="proxy_server">Server</string>
|
||||
<string name="proxy_port">Port</string>
|
||||
<string name="proxy_credentials">Akreditivi</string>
|
||||
<string name="proxy_username">Korisničko ime</string>
|
||||
<string name="proxy_password">Lozinka</string>
|
||||
<string name="proxy_key">Ključ</string>
|
||||
<string name="gpx_settings">GPX podešavanja</string>
|
||||
<string name="min_logging_speed_descr">Filter: nema zapisivanja ispod odabrane brzine</string>
|
||||
<string name="min_logging_speed">Minimalna brzina zapisivanja</string>
|
||||
<string name="min_logging_accuracy_descr">Filter: Nema zapisa dok se ne dostigne ova tačnost</string>
|
||||
<string name="min_logging_accuracy">Minimalna tačnost evidentiranja</string>
|
||||
<string name="min_logging_distance_descr">Filter: minimalna udaljenost za evidentiranje nove tačke</string>
|
||||
<string name="min_logging_distance">Minimalna udaljenost evidentiranja</string>
|
||||
<string name="timeline_no_data">Nema podataka</string>
|
||||
<string name="timeline_no_data_descr">Nemamo prikupljene podatke za izabrani dan</string>
|
||||
<string name="start_end_date">Početni — Krajnji datum</string>
|
||||
<string name="set_time_timeline_descr">Izaberite vreme za prikaz</string>
|
||||
<string name="shared_string_start">Početak</string>
|
||||
<string name="shared_string_end">Kraj</string>
|
||||
<string name="saved_messages">Sačuvane poruke</string>
|
||||
<string name="unit_of_speed_system">Jedinica brzine</string>
|
||||
<string name="unit_of_speed_system_descr">Definišite jedinicu brzine.</string>
|
||||
<string name="time_zone">Vremenska zona</string>
|
||||
<string name="time_zone_descr">Izaberite vremensku zonu koja će se prikazati u porukama lokacije.</string>
|
||||
<string name="buffer_time">Vreme isteka bafera</string>
|
||||
<string name="buffer_time_descr">Maksimalno vreme za skladištenje tačaka u bafer</string>
|
||||
<string name="status_widget_title">Status Tragača OsmAnda</string>
|
||||
<string name="shared_string_suggested">Predloženo</string>
|
||||
<string name="back_to_osmand">Povratak na OsmAnd</string>
|
||||
<string name="duration_ago">Pre %1$</string>
|
||||
<string name="last_response_duration">Poslednji odgovor: pre %1$</string>
|
||||
<string name="last_update_from_telegram_duration">Poslednje ažuriranje iz Telegrama: pre %1$</string>
|
||||
<string name="last_response_date">Poslednji odgovor: %1$</string>
|
||||
<string name="last_update_from_telegram_date">Poslednje ažuriranje iz Telegrama: %1$</string>
|
||||
<string name="shared_string_error_short">Greška</string>
|
||||
<string name="shared_string_export">Izvezi</string>
|
||||
<string name="logcat_buffer">Logcat bafer</string>
|
||||
<string name="logcat_buffer_descr">Proverite i podelite detaljne zapise aplikacije</string>
|
||||
<string name="send_report">Pošalji izveštaj</string>
|
||||
</resources>
|
|
@ -74,4 +74,7 @@
|
|||
<string name="shared_string_appearance">Vzhled</string>
|
||||
<string name="logcat_buffer">Zásobník logcat</string>
|
||||
<string name="logcat_buffer_descr">Zkontrolovat a sdílet podrobné záznamy aplikace</string>
|
||||
<string name="by_name">Podle názvu</string>
|
||||
<string name="shared_string_distance">Vzdálenost</string>
|
||||
<string name="shared_string_later">Později</string>
|
||||
</resources>
|
|
@ -82,7 +82,7 @@
|
|||
<string name="no_location_permission">Der App fehlt die Berechtigung, auf Standortdaten zuzugreifen.</string>
|
||||
<string name="gps_not_available">Bitte schalten Sie \"Standort\" in den Systemeinstellungen ein</string>
|
||||
<string name="osmand_service">Hintergrundmodus</string>
|
||||
<string name="osmand_service_descr">OsmAnd Tracker läuft im Hintergrund bei ausgeschaltetem Bildschirm.</string>
|
||||
<string name="osmand_service_descr">OsmAnd Tracker läuft bei ausgeschaltetem Bildschirm im Hintergrund.</string>
|
||||
<string name="shared_string_distance">Distanz</string>
|
||||
<string name="share_location">Standort teilen</string>
|
||||
<string name="process_service">OsmAnd Tracker-Service</string>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
<string name="shared_string_share">Κοινοποίηση</string>
|
||||
<string name="shared_string_back">Προηγούμενο</string>
|
||||
<string name="shared_string_continue">Συνέχεια</string>
|
||||
<string name="shared_string_cancel">Ακύρωση</string>
|
||||
<string name="shared_string_cancel">Άκυρο</string>
|
||||
<string name="shared_string_settings">Επιλογές</string>
|
||||
<string name="shared_string_enabled">Ενεργοποιημένο</string>
|
||||
<string name="units_and_formats">Μονάδες μέτρησης & φορμά</string>
|
||||
|
@ -53,4 +53,5 @@
|
|||
<string name="si_km_m">Χιλιόμετρα/μέτρα</string>
|
||||
<string name="unit_of_length_descr">Αλλαγή απόστασης που μετριέται.</string>
|
||||
<string name="unit_of_length">Μονάδες μήκους</string>
|
||||
<string name="shared_string_sort_by">Ταξινόμηση κατά</string>
|
||||
</resources>
|
146
OsmAnd-telegram/res/values-eo/strings.xml
Normal file
146
OsmAnd-telegram/res/values-eo/strings.xml
Normal file
|
@ -0,0 +1,146 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="average_altitude">Mezuma altitudo</string>
|
||||
<string name="how_it_works">Kiel ĝi funkcias</string>
|
||||
<string name="proxy_disconnected">Ne konektita</string>
|
||||
<string name="proxy_connected">Konektita</string>
|
||||
<string name="altitude">Altitudo</string>
|
||||
<string name="precision">Precizeco</string>
|
||||
<string name="privacy">Privateco</string>
|
||||
<string name="shared_string_settings">Agordoj</string>
|
||||
<string name="shared_string_cancel">Nuligi</string>
|
||||
<string name="shared_string_continue">Daŭrigi</string>
|
||||
<string name="osmand_logo">emblemo de OsmAnd</string>
|
||||
<string name="saved_messages">Konservitaj mesaĝoj</string>
|
||||
<string name="shared_string_second_short">s</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
<string name="shared_string_hour_short">h</string>
|
||||
<string name="si_mi_meters">Mejloj/metroj</string>
|
||||
<string name="si_min_m">Minutoj en mejlo</string>
|
||||
<string name="si_min_km">Minutoj en kilometro</string>
|
||||
<string name="si_m_s">Metroj en sekundo</string>
|
||||
<string name="si_mph">Mejloj en horo</string>
|
||||
<string name="si_kmh">Kilometroj en horo</string>
|
||||
<string name="km_h">km/h</string>
|
||||
<string name="m_s">m/s</string>
|
||||
<string name="si_nm">Marmejloj</string>
|
||||
<string name="si_km_m">Kilometroj/metroj</string>
|
||||
<string name="si_mi_yard">Mejloj/jardoj</string>
|
||||
<string name="si_mi_feet">Mejloj/futoj</string>
|
||||
<string name="share_location">Kunhavigi lokon</string>
|
||||
<string name="shared_string_distance">Distanco</string>
|
||||
<string name="shared_string_welcome">Bonvenon</string>
|
||||
<string name="m">m</string>
|
||||
<string name="km">km</string>
|
||||
<string name="nm">nmi</string>
|
||||
<string name="min_mile">min/m</string>
|
||||
<string name="min_km">min/km</string>
|
||||
<string name="my_location">Mia loko</string>
|
||||
<string name="start_date">Komenca dato</string>
|
||||
<string name="end_date">Fina dato</string>
|
||||
<string name="send_location_as">Sendi lokon kiel</string>
|
||||
<string name="shared_string_hide">Kaŝi</string>
|
||||
<string name="device_name">Nomo de aparato</string>
|
||||
<string name="shared_string_add">Aldoni</string>
|
||||
<string name="map_and_text">Mapo kaj teksto</string>
|
||||
<string name="shared_string_text">Teksto</string>
|
||||
<string name="shared_string_map">Mapo</string>
|
||||
<string name="shared_string_date">Dato</string>
|
||||
<string name="shared_string_accept">Akcepti</string>
|
||||
<string name="shared_string_telegram">Telegram</string>
|
||||
<string name="shared_string_ok">Bone</string>
|
||||
<string name="shared_string_search">Serĉi</string>
|
||||
<string name="direction">Direkto</string>
|
||||
<string name="shared_string_enable">Ŝalti</string>
|
||||
<string name="shared_string_connection">Konekto</string>
|
||||
<string name="timeline_no_data">Neniu dateno</string>
|
||||
<string name="proxy_server">Servilo</string>
|
||||
<string name="proxy_port">Pordo</string>
|
||||
<string name="proxy_username">Salutnomo</string>
|
||||
<string name="proxy_password">Pasvorto</string>
|
||||
<string name="proxy_key">Ŝlosilo</string>
|
||||
<string name="shared_string_select">Elekti</string>
|
||||
<string name="shared_string_start">Komenco</string>
|
||||
<string name="shared_string_end">Fino</string>
|
||||
<string name="time_zone">Horzono</string>
|
||||
<string name="send_report">Sendi raporton</string>
|
||||
<string name="search_contacts">Serĉi kontaktojn</string>
|
||||
<string name="bearing">Direkto</string>
|
||||
<string name="proxy_settings">Agordoj pri la Retperanto</string>
|
||||
<string name="proxy_type">Tipo de retperanto</string>
|
||||
<string name="units_and_formats">Mezurunuoj & formoj</string>
|
||||
<string name="shared_string_export">Elporti</string>
|
||||
<string name="points_size">%1$d punktoj</string>
|
||||
<string name="shared_string_appearance">Aspekto</string>
|
||||
<string name="telegram_privacy_policy">Reguloj pri Privateco de Telegram</string>
|
||||
<string name="osmand_privacy_policy">Reguloj pri Privateco de OsmAnd</string>
|
||||
<string name="shared_string_update">Ĝisdatigi</string>
|
||||
<string name="shared_string_collected">Kolektita</string>
|
||||
<string name="open_in_osmand">Montri per OsmAnd</string>
|
||||
<string name="background_work">Fona laboro</string>
|
||||
<string name="no_internet_connection">Sen interreta konekto</string>
|
||||
<string name="shared_string_status">Stato</string>
|
||||
<string name="proxy">Retperanto</string>
|
||||
<string name="gpx_settings">Agordoj pri GPX</string>
|
||||
<string name="start_end_date">Komenca – Fina datoj</string>
|
||||
<string name="unit_of_speed_system_descr">Difinu la mezurunuon de rapido.</string>
|
||||
<string name="unit_of_length">Mezurunuoj de longo</string>
|
||||
<string name="unit_of_speed_system">Mezurunuo de rapido</string>
|
||||
<string name="shared_string_error_short">ERARO</string>
|
||||
<string name="back_to_osmand">Reen al OsmAnd</string>
|
||||
<string name="duration_ago">antaŭ %1$s</string>
|
||||
<string name="last_response_duration">Lasta respondo: antaŭ %1$s</string>
|
||||
<string name="last_update_from_telegram_duration">Lasta ĝisdatigo de Telegram: antaŭ %1$s</string>
|
||||
<string name="last_update_from_telegram_date">Lasta ĝisdatigo de Telegram: %1$s</string>
|
||||
<string name="last_response_date">Lasta respondo: %1$s</string>
|
||||
<string name="show_users_on_map">Montri uzantojn sur la mapo</string>
|
||||
<string name="install_osmand">Instali OsmAnd</string>
|
||||
<string name="shared_string_suggested">Sugestataj</string>
|
||||
<string name="average_speed">Mezuma rapido</string>
|
||||
<string name="shared_string_back">Reen</string>
|
||||
<string name="shared_string_share">Kunhavigi</string>
|
||||
<string name="shared_string_install">Instali</string>
|
||||
<string name="phone_number_descr">Telefonnumero en internacia formo</string>
|
||||
<string name="phone_number_title">Telefonnumero</string>
|
||||
<string name="shared_string_password">Pasvorto</string>
|
||||
<string name="nm_h">kn</string>
|
||||
<string name="mile">mi</string>
|
||||
<string name="foot">ft</string>
|
||||
<string name="yard">yd</string>
|
||||
<string name="mile_per_hour">mi/h</string>
|
||||
<string name="si_nm_h">Marmejloj en horo (nodoj)</string>
|
||||
<string name="shared_string_sort_by">Ordigi laŭ</string>
|
||||
<string name="shared_string_sort">Ordigi</string>
|
||||
<string name="by_group">Laŭ grupo</string>
|
||||
<string name="by_name">Laŭ nomo</string>
|
||||
<string name="by_distance">Laŭ distanco</string>
|
||||
<string name="shared_string_name">Nomo</string>
|
||||
<string name="shared_string_enabled">Aktiva</string>
|
||||
<string name="connecting_to_the_internet">Konektante al Interreto</string>
|
||||
<string name="initializing">Komencante</string>
|
||||
<string name="sending_location_messages">Sendante lokon</string>
|
||||
<string name="password_descr">Pasvorto de Telegram</string>
|
||||
<string name="enter_password">Tajpu pasvorton</string>
|
||||
<string name="show_on_map">Montri sur mapo</string>
|
||||
<string name="hours_format">%1$d h</string>
|
||||
<string name="minutes_format">%1$d min</string>
|
||||
<string name="hours_and_minutes_format">%1$d h %2$d min</string>
|
||||
<string name="shared_string_sent">Sendita</string>
|
||||
<string name="not_logged_in">Vi ne estas salutinta</string>
|
||||
<string name="closing">Fermante</string>
|
||||
<string name="logging_out">Adiaŭante</string>
|
||||
<string name="initialization">Lanĉante</string>
|
||||
<string name="shared_string_logout">Adiaŭi</string>
|
||||
<string name="shared_string_login">Saluti</string>
|
||||
<string name="osmand_service">Fona reĝimo</string>
|
||||
<string name="shared_string_off">Malaktiva</string>
|
||||
<string name="shared_string_all">Ĉiuj</string>
|
||||
<string name="shared_string_close">Fermi</string>
|
||||
<string name="shared_string_exit">Eliri</string>
|
||||
<string name="shared_string_save">Konservi</string>
|
||||
<string name="shared_string_disable">Malaktivigi</string>
|
||||
<string name="shared_string_apply">Apliki</string>
|
||||
<string name="unit_of_length_descr">Ŝanĝi unuojn por reprezenti distancoj.</string>
|
||||
<string name="logcat_buffer">Bufro logcat</string>
|
||||
<string name="logcat_buffer_descr">Legi kaj kunhavigi detalajn protokolojn de la aplikaĵo</string>
|
||||
</resources>
|
|
@ -69,7 +69,7 @@
|
|||
<string name="mile">mi</string>
|
||||
<string name="km">km</string>
|
||||
<string name="m">m</string>
|
||||
<string name="nm">nmi</string>
|
||||
<string name="nm">M</string>
|
||||
<string name="min_mile">min/m</string>
|
||||
<string name="min_km">min/km</string>
|
||||
<string name="m_s">m/s</string>
|
||||
|
@ -249,7 +249,7 @@
|
|||
<string name="shared_string_authorization">Autoriseerimine</string>
|
||||
<string name="shared_string_authorization_descr">Palun sisesta oma Telegrami telefoninumber rahvusvahelises formaadis</string>
|
||||
<string name="shared_string_welcome">Tere tulemast</string>
|
||||
<string name="nm_h">nmi/h</string>
|
||||
<string name="nm_h">sõlme</string>
|
||||
<string name="si_nm_h">Meremiili tunnis (sõlm)</string>
|
||||
<string name="shared_string_hour_short">h</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<string name="shared_string_map">نقشه</string>
|
||||
<string name="average_altitude">میانگین ارتفاع</string>
|
||||
<string name="average_speed">میانگین سرعت</string>
|
||||
<string name="shared_string_update">بهروزرسانی</string>
|
||||
<string name="shared_string_update">روزآمدسازی</string>
|
||||
<string name="shared_string_ok">خُب</string>
|
||||
<string name="shared_string_search">جستوجو</string>
|
||||
<string name="altitude">ارتفاع</string>
|
||||
|
@ -81,5 +81,5 @@
|
|||
<string name="send_report">ارسال گزارش</string>
|
||||
<string name="shared_string_export">برونبرد</string>
|
||||
<string name="logcat_buffer">بافر لاگکت</string>
|
||||
<string name="logcat_buffer_descr">لاگهای جزئی برنامه را بررسی و همرسانی کنید</string>
|
||||
<string name="logcat_buffer_descr">لاگهای باجزئیات برنامه را بررسی و همرسانی کنید</string>
|
||||
</resources>
|
|
@ -41,4 +41,5 @@
|
|||
<string name="shared_string_enable">Ota käyttöön</string>
|
||||
<string name="shared_string_select">Valitse</string>
|
||||
<string name="shared_string_apply">Käytä</string>
|
||||
<string name="shared_string_sort">Lajittele</string>
|
||||
</resources>
|
|
@ -213,7 +213,7 @@
|
|||
<string name="by_group">Par groupe</string>
|
||||
<string name="by_distance">Par distance</string>
|
||||
<string name="logout_from_osmand_telegram">Se déconnecter d\'OsmAnd Tracker \?</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Êtes-vous sûr·e de vouloir vous déconnecter d\'OsmAnd Tracker ; vous ne pourrez pas partager votre position ni vous la position des autres \?</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Êtes-vous certain de vouloir vous déconnecter d\'OsmAnd Tracker \? Vous ne pourrez pas partager votre position ni voir la position des autres.</string>
|
||||
<string name="live_now_description">Contacts et groupes partageant leur position avec vous.</string>
|
||||
<string name="share_location_as">Partager la position comme</string>
|
||||
<string name="add_device">Ajouter un périphérique</string>
|
||||
|
@ -237,7 +237,7 @@
|
|||
<string name="not_possible_to_send_to_telegram_chats">Impossible d\'envoyer dans les discussions Telegram :</string>
|
||||
<string name="successfully_sent_and_updated">Envoyé et mis à jour avec succès</string>
|
||||
<string name="last_updated_location">Dernière position mise à jour :</string>
|
||||
<string name="share_location_as_description">Si vous voulez connecter plusieurs appareils à un même compte Telegram, vous devez utiliser un appareil différent pour partager votre position.</string>
|
||||
<string name="share_location_as_description">Si vous souhaitez connecter plusieurs appareils à un même compte Telegram, vous devez partager votre position depuis chaque appareil.</string>
|
||||
<string name="share_location_as_description_second_line">Vous pouvez créer et visualiser l\'identifiant du périphérique dans le client Telegram en utilisant le chat-bot %1$s. %2$s</string>
|
||||
<string name="enter_device_name_description">Nommez votre nouveau périphérique en max 200 symboles.</string>
|
||||
<string name="enter_another_device_name">Choisissez un nom que vous n\'avez pas encore utilisé</string>
|
||||
|
@ -266,7 +266,7 @@
|
|||
<string name="location_history_desc">Cacher les contacts qui ne se sont pas déplacés depuis un temps donné.</string>
|
||||
<string name="set_time_description">Définissez l\'heure à laquelle les contacts et groupes sélectionnés verront votre position en temps réel.</string>
|
||||
<string name="osmand_connect">OsmAnd connect</string>
|
||||
<string name="time_ago">depuis</string>
|
||||
<string name="time_ago">il y a</string>
|
||||
<string name="logcat_buffer">Buffer Logcat</string>
|
||||
<string name="logcat_buffer_descr">Vérifier et partager les logs détaillés de l\'application</string>
|
||||
<string name="shared_string_export">Exporter</string>
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
<string name="get_telegram_description_continue">Kérjük, telepítse a Telegramot és hozzon létre egy fiókot.</string>
|
||||
<string name="get_telegram_after_creating_account">Utána használhatja ezt az alkalmazást.</string>
|
||||
<string name="shared_string_all">Minden</string>
|
||||
<string name="shared_string_off">Kikapcsolás</string>
|
||||
<string name="shared_string_off">Kikapcsolva</string>
|
||||
<string name="hours_and_minutes_format">%1$d óra %2$d perc</string>
|
||||
<string name="minutes_format">%1$d perc</string>
|
||||
<string name="shared_string_install">Telepítés</string>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<string name="proxy_port">ポート</string>
|
||||
<string name="proxy_server">サーバー</string>
|
||||
<string name="shared_string_connection">接続</string>
|
||||
<string name="shared_string_enable">有効</string>
|
||||
<string name="shared_string_enable">有効化</string>
|
||||
<string name="proxy_type">プロキシタイプ</string>
|
||||
<string name="proxy_connected">接続しました</string>
|
||||
<string name="proxy_disconnected">切断しました</string>
|
||||
|
|
|
@ -258,7 +258,7 @@
|
|||
<string name="unit_of_speed_system_descr">Definieer de eenheid voor snelheid.</string>
|
||||
<string name="unit_of_speed_system">Eenheid van snelheid</string>
|
||||
<string name="send_report">Stuur rapport</string>
|
||||
<string name="shared_string_export">Exporteer naar OSM</string>
|
||||
<string name="shared_string_export">Exporteer</string>
|
||||
<string name="logcat_buffer">Logcat buffer</string>
|
||||
<string name="logcat_buffer_descr">Controleer en deel gedetailleerde logs van de app</string>
|
||||
</resources>
|
|
@ -2,12 +2,12 @@
|
|||
<resources>
|
||||
<string name="timeline_no_data">Sem dados</string>
|
||||
<string name="shared_string_select">Selecionar</string>
|
||||
<string name="min_logging_distance">Distância mínima de registro</string>
|
||||
<string name="min_logging_distance_descr">Filtro: distância mínima para registrar um novo ponto</string>
|
||||
<string name="min_logging_accuracy">Precisão mínima de registro</string>
|
||||
<string name="min_logging_accuracy_descr">Filtro: sem registro, a menos que a precisão seja atingida</string>
|
||||
<string name="min_logging_speed">Velocidade mínima de registro</string>
|
||||
<string name="min_logging_speed_descr">Filtro: sem registro abaixo da velocidade selecionada</string>
|
||||
<string name="min_logging_distance">Distância mínima de registo</string>
|
||||
<string name="min_logging_distance_descr">Filtro: distância mínima para registar um novo ponto</string>
|
||||
<string name="min_logging_accuracy">Precisão mínima de registo</string>
|
||||
<string name="min_logging_accuracy_descr">Filtro: sem registo, a não ser que seja atingida a precisão</string>
|
||||
<string name="min_logging_speed">Velocidade mínima de registo</string>
|
||||
<string name="min_logging_speed_descr">Filtro: sem registo abaixo da velocidade selecionada</string>
|
||||
<string name="proxy_password">Palavra-passe</string>
|
||||
<string name="proxy_username">Nome de utilizador</string>
|
||||
<string name="shared_string_enable">Ativar</string>
|
||||
|
@ -16,7 +16,7 @@
|
|||
<string name="altitude">Altitude</string>
|
||||
<string name="shared_string_search">Pesquisar</string>
|
||||
<string name="shared_string_ok">Ok</string>
|
||||
<string name="app_name_short">Rastreador OsmAnd</string>
|
||||
<string name="app_name_short">OsmAnd Tracker</string>
|
||||
<string name="shared_string_telegram">Telegram</string>
|
||||
<string name="shared_string_appearance">Aparência</string>
|
||||
<string name="shared_string_update">Atualizar</string>
|
||||
|
@ -35,13 +35,13 @@
|
|||
<string name="shared_string_end">Fim</string>
|
||||
<string name="shared_string_start">Iniciar</string>
|
||||
<string name="shared_string_apply">Aplicar</string>
|
||||
<string name="set_time_timeline_descr">Selecionar a hora para exibir</string>
|
||||
<string name="set_time_timeline_descr">Selecionar a hora de visualização</string>
|
||||
<string name="start_end_date">Data de início - fim</string>
|
||||
<string name="timeline_no_data_descr">Não coletamos dados para o dia selecionado</string>
|
||||
<string name="timeline_no_data_descr">Não temos dados recolhidos para o dia selecionado</string>
|
||||
<string name="gpx_settings">Configurações de GPX</string>
|
||||
<string name="proxy_key">Chave</string>
|
||||
<string name="proxy_credentials">Credenciais</string>
|
||||
<string name="proxy_port">Port</string>
|
||||
<string name="proxy_port">Porta</string>
|
||||
<string name="proxy_server">Servidor</string>
|
||||
<string name="shared_string_connection">Conexão</string>
|
||||
<string name="proxy_type">Tipo de proxy</string>
|
||||
|
@ -50,16 +50,16 @@
|
|||
<string name="proxy_settings">Configurações de proxy</string>
|
||||
<string name="proxy">Proxy</string>
|
||||
<string name="precision">Precisão</string>
|
||||
<string name="bearing">Rolamento</string>
|
||||
<string name="search_contacts">Pesquisar contatos</string>
|
||||
<string name="search_contacts_descr">Pesquise em todos os seus grupos e contatos.</string>
|
||||
<string name="type_contact_or_group_name">Digite o nome do contato ou do grupo</string>
|
||||
<string name="bearing">Rumo</string>
|
||||
<string name="search_contacts">Pesquisar contactos</string>
|
||||
<string name="search_contacts_descr">Pesquise em todos os seus grupos e contactos.</string>
|
||||
<string name="type_contact_or_group_name">Digite o nome do contacto ou do grupo</string>
|
||||
<string name="timeline_available_for_free_now">Linha do tempo é um recurso disponível agora gratuitamente.</string>
|
||||
<string name="disable_monitoring">Desativar monitoramento</string>
|
||||
<string name="disable_monitoring">Desativar monitorização</string>
|
||||
<string name="location_recording_enabled">Gravação de localização ativada</string>
|
||||
<string name="timeline_description">Ative o monitoramento para gravar todos os locais no histórico.</string>
|
||||
<string name="privacy_policy_use_telegram">Telegram (a app de mensagens) é usado para conectar e comunicar com as pessoas.</string>
|
||||
<string name="privacy_policy_telegram_client">OsmAnd tracker é um dos clientes que usam a Plataforma aberta do Telegram . Seus contatos podem usar qualquer outro cliente Telegram.</string>
|
||||
<string name="timeline_description">Ative a monitorização para gravar todos os locais no histórico.</string>
|
||||
<string name="privacy_policy_use_telegram">O Telegram (a aplicação de mensagens) é usado para conectar e comunicar com outras pessoas.</string>
|
||||
<string name="privacy_policy_telegram_client">OsmAnd Tracker é um dos clientes que usam a Plataforma aberta do Telegram. Os seus contactos podem usar qualquer outro cliente Telegram.</string>
|
||||
<string name="privacy_policy_agree">Ao clicar em \"Continuar\" concorda com as condições da política de privacidade do Telegram e OsmAnd.</string>
|
||||
<string name="shared_string_accept">Aceitar</string>
|
||||
<string name="telegram_privacy_policy">Política de privacidade do Telegram</string>
|
||||
|
@ -67,68 +67,68 @@
|
|||
<string name="how_it_works">Como funciona</string>
|
||||
<string name="received_gps_points">Pontos GPX recebidos: %1$s</string>
|
||||
<string name="show_gps_points">Mostrar pontos de GPS</string>
|
||||
<string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS coletados e enviados.</string>
|
||||
<string name="show_gps_points_descr">Mostrar quantidade de pontos de GPS recolhidos e enviados.</string>
|
||||
<string name="please_update_osmand">Por favor, atualize o OsmAnd para ver os dados no mapa</string>
|
||||
<string name="gps_points_in_buffer">enviado (%1$d em buffer)</string>
|
||||
<string name="points_size">%1$d pontos</string>
|
||||
<string name="shared_string_collected">Coletado</string>
|
||||
<string name="shared_string_collected">Recolhidos</string>
|
||||
<string name="gps_points">Pontos de GPS</string>
|
||||
<string name="shared_string_sent">Enviado</string>
|
||||
<string name="monitoring_is_enabled">Monitoramento está ativado</string>
|
||||
<string name="monitoring_is_disabled">Monitoramento está desativado</string>
|
||||
<string name="monitoring_is_enabled">A monitorização está ativada</string>
|
||||
<string name="monitoring_is_disabled">A monitorização está desativada</string>
|
||||
<string name="open_in_osmand">Mostrar no OsmAnd</string>
|
||||
<string name="end_date">Data final</string>
|
||||
<string name="end_date">Data de fim</string>
|
||||
<string name="send_location_as">Enviar localização como</string>
|
||||
<string name="send_location_as_descr">Escolha como as mensagens com sua localização serão exibidas.</string>
|
||||
<string name="send_location_as_descr">Escolha a forma como as mensagens com a sua localização serão mostradas.</string>
|
||||
<string name="map_and_text">Mapa e texto</string>
|
||||
<string name="last_update_from_telegram">Última atualização do Telegram</string>
|
||||
<string name="enter_another_device_name">Escolha um nome que ainda não usou</string>
|
||||
<string name="device_added_successfully">%1$s adicionado.</string>
|
||||
<string name="error_adding_new_device">Não foi possível adicionar novo aparelho</string>
|
||||
<string name="enter_device_name_description">Nomeie seu novo aparelho no máximo 200 símbolos.</string>
|
||||
<string name="device_name_is_too_long">Nome do aparelho muito longo</string>
|
||||
<string name="device_name_cannot_be_empty">O nome do aparelho não pode estar vazio</string>
|
||||
<string name="device_name">Nome do aparelho</string>
|
||||
<string name="share_location_as_description_second_line">Pode criar e visualizar o ID do aparelho no cliente de telegrama usando o bot de bate-papo %1$s. %2$s</string>
|
||||
<string name="share_location_as_description">Se deseja conectar vários aparelhos a uma conta de telegrama, é necessário usar um aparelho diferente para compartilhar a sua localização.</string>
|
||||
<string name="error_adding_new_device">Não foi possível adicionar o novo dispositivo</string>
|
||||
<string name="enter_device_name_description">Atribua um nome a seu novo dispositivo com o máximo de 200 caracteres.</string>
|
||||
<string name="device_name_is_too_long">Nome do dispositivo muito longo</string>
|
||||
<string name="device_name_cannot_be_empty">O nome do dispositivo não pode estar vazio</string>
|
||||
<string name="device_name">Nome do dispositivo</string>
|
||||
<string name="share_location_as_description_second_line">Pode criar e visualizar o ID do dispositivo no cliente de Telegram usando o robô de bate-papo %1$s. %2$s</string>
|
||||
<string name="share_location_as_description">Se quer conectar vários dispositivos a uma conta no Telegram, é necessário usar um dispositivo diferente para partilhar a sua localização.</string>
|
||||
<string name="last_updated_location">Última localização atualizada:</string>
|
||||
<string name="successfully_sent_and_updated">Enviado e atualizado com sucesso</string>
|
||||
<string name="not_possible_to_send_to_telegram_chats">Não é possível enviar para bate-papo do Telegram:</string>
|
||||
<string name="waiting_for_response_from_telegram">Aguardando resposta do Telegram</string>
|
||||
<string name="sending_location_messages">enviando localização</string>
|
||||
<string name="initializing">Iniciando</string>
|
||||
<string name="searching_for_gps">Posicionando…</string>
|
||||
<string name="waiting_for_response_from_telegram">A aguardar a resposta do Telegram</string>
|
||||
<string name="sending_location_messages">A enviar a localização</string>
|
||||
<string name="initializing">A iniciar</string>
|
||||
<string name="searching_for_gps">A posicionar…</string>
|
||||
<string name="connecting_to_the_internet">Conectando-se à Internet</string>
|
||||
<string name="background_work_description">Altere as configurações de otimização da bateria para estabilizar o compartilhamento de local.</string>
|
||||
<string name="background_work_description">Altere as configurações de otimização da bateria para estabilizar a partilha da localização.</string>
|
||||
<string name="background_work">Funcionamento em segundo plano</string>
|
||||
<string name="battery_optimization_description">Desative a otimização da bateria do OsmAnd Tracker para que ele não seja desligado repentinamente quando estiver em segundo plano.</string>
|
||||
<string name="sharing_in_background">Compartilhando em segundo plano</string>
|
||||
<string name="go_to_settings">Vá para as configurações</string>
|
||||
<string name="sharing_in_background">Partilha em segundo plano</string>
|
||||
<string name="go_to_settings">Ir às configurações</string>
|
||||
<string name="not_sent_yet">Ainda não enviado</string>
|
||||
<string name="not_found_yet">Ainda não encontrado</string>
|
||||
<string name="re_send_location">Reenvie o local</string>
|
||||
<string name="last_available_location">Última localização disponível</string>
|
||||
<string name="sharing_status">Estado de compartilhamento</string>
|
||||
<string name="location_sharing_status">Compartilhamento: %1$s</string>
|
||||
<string name="sharing_status">Estado da partilha</string>
|
||||
<string name="location_sharing_status">Partilha: %1$s</string>
|
||||
<string name="shared_string_enabled">Ativado</string>
|
||||
<string name="no_gps_connection">Sem conexão GPS</string>
|
||||
<string name="no_internet_connection">Sem conexão com a internet</string>
|
||||
<string name="no_internet_connection">Sem ligação à Internet</string>
|
||||
<string name="shared_string_disable">Desativar</string>
|
||||
<string name="shared_string_save">Gravar</string>
|
||||
<string name="add_device">Adicionar aparelho</string>
|
||||
<string name="share_location_as">Compartilhar localização como</string>
|
||||
<string name="live_now_description">Contatos e grupos compartilhando o local consigo.</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Tem certeza de que deseja sair do OsmAnd Tracker para que não possa compartilhar o local ou ver a localização de outras pessoas\?</string>
|
||||
<string name="shared_string_save">Guardar</string>
|
||||
<string name="add_device">Adicionar dispositivo</string>
|
||||
<string name="share_location_as">Partilhar localização como</string>
|
||||
<string name="live_now_description">Contactos e grupos partilhando a localização consigo.</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Tem a certeza de que quer sair do OsmAnd Tracker para que não possa partilhar a localização ou ver a localização de outras pessoas\?</string>
|
||||
<string name="logout_from_osmand_telegram">Sair do OsmAnd Tracker\?</string>
|
||||
<string name="shared_string_name">Nome</string>
|
||||
<string name="by_distance">Pela distância</string>
|
||||
<string name="by_name">Por nome</string>
|
||||
<string name="by_group">Por grupo</string>
|
||||
<string name="shared_string_sort">Ordenar</string>
|
||||
<string name="choose_osmand_desc">Selecione a versão OsmAnd, onde os contatos serão exibidos no mapa.</string>
|
||||
<string name="choose_osmand_desc">Selecione a versão OsmAnd onde os contactos serão mostrados no mapa.</string>
|
||||
<string name="choose_osmand">Selecione a versão do OsmAnd para usar</string>
|
||||
<string name="disable_all_sharing_desc">Desativa o compartilhamento de local para todos os bate-papos selecionados (%1$d).</string>
|
||||
<string name="disable_all_sharing">Desativar todo o compartilhamento</string>
|
||||
<string name="disable_all_sharing_desc">Desativa a partilha da localização para todos os bate-papos selecionados (%1$d).</string>
|
||||
<string name="disable_all_sharing">Desativar todas as partilhas</string>
|
||||
<string name="turn_off_all">Desligue todos</string>
|
||||
<string name="shared_string_exit">Sair</string>
|
||||
<string name="time_ago">atrás</string>
|
||||
|
@ -136,34 +136,34 @@
|
|||
<string name="shared_string_group">Grupo</string>
|
||||
<string name="logout_no_internet_msg">Conecte-se à Internet para efetuar a saída do Telegram corretamente.</string>
|
||||
<string name="shared_string_close">Fechar</string>
|
||||
<string name="disconnect_from_telegram_desc">Para revogar o acesso ao compartilhamento de local. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker.</string>
|
||||
<string name="disconnect_from_telegram_desc">Para revogar o acesso à partilha da localização. Abra o Telegram, vá para Configurações → Privacidade e Segurança → Sessões e termine a sessão do OsmAnd Tracker.</string>
|
||||
<string name="disconnect_from_telegram">Como desativar o OsmAnd Tracker para Telegram</string>
|
||||
<string name="logout_help_desc">Como desativar o OsmAnd Tracker para Telegram</string>
|
||||
<string name="connected_account">Conta conectada</string>
|
||||
<string name="shared_string_account">Conta</string>
|
||||
<string name="in_time">no %1$s</string>
|
||||
<string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para exibir posições.</string>
|
||||
<string name="osmand_connect_desc">Escolha a versão OsmAnd que OsmAnd Tracker usa para mostrar posições.</string>
|
||||
<string name="osmand_connect">Conectar OsmAnd</string>
|
||||
<string name="location_history_desc">Ocultar contactos que não foram movidos num determinado momento.</string>
|
||||
<string name="location_history">Histórico de localização</string>
|
||||
<string name="stale_location_desc">A última vez que um contato foi movido.</string>
|
||||
<string name="stale_location_desc">A última vez que um contacto foi movido.</string>
|
||||
<string name="stale_location">Parado</string>
|
||||
<string name="send_my_location_desc">Defina o intervalo mínimo para o compartilhamento de local.</string>
|
||||
<string name="send_my_location">Enviar minha localização</string>
|
||||
<string name="send_my_location_desc">Defina o intervalo mínimo para a partilha da localização.</string>
|
||||
<string name="send_my_location">Enviar a minha localização</string>
|
||||
<string name="gps_and_location">Posição</string>
|
||||
<string name="sharing_time">Tempo de compartilhamento</string>
|
||||
<string name="sharing_time">Tempo de partilha</string>
|
||||
<string name="expire_at">Expira</string>
|
||||
<string name="stop_sharing_all">O compartilhamento está ativado (desativado)</string>
|
||||
<string name="turn_off_location_sharing">Desativar o compartilhamento de local</string>
|
||||
<string name="stop_sharing_all">A partilha está ativada (desativar)</string>
|
||||
<string name="turn_off_location_sharing">Desativar a partilha da localização</string>
|
||||
<string name="open_osmand">Abrir OsmAnd</string>
|
||||
<string name="shared_string_live">Vivo</string>
|
||||
<string name="shared_string_live">Tempo real</string>
|
||||
<string name="shared_string_bot">Robô</string>
|
||||
<string name="get_telegram_title">Registro no Telegram</string>
|
||||
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar o compartilhamento de local.</string>
|
||||
<string name="get_telegram_title">Registo no Telegram</string>
|
||||
<string name="get_telegram_account_first">Precisa de uma conta do Telegram para usar a partilha de localização.</string>
|
||||
<string name="get_telegram_description_continue">Por favor, instale o Telegram e configure uma conta.</string>
|
||||
<string name="get_telegram_after_creating_account">Então pode usar esta app.</string>
|
||||
<string name="shared_string_all">Todos</string>
|
||||
<string name="shared_string_off">Desligado</string>
|
||||
<string name="get_telegram_after_creating_account">Depois pode usar esta aplicação.</string>
|
||||
<string name="shared_string_all">Tudo</string>
|
||||
<string name="shared_string_off">Desativado</string>
|
||||
<string name="already_registered_in_telegram">Precisa de uma conta e número de telefone registados no Telegram</string>
|
||||
<string name="do_not_have_telegram">Não tenho uma conta do Telegram</string>
|
||||
<string name="enter_phone_number">Digite o número de telefone</string>
|
||||
|
@ -173,42 +173,42 @@
|
|||
<string name="minutes_format">%1$d m</string>
|
||||
<string name="hours_format">%1$d h</string>
|
||||
<string name="shared_string_install">Instalar</string>
|
||||
<string name="shared_string_share">Compartilhar</string>
|
||||
<string name="shared_string_share">Partilhar</string>
|
||||
<string name="shared_string_back">Voltar</string>
|
||||
<string name="visible_time_for_all">Hora visível para todos</string>
|
||||
<string name="set_time_description">Defina a hora em que seus contatos e grupos selecionados verão sua localização em tempo real.</string>
|
||||
<string name="set_time">Definir tempo</string>
|
||||
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja compartilhar sua localização.</string>
|
||||
<string name="my_location_search_hint">Pesquisa: Grupo ou contato</string>
|
||||
<string name="start_location_sharing">Compartilhar localização</string>
|
||||
<string name="set_time_description">Defina a hora em que os seus contactos e grupos selecionados verão a sua localização em tempo real.</string>
|
||||
<string name="set_time">Definir hora</string>
|
||||
<string name="location_sharing_description">Selecione os contactos e grupos com os quais deseja partilhar a sua localização.</string>
|
||||
<string name="my_location_search_hint">Pesquisa: grupo ou contacto</string>
|
||||
<string name="start_location_sharing">Partilhar localização</string>
|
||||
<string name="show_on_map">Mostrar no mapa</string>
|
||||
<string name="app_name">OsmAnd Online GPS Tracker</string>
|
||||
<string name="phone_number_title">Número de telefone</string>
|
||||
<string name="phone_number_descr">Número de telefone no formato internacional</string>
|
||||
<string name="shared_string_password">Palavra-passe</string>
|
||||
<string name="enter_code">Digite o código</string>
|
||||
<string name="authentication_code">Código de Autenticação</string>
|
||||
<string name="authentication_code_descr">Uma faixa GPX é salva automaticamente durante a navegação.</string>
|
||||
<string name="authentication_code">Código de autenticação</string>
|
||||
<string name="authentication_code_descr">O Telegram enviou-lhe um código para o OsmAnd para iniciar sessão na sua conta.</string>
|
||||
<string name="enter_password">Digite a palavra-passe</string>
|
||||
<string name="password_descr">Palavra-passe do telegrama</string>
|
||||
<string name="password_descr">Palavra-passe do Telegram</string>
|
||||
<string name="shared_string_login">Entrar</string>
|
||||
<string name="shared_string_logout">Sair</string>
|
||||
<string name="initialization">Iniciando</string>
|
||||
<string name="logging_out">Saindo</string>
|
||||
<string name="closing">Fechando</string>
|
||||
<string name="initialization">A iniciar</string>
|
||||
<string name="logging_out">A terminar sessão</string>
|
||||
<string name="closing">A fechar</string>
|
||||
<string name="gps_network_not_enabled">Ativar \"Localização\"\?</string>
|
||||
<string name="not_logged_in">você não está logado no</string>
|
||||
<string name="not_logged_in">Não tem a sessão iniciada</string>
|
||||
<string name="shared_string_continue">Continuar</string>
|
||||
<string name="shared_string_cancel">Cancelar</string>
|
||||
<string name="shared_string_settings">Configurações</string>
|
||||
<string name="no_location_permission">A app não tem permissão para acessar os dados de localização.</string>
|
||||
<string name="gps_not_available">Por favor, ligue \"Localização\" nas configurações do sistema</string>
|
||||
<string name="location_service_no_gps_available">Selecione um dos provedores de localização para compartilhar sua localização.</string>
|
||||
<string name="osmand_service">Modo de fundo</string>
|
||||
<string name="osmand_service_descr">OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string>
|
||||
<string name="no_location_permission">A aplicação não tem permissão para aceder aos dados de localização.</string>
|
||||
<string name="gps_not_available">Por favor, ative a \"Localização\" nas configurações do sistema</string>
|
||||
<string name="location_service_no_gps_available">Selecione um dos fornecedores de localização para partilhar a sua localização.</string>
|
||||
<string name="osmand_service">Modo em segundo plano</string>
|
||||
<string name="osmand_service_descr">O OsmAnd Tracker é executado em segundo plano com o ecrã desligado.</string>
|
||||
<string name="shared_string_distance">Distância</string>
|
||||
<string name="share_location">Compartilhar localização</string>
|
||||
<string name="sharing_location">Compartilhando localização</string>
|
||||
<string name="share_location">Partilhar localização</string>
|
||||
<string name="sharing_location">A partilhar a localização</string>
|
||||
<string name="process_service">Serviço OsmAnd Tracker</string>
|
||||
<string name="osmand_logo">Logotipo do OsmAnd</string>
|
||||
<string name="install_osmand_dialog_message">Precisa instalar a versão gratuita ou paga do OsmAnd primeiro</string>
|
||||
|
@ -229,13 +229,13 @@
|
|||
<string name="nm_h">mn/h</string>
|
||||
<string name="m_s">m/s</string>
|
||||
<string name="km_h">km/h</string>
|
||||
<string name="mile_per_hour">mph</string>
|
||||
<string name="mile_per_hour">mi/h</string>
|
||||
<string name="si_kmh">Quilómetros por hora</string>
|
||||
<string name="si_mph">Milhas por hora</string>
|
||||
<string name="si_m_s">Metros por segundo</string>
|
||||
<string name="si_min_km">Minutos por quilómetro</string>
|
||||
<string name="si_min_m">Minutos por milha</string>
|
||||
<string name="si_nm_h">Milhas náuticas por hora (nó)</string>
|
||||
<string name="si_nm_h">Milhas náuticas por hora (nós)</string>
|
||||
<string name="si_mi_feet">Milhas/pés</string>
|
||||
<string name="si_mi_yard">Milhas/jardas</string>
|
||||
<string name="si_km_m">Quilómetros/metros</string>
|
||||
|
@ -244,8 +244,8 @@
|
|||
<string name="shared_string_hour_short">h</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
<string name="shared_string_second_short">seg</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>O app usa a API Telegram e precisa de uma conta do Telegram.</string>
|
||||
<string name="my_location">Minha localização</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> permite que partilhe a sua localização e veja a dos outros no OsmAnd.<br/> <br/>A aplicação usa a API do Telegram e é necessário ter uma conta no Telegram.</string>
|
||||
<string name="my_location">A minha posição</string>
|
||||
<string name="live_now">Ao vivo agora</string>
|
||||
<string name="timeline">Cronologia</string>
|
||||
<string name="saved_messages">Mensagens gravadas</string>
|
||||
|
@ -259,7 +259,7 @@
|
|||
<string name="buffer_time_descr">Tempo máximo para armazenar pontos no buffer</string>
|
||||
<string name="buffer_time">Tempo de expiração do buffer</string>
|
||||
<string name="shared_string_suggested">Sugerido</string>
|
||||
<string name="status_widget_title">Estado do Rastreador de OsmAnd</string>
|
||||
<string name="status_widget_title">Estado do OsmAnd Tracker</string>
|
||||
<string name="back_to_osmand">Voltar para OsmAnd</string>
|
||||
<string name="duration_ago">%1$s atrás</string>
|
||||
<string name="last_response_duration">Última resposta: %1$s atrás</string>
|
||||
|
@ -270,5 +270,5 @@
|
|||
<string name="send_report">Enviar o relatório</string>
|
||||
<string name="shared_string_export">Exportar</string>
|
||||
<string name="logcat_buffer">Buffer de logcat</string>
|
||||
<string name="logcat_buffer_descr">Verifique e compartilhe registos detalhados da app</string>
|
||||
<string name="logcat_buffer_descr">Verifique e partilhe registos detalhados da aplicação</string>
|
||||
</resources>
|
|
@ -1,4 +1,274 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="last_update_from_telegram_date">Senaste uppdatering från Telegram: %1$s</string>
|
||||
<string name="timeline">Tidslinje</string>
|
||||
<string name="live_now">Direkt nu</string>
|
||||
<string name="my_location">Min plats</string>
|
||||
<string name="welcome_descr"><b>OsmAnd Tracker</b> låter dig dela din plats och se andras i OsmAnd. <br/> <br/>Appen använder Telegram API, så du behöver ett Telegram-konto.</string>
|
||||
<string name="shared_string_second_short">sek</string>
|
||||
<string name="shared_string_minute_short">min</string>
|
||||
<string name="shared_string_hour_short">t</string>
|
||||
<string name="si_mi_meters">Miles/meter</string>
|
||||
<string name="si_nm">Distansminuter</string>
|
||||
<string name="si_km_m">Kilomter/meter</string>
|
||||
<string name="si_mi_yard">Miles/yard</string>
|
||||
<string name="si_mi_feet">Miles/fot</string>
|
||||
<string name="si_nm_h">Sjömil per timme (knop)</string>
|
||||
<string name="si_min_m">Minuter per mile</string>
|
||||
<string name="si_min_km">Minuter per kilometer</string>
|
||||
<string name="si_m_s">Meter per sekund</string>
|
||||
<string name="si_mph">Miles per timme</string>
|
||||
<string name="si_kmh">Kilometer per timme</string>
|
||||
<string name="mile_per_hour">mph</string>
|
||||
<string name="km_h">km/h</string>
|
||||
<string name="m_s">m/s</string>
|
||||
<string name="nm_h">M/h</string>
|
||||
<string name="min_km">min/km</string>
|
||||
<string name="min_mile">min/mi</string>
|
||||
<string name="nm">di</string>
|
||||
<string name="m">m</string>
|
||||
<string name="km">km</string>
|
||||
<string name="mile">mi</string>
|
||||
<string name="foot">ft</string>
|
||||
<string name="yard">yd</string>
|
||||
<string name="shared_string_welcome">Välkommen</string>
|
||||
<string name="shared_string_authorization_descr">Ange ditt Telegram-telefonnummer i internationellt format</string>
|
||||
<string name="shared_string_authorization">Tillstånd</string>
|
||||
<string name="active_chats">Aktivera chattar</string>
|
||||
<string name="show_users_on_map">Visa användare på kartan</string>
|
||||
<string name="install_osmand">Installera OsmAnd</string>
|
||||
<string name="install_osmand_dialog_message">Du måste installera den gratis eller betalda versionen av OsmAnd först</string>
|
||||
<string name="osmand_logo">OsmAnd logotyp</string>
|
||||
<string name="process_service">OsmAnd Tracker tjänst</string>
|
||||
<string name="sharing_location">Delar plats</string>
|
||||
<string name="share_location">Dela plats</string>
|
||||
<string name="shared_string_distance">Avstånd</string>
|
||||
<string name="osmand_service_descr">OsmAnd Tracker körs i bakgrunden medan skärmen är avstängd.</string>
|
||||
<string name="osmand_service">Bakgrundsläge</string>
|
||||
<string name="location_service_no_gps_available">Välj en av platsleverantörerna för att dela din plats.</string>
|
||||
<string name="gps_not_available">Aktivera \"Plats\" i systeminställningarna</string>
|
||||
<string name="no_location_permission">App saknar behörighet för plats data.</string>
|
||||
<string name="shared_string_settings">Inställningar</string>
|
||||
<string name="shared_string_cancel">Avbryt</string>
|
||||
<string name="shared_string_continue">Fortsätt</string>
|
||||
<string name="not_logged_in">Du är inte inloggad</string>
|
||||
<string name="gps_network_not_enabled">Starta \"Platsdelning\"\?</string>
|
||||
<string name="closing">Stänger</string>
|
||||
<string name="logging_out">Loggar ut</string>
|
||||
<string name="initialization">Startar</string>
|
||||
<string name="shared_string_logout">Logga ut</string>
|
||||
<string name="shared_string_login">Logga in</string>
|
||||
<string name="password_descr">Telegram-lösenord</string>
|
||||
<string name="enter_password">Ange lösenord</string>
|
||||
<string name="authentication_code_descr">Telegram har skickat en kod till dig för OmsAnd för inloggning till ditt konto.</string>
|
||||
<string name="authentication_code">Autentiseringskod</string>
|
||||
<string name="enter_code">Ange kod</string>
|
||||
<string name="shared_string_password">Lösenord</string>
|
||||
<string name="phone_number_descr">Telefonnummer i internationellt format</string>
|
||||
<string name="phone_number_title">Telefonnummer</string>
|
||||
<string name="app_name">OsmAnd Online GPS Tracker</string>
|
||||
<string name="show_on_map">Visa på karta</string>
|
||||
<string name="start_location_sharing">Platsdelning</string>
|
||||
<string name="my_location_search_hint">Sök: Grupp och kontakt</string>
|
||||
<string name="location_sharing_description">Välj de kontakter och grupper du vill dela din plats med.</string>
|
||||
<string name="set_time">Ange tid</string>
|
||||
<string name="set_time_description">Ställ in tiden att dina valda kontakter och grupper ska se din plats i realtid.</string>
|
||||
<string name="visible_time_for_all">Synlig tid för alla</string>
|
||||
<string name="shared_string_back">Bakåt</string>
|
||||
<string name="shared_string_share">Dela</string>
|
||||
<string name="shared_string_install">Installera</string>
|
||||
<string name="hours_format">%1$d t</string>
|
||||
<string name="minutes_format">%1$d m</string>
|
||||
<string name="hours_and_minutes_format">%1$d t %2$d m</string>
|
||||
<string name="set_visible_time_for_all">Ställ in synlig tid för alla</string>
|
||||
<string name="enter_authentication_code">Ange autentiseringskod</string>
|
||||
<string name="enter_phone_number">Skriv in telefonnummer</string>
|
||||
<string name="do_not_have_telegram">Jag har inget Telegramkonto</string>
|
||||
<string name="already_registered_in_telegram">Du behöver ett registrerat Telegramkonto och ett telefonnummer</string>
|
||||
<string name="shared_string_off">Av</string>
|
||||
<string name="shared_string_all">Alla</string>
|
||||
<string name="get_telegram_after_creating_account">Efter det kan du använda denna app.</string>
|
||||
<string name="get_telegram_description_continue">Installera Telegram och registrera ett konto.</string>
|
||||
<string name="get_telegram_account_first">Du behöver ett Telegramkonto för att använda platsdelning.</string>
|
||||
<string name="get_telegram_title">Registrering i Telegram</string>
|
||||
<string name="shared_string_bot">Bot</string>
|
||||
<string name="shared_string_live">Direkt</string>
|
||||
<string name="open_osmand">Öppna OsmAnd</string>
|
||||
<string name="turn_off_location_sharing">Stäng av platsdelning</string>
|
||||
<string name="stop_sharing_all">Delning är påslagen (stäng av)</string>
|
||||
<string name="expire_at">Går ut</string>
|
||||
<string name="sharing_time">Delningstid</string>
|
||||
<string name="gps_and_location">Plats</string>
|
||||
<string name="send_my_location">Skicka min plats</string>
|
||||
<string name="send_my_location_desc">Ställ in minsta intervall för platsdelning.</string>
|
||||
<string name="stale_location">Ingen rörelse</string>
|
||||
<string name="stale_location_desc">Senaste tid en kontakt rört sig.</string>
|
||||
<string name="location_history">Platshistorik</string>
|
||||
<string name="location_history_desc">Göm kontakter som inte har rört sig inom given tid.</string>
|
||||
<string name="osmand_connect">Anslutning till OsmAnd</string>
|
||||
<string name="osmand_connect_desc">Välj den OsmAnd-version som OsmAnd Tracker använder för att visa positioner.</string>
|
||||
<string name="in_time">i %1$s</string>
|
||||
<string name="shared_string_account">Konto</string>
|
||||
<string name="connected_account">Anlutet konto</string>
|
||||
<string name="logout_help_desc">Hur man stänger av OsmAnd Tracker från Telegram</string>
|
||||
<string name="disconnect_from_telegram">Hur man stänger av OsmAnd Tracker från Telegram</string>
|
||||
<string name="disconnect_from_telegram_desc">För att återkalla platsdelningsåtkomst. Öppna Telegram, gå till Inställningar → Sekretess och säkerhet → Sessioner och avsluta OsmAnd Tracker-sessionen.</string>
|
||||
<string name="shared_string_close">Stäng</string>
|
||||
<string name="logout_no_internet_msg">Anslut till internet för att logga ut ordentligt från Telegram.</string>
|
||||
<string name="shared_string_group">Grupp</string>
|
||||
<string name="last_response">Senaste svar</string>
|
||||
<string name="time_ago">sedan</string>
|
||||
<string name="shared_string_exit">Utgång</string>
|
||||
<string name="turn_off_all">Stäng av allt</string>
|
||||
<string name="disable_all_sharing">Inaktivera all delning</string>
|
||||
<string name="disable_all_sharing_desc">Stäng av platsdelning i alla valda chatter (%1$d).</string>
|
||||
<string name="choose_osmand">Välj OsmAnd version att använda</string>
|
||||
<string name="choose_osmand_desc">Välj OsmAnd version där kontakter kommer att visas på kartan.</string>
|
||||
<string name="shared_string_sort_by">Sortera efter</string>
|
||||
<string name="shared_string_sort">Sortera</string>
|
||||
<string name="by_group">Efter grupp</string>
|
||||
<string name="by_name">Efter namn</string>
|
||||
<string name="by_distance">Avstånd</string>
|
||||
<string name="shared_string_name">Namn</string>
|
||||
<string name="logout_from_osmand_telegram">Logga ut från OsmAnd Tracker\?</string>
|
||||
<string name="logout_from_osmand_telegram_descr">Är du säker på att du vill logga ut från OsmAnd Tracker så att du inte kan dela plats eller se andras plats\?</string>
|
||||
<string name="live_now_description">Kontakter och grupper delar plats med dig.</string>
|
||||
<string name="share_location_as">Dela plats som</string>
|
||||
<string name="add_device">Lägg till enhet</string>
|
||||
<string name="shared_string_save">Spara</string>
|
||||
<string name="shared_string_disable">Inaktivera</string>
|
||||
<string name="no_internet_connection">Ingen internet-anslutning</string>
|
||||
<string name="no_gps_connection">Ingen GPS-anslutning</string>
|
||||
<string name="shared_string_status">Status</string>
|
||||
<string name="shared_string_enabled">Aktiverat</string>
|
||||
<string name="location_sharing_status">Delar: %1$s</string>
|
||||
<string name="sharing_status">Delar status</string>
|
||||
<string name="last_available_location">Senaste tillgängliga plats</string>
|
||||
<string name="re_send_location">Skicka plats igen</string>
|
||||
<string name="not_found_yet">Hittades inte än</string>
|
||||
<string name="not_sent_yet">Inte skickat än</string>
|
||||
<string name="shared_string_later">Senare</string>
|
||||
<string name="go_to_settings">Gå till inställningar</string>
|
||||
<string name="sharing_in_background">Delar i bakgrunden</string>
|
||||
<string name="battery_optimization_description">Stäng av batterioptimering för OsmAnd Tracker så att den inte plötsligt stängs av i bakgrunden.</string>
|
||||
<string name="background_work">Bakgrundsarbete</string>
|
||||
<string name="background_work_description">Ändra batterioptimeringsinställningarna för att stabilisera platsdelning.</string>
|
||||
<string name="connecting_to_the_internet">Ansluter till internet</string>
|
||||
<string name="searching_for_gps">Positionering …</string>
|
||||
<string name="initializing">Startar</string>
|
||||
<string name="sending_location_messages">Skickar plats</string>
|
||||
<string name="waiting_for_response_from_telegram">Väntar på svar från Telegram</string>
|
||||
<string name="not_possible_to_send_to_telegram_chats">Inte möjligt att skicka till Telegram-chattar:</string>
|
||||
<string name="successfully_sent_and_updated">Skickades och uppdaterades</string>
|
||||
<string name="last_updated_location">Senast uppdaterad plats:</string>
|
||||
<string name="share_location_as_description">Om du vill ansluta flera enheter till ett telegramkonto måste du använda olika enheter för att dela din plats.</string>
|
||||
<string name="share_location_as_description_second_line">Du kan skapa och visa enhets-ID i Telegram-klienten genom att använda %1$s chatt-bot. %2$s</string>
|
||||
<string name="shared_string_hide">Göm</string>
|
||||
<string name="device_name">Enhetsnamn</string>
|
||||
<string name="device_name_cannot_be_empty">Enhetsnamn kan inte vara tomt</string>
|
||||
<string name="device_name_is_too_long">Enhetsnamn för långt</string>
|
||||
<string name="enter_device_name_description">Namnge din nya enhet med max 200 symboler.</string>
|
||||
<string name="error_adding_new_device">Kunde inte lägga till ny enhet</string>
|
||||
<string name="shared_string_add">Lägg till</string>
|
||||
<string name="device_added_successfully">%1$s tillagt.</string>
|
||||
<string name="enter_another_device_name">Välj ett namn som du inte redan har använt</string>
|
||||
<string name="last_update_from_telegram">Senaste uppdatering från Telegram</string>
|
||||
<string name="map_and_text">Karta och text</string>
|
||||
<string name="shared_string_text">Text</string>
|
||||
<string name="shared_string_map">Karta</string>
|
||||
<string name="send_location_as_descr">Välj hur meddelanden med din plats ska se ut.</string>
|
||||
<string name="send_location_as">Skicka plats som</string>
|
||||
<string name="start_date">Start datum</string>
|
||||
<string name="end_date">Slutdatum</string>
|
||||
<string name="open_in_osmand">Visa i OsmAnd</string>
|
||||
<string name="average_speed">Genomsnittlig hastighet</string>
|
||||
<string name="average_altitude">Genomsnittlig höjd</string>
|
||||
<string name="time_on_the_move">Rörelse tid</string>
|
||||
<string name="monitoring_is_disabled">Övervakning är inaktiverad</string>
|
||||
<string name="monitoring_is_enabled">Övervakning är aktiverad</string>
|
||||
<string name="shared_string_sent">Skickat</string>
|
||||
<string name="gps_points">GPS-punkter</string>
|
||||
<string name="shared_string_collected">Samlade</string>
|
||||
<string name="shared_string_date">Datum</string>
|
||||
<string name="points_size">%1$d punkter</string>
|
||||
<string name="gps_points_in_buffer">skicka (%1$d i buffer)</string>
|
||||
<string name="shared_string_update">Uppdatering</string>
|
||||
<string name="please_update_osmand">var snäll uppdatera OsmAnd för att visa data på kartan</string>
|
||||
<string name="show_gps_points_descr">Visa antal samlade och skickade GPS-punkter.</string>
|
||||
<string name="show_gps_points">Visa GPS-punkter</string>
|
||||
<string name="shared_string_appearance">Utseende</string>
|
||||
<string name="received_gps_points">Fick GPX-punkter: %1$s</string>
|
||||
<string name="how_it_works">Hur det fungerar</string>
|
||||
<string name="osmand_privacy_policy">OsmAnd integritetspolicy</string>
|
||||
<string name="telegram_privacy_policy">Telegram integritetspolicy</string>
|
||||
<string name="shared_string_accept">Acceptera</string>
|
||||
<string name="privacy_policy_agree">Genom att klicka på \"Fortsätt\" godkänner du villkoren i Telegram- och OsmAnds integritetspolicy.</string>
|
||||
<string name="privacy_policy_telegram_client">OsmAnd tracker är en av klienterna som använder Telegram öppen plattform. Dina kontakter kan använda vilken Telegram-klient som helst.</string>
|
||||
<string name="privacy_policy_use_telegram">Telegram (meddelandeappen) används för att ansluta och kommunicera med människor.</string>
|
||||
<string name="shared_string_telegram">Telegram</string>
|
||||
<string name="app_name_short">OsmAnd Tracker</string>
|
||||
<string name="timeline_description">Aktivera övervakning för att spara alla platser i historiken.</string>
|
||||
<string name="location_recording_enabled">Platsinspelning aktiverad</string>
|
||||
<string name="disable_monitoring">Deaktivera övervakning</string>
|
||||
<string name="timeline_available_for_free_now">Tidslinje är nu tillgängligt utan extra kostnad.</string>
|
||||
<string name="shared_string_ok">OK</string>
|
||||
<string name="shared_string_search">Sök</string>
|
||||
<string name="type_contact_or_group_name">Skriv kontakt eller gruppnamn</string>
|
||||
<string name="search_contacts_descr">Sök i alla dina grupper och kontakter.</string>
|
||||
<string name="search_contacts">Sök kontakter</string>
|
||||
<string name="bearing">Riktning</string>
|
||||
<string name="altitude">Höjd över havet</string>
|
||||
<string name="precision">Precision</string>
|
||||
<string name="direction">Riktning</string>
|
||||
<string name="privacy">Integritet</string>
|
||||
<string name="proxy">Proxy</string>
|
||||
<string name="proxy_settings">Proxy-inställningar</string>
|
||||
<string name="proxy_disconnected">Frånkopplad</string>
|
||||
<string name="proxy_connected">Ansluten</string>
|
||||
<string name="proxy_type">Proxy-typ</string>
|
||||
<string name="shared_string_enable">Aktivera</string>
|
||||
<string name="shared_string_connection">Anslutning</string>
|
||||
<string name="proxy_server">Server</string>
|
||||
<string name="proxy_port">Port</string>
|
||||
<string name="proxy_credentials">Referenser</string>
|
||||
<string name="proxy_username">Användarnamn</string>
|
||||
<string name="proxy_password">Lösenord</string>
|
||||
<string name="proxy_key">Nyckel</string>
|
||||
<string name="gpx_settings">GPX-inställningar</string>
|
||||
<string name="min_logging_speed_descr">Filter: ingen loggning under valda hastigheten</string>
|
||||
<string name="min_logging_speed">Minsta loggningshastighet</string>
|
||||
<string name="min_logging_accuracy_descr">Filter: ingen loggning utan att nogranheten är nodd</string>
|
||||
<string name="min_logging_accuracy">Minsta loggningsnoggrannhet</string>
|
||||
<string name="min_logging_distance_descr">Filter: minsta avstånd för att logga en ny punkt</string>
|
||||
<string name="min_logging_distance">Minsta loggningsavstånd</string>
|
||||
<string name="shared_string_select">Välj</string>
|
||||
<string name="timeline_no_data">Ingen data</string>
|
||||
<string name="timeline_no_data_descr">Vi har inget sparad data för den valda dagen</string>
|
||||
<string name="start_end_date">Start - Slut datum</string>
|
||||
<string name="set_time_timeline_descr">Välj tid att visa</string>
|
||||
<string name="shared_string_apply">Verkställ</string>
|
||||
<string name="shared_string_start">Start</string>
|
||||
<string name="shared_string_end">Slut</string>
|
||||
<string name="saved_messages">Sparade meddelanden</string>
|
||||
<string name="unit_of_speed_system">Enhet för hastighet</string>
|
||||
<string name="unit_of_speed_system_descr">Definera enhet för hastighet.</string>
|
||||
<string name="unit_of_length">Enhet för längd</string>
|
||||
<string name="unit_of_length_descr">Ändra vad avstånd mäts i.</string>
|
||||
<string name="units_and_formats">Enheter & format</string>
|
||||
<string name="time_zone">Tidszon</string>
|
||||
<string name="time_zone_descr">Välj tidszon som ska visas i dina platsmeddelanden.</string>
|
||||
<string name="buffer_time">Buffertens utgångstid</string>
|
||||
<string name="buffer_time_descr">Maximal tid att lagra poäng i bufferten</string>
|
||||
<string name="status_widget_title">OsmAnd Tracler status</string>
|
||||
<string name="shared_string_suggested">Förslagen</string>
|
||||
<string name="back_to_osmand">Tillbaka till OsmAnd</string>
|
||||
<string name="duration_ago">%1$s sedan</string>
|
||||
<string name="last_response_duration">Senaste svar: %1$s sedan</string>
|
||||
<string name="last_update_from_telegram_duration">Senaste uppdatering från Telegram: %1$s sedan</string>
|
||||
<string name="last_response_date">Senast response: %1$s</string>
|
||||
<string name="shared_string_error_short">ERR</string>
|
||||
<string name="shared_string_export">Export</string>
|
||||
<string name="logcat_buffer">Logcat buffer</string>
|
||||
<string name="logcat_buffer_descr">Kontrollera och dela detaljerade loggar för appen</string>
|
||||
<string name="send_report">Skicka rapport</string>
|
||||
</resources>
|
|
@ -16,7 +16,6 @@
|
|||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="com.android.vending.BILLING" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
|
@ -1027,6 +1026,7 @@
|
|||
</activity>
|
||||
|
||||
<activity android:name="net.osmand.plus.development.TestVoiceActivity" />
|
||||
<activity android:name="net.osmand.plus.development.TestBackupActivity" />
|
||||
<activity android:name="net.osmand.plus.development.LogcatActivity" />
|
||||
<activity android:name="net.osmand.plus.download.DownloadActivity" android:label="" />
|
||||
|
||||
|
@ -1065,7 +1065,7 @@
|
|||
|
||||
<activity android:name="net.osmand.plus.activities.PrintDialogActivity" />
|
||||
<activity android:name=".liveupdates.OsmLiveActivity"
|
||||
android:label="@string/osm_live"/>
|
||||
android:label="@string/purchases"/>
|
||||
<activity android:name=".wikivoyage.explore.WikivoyageExploreActivity">
|
||||
|
||||
<intent-filter>
|
||||
|
|
Binary file not shown.
|
@ -109,6 +109,9 @@ android {
|
|||
clean.doFirst {
|
||||
delete fileTree('assets') {
|
||||
include '*.obf'
|
||||
include 'fonts/**'
|
||||
include 'feature_articles/**'
|
||||
include 'voice/**'
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -345,7 +348,7 @@ dependencies {
|
|||
implementation 'org.immutables:gson:2.5.0'
|
||||
implementation 'com.vividsolutions:jts-core:1.14.0'
|
||||
implementation 'com.google.openlocationcode:openlocationcode:1.0.4'
|
||||
implementation 'com.android.billingclient:billing:2.0.3'
|
||||
implementation 'com.android.billingclient:billing:3.0.2'
|
||||
// turn off for now
|
||||
//implementation 'com.atilika.kuromoji:kuromoji-ipadic:0.9.0'
|
||||
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||
|
@ -370,4 +373,5 @@ dependencies {
|
|||
}
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'org.bouncycastle:bcpkix-jdk15on:1.56'
|
||||
implementation 'com.google.android.play:core:1.9.1'
|
||||
}
|
|
@ -57,5 +57,5 @@ project.afterEvaluate {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.google.android.gms:play-services-location:17.1.0'
|
||||
implementation 'com.google.android.gms:play-services-location:18.0.0'
|
||||
}
|
||||
|
|
|
@ -36,9 +36,9 @@ android {
|
|||
|
||||
defaultConfig {
|
||||
minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15
|
||||
versionCode 390
|
||||
versionCode 400
|
||||
versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
|
||||
versionName "3.9.0"
|
||||
versionName "4.0.0"
|
||||
versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName
|
||||
versionName System.getenv("APK_VERSION_SUFFIX")? versionName + System.getenv("APK_VERSION_SUFFIX").toString(): versionName
|
||||
}
|
||||
|
@ -187,18 +187,6 @@ dependencies {
|
|||
opengldebugImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
|
||||
openglImplementation "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar"
|
||||
openglImplementation "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar"
|
||||
implementation ("com.getkeepsafe.taptargetview:taptargetview:1.12.0"){
|
||||
exclude group: 'com.android.support'
|
||||
}
|
||||
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.1'
|
||||
implementation ("com.github.HITGIF:TextFieldBoxes:1.4.5"){
|
||||
exclude group: 'com.android.support'
|
||||
}
|
||||
implementation('com.github.scribejava:scribejava-apis:7.1.1'){
|
||||
exclude group: "com.fasterxml.jackson.core"
|
||||
}
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation "org.bouncycastle:bcpkix-jdk15on:1.56"
|
||||
|
||||
huaweiImplementation 'com.huawei.hms:iap:5.0.2.300'
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/switch_button_active_light" />
|
||||
<corners android:radius="4dp" />
|
||||
</shape>
|
5
OsmAnd/res/drawable/bg_osmand_live_active.xml
Normal file
5
OsmAnd/res/drawable/bg_osmand_live_active.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/osmand_live_active" />
|
||||
<corners android:radius="26dp" />
|
||||
</shape>
|
5
OsmAnd/res/drawable/bg_osmand_live_cancelled.xml
Normal file
5
OsmAnd/res/drawable/bg_osmand_live_cancelled.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/osmand_live_cancelled" />
|
||||
<corners android:radius="26dp" />
|
||||
</shape>
|
13
OsmAnd/res/drawable/bg_track_gradient.xml
Normal file
13
OsmAnd/res/drawable/bg_track_gradient.xml
Normal file
|
@ -0,0 +1,13 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<gradient
|
||||
android:angle="0"
|
||||
android:startColor="@color/track_gradient_start"
|
||||
android:centerColor="@color/track_gradient_center"
|
||||
android:endColor="@color/track_gradient_end"
|
||||
android:type="linear" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="@color/switch_button_active_dark" />
|
||||
<corners android:radius="4dp" />
|
||||
</shape>
|
7
OsmAnd/res/drawable/btn_solid_border_dark.xml
Normal file
7
OsmAnd/res/drawable/btn_solid_border_dark.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners android:radius="4dp" />
|
||||
<solid android:color="@color/switch_button_active_dark" />
|
||||
</shape>
|
7
OsmAnd/res/drawable/btn_solid_border_light.xml
Normal file
7
OsmAnd/res/drawable/btn_solid_border_light.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<corners android:radius="4dp" />
|
||||
<solid android:color="@color/switch_button_active_light" />
|
||||
</shape>
|
10
OsmAnd/res/drawable/ic_action_alert_circle.xml
Normal file
10
OsmAnd/res/drawable/ic_action_alert_circle.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M12,22C17.5228,22 22,17.5228 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12C2,17.5228 6.4771,22 12,22ZM11,14V7H13V14H11ZM11,18V16H13V18H11Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
9
OsmAnd/res/drawable/ic_action_at_mail.xml
Normal file
9
OsmAnd/res/drawable/ic_action_at_mail.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22H17V20H12C7.66,20 4,16.34 4,12C4,7.66 7.66,4 12,4C16.34,4 20,7.66 20,12V13.43C20,14.22 19.29,15 18.5,15C17.71,15 17,14.22 17,13.43V12C17,9.24 14.76,7 12,7C9.24,7 7,9.24 7,12C7,14.76 9.24,17 12,17C13.38,17 14.64,16.44 15.54,15.53C16.19,16.42 17.31,17 18.5,17C20.47,17 22,15.4 22,13.43V12C22,6.48 17.52,2 12,2ZM12,15C10.34,15 9,13.66 9,12C9,10.34 10.34,9 12,9C13.66,9 15,10.34 15,12C15,13.66 13.66,15 12,15Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
18
OsmAnd/res/drawable/ic_action_cellular.xml
Normal file
18
OsmAnd/res/drawable/ic_action_cellular.xml
Normal file
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M20,12C20,15.4738 17.7859,18.4304 14.692,19.5358L14.9449,21.5593C19.0304,20.3022 22,16.4979 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12C2,16.4979 4.9696,20.3022 9.0551,21.5593L9.308,19.5358C6.2141,18.4304 4,15.4738 4,12C4,7.5817 7.5817,4 12,4C16.4183,4 20,7.5817 20,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M18,12C18,14.4466 16.5357,16.5511 14.4356,17.485L14.1701,15.3607C15.2713,14.6482 16,13.4092 16,12C16,9.7909 14.2091,8 12,8C9.7909,8 8,9.7909 8,12C8,13.4092 8.7287,14.6482 9.8299,15.3607L9.5644,17.485C7.4643,16.5511 6,14.4466 6,12C6,8.6863 8.6863,6 12,6C15.3137,6 18,8.6863 18,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M14,12C14,13.1046 13.1046,14 12,14C10.8954,14 10,13.1046 10,12C10,10.8954 10.8954,10 12,10C13.1046,10 14,10.8954 14,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M11,15V22H13V15H11Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
15
OsmAnd/res/drawable/ic_action_cellular_disable.xml
Normal file
15
OsmAnd/res/drawable/ic_action_cellular_disable.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M22.0001,12C22.0001,13.9623 21.4349,15.7926 20.4583,17.337L18.9991,15.8777C19.6369,14.7291 20.0001,13.407 20.0001,12C20.0001,7.5817 16.4183,4 12.0001,4C10.5931,4 9.271,4.3632 8.1223,5.0009L6.6631,3.5417C8.2075,2.5652 10.0378,2 12.0001,2C17.5229,2 22.0001,6.4771 22.0001,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M18.0001,12C18.0001,12.8478 17.8242,13.6545 17.507,14.3857L15.9203,12.7989C15.9726,12.5407 16.0001,12.2736 16.0001,12C16.0001,9.7909 14.2092,8 12.0001,8C11.7265,8 11.4593,8.0275 11.2012,8.0798L9.6144,6.493C10.3456,6.1758 11.1523,6 12.0001,6C15.3138,6 18.0001,8.6863 18.0001,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M14.3449,16.759L14.4357,17.485C14.5806,17.4206 14.7225,17.3506 14.8611,17.2752L16.3203,18.7344C15.8138,19.0599 15.2682,19.33 14.692,19.5358L14.945,21.5593C15.9623,21.2463 16.9105,20.7753 17.7609,20.1749L21.293,23.7071L22.7072,22.2928L2.7072,2.2929L1.293,3.7071L3.8251,6.2392C2.6754,7.8677 2.0001,9.855 2.0001,12C2.0001,16.4979 4.9696,20.3022 9.0552,21.5593L9.3081,19.5358C6.2141,18.4304 4.0001,15.4738 4.0001,12C4.0001,10.4087 4.4647,8.9258 5.2657,7.6798L6.7248,9.1389C6.2626,9.9894 6.0001,10.964 6.0001,12C6.0001,14.4466 7.4644,16.5511 9.5644,17.485L9.83,15.3607C8.7288,14.6482 8.0001,13.4092 8.0001,12C8.0001,11.5256 8.0826,11.0705 8.2342,10.6483L10.0555,12.4696C10.2305,13.197 10.8031,13.7695 11.5305,13.9446L12.5859,15H11.0001V22H13.0001V15.4142L14.3449,16.759Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
9
OsmAnd/res/drawable/ic_action_cloud.xml
Normal file
9
OsmAnd/res/drawable/ic_action_cloud.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6,18V17.9725C3.75,17.7238 2,15.8163 2,13.5C2,11.0147 4.0147,9 6.5,9C6.5998,9 6.6989,9.0033 6.7971,9.0097C7.8332,7.2109 9.7752,6 12,6C15.3137,6 18,8.6863 18,12C18,12.0574 17.9992,12.1146 17.9976,12.1716C18.3111,12.0605 18.6485,12 19,12C20.6569,12 22,13.3431 22,15C22,16.6569 20.6569,18 19,18H6Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
10
OsmAnd/res/drawable/ic_action_cloud_alert.xml
Normal file
10
OsmAnd/res/drawable/ic_action_cloud_alert.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6,17.9725V18H19C20.6569,18 22,16.6569 22,15C22,13.3431 20.6569,12 19,12C18.6485,12 18.3111,12.0605 17.9976,12.1716C17.9992,12.1146 18,12.0574 18,12C18,8.6863 15.3137,6 12,6C9.7752,6 7.8332,7.2109 6.7971,9.0097C6.6989,9.0033 6.5998,9 6.5,9C4.0147,9 2,11.0147 2,13.5C2,15.8163 3.75,17.7238 6,17.9725ZM11,13V8H13V13H11ZM11,17V15H13V17H11Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
9
OsmAnd/res/drawable/ic_action_cloud_upload.xml
Normal file
9
OsmAnd/res/drawable/ic_action_cloud_upload.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M14,18V15H16.5L12.5,10L8.5,15H11V18H6V17.9725C3.75,17.7238 2,15.8163 2,13.5C2,11.0147 4.0147,9 6.5,9C6.5998,9 6.6989,9.0033 6.7971,9.0097C7.8332,7.2109 9.7752,6 12,6C15.3137,6 18,8.6863 18,12C18,12.0574 17.9992,12.1146 17.9976,12.1716C18.3111,12.0605 18.6485,12 19,12C20.6569,12 22,13.3431 22,15C22,16.6569 20.6569,18 19,18H14Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
12
OsmAnd/res/drawable/ic_action_cloud_upload_colored.xml
Normal file
12
OsmAnd/res/drawable/ic_action_cloud_upload_colored.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6,18V17.9725C3.75,17.7238 2,15.8163 2,13.5C2,11.0147 4.0147,9 6.5,9C6.5998,9 6.6989,9.0033 6.7971,9.0097C7.8332,7.2109 9.7752,6 12,6C15.3137,6 18,8.6863 18,12C18,12.0574 17.9992,12.1146 17.9976,12.1716C18.3111,12.0605 18.6485,12 19,12C20.6569,12 22,13.3431 22,15C22,16.6569 20.6569,18 19,18H6Z"
|
||||
android:fillColor="#6C19FF"/>
|
||||
<path
|
||||
android:pathData="M11,15H8.5L12.5,9.5L16.5,15H14V20H11V15Z"
|
||||
android:fillColor="#FFC30D"/>
|
||||
</vector>
|
63
OsmAnd/res/drawable/ic_action_dialog.xml
Normal file
63
OsmAnd/res/drawable/ic_action_dialog.xml
Normal file
|
@ -0,0 +1,63 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M22,2V19C22,20.6569 20.6569,22 19,22H5C3.3431,22 2,20.6569 2,19V2H4V18H20V2H22Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M13,14.2C13,14.0895 13.0895,14 13.2,14H17.8C17.9105,14 18,14.0895 18,14.2V15.8C18,15.9105 17.9105,16 17.8,16H13.2C13.0895,16 13,15.9105 13,15.8V14.2Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M6,6H9V8H6V6Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M11,6H18V8H11V6Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M4,4H20V2H4V4Z"
|
||||
android:strokeAlpha="0.7"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.7"/>
|
||||
<path
|
||||
android:pathData="M4,4H20V18H4V4Z"
|
||||
android:strokeAlpha="0.1"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.1"/>
|
||||
<path
|
||||
android:pathData="M6,9H11V10H6V9Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M6,11H7V12H6V11Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M12,9H14V10H12V9Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M15,9H18V10H15V9Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M8,11H12V12H8V11Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M13,11H18V12H13V11Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M6.2,14C6.0895,14 6,14.0895 6,14.2V15.8C6,15.9105 6.0895,16 6.2,16H10.8C10.9105,16 11,15.9105 11,15.8V14.2C11,14.0895 10.9105,14 10.8,14H6.2Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
</vector>
|
30
OsmAnd/res/drawable/ic_action_file_report.xml
Normal file
30
OsmAnd/res/drawable/ic_action_file_report.xml
Normal file
|
@ -0,0 +1,30 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6,2C4.8954,2 4,2.8954 4,4V20C4,21.1046 4.8954,22 6,22H18C19.1046,22 20,21.1046 20,20V8H16C14.8954,8 14,7.1046 14,6V2H6ZM9,9H7V11H9V9ZM7,13H9V15H7V13ZM7,17H9V19H7V17ZM11,11V9H17V11H11ZM17,15V13H11V15H17ZM17,19V17H11V19H17Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
<path
|
||||
android:pathData="M14,2L20,8H16C14.8954,8 14,7.1046 14,6V2Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M17,9H11V11H17V9Z"
|
||||
android:strokeAlpha="0.2"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.2"/>
|
||||
<path
|
||||
android:pathData="M11,13H17V15H11V13Z"
|
||||
android:strokeAlpha="0.2"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.2"/>
|
||||
<path
|
||||
android:pathData="M11,17H17V19H11V17Z"
|
||||
android:strokeAlpha="0.2"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.2"/>
|
||||
</vector>
|
18
OsmAnd/res/drawable/ic_action_help_online.xml
Normal file
18
OsmAnd/res/drawable/ic_action_help_online.xml
Normal file
|
@ -0,0 +1,18 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M2,12C2,16.9406 5.5829,21.0444 10.2922,21.8547C10.1025,21.2707 10,20.6473 10,20C10,17.913 11.0655,16.0749 12.6822,15L11.0001,15L11,11.9338L12.7455,10.8865C13.2136,10.6056 13.5,10.0998 13.5,9.554L13.5,9.25C13.5,8.5597 12.9403,8 12.25,8H12C11.4477,8 11,8.4477 11,9H9C9,7.3432 10.3431,6 12,6H12.25C14.0449,6 15.5,7.4551 15.5,9.25L15.5,9.554C15.4999,10.8024 14.845,11.9592 13.7745,12.6015L13,13.0662L13.0001,14.8027C13.8826,14.2922 14.9072,14 16,14H21.8C21.9311,13.3538 22,12.6849 22,12C22,6.4771 17.5228,2 12,2C6.4771,2 2,6.4771 2,12Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M16,16H17V18H16C14.8954,18 14,18.8954 14,20C14,21.1046 14.8954,22 16,22H17V24H16C13.7909,24 12,22.2091 12,20C12,17.7909 13.7909,16 16,16Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M20,22H19V24H20C22.2091,24 24,22.2091 24,20C24,17.7909 22.2091,16 20,16H19V18H20C21.1046,18 22,18.8954 22,20C22,21.1046 21.1046,22 20,22Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M16,20C16,19.4477 16.4477,19 17,19H19C19.5523,19 20,19.4477 20,20C20,20.5523 19.5523,21 19,21H17C16.4477,21 16,20.5523 16,20Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
10
OsmAnd/res/drawable/ic_action_purchases.xml
Normal file
10
OsmAnd/res/drawable/ic_action_purchases.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M8,5C8,3.8954 8.8954,3 10,3H14C15.1046,3 16,3.8954 16,5V8H20V19C20,20.1046 19.1046,21 18,21H6C4.8954,21 4,20.1046 4,19V8H8V5ZM14,5V8H10V5H14ZM10,18V11L15.5,14L10,18Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
10
OsmAnd/res/drawable/ic_action_purchases_outlined.xml
Normal file
10
OsmAnd/res/drawable/ic_action_purchases_outlined.xml
Normal file
|
@ -0,0 +1,10 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M10,3C8.8954,3 8,3.8954 8,5V8H4V19C4,20.1046 4.8954,21 6,21H18C19.1046,21 20,20.1046 20,19V8H16V5C16,3.8954 15.1046,3 14,3H10ZM14,8V5H10V8H14ZM6,10H18V19H6V10Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
15
OsmAnd/res/drawable/ic_action_read_from_file.xml
Normal file
15
OsmAnd/res/drawable/ic_action_read_from_file.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M14,2L20,8H16C14.8954,8 14,7.1046 14,6V2Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M4,4C4,2.8954 4.8954,2 6,2H14V6C14,7.1046 14.8954,8 16,8H20V20C20,21.1046 19.1046,22 18,22H6C4.8954,22 4,21.1046 4,20V4ZM11,18H13V13H15L12,9L9,13H11V18Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
37
OsmAnd/res/drawable/ic_action_restore.xml
Normal file
37
OsmAnd/res/drawable/ic_action_restore.xml
Normal file
|
@ -0,0 +1,37 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M12,5C12.5523,5 13,4.5523 13,4H17V8.0549C16.6717,8.0186 16.338,8 16,8C11.0294,8 7,12.0294 7,17V4H11C11,4.5523 11.4477,5 12,5Z"
|
||||
android:strokeAlpha="0.3"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.3"/>
|
||||
<path
|
||||
android:pathData="M7,17C7,18.0519 7.1805,19.0617 7.5121,20H7V17Z"
|
||||
android:strokeAlpha="0.3"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.3"/>
|
||||
<path
|
||||
android:pathData="M17,2.01L7,2C5.9,2 5,2.9 5,4V20C5,21.1 5.9,22 7,22H8.5155C8.1025,21.383 7.7638,20.7121 7.5121,20H7V4H11C11,4.5523 11.4477,5 12,5C12.5523,5 13,4.5523 13,4H17V8.0549C17.6935,8.1316 18.3632,8.287 19,8.5121V4C19,2.9 18.1,2.01 17,2.01Z"
|
||||
android:strokeAlpha="0.7"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.7"/>
|
||||
<path
|
||||
android:pathData="M16,21C18.2091,21 20,19.2091 20,17C20,14.7909 18.2091,13 16,13C13.7909,13 12,14.7909 12,17H14L11,20L8,17H10C10,13.6863 12.6863,11 16,11C19.3137,11 22,13.6863 22,17C22,20.3137 19.3137,23 16,23C14.598,23 13.3082,22.5191 12.2868,21.7132L13.7159,20.2841C14.3635,20.7354 15.1508,21 16,21Z"
|
||||
android:fillType="evenOdd">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:gradientRadius="6.36396"
|
||||
android:centerX="16"
|
||||
android:centerY="17"
|
||||
android:type="radial">
|
||||
<item android:offset="0" android:color="#FFFFFFFF"/>
|
||||
<item android:offset="0.8125" android:color="#FFFFFFFF"/>
|
||||
<item android:offset="1" android:color="#00FFFFFF"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</vector>
|
12
OsmAnd/res/drawable/ic_action_update.xml
Normal file
12
OsmAnd/res/drawable/ic_action_update.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M12,0.9999L16,4.9999L12,8.9999L12,6C8.6863,6 6,8.6863 6,12C6,12.7351 6.1322,13.4394 6.3741,14.0903L4.8574,15.6071C4.309,14.5232 4,13.2977 4,12C4,7.5817 7.5817,4 12,4V0.9999Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M12,15.0001L12,18C15.3137,18 18,15.3137 18,12C18,11.2649 17.8678,10.5606 17.6258,9.9097L19.1426,8.3929C19.691,9.4768 20,10.7023 20,12C20,16.4183 16.4183,20 12,20V23.0001L8,19.0001L12,15.0001Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
15
OsmAnd/res/drawable/ic_action_user_folder.xml
Normal file
15
OsmAnd/res/drawable/ic_action_user_folder.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M6,3C4.8954,3 4,3.8954 4,5V7H20C20,5.8954 19.1046,5 18,5H13L11.4,3H6Z"
|
||||
android:strokeAlpha="0.5"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillAlpha="0.5"/>
|
||||
<path
|
||||
android:pathData="M2,7C2,5.8954 2.8954,5 4,5H10L12,7H20C21.1046,7 22,7.8954 22,9V19C22,20.1046 21.1046,21 20,21H4C2.8954,21 2,20.1046 2,19V7ZM17,12C17,13.1046 16.1046,14 15,14C13.8954,14 13,13.1046 13,12C13,10.8954 13.8954,10 15,10C16.1046,10 17,10.8954 17,12ZM10,17.5V19H20V17.5C20,15.5 17,15 15,15C13,15 10,15.5 10,17.5Z"
|
||||
android:fillColor="#ffffff"
|
||||
android:fillType="evenOdd"/>
|
||||
</vector>
|
7
OsmAnd/res/drawable/rectangle_rounded_left.xml
Normal file
7
OsmAnd/res/drawable/rectangle_rounded_left.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:bottomLeftRadius="@dimen/list_item_button_padding"
|
||||
android:topLeftRadius="@dimen/list_item_button_padding" />
|
||||
<solid android:color="@color/list_background_color_dark" />
|
||||
</shape>
|
11
OsmAnd/res/drawable/ripple_rectangle_rounded_left.xml
Normal file
11
OsmAnd/res/drawable/ripple_rectangle_rounded_left.xml
Normal file
|
@ -0,0 +1,11 @@
|
|||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="@color/active_buttons_and_links_trans_light">
|
||||
<item android:id="@android:id/mask">
|
||||
<shape android:shape="rectangle">
|
||||
<corners
|
||||
android:bottomLeftRadius="@dimen/list_item_button_padding"
|
||||
android:topLeftRadius="@dimen/list_item_button_padding" />
|
||||
<solid android:color="@color/active_color_primary_light" />
|
||||
</shape>
|
||||
</item>
|
||||
</ripple>
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/background">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="#4d007eb3" />
|
||||
<corners android:radius="30dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:id="@+id/progress">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/color_white" />
|
||||
<corners android:radius="30dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<item android:id="@+id/thump">
|
||||
<shape android:shape="oval">
|
||||
<size
|
||||
android:width="12dp"
|
||||
android:height="12dp" />
|
||||
<solid android:color="@color/profile_icon_color_blue_light" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<size
|
||||
android:width="2dp"
|
||||
android:height="2dp" />
|
||||
<solid android:color="#17181A" />
|
||||
</shape>
|
|
@ -9,8 +9,8 @@
|
|||
<gradient
|
||||
android:angle="90"
|
||||
android:startColor="#1A000000"
|
||||
android:centerColor="#00FFFFFF"
|
||||
android:endColor="#00FFFFFF" />
|
||||
android:centerColor="#00000000"
|
||||
android:endColor="#00000000" />
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
@ -23,8 +23,8 @@
|
|||
<gradient
|
||||
android:angle="90"
|
||||
android:startColor="#0D000000"
|
||||
android:centerColor="#00FFFFFF"
|
||||
android:endColor="#00FFFFFF" />
|
||||
android:centerColor="#00000000"
|
||||
android:endColor="#00000000" />
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
|
|
|
@ -50,6 +50,7 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_gravity="start"
|
||||
android:layout_marginTop="@dimen/dashboard_map_toolbar"
|
||||
android:background="?attr/activity_background_basic"
|
||||
android:visibility="gone">
|
||||
|
||||
<net.osmand.plus.views.controls.DynamicListView
|
||||
|
|
|
@ -16,20 +16,34 @@
|
|||
android:focusable="true"
|
||||
android:orientation="vertical"
|
||||
android:clickable="true"
|
||||
tools:background="@drawable/bg_bottom_menu_dark">
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/snap_to_road_progress_bar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="0dp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:background="@drawable/bg_contextmenu_shadow_top_light" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/snap_to_road_progress_bar"
|
||||
style="?android:attr/progressBarStyleHorizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="0dp"
|
||||
android:background="?attr/list_background_color"
|
||||
android:visibility="invisible"
|
||||
tools:visibility="visible" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/main_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/list_background_color">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/up_down_row"
|
||||
|
@ -53,6 +67,19 @@
|
|||
android:background="@null"
|
||||
tools:src="@drawable/ic_action_ruler"/>
|
||||
|
||||
<include
|
||||
layout="@layout/custom_icon_radio_buttons"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="@dimen/content_padding_half"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginRight="@dimen/content_padding_half"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null" />
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/up_down_button"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -65,6 +92,7 @@
|
|||
android:layout_marginRight="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null"
|
||||
android:visibility="gone"
|
||||
tools:src="@drawable/ic_action_arrow_down"/>
|
||||
|
||||
<TextView
|
||||
|
@ -160,7 +188,9 @@
|
|||
android:paddingRight="@dimen/measurement_tool_text_button_padding_small"
|
||||
android:text="@string/shared_string_options"
|
||||
android:textColor="?attr/color_dialog_buttons"
|
||||
osmand:typeface="@string/font_roboto_medium" />
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:paddingEnd="@dimen/measurement_tool_text_button_padding_small"
|
||||
android:paddingStart="@dimen/measurement_tool_text_button_padding_small" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -195,11 +225,13 @@
|
|||
<include
|
||||
android:id="@+id/add_point_button"
|
||||
layout="@layout/bottom_sheet_dialog_button"
|
||||
android:layout_width="@dimen/measurement_tool_button_width"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/measurement_tool_button_height"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true" />
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:minWidth="@dimen/measurement_tool_button_width" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
|
@ -211,14 +243,15 @@
|
|||
|
||||
<include
|
||||
android:id="@+id/apply_move_point_button"
|
||||
layout="@layout/bottom_sheet_dialog_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/measurement_tool_button_height"
|
||||
android:layout_width="@dimen/measurement_tool_button_width"
|
||||
android:layout_marginEnd="@dimen/measurement_tool_button_margin"
|
||||
android:layout_marginRight="@dimen/measurement_tool_button_margin"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
layout="@layout/bottom_sheet_dialog_button" />
|
||||
android:layout_marginEnd="@dimen/measurement_tool_button_margin"
|
||||
android:layout_marginRight="@dimen/measurement_tool_button_margin"
|
||||
android:minWidth="@dimen/measurement_tool_button_width" />
|
||||
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
|
|
|
@ -659,6 +659,7 @@
|
|||
<!-- CENTER -->
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/top_controls_container"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
|
|
15
OsmAnd/res/layout/abc_list_menu_item_icon.xml
Normal file
15
OsmAnd/res/layout/abc_list_menu_item_icon.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="8dp"
|
||||
android:layout_marginRight="-8dp"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="-8dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:scaleType="centerInside"
|
||||
android:duplicateParentState="true"/>
|
|
@ -17,7 +17,9 @@
|
|||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/content_padding_small"
|
||||
android:tint="?attr/default_icon_color"
|
||||
osmand:srcCompat="@drawable/ic_action_user_account" />
|
||||
osmand:srcCompat="@drawable/ic_action_user_account"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -26,7 +28,9 @@
|
|||
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginBottom="@dimen/subHeaderPadding"
|
||||
android:orientation="vertical">
|
||||
android:orientation="vertical"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/account_title"
|
||||
|
|
87
OsmAnd/res/layout/add_new_favorite_category.xml
Normal file
87
OsmAnd/res/layout/add_new_favorite_category.xml
Normal file
|
@ -0,0 +1,87 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:osmand="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<View
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/name_text_box"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/favorite_category_name"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
app:startIconDrawable="@drawable/ic_action_folder"
|
||||
app:boxBackgroundColor="?attr/text_input_background"
|
||||
app:boxStrokeColor="@color/osmand_orange"
|
||||
app:hintTextColor="@color/text_color_secondary_light">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/name_edit_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textCapSentences"
|
||||
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/context_menu_first_line_top_margin"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
|
||||
android:text="@string/select_color"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/color_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="end"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/context_menu_first_line_top_margin"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingBottom="@dimen/context_menu_first_line_top_margin"
|
||||
android:text="@string/select_color"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/select_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding_small"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
android:layout_marginTop="@dimen/context_menu_padding_margin_tiny"
|
||||
android:layout_marginBottom="@dimen/content_padding_half"
|
||||
android:orientation="horizontal" />
|
||||
|
||||
</LinearLayout>
|
|
@ -86,6 +86,8 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/content_padding_small"
|
||||
android:layout_marginRight="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/content_padding" />
|
||||
android:paddingBottom="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding_small"
|
||||
android:layout_marginEnd="@dimen/content_padding_small" />
|
||||
|
||||
</LinearLayout>
|
|
@ -62,18 +62,12 @@
|
|||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Normal" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/seek_bar_arrival"
|
||||
style="@style/Widget.AppCompat.SeekBar.Discrete"
|
||||
<com.google.android.material.slider.Slider
|
||||
android:id="@+id/arrival_slider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/pages_item_margin"
|
||||
android:maxHeight="2dp"
|
||||
android:paddingTop="11dp"
|
||||
android:paddingBottom="11dp"
|
||||
osmand:tickMark="@drawable/seekbar_tickmark_announcement_time"
|
||||
tools:max="3"
|
||||
tools:progress="1" />
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding" />
|
||||
|
||||
<View
|
||||
android:id="@+id/divider"
|
||||
|
|
|
@ -3,14 +3,13 @@
|
|||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
tools:background="@drawable/btn_background_inactive_dark">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/button_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:orientation="horizontal"
|
||||
|
@ -20,7 +19,6 @@
|
|||
android:paddingEnd="@dimen/content_padding_small"
|
||||
android:paddingRight="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/text_margin_small"
|
||||
tools:background="@drawable/btn_background_inactive_dark"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<LinearLayout
|
||||
|
|
46
OsmAnd/res/layout/bottom_sheet_button_with_icon_center.xml
Normal file
46
OsmAnd/res/layout/bottom_sheet_button_with_icon_center.xml
Normal file
|
@ -0,0 +1,46 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dialog_button_height"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/button_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/button_icon"
|
||||
android:layout_width="@dimen/map_widget_icon"
|
||||
android:layout_height="@dimen/map_widget_icon"
|
||||
android:layout_marginEnd="@dimen/content_padding_small"
|
||||
android:layout_marginRight="@dimen/content_padding_small"
|
||||
android:tint="?attr/active_color_basic"
|
||||
tools:srcCompat="@drawable/ic_action_appearance" />
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/button_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/context_menu_controller_height"
|
||||
android:layout_marginRight="@dimen/context_menu_controller_height"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:textColor="?attr/active_color_basic"
|
||||
android:textSize="@dimen/default_desc_text_size"
|
||||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Button" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -8,7 +8,9 @@
|
|||
android:paddingBottom="@dimen/content_padding_small"
|
||||
android:minHeight="@dimen/card_row_min_height"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
|
|
|
@ -57,7 +57,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/content_padding_half"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding">
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/text"
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:minHeight="@dimen/bottom_sheet_list_item_height"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
tools:background="@drawable/rectangle_rounded_right"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding">
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
tools:background="@drawable/rectangle_rounded_right">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@+id/title"
|
||||
|
@ -41,7 +41,8 @@
|
|||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false" />
|
||||
android:focusableInTouchMode="false"
|
||||
android:saveEnabled="false" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -7,4 +7,6 @@
|
|||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingTop="@dimen/content_padding_small"
|
||||
android:paddingBottom="@dimen/content_padding_small" />
|
||||
android:paddingBottom="@dimen/content_padding_small"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding" />
|
||||
|
|
|
@ -11,7 +11,9 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding">
|
||||
|
||||
<net.osmand.plus.widgets.TextViewEx
|
||||
android:id="@android:id/title"
|
||||
|
@ -43,6 +45,8 @@
|
|||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/content_padding"
|
||||
android:layout_marginEnd="@dimen/content_padding" />
|
||||
|
||||
</LinearLayout>
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_large_list_item_height"
|
||||
|
@ -8,6 +7,7 @@
|
|||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/descriptionContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_sheet_large_list_item_height"
|
||||
android:gravity="center_vertical"
|
||||
|
|
|
@ -1,63 +1,63 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:gravity="center_vertical"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding">
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||
tools:src="@drawable/list_destination"/>
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/bottom_sheet_icon_margin"
|
||||
android:layout_marginRight="@dimen/bottom_sheet_icon_margin"
|
||||
tools:src="@drawable/list_destination" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
tools:text="Some title"/>
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||
tools:text="Some title" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:textColor="@null"
|
||||
tools:text="Some description"/>
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="2"
|
||||
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:textColor="@null"
|
||||
tools:text="Some description" />
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/compound_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/compound_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||
android:background="@null"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:saveEnabled="false" />
|
||||
|
||||
</LinearLayout>
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||
android:paddingStart="@dimen/content_padding"
|
||||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
style="@style/TextAppearance.ListItemTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:maxLines="1"
|
||||
tools:text="Some title" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
style="@style/TextAppearance.ContextMenuSubtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:letterSpacing="@dimen/description_letter_spacing"
|
||||
android:maxLines="1"
|
||||
tools:text="Some description" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="@dimen/standard_icon_size"
|
||||
android:layout_height="@dimen/standard_icon_size"
|
||||
android:layout_gravity="center_vertical"
|
||||
tools:src="@drawable/list_destination" />
|
||||
|
||||
</LinearLayout>
|
|
@ -90,7 +90,9 @@
|
|||
android:paddingLeft="@dimen/content_padding"
|
||||
android:paddingRight="@dimen/content_padding"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:paddingEnd="@dimen/content_padding"
|
||||
android:paddingStart="@dimen/content_padding">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/end_button_icon"
|
||||
|
|
|
@ -90,7 +90,9 @@
|
|||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding"
|
||||
tools:src="@drawable/ic_action_info_dark" />
|
||||
tools:src="@drawable/ic_action_info_dark"
|
||||
android:layout_marginEnd="@dimen/content_padding"
|
||||
android:layout_marginStart="@dimen/content_padding" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue