Merge pull request #1 from osmandapp/master

update
This commit is contained in:
yogiks 2020-10-08 19:26:06 +05:30 committed by GitHub
commit 1d98e336b2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
340 changed files with 13781 additions and 5614 deletions

View file

@ -1,8 +1,8 @@
---
name: "📚 Outdated FAQ"
about: Report an issue in FAQ
---
🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑🛑
Please do not file FAQ issues on the GitHub issues tracker.

View file

@ -2,68 +2,17 @@
name: "\U0001F41E Bug report"
about: Report a bug in OsmAnd
---
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅
Oh hi there! 😄
To expedite issue processing please search open and closed issues before submitting a new one.
Existing issues often contain information about workarounds, resolution, or progress updates.
GitHub is our main development tool for our developers. There are hundreds of requests a month and there are relatively few developers.
So by opening an issue, please know that your issue will be sent out to all developers and acknowledge that it could be closed without explanation or with just a brief message.
Comments on the closed issues are also sent to all developers, so you will definitely will be heard.
However, there is no guarantee that a developer will pick up the issue to work on it.
Please be sure to read our [FAQ](https://osmand.net/help-online) before creating an issue here.
The best way to get help about an OsmAnd issue is to create a valid and detailed issue.
Please give us the following information so that we can try to **reproduce** your issue:
🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅-->
# 🐞 bug report
### Is this a regression?
<!-- Did this behavior use to work in the previous version? -->
<!-- ✍️--> Yes, the previous version in which this bug was not present was: ....
### Description
<!-- ✍️--> A clear and concise description of the problem...
### How to reproduce?
## 🔬 Minimal Reproduction
<!--
If the bug is reproducible, please describe steps below:
-->
<!-- ✍️--> 1. Open app, and click on ...
### Your Environment
OsmAnd Version:
Android/iOS version:
Device model:
## 🔥 Exception or Error
<pre><code>
<!-- If the issue is accompanied by an exception or an error, please share it below: -->
<!-- ✍️-->
</code></pre>
## 🌍 Your Environment
**OsmAnd Version:**
<pre><code>
<!-- paste version below -->
<!-- ✍️-->
</code></pre>
**Device and Android/iOS version:**
**Maps used (online or offline):**
<!-- Please tick the correct box [x] (or both) -->
- [ ] Offline maps offered within the OsmAnd app for download.
<!-- If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs and its edition date. -->
- [ ] Online (tile / raster) maps <!-- Please name it -->
**Anything else relevant?**
**Maps used (online or offline):**
If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs and its edition date.

View file

@ -2,6 +2,7 @@
name: "\U0001F6A9 Routing report"
about: Report a routing issue in OsmAnd
---
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅
Oh hi there! 😄
@ -26,10 +27,12 @@ Please give us the following information so that we can try to **reproduce** you
### Routing engine
<!-- Which routing provider was used? (please tick the proper box [x]) -->
- [ ] OsmAnd's in-app offline routing
- [ ] Any online routing provider (YOURS, OpenRouteService, OSRM, etc.)
### Routing Profile
<!-- What routing profile is chosen in the OsmAnd app? (car, bike, pedestrian, fastest or shortest, etc.) -->
### Start and end points
@ -38,6 +41,7 @@ Please give us the following information so that we can try to **reproduce** you
Also, a permalink from [openstreetmap.org](https://www.openstreetmap.org/) can be helpful. -->
### Actual and expected routes
<!-- Tell us your expected routing and how OsmAnd routes, or add screenshots here. -->
### Is this a regression?
@ -45,9 +49,10 @@ Also, a permalink from [openstreetmap.org](https://www.openstreetmap.org/) can b
<!-- Did this behavior use to work in the previous version? -->
<!-- ✍️--> Yes, the previous version in which this bug was not present was: ....
## 🌍 Your Environment
## 🌍 Your Environment
**OsmAnd Version:**
<pre><code>
<!-- paste version below -->
<!-- ✍️-->
@ -57,10 +62,11 @@ Also, a permalink from [openstreetmap.org](https://www.openstreetmap.org/) can b
**Device and Android/iOS version:**
**Maps used (online or offline):**
<!-- Please tick the correct box [x] (or both) -->
- [ ] Offline maps offered within the OsmAnd app for download.
<!-- If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs and its edition date. -->
- [ ] Offline maps offered within the OsmAnd app for download.
<!-- If you have an issue related to offline maps, tell us the exact name of the map file where the issue occurs and its edition date. -->
- [ ] Online (tile / raster) maps <!-- Please name it -->
**Anything else relevant?**

View file

@ -1,11 +1,11 @@
---
name: "\U0001F680 Feature request"
about: Suggest a feature for OsmAnd
---
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅
Oh hi there! 😄
Oh hi there! 😄
To expedite issue processing please search open and closed issues before submitting a new one.
Existing issues often contain information about workarounds, resolution, or progress updates.
@ -22,12 +22,13 @@ Please be sure to read our [FAQ](https://osmand.net/help-online) before creating
# 🚀 feature request
### Description
<!-- ✍️--> A clear and concise description of the problem or missing capability...
<!-- ✍️ A clear and concise description of the feature... -->
### Describe the solution you'd like
<!-- ✍️--> If you have a solution in mind, please describe it.
### Describe alternatives you've considered
<!-- ✍️--> Have you considered any alternative solutions or workarounds?

4
.gitignore vendored
View file

@ -19,6 +19,10 @@ OsmAndCore_*.aar
.project
out/
# Huawei
agconnect-services.json
OsmAndHms.jks
# Android Studio
/.idea
*.iml

View file

@ -20,6 +20,8 @@ import net.osmand.aidlapi.mapmarker.UpdateMapMarkerParams;
import net.osmand.aidlapi.calculateroute.CalculateRouteParams;
import net.osmand.aidlapi.profile.ExportProfileParams;
import net.osmand.aidlapi.gpx.ImportGpxParams;
import net.osmand.aidlapi.gpx.ShowGpxParams;
import net.osmand.aidlapi.gpx.StartGpxRecordingParams;
@ -103,6 +105,8 @@ import net.osmand.aidlapi.events.AKeyEventsParams;
import net.osmand.aidlapi.info.AppInfoParams;
import net.osmand.aidlapi.profile.ExportProfileParams;
// NOTE: Add new methods at the end of file!!!
interface IOsmAndAidlInterface {
@ -867,4 +871,6 @@ interface IOsmAndAidlInterface {
AppInfoParams getAppInfo();
boolean setMapMargins(in MapMarginsParams params);
boolean exportProfile(in ExportProfileParams params);
}

View file

@ -4,6 +4,8 @@ public interface OsmAndCustomizationConstants {
// Navigation Drawer:
String DRAWER_ITEM_ID_SCHEME = "drawer.action.";
String DRAWER_SWITCH_PROFILE_ID = DRAWER_ITEM_ID_SCHEME + "switch_profile";
String DRAWER_CONFIGURE_PROFILE_ID = DRAWER_ITEM_ID_SCHEME + "configure_profile";
String DRAWER_DASHBOARD_ID = DRAWER_ITEM_ID_SCHEME + "dashboard";
String DRAWER_MAP_MARKERS_ID = DRAWER_ITEM_ID_SCHEME + "map_markers";
String DRAWER_MY_PLACES_ID = DRAWER_ITEM_ID_SCHEME + "my_places";

View file

@ -9,12 +9,21 @@ import net.osmand.aidlapi.AidlParams;
public class CopyFileParams extends AidlParams {
public static final String DESTINATION_DIR_KEY = "destinationDir";
public static final String FILE_NAME_KEY = "fileName";
public static final String FILE_PART_DATA_KEY = "filePartData";
public static final String START_TIME_KEY = "startTime";
public static final String DONE_KEY = "done";
private String destinationDir;
private String fileName;
private byte[] filePartData;
private long startTime;
private boolean done;
public CopyFileParams(@NonNull String fileName, @NonNull byte[] filePartData, long startTime, boolean done) {
public CopyFileParams(@NonNull String destinationDir, @NonNull String fileName, @NonNull byte[] filePartData,
long startTime, boolean done) {
this.destinationDir = destinationDir;
this.fileName = fileName;
this.filePartData = filePartData;
this.startTime = startTime;
@ -37,6 +46,10 @@ public class CopyFileParams extends AidlParams {
}
};
public String getDestinationDir() {
return destinationDir;
}
public String getFileName() {
return fileName;
}
@ -55,23 +68,26 @@ public class CopyFileParams extends AidlParams {
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString("fileName", fileName);
bundle.putByteArray("filePartData", filePartData);
bundle.putLong("startTime", startTime);
bundle.putBoolean("done", done);
bundle.putString(DESTINATION_DIR_KEY, destinationDir);
bundle.putString(FILE_NAME_KEY, fileName);
bundle.putByteArray(FILE_PART_DATA_KEY, filePartData);
bundle.putLong(START_TIME_KEY, startTime);
bundle.putBoolean(DONE_KEY, done);
}
@Override
protected void readFromBundle(Bundle bundle) {
fileName = bundle.getString("fileName");
filePartData = bundle.getByteArray("filePartData");
startTime = bundle.getLong("startTime");
done = bundle.getBoolean("done");
destinationDir = bundle.getString(DESTINATION_DIR_KEY);
fileName = bundle.getString(FILE_NAME_KEY);
filePartData = bundle.getByteArray(FILE_PART_DATA_KEY);
startTime = bundle.getLong(START_TIME_KEY);
done = bundle.getBoolean(DONE_KEY);
}
@Override
public String toString() {
return "CopyFileParams {" +
" destinationDir=" + destinationDir +
" fileName=" + fileName +
", filePartData size=" + filePartData.length +
", startTime=" + startTime +

View file

@ -5,15 +5,31 @@ import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
import net.osmand.aidlapi.profile.AExportSettingsType;
import java.util.ArrayList;
import static net.osmand.aidlapi.profile.ExportProfileParams.SETTINGS_TYPE_KEY;
public class ProfileSettingsParams extends AidlParams {
public static final String VERSION_KEY = "version";
public static final String REPLACE_KEY = "replace";
public static final String LATEST_CHANGES_KEY = "latestChanges";
public static final String PROFILE_SETTINGS_URI_KEY = "profileSettingsUri";
private Uri profileSettingsUri;
private String latestChanges;
private int version;
private ArrayList<String> settingsTypeKeyList = new ArrayList<>();
boolean replace;
public ProfileSettingsParams(Uri profileSettingsUri, String latestChanges, int version) {
public ProfileSettingsParams(Uri profileSettingsUri, ArrayList<AExportSettingsType> settingsTypeList, boolean replace,
String latestChanges, int version) {
this.profileSettingsUri = profileSettingsUri;
for (AExportSettingsType settingsType : settingsTypeList) {
settingsTypeKeyList.add(settingsType.name());
}
this.replace = replace;
this.latestChanges = latestChanges;
this.version = version;
}
@ -46,17 +62,29 @@ public class ProfileSettingsParams extends AidlParams {
return profileSettingsUri;
}
public ArrayList<String> getSettingsTypeKeys() {
return settingsTypeKeyList;
}
public boolean isReplace() {
return replace;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putInt("version", version);
bundle.putString("latestChanges", latestChanges);
bundle.putParcelable("profileSettingsUri", profileSettingsUri);
bundle.putInt(VERSION_KEY, version);
bundle.putString(LATEST_CHANGES_KEY, latestChanges);
bundle.putParcelable(PROFILE_SETTINGS_URI_KEY, profileSettingsUri);
bundle.putStringArrayList(SETTINGS_TYPE_KEY, settingsTypeKeyList);
bundle.putBoolean(REPLACE_KEY, replace);
}
@Override
protected void readFromBundle(Bundle bundle) {
version = bundle.getInt("version");
latestChanges = bundle.getString("latestChanges");
profileSettingsUri = bundle.getParcelable("profileSettingsUri");
version = bundle.getInt(VERSION_KEY);
latestChanges = bundle.getString(LATEST_CHANGES_KEY);
profileSettingsUri = bundle.getParcelable(PROFILE_SETTINGS_URI_KEY);
settingsTypeKeyList = bundle.getStringArrayList(SETTINGS_TYPE_KEY);
replace = bundle.getBoolean(REPLACE_KEY);
}
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.profile;
parcelable AExportSettingsType;

View file

@ -0,0 +1,11 @@
package net.osmand.aidlapi.profile;
public enum AExportSettingsType {
PROFILE,
QUICK_ACTIONS,
POI_TYPES,
MAP_SOURCES,
CUSTOM_RENDER_STYLE,
CUSTOM_ROUTING,
AVOID_ROADS;
}

View file

@ -0,0 +1,3 @@
package net.osmand.aidlapi.profile;
parcelable ExportProfileParams;

View file

@ -0,0 +1,61 @@
package net.osmand.aidlapi.profile;
import android.os.Bundle;
import android.os.Parcel;
import net.osmand.aidlapi.AidlParams;
import java.util.ArrayList;
import java.util.List;
public class ExportProfileParams extends AidlParams {
public static final String PROFILE_KEY = "profile";
public static final String SETTINGS_TYPE_KEY = "settings_type";
private String profile;
private ArrayList<String> settingsTypeKeyList = new ArrayList<>();
public ExportProfileParams(String profile, ArrayList<AExportSettingsType> settingsTypeList) {
this.profile = profile;
for (AExportSettingsType settingsType : settingsTypeList) {
settingsTypeKeyList.add(settingsType.name());
}
}
public ExportProfileParams(Parcel in) {
readFromParcel(in);
}
public static final Creator<ExportProfileParams> CREATOR = new Creator<ExportProfileParams>() {
@Override
public ExportProfileParams createFromParcel(Parcel in) {
return new ExportProfileParams(in);
}
@Override
public ExportProfileParams[] newArray(int size) {
return new ExportProfileParams[size];
}
};
public String getProfile() {
return profile;
}
public List<String> getSettingsTypeKeys() {
return settingsTypeKeyList;
}
@Override
public void writeToBundle(Bundle bundle) {
bundle.putString(PROFILE_KEY, profile);
bundle.putStringArrayList(SETTINGS_TYPE_KEY, settingsTypeKeyList);
}
@Override
protected void readFromBundle(Bundle bundle) {
profile = bundle.getString(PROFILE_KEY);
settingsTypeKeyList = bundle.getStringArrayList(SETTINGS_TYPE_KEY);
}
}

View file

@ -45,6 +45,9 @@ public class IndexConstants {
public static final String GPX_FILE_EXT = ".gpx"; //$NON-NLS-1$
public static final String WPT_CHART_FILE_EXT = ".wpt.chart";
public static final String SQLITE_CHART_FILE_EXT = ".3d.chart";
public final static String POI_TABLE = "poi"; //$NON-NLS-1$
public static final String INDEX_DOWNLOAD_DOMAIN = "download.osmand.net";

View file

@ -334,14 +334,16 @@ public class GeocodingUtilities {
boolean eqStreet = Algorithms.stringsEqual(gr1.streetName, gr2.streetName);
if (eqStreet) {
boolean sameObj = false;
if (gr1.building != null && gr2.building != null) {
if (Algorithms.stringsEqual(gr1.building.getName(), gr2.building.getName())) {
// same building
if (gr1.city != null && gr2.city != null) {
if (gr1.building != null && gr2.building != null) {
if (Algorithms.stringsEqual(gr1.building.getName(), gr2.building.getName())) {
// same building
sameObj = true;
}
} else if (gr1.building == null && gr2.building == null) {
// same street
sameObj = true;
}
} else if (gr1.building == null && gr2.building == null) {
// same street
sameObj = true;
}
if (sameObj) {
double cityDist1 = MapUtils.getDistance(gr1.searchPoint, gr1.city.getLocation());

View file

@ -1,93 +1,104 @@
package net.osmand.osm.io;
/**
* @source http://www.javaworld.com/javaworld/javatips/jw-javatip47.html -- 24.11.2008, (mb)
*/
public class Base64 {
/*******************************************************************************************************************
* BASE 64 encoding of a String or an array of bytes. See also RFC 1421.
*
* @author Unknown
* @author David W. Croft
* @version 1998-06-08
******************************************************************************************************************/
/*******************************************************************************************************************
* BASE 64 encoding of a String or an array of bytes. See also RFC 1421.
*
* @author Unknown
* @author David W. Croft
* @version 1998-06-08
******************************************************************************************************************/
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public static final char[] alphabet = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0 to 7
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 8 to 15
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 16 to 23
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 24 to 31
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 32 to 39
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 40 to 47
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 48 to 55
'4', '5', '6', '7', '8', '9', '+', '/' }; // 56 to 63
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public static final char[] alphabet = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0 to 7
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 8 to 15
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 16 to 23
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 24 to 31
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 32 to 39
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 40 to 47
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 48 to 55
'4', '5', '6', '7', '8', '9', '+', '/' }; // 56 to 63
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
public static String encode(final String s)
//////////////////////////////////////////////////////////////////////
{
return encode(s.getBytes());
}
public static int indexOf(char c) {
for (int i = 0; i < alphabet.length; i++) {
if (alphabet[i] == c) {
return i;
}
}
return -1;
}
public static String encode(final byte[] octetString)
//////////////////////////////////////////////////////////////////////
{
int bits24;
int bits6;
final char[] out = new char[((octetString.length - 1) / 3 + 1) * 4];
public static String encode(final String s)
//////////////////////////////////////////////////////////////////////
{
return encode(s.getBytes());
}
int outIndex = 0;
int i = 0;
public static String encode(final byte[] octetString)
//////////////////////////////////////////////////////////////////////
{
int bits24;
int bits6;
while ((i + 3) <= octetString.length) {
// store the octets
bits24 = (octetString[i++] & 0xFF) << 16;
bits24 |= (octetString[i++] & 0xFF) << 8;
bits24 |= (octetString[i++] & 0xFF);
final char[] out = new char[((octetString.length - 1) / 3 + 1) * 4];
bits6 = (bits24 & 0x00FC0000) >> 18;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00000FC0) >> 6;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0000003F);
out[outIndex++] = alphabet[bits6];
}
int outIndex = 0;
int i = 0;
if (octetString.length - i == 2) {
// store the octets
bits24 = (octetString[i] & 0xFF) << 16;
bits24 |= (octetString[i + 1] & 0xFF) << 8;
while ((i + 3) <= octetString.length) {
// store the octets
bits24 = (octetString[i++] & 0xFF) << 16;
bits24 |= (octetString[i++] & 0xFF) << 8;
bits24 |= (octetString[i++] & 0xFF);
bits6 = (bits24 & 0x00FC0000) >> 18;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00000FC0) >> 6;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00FC0000) >> 18;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00000FC0) >> 6;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0000003F);
out[outIndex++] = alphabet[bits6];
}
// padding
out[outIndex++] = '=';
} else if (octetString.length - i == 1) {
// store the octets
bits24 = (octetString[i] & 0xFF) << 16;
if (octetString.length - i == 2) {
// store the octets
bits24 = (octetString[i] & 0xFF) << 16;
bits24 |= (octetString[i + 1] & 0xFF) << 8;
bits6 = (bits24 & 0x00FC0000) >> 18;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00FC0000) >> 18;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00000FC0) >> 6;
out[outIndex++] = alphabet[bits6];
// padding
out[outIndex++] = '=';
out[outIndex++] = '=';
}
// padding
out[outIndex++] = '=';
} else if (octetString.length - i == 1) {
// store the octets
bits24 = (octetString[i] & 0xFF) << 16;
return new String(out);
}
bits6 = (bits24 & 0x00FC0000) >> 18;
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
out[outIndex++] = alphabet[bits6];
// padding
out[outIndex++] = '=';
out[outIndex++] = '=';
}
return new String(out);
}
}

View file

@ -49,14 +49,16 @@ public class RouteCalculationProgress {
pr = Math.min(p * p / (all * all), 1);
}
float progress = INITIAL_PROGRESS;
if (totalIterations > 1) {
if (totalIterations <= 1) {
progress = INITIAL_PROGRESS + pr * (1 - INITIAL_PROGRESS);
} else if (totalIterations <= 2) {
if (iteration < 1) {
progress = pr * FIRST_ITERATION + INITIAL_PROGRESS;
} else {
progress = (INITIAL_PROGRESS + FIRST_ITERATION) + pr * (1 - FIRST_ITERATION - INITIAL_PROGRESS);
}
} else {
progress = INITIAL_PROGRESS + pr * (1 - INITIAL_PROGRESS);
progress = (float) ((iteration + Math.min(pr, 0.7)) / totalIterations);
}
return Math.min(progress * 100f, 99);
}

View file

@ -1,7 +1,5 @@
package net.osmand.router;
import net.osmand.GPXUtilities;
import net.osmand.GPXUtilities.GPXExtensionsWriter;
import net.osmand.GPXUtilities.GPXFile;
import net.osmand.GPXUtilities.RouteSegment;
import net.osmand.GPXUtilities.RouteType;
@ -12,12 +10,8 @@ import net.osmand.Location;
import net.osmand.binary.BinaryMapRouteReaderAdapter.RouteTypeRule;
import net.osmand.binary.RouteDataBundle;
import net.osmand.binary.StringBundle;
import net.osmand.binary.StringBundleWriter;
import net.osmand.binary.StringBundleXmlWriter;
import net.osmand.util.Algorithms;
import org.xmlpull.v1.XmlSerializer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

View file

@ -64,8 +64,6 @@ public class RoutePlannerFrontEnd {
public int routeGapDistance;
public int routeDistanceUnmatched;
public boolean calculationCancelled;
private boolean calculationDone;
public GpxRouteApproximation(RoutingContext ctx) {
this.ctx = ctx;
@ -82,10 +80,6 @@ public class RoutePlannerFrontEnd {
routeCalculations, routeDistCalculations, routePointsSearched, routeDistance, routeDistanceUnmatched);
}
public boolean isCalculationDone() {
return calculationDone;
}
public double distFromLastPoint(LatLon startPoint) {
if (result.size() > 0) {
return MapUtils.getDistance(getLastPoint(), startPoint);
@ -239,18 +233,25 @@ public class RoutePlannerFrontEnd {
public GpxRouteApproximation searchGpxRoute(GpxRouteApproximation gctx, List<GpxPoint> gpxPoints, ResultMatcher<GpxRouteApproximation> resultMatcher) throws IOException, InterruptedException {
long timeToCalculate = System.nanoTime();
gctx.ctx.keepNativeRoutingContext = true;
if (gctx.ctx.calculationProgress == null) {
gctx.ctx.calculationProgress = new RouteCalculationProgress();
}
GpxPoint start = null;
GpxPoint prev = null;
if (gpxPoints.size() > 0) {
gctx.ctx.calculationProgress.totalIterations = (int) (gpxPoints.get(gpxPoints.size() - 1).cumDist / gctx.MAXIMUM_STEP_APPROXIMATION + 1);
start = gpxPoints.get(0);
}
while (start != null && !gctx.calculationCancelled) {
while (start != null && !gctx.ctx.calculationProgress.isCancelled) {
if (Thread.currentThread().isInterrupted()) {
return null;
}
double routeDist = gctx.MAXIMUM_STEP_APPROXIMATION;
GpxPoint next = findNextGpxPointWithin(gctx, gpxPoints, start, routeDist);
boolean routeFound = false;
gctx.ctx.calculationProgress.nextIteration();
if (next != null && initRoutingPoint(start, gctx, gctx.MINIMUM_POINT_APPROXIMATION)) {
gctx.ctx.calculationProgress.totalEstimatedDistance = 0;
gctx.ctx.calculationProgress.iteration = (int) (next.cumDist / gctx.MAXIMUM_STEP_APPROXIMATION);
while (routeDist >= gctx.MINIMUM_STEP_APPROXIMATION && !routeFound) {
routeFound = initRoutingPoint(next, gctx, gctx.MINIMUM_POINT_APPROXIMATION);
if (routeFound) {
@ -258,7 +259,7 @@ public class RoutePlannerFrontEnd {
if (routeFound) {
// route is found - cut the end of the route and move to next iteration
// start.stepBackRoute = new ArrayList<RouteSegmentResult>();
// boolean stepBack = true;
// boolean stepBack = true;
boolean stepBack = stepBackAndFindPrevPointInRoute(gctx, gpxPoints, start, next);
if (!stepBack) {
// not supported case (workaround increase MAXIMUM_STEP_APPROXIMATION)
@ -299,20 +300,19 @@ public class RoutePlannerFrontEnd {
}
start = next;
}
if(gctx.ctx.calculationProgress != null) {
gctx.ctx.calculationProgress.timeToCalculate = System.nanoTime() - timeToCalculate;
if (gctx.ctx.calculationProgress != null) {
gctx.ctx.calculationProgress.timeToCalculate = System.nanoTime() - timeToCalculate;
}
gctx.ctx.deleteNativeRoutingContext();
BinaryRoutePlanner.printDebugMemoryInformation(gctx.ctx);
calculateGpxRoute(gctx, gpxPoints);
if (!gctx.result.isEmpty() && !gctx.calculationCancelled) {
if (!gctx.result.isEmpty() && !gctx.ctx.calculationProgress.isCancelled) {
new RouteResultPreparation().printResults(gctx.ctx, gpxPoints.get(0).loc, gpxPoints.get(gpxPoints.size() - 1).loc, gctx.result);
System.out.println(gctx);
}
if (resultMatcher != null) {
resultMatcher.publish(gctx.calculationCancelled ? null : gctx);
resultMatcher.publish(gctx.ctx.calculationProgress.isCancelled ? null : gctx);
}
gctx.calculationDone = true;
return gctx;
}
@ -365,7 +365,7 @@ public class RoutePlannerFrontEnd {
reg.initRouteEncodingRule(0, "highway", RouteResultPreparation.UNMATCHED_HIGHWAY_TYPE);
List<LatLon> lastStraightLine = null;
GpxPoint straightPointStart = null;
for (int i = 0; i < gpxPoints.size() && !gctx.calculationCancelled; ) {
for (int i = 0; i < gpxPoints.size() && !gctx.ctx.calculationProgress.isCancelled; ) {
GpxPoint pnt = gpxPoints.get(i);
if (pnt.routeToTarget != null && !pnt.routeToTarget.isEmpty()) {
LatLon startPoint = pnt.routeToTarget.get(0).getStartPoint();
@ -459,7 +459,7 @@ public class RoutePlannerFrontEnd {
private void cleanupResultAndAddTurns(GpxRouteApproximation gctx) {
// cleanup double joints
int LOOK_AHEAD = 4;
for(int i = 0; i < gctx.result.size() && !gctx.calculationCancelled; i++) {
for(int i = 0; i < gctx.result.size() && !gctx.ctx.calculationProgress.isCancelled; i++) {
RouteSegmentResult s = gctx.result.get(i);
for(int j = i + 2; j <= i + LOOK_AHEAD && j < gctx.result.size(); j++) {
RouteSegmentResult e = gctx.result.get(j);
@ -476,7 +476,7 @@ public class RoutePlannerFrontEnd {
r.setTurnType(null);
r.setDescription("");
}
if (!gctx.calculationCancelled) {
if (!gctx.ctx.calculationProgress.isCancelled) {
preparation.prepareTurnResults(gctx.ctx, gctx.result);
}
}
@ -549,8 +549,10 @@ public class RoutePlannerFrontEnd {
if (start != null && start.pnt == null) {
gctx.routePointsSearched++;
RouteSegmentPoint rsp = findRouteSegment(start.loc.getLatitude(), start.loc.getLongitude(), gctx.ctx, null, false);
if (MapUtils.getDistance(rsp.getPreciseLatLon(), start.loc) < distThreshold) {
start.pnt = rsp;
if (rsp != null) {
if (MapUtils.getDistance(rsp.getPreciseLatLon(), start.loc) < distThreshold) {
start.pnt = rsp;
}
}
}
if (start != null && start.pnt != null) {
@ -737,7 +739,7 @@ public class RoutePlannerFrontEnd {
res = searchRouteImpl(ctx, points, routeDirection);
}
if (ctx.calculationProgress != null) {
ctx.calculationProgress.timeToCalculate += (System.nanoTime() - timeToCalculate);
ctx.calculationProgress.timeToCalculate = (System.nanoTime() - timeToCalculate);
}
BinaryRoutePlanner.printDebugMemoryInformation(ctx);
if (res != null) {

View file

@ -271,7 +271,7 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
bundle.putString("turnLanes", TurnType.lanesToString(turnLanes));
}
}
bundle.putLong("id", object.id);
bundle.putLong("id", object.id >> 6); // OsmAnd ID to OSM ID
bundle.putArray("types", convertTypes(object.types, rules));
int start = Math.min(startPointIndex, endPointIndex);
@ -327,22 +327,21 @@ public class RouteSegmentResult implements StringExternalizable<RouteDataBundle>
Location prevLocation = null;
for (int i = 0; i < length; i++) {
Location location = resources.getLocation(index);
if (location == null) {
break;
}
double dist = 0;
if (prevLocation != null) {
dist = MapUtils.getDistance(prevLocation.getLatitude(), prevLocation.getLongitude(), location.getLatitude(), location.getLongitude());
distance += dist;
}
prevLocation = location;
object.pointsX[i] = MapUtils.get31TileNumberX(location.getLongitude());
object.pointsY[i] = MapUtils.get31TileNumberY(location.getLatitude());
if (location.hasAltitude() && object.heightDistanceArray.length > 0) {
object.heightDistanceArray[i * 2] = (float) dist;
object.heightDistanceArray[i * 2 + 1] = (float) location.getAltitude();
} else {
object.heightDistanceArray = new float[0];
if (location != null) {
double dist = 0;
if (prevLocation != null) {
dist = MapUtils.getDistance(prevLocation.getLatitude(), prevLocation.getLongitude(), location.getLatitude(), location.getLongitude());
distance += dist;
}
prevLocation = location;
object.pointsX[i] = MapUtils.get31TileNumberX(location.getLongitude());
object.pointsY[i] = MapUtils.get31TileNumberY(location.getLatitude());
if (location.hasAltitude() && object.heightDistanceArray.length > 0) {
object.heightDistanceArray[i * 2] = (float) dist;
object.heightDistanceArray[i * 2 + 1] = (float) location.getAltitude();
} else {
object.heightDistanceArray = new float[0];
}
}
if (plus) {
index++;

View file

@ -289,7 +289,8 @@ public class RoutingContext {
if(excludeNotAllowed != null && !excludeNotAllowed.contains(ro.getId())) {
ts.add(ro);
}
} else if(excludeNotAllowed != null && ro.getId() > 0){
}
if(excludeNotAllowed != null && ro.getId() > 0){
excludeNotAllowed.add(ro.getId());
if(ts.excludedIds == null ){
ts.excludedIds = new TLongHashSet();

View file

@ -33,6 +33,7 @@ import net.osmand.util.LocationParser.ParsedOpenLocationCode;
import net.osmand.util.MapUtils;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@ -922,6 +923,7 @@ public class SearchCoreFactory {
public static class SearchAmenityByTypeAPI extends SearchBaseAPI {
private static final int BBOX_RADIUS = 10000;
private static final int BBOX_RADIUS_NEAREST = 1000;
private SearchAmenityTypesAPI searchAmenityTypesAPI;
private MapPoiTypes types;
private AbstractPoiType unselectedPoiType;
@ -1006,7 +1008,14 @@ public class SearchCoreFactory {
}
this.nameFilter = nameFilter;
if (poiTypeFilter != null) {
QuadRect bbox = phrase.getRadiusBBoxToSearch(BBOX_RADIUS);
int radius = BBOX_RADIUS;
if (phrase.getRadiusLevel() == 1 && poiTypeFilter instanceof CustomSearchPoiFilter) {
String name = ((CustomSearchPoiFilter) poiTypeFilter).getFilterId();
if ("std_null".equals(name)) {
radius = BBOX_RADIUS_NEAREST;
}
}
QuadRect bbox = phrase.getRadiusBBoxToSearch(radius);
List<BinaryMapIndexReader> offlineIndexes = phrase.getOfflineIndexes();
Set<String> searchedPois = new TreeSet<>();
for (BinaryMapIndexReader r : offlineIndexes) {
@ -1407,6 +1416,7 @@ public class SearchCoreFactory {
private LatLon olcPhraseLocation;
private ParsedOpenLocationCode cachedParsedCode;
private final List<String> citySubTypes = Arrays.asList("city", "town", "village");
private final DecimalFormat latLonFormatter = new DecimalFormat("#.0####");
public SearchLocationAndUrlAPI() {
super(ObjectType.LOCATION, ObjectType.PARTIAL_LOCATION);
@ -1498,7 +1508,7 @@ public class SearchCoreFactory {
sp.priority = SEARCH_LOCATION_PRIORITY;
sp.object = sp.location = ll;
sp.localeName = ((float) sp.location.getLatitude()) + ", <input> ";
sp.localeName = formatLatLon(sp.location.getLatitude()) + ", <input> ";
sp.objectType = ObjectType.PARTIAL_LOCATION;
resultMatcher.publish(sp);
}
@ -1510,7 +1520,7 @@ public class SearchCoreFactory {
SearchResult sp = new SearchResult(phrase);
sp.priority = SEARCH_LOCATION_PRIORITY;
sp.object = sp.location = l;
sp.localeName = ((float) sp.location.getLatitude()) + ", " + ((float) sp.location.getLongitude());
sp.localeName = formatLatLon(sp.location.getLatitude()) + ", " + formatLatLon(sp.location.getLongitude());
sp.objectType = ObjectType.LOCATION;
sp.wordsSpan = lw;
resultMatcher.publish(sp);
@ -1525,7 +1535,7 @@ public class SearchCoreFactory {
sp.object = pnt;
sp.wordsSpan = text;
sp.location = new LatLon(pnt.getLatitude(), pnt.getLongitude());
sp.localeName = ((float)pnt.getLatitude()) +", " + ((float) pnt.getLongitude());
sp.localeName = formatLatLon(pnt.getLatitude()) +", " + formatLatLon(pnt.getLongitude());
if (pnt.getZoom() > 0) {
sp.preferredZoom = pnt.getZoom();
}
@ -1555,6 +1565,10 @@ public class SearchCoreFactory {
}
return cachedParsedCode == null ? SEARCH_LOCATION_PRIORITY : SEARCH_MAX_PRIORITY;
}
private String formatLatLon(double latLon) {
return latLonFormatter.format(latLon);
}
}
private static String stripBraces(String localeName) {

View file

@ -229,12 +229,14 @@ public class SearchPhrase {
}
public int countWords(String w) {
String[] ws = w.split(ALLDELIMITERS);
int cnt = 0;
for (int i = 0; i < ws.length; i++) {
String wd = ws[i].trim();
if (wd.length() > 0) {
cnt++;
if (!Algorithms.isEmpty(w)) {
String[] ws = w.split(ALLDELIMITERS);
for (int i = 0; i < ws.length; i++) {
String wd = ws[i].trim();
if (wd.length() > 0) {
cnt++;
}
}
}
return cnt;

View file

@ -119,7 +119,7 @@ public class Algorithms {
}
public static String getFileNameWithoutExtension(String name) {
int i = name.indexOf('.');
int i = name.lastIndexOf('.');
if (i >= 0) {
name = name.substring(0, i);
}
@ -942,4 +942,20 @@ public class Algorithms {
}
return res;
}
public static boolean isValidMessageFormat(CharSequence sequence) {
if (!isEmpty(sequence)) {
int counter = 0;
for (int i = 0; i < sequence.length(); i++) {
char ch = sequence.charAt(i);
if (ch == '{') {
counter++;
} else if (ch == '}') {
counter--;
}
}
return counter == 0;
}
return false;
}
}

View file

@ -3,6 +3,8 @@ package net.osmand.util;
import java.net.URI;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Locale;
@ -11,6 +13,9 @@ import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.osmand.data.LatLon;
import net.osmand.util.GeoPointParserUtil.GeoParsedPoint;
public class GeoPointParserUtil {
@ -69,6 +74,31 @@ public class GeoPointParserUtil {
}
return map;
}
private static int kMaxPointBytes = 10;
private static int kMaxCoordBits = kMaxPointBytes * 3;
public static LatLon decodeMapsMeLatLonToInt(String s) {
// 44TvlEGXf-
int lat = 0, lon = 0;
int shift = kMaxCoordBits - 3;
for (int i = 0; i < s.length(); ++i, shift -= 3) {
int a = net.osmand.osm.io.Base64.indexOf(s.charAt(i));
if (a < 0)
return null;
int lat1 = (((a >> 5) & 1) << 2 | ((a >> 3) & 1) << 1 | ((a >> 1) & 1));
int lon1 = (((a >> 4) & 1) << 2 | ((a >> 2) & 1) << 1 | (a & 1));
lat |= lat1 << shift;
lon |= lon1 << shift;
}
double middleOfSquare = 1 << (3 * (kMaxPointBytes - s.length()) - 1);
lat += middleOfSquare;
lon += middleOfSquare;
double dlat = ((double) lat) / ((1 << kMaxCoordBits) - 1) * 180 - 90;
double dlon = ((double) lon) / ((1 << kMaxCoordBits) - 1 + 1) * 360.0 - 180;
return new LatLon(dlat, dlon);
}
/**
* Parses geo and map intents:
@ -190,6 +220,31 @@ public class GeoPointParserUtil {
int zoom = parseZoom(zm);
return new GeoParsedPoint(lat, lon, zoom);
}
} else if (host.equals("ge0.me")) {
// http:///44TvlEGXf-/Kyiv
if (path.startsWith("/")) {
path = path.substring(1);
}
String[] pms = path.split("/");
String label = "";
if (pms.length > 1) {
label = pms[1];
}
String qry = pms[0];
if (qry.length() < 10) {
return null;
}
int indZoom = net.osmand.osm.io.Base64.indexOf(qry.charAt(0));
int zoom = 15;
if (indZoom >= 0) {
zoom = indZoom / 4 + 4;
}
LatLon l = decodeMapsMeLatLonToInt(qry.substring(1).replace('-', '/'));
if (l == null) {
return null;
}
return new GeoParsedPoint(l.getLatitude(), l.getLongitude(), zoom, label);
} else if (simpleDomains.contains(host)) {
if (uri.getQuery() == null && params.size() == 0) {
// DOUBLE check this may be wrong test of openstreetmap.de (looks very weird url and server doesn't respond)
@ -221,7 +276,6 @@ public class GeoPointParserUtil {
String z = String.valueOf(GeoParsedPoint.NO_ZOOM);
if (params.containsKey("q")) {
System.out.println("q=" + params.get("q"));
Matcher matcher = commaSeparatedPairPattern.matcher(params.get("q"));
if (matcher.matches()) {
latString = matcher.group(1);

View file

@ -15,6 +15,7 @@ import java.util.TreeSet;
import net.osmand.binary.BinaryMapIndexReader;
import net.osmand.data.LatLon;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
@ -29,42 +30,52 @@ public class RouteTestingTest {
private TestEntry te;
public RouteTestingTest(String name, TestEntry te) {
this.te = te;
}
public RouteTestingTest(String name, TestEntry te) {
this.te = te;
}
@BeforeClass
public static void setUp() throws Exception {
RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true;
}
@BeforeClass
public static void setUp() throws Exception {
RouteResultPreparation.PRINT_TO_CONSOLE_ROUTE_INFORMATION_TO_TEST = true;
}
@Parameterized.Parameters(name = "{index}: {0}")
public static Iterable<Object[]> data() throws IOException {
String fileName = "/test_routing.json";
Reader reader = new InputStreamReader(RouteTestingTest.class.getResourceAsStream(fileName));
Gson gson = new GsonBuilder().setPrettyPrinting().create();
TestEntry[] testEntries = gson.fromJson(reader, TestEntry[].class);
ArrayList<Object[]> arrayList = new ArrayList<>();
for(TestEntry te : testEntries) {
if(te.isIgnore()) {
continue;
}
arrayList.add(new Object[] {te.getTestName(), te});
}
reader.close();
return arrayList;
@Parameterized.Parameters(name = "{index}: {0}")
public static Iterable<Object[]> data() throws IOException {
String fileName = "/test_routing.json";
Reader reader = new InputStreamReader(RouteTestingTest.class.getResourceAsStream(fileName));
Gson gson = new GsonBuilder().setPrettyPrinting().create();
TestEntry[] testEntries = gson.fromJson(reader, TestEntry[].class);
ArrayList<Object[]> arrayList = new ArrayList<>();
for (TestEntry te : testEntries) {
if (te.isIgnore()) {
continue;
}
arrayList.add(new Object[]{te.getTestName(), te});
}
reader.close();
return arrayList;
}
}
@Test
@Test
public void testRouting() throws Exception {
String fl = "src/test/resources/Routing_test.obf";
RandomAccessFile raf = new RandomAccessFile(fl, "r");
RoutePlannerFrontEnd fe = new RoutePlannerFrontEnd();
BinaryMapIndexReader[] binaryMapIndexReaders = { new BinaryMapIndexReader(raf, new File(fl)) };
BinaryMapIndexReader[] binaryMapIndexReaders;// = { new BinaryMapIndexReader(raf, new File(fl)) };
RoutingConfiguration.Builder builder = RoutingConfiguration.getDefault();
Map<String, String> params = te.getParams();
if (params.containsKey("map")) {
String fl1 = "src/test/resources/" + params.get("map");
RandomAccessFile raf1 = new RandomAccessFile(fl1, "r");
binaryMapIndexReaders = new BinaryMapIndexReader[]{
new BinaryMapIndexReader(raf1, new File(fl1)),
new BinaryMapIndexReader(raf, new File(fl))
};
} else {
binaryMapIndexReaders = new BinaryMapIndexReader[]{new BinaryMapIndexReader(raf, new File(fl))};
}
RoutingConfiguration config = builder.build(params.containsKey("vehicle") ? params.get("vehicle") : "car",
RoutingConfiguration.DEFAULT_MEMORY_LIMIT * 3, params);
RoutingContext ctx = fe.buildRoutingContext(config, null, binaryMapIndexReaders,
@ -102,6 +113,4 @@ public class RouteTestingTest {
}
}

View file

@ -43,6 +43,13 @@ public class GeoPointParserUtilTest {
"https://www.google.co.in/maps/place/data=!3m2!1e3!4b1!4m6!3m5!1s0x0:0x0!7e2!8m2!3d10.1213237!4d76.348392?shorturl=1");
assertGeoPoint(actual, new GeoParsedPoint(10.1213237, 76.348392));
}
@Test
public void testMapsMeParser() {
GeoParsedPoint actual = GeoPointParserUtil.parse(
"http://ge0.me/44TvlEGXf-/Kyiv");
assertGeoPoint(actual, new GeoParsedPoint(50.45003, 30.52414, 18, "Kyiv"));
}
@Test
public void testGeoPoint() {
@ -449,21 +456,21 @@ public class GeoPointParserUtilTest {
actual = GeoPointParserUtil.parse(url);
assertGeoPoint(actual, new GeoParsedPoint("paris"));
// TODO this URL does not work, where is it used?
// LEGACY this URL does not work, where is it used?
// http://maps.google.com/maps/q=loc:34,-106&z=11
url = "http://maps.google.com/maps/q=loc:" + ilat + "," + ilon + "&z=" + z;
System.out.println("url: " + url);
actual = GeoPointParserUtil.parse(url);
assertGeoPoint(actual, new GeoParsedPoint(ilat, ilon, z));
// TODO this URL does not work, where is it used?
// LEGACY this URL does not work, where is it used?
// http://maps.google.com/maps/q=loc:34.99393,-106.61568&z=11
url = "http://maps.google.com/maps/q=loc:" + dlat + "," + dlon + "&z=" + z;
System.out.println("url: " + url);
actual = GeoPointParserUtil.parse(url);
assertGeoPoint(actual, new GeoParsedPoint(dlat, dlon, z));
// TODO this URL does not work, where is it used?
// LEGACY this URL does not work, where is it used?
// whatsapp
// http://maps.google.com/maps/q=loc:34,-106 (You)
z = GeoParsedPoint.NO_ZOOM;
@ -472,7 +479,7 @@ public class GeoPointParserUtilTest {
actual = GeoPointParserUtil.parse(url);
assertGeoPoint(actual, new GeoParsedPoint(ilat, ilon, z));
// TODO this URL does not work, where is it used?
// LEGACY this URL does not work, where is it used?
// whatsapp
// http://maps.google.com/maps/q=loc:34.99393,-106.61568 (You)
z = GeoParsedPoint.NO_ZOOM;

View file

@ -20,7 +20,7 @@
android:screenOrientation="unspecified"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.TrackerLogcatActivity" />
<activity
android:name=".ui.MainActivity"
android:configChanges="orientation|screenSize"

View file

@ -0,0 +1,44 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/card_bg_color">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/action_bar_height">
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:text="@string/logcat_buffer"
android:textColor="@color/app_bar_title_light"
android:textSize="@dimen/title_text_size"
app:typeface="@string/font_roboto_mono_bold"/>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/screen_bg_light"
android:clipToPadding="false"
android:orientation="vertical"
android:scrollbars="vertical" />
</LinearLayout>

View file

@ -447,6 +447,50 @@
</LinearLayout>
<include layout="@layout/list_item_divider"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/card_bg_color">
<LinearLayout
android:id="@+id/logcat_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:orientation="vertical">
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/logcat_buffer"
android:textColor="?android:textColorPrimary"
android:textSize="@dimen/list_item_title_text_size"
app:firstBaselineToTopHeight="28sp"
app:typeface="@string/font_roboto_medium" />
<net.osmand.telegram.ui.views.TextViewEx
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:text="@string/logcat_buffer_descr"
android:textColor="?android:attr/textColorSecondary"
android:textSize="@dimen/list_item_description_text_size"
app:firstBaselineToTopHeight="20sp"
app:lastBaselineToBottomHeight="16sp"
app:typeface="@string/font_roboto_regular" />
</LinearLayout>
</FrameLayout>
<include layout="@layout/card_bottom_divider"/>
</LinearLayout>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:minHeight="@dimen/list_description_height"
android:paddingLeft="@dimen/content_padding_standard"
android:paddingRight="@dimen/content_padding_standard"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/hint_text_size"
android:linksClickable="true"
android:lineSpacingMultiplier="@dimen/text_description_line_spacing_multiplier"
tools:text="Some long description"
android:paddingEnd="@dimen/content_padding_standard"
android:paddingStart="@dimen/content_padding_standard" />

View file

@ -267,4 +267,8 @@
<string name="status_widget_title">تتبع حالة أوسماند</string>
<string name="back_to_osmand">العودة إلى OsmAnd</string>
<string name="duration_ago">%1$s منذ</string>
<string name="send_report">إرسال التقرير</string>
<string name="shared_string_export">تصدير</string>
<string name="logcat_buffer">سجل الاستخدام</string>
<string name="logcat_buffer_descr">التحقق من السجلات التفصيلية للتطبيق ومشاركتها</string>
</resources>

View file

@ -267,4 +267,8 @@
<string name="last_response_duration">Letzte Antwort: vor %1$s</string>
<string name="duration_ago">vor %1$s</string>
<string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Export</string>
<string name="logcat_buffer">Logcat-Puffer</string>
<string name="logcat_buffer_descr">Protokolle der Anwendung einsehen und freigeben</string>
<string name="send_report">Bericht senden</string>
</resources>

View file

@ -206,7 +206,7 @@
<string name="shared_string_appearance">Aspecto</string>
<string name="show_gps_points">Mostrar puntos GPS</string>
<string name="show_gps_points_descr">Muestra la cantidad de puntos GPS recibidos y enviados.</string>
<string name="shared_string_ok">Aplicar</string>
<string name="shared_string_ok">Aceptar</string>
<string name="timeline_available_for_free_now">La línea de tiempo es una función disponible ahora de forma gratuita.</string>
<string name="disable_monitoring">Desactivar la monitorización</string>
<string name="location_recording_enabled">Grabación de ubicación activada</string>

View file

@ -267,4 +267,8 @@
<string name="last_response_duration">Viimane vastus: %1$s tagasi</string>
<string name="duration_ago">%1$s tagasi</string>
<string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Ekspordi</string>
<string name="logcat_buffer">Logcati puhver</string>
<string name="logcat_buffer_descr">Vaata ja jaga rakenduse detailseid logisid</string>
<string name="send_report">Saada ettekanne</string>
</resources>

View file

@ -210,7 +210,7 @@
<string name="osmand_service_descr">OsmAnd aztarnaria atzeko planoan exekutatzen da pantaila itzalita dagoenean.</string>
<string name="location_service_no_gps_available">Hautatu kokapen-hornitzaileetako bat zure kokapena partekatzeko.</string>
<string name="no_location_permission">Aplikazioak ez du kokapena atzitzeko baimenik.</string>
<string name="authentication_code_descr">"Telegramek kode bat bidali dizu OsmAnd-ek zure kontuan saioa hasteko."</string>
<string name="authentication_code_descr">Telegramek kode bat bidali dizu OsmAnd-ek zure kontuan saioa hasteko.</string>
<string name="my_location_search_hint">Bilaketa: Taldea edo kontaktua</string>
<string name="location_sharing_description">Hautatu kokapena partekatzeko kontaktuak eta taldeak.</string>
<string name="set_time">Ezarri denbora</string>
@ -232,14 +232,14 @@
<string name="send_my_location_desc">Ezarri kokapena partekatzeko gutxieneko tartea.</string>
<string name="stale_location">Ez da mugitzen</string>
<string name="stale_location_desc">Kontaktu bat mugitu zen azken aldia.</string>
<string name="location_history_desc">Ezkutatu denbora jakin batean mugitu ez diren kontaktuak</string>
<string name="location_history_desc">Ezkutatu denbora jakin batean mugitu ez diren kontaktuak.</string>
<string name="osmand_connect">OsmAnd konexioa</string>
<string name="osmand_connect_desc">Aukeratu OsmAnd aztarnariak posizioak bistaratzeko erabiliko duen OsmAnd bertsioa.</string>
<string name="in_time">%1$s-n</string>
<string name="logout_help_desc">Nola itzali OsmAnd aztarnaria Telegram-etik</string>
<string name="disconnect_from_telegram">Nola itzali OsmAnd aztarnaria Telegram-etik</string>
<string name="disconnect_from_telegram_desc">Kokapena partekatzeko sarbidea baliogabetzeko. Ireki Telegram, joan Ezarpenak → Pribatutasuna eta segurtasuna → Saioak eta amaitu OsmAnd aztarnariaren saioa atalera.</string>
<string name="logout_no_internet_msg">"Konektatu Internetera Telegram saioa behar bezala amaiatzeko."</string>
<string name="logout_no_internet_msg">Konektatu Internetera Telegram saioa behar bezala amaiatzeko.</string>
<string name="last_response">Azken erantzuna</string>
<string name="disable_all_sharing_desc">Kokapena partekatzea itzaltzen du hautatutako txat guztietan (%1$d).</string>
<string name="choose_osmand_desc">Hautatu kontaktuak mapan bistaratzeko OsmAnd bertsioa.</string>

View file

@ -38,8 +38,8 @@
<string name="yard">yd</string>
<string name="foot">ft</string>
<string name="mile">mi</string>
<string name="km">ک‌م</string>
<string name="m">متر</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>
@ -73,4 +73,9 @@
<string name="unit_of_length_descr">یکاهای طول را تغییر دهید.</string>
<string name="unit_of_length">یکاهای طول</string>
<string name="shared_string_appearance">ظاهر</string>
<string name="last_response_duration">آخرین پاسخ: %1$s پیش</string>
<string name="last_update_from_telegram_duration">آخرین به‌روزرسانی تلگرام: %1$s پیش</string>
<string name="last_response_date">آخرین پاسخ: %1$s</string>
<string name="last_update_from_telegram_date">آخرین به‌روزرسانی تلگرام: %1$s</string>
<string name="shared_string_error_short">خطا</string>
</resources>

View file

@ -266,4 +266,9 @@
<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="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>
<string name="send_report">Envoyer le rapport</string>
</resources>

View file

@ -268,4 +268,8 @@
<string name="last_response_duration">תגובה אחרונה: לפני %1$s</string>
<string name="duration_ago">לפני %1$s</string>
<string name="shared_string_error_short">שגיאה</string>
<string name="shared_string_export">ייצוא</string>
<string name="logcat_buffer">מכלא Logcat</string>
<string name="logcat_buffer_descr">בדיקה ושיתוף יומני תיעוד מפורטים של היישומים</string>
<string name="send_report">שליחת דיווח</string>
</resources>

View file

@ -268,4 +268,8 @@
<string name="last_response_duration">Utolsó válasz: %1$s</string>
<string name="duration_ago">Ennyivel ezelőtt: %1$s</string>
<string name="shared_string_error_short">HIBA</string>
<string name="shared_string_export">Exportálás</string>
<string name="logcat_buffer">Logcat-puffer (hibanapló)</string>
<string name="logcat_buffer_descr">Az alkalmazás részletes naplóinak ellenőrzése és megosztása</string>
<string name="send_report">Jelentés küldése</string>
</resources>

View file

@ -219,8 +219,8 @@
<string name="shared_string_authorization_descr">国際形式でTelegramを利用する端末の電話番号を入力してください(日本の場合+81を先頭につけて電話番号最初の0を除いた番号を入力)</string>
<string name="shared_string_welcome">ようこそ</string>
<string name="yard">ヤード</string>
<string name="foot">フィート</string>
<string name="mile">マイル</string>
<string name="foot">ft</string>
<string name="mile">mi</string>
<string name="km">km</string>
<string name="m">m</string>
<string name="nm">海里</string>

View file

@ -267,4 +267,8 @@
<string name="last_response_duration">Última resposta: %1$s atrás</string>
<string name="duration_ago">%1$s atrás</string>
<string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Exportar</string>
<string name="logcat_buffer">Buffer de Logcat</string>
<string name="logcat_buffer_descr">Verifique e compartilhe registros detalhados do aplicativo</string>
<string name="send_report">Enviar o relatório</string>
</resources>

View file

@ -108,7 +108,7 @@
<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">Status de compartilhamento</string>
<string name="sharing_status">Estado de compartilhamento</string>
<string name="location_sharing_status">Compartilhamento: %1$s</string>
<string name="shared_string_enabled">Ativado</string>
<string name="no_gps_connection">Sem conexão GPS</string>
@ -163,7 +163,7 @@
<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">Desativado</string>
<string name="shared_string_off">Desligado</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>
@ -204,7 +204,7 @@
<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 em segundo plano</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="shared_string_distance">Distância</string>
<string name="share_location">Compartilhar localização</string>
@ -230,15 +230,15 @@
<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">Quilômetros por hora</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_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_mi_feet">Milhas/pés</string>
<string name="si_mi_yard">Milhas/jardas</string>
<string name="si_km_m">Quilômetros/metros</string>
<string name="si_km_m">Quilómetros/metros</string>
<string name="si_nm">Milhas náuticas</string>
<string name="si_mi_meters">Milhas/metros</string>
<string name="shared_string_hour_short">h</string>
@ -252,7 +252,7 @@
<string name="time_zone_descr">Selecione o fuso horário a mostrar nas suas mensagens de localização.</string>
<string name="time_zone">Fuso horário</string>
<string name="units_and_formats">Unidades e formatos</string>
<string name="unit_of_length_descr">Alterar unidade de distância.</string>
<string name="unit_of_length_descr">Alterar a unidade de medida de distância.</string>
<string name="unit_of_length">Unidades de comprimento</string>
<string name="unit_of_speed_system_descr">Definir unidade de velocidade.</string>
<string name="unit_of_speed_system">Unidade de velocidade</string>

View file

@ -75,7 +75,7 @@
<string name="by_distance">По расстоянию</string>
<string name="by_name">По имени</string>
<string name="by_group">По группе</string>
<string name="shared_string_sort">Сортировать</string>
<string name="shared_string_sort">Сортировка</string>
<string name="shared_string_sort_by">Сортировать по</string>
<string name="turn_off_all">Отстановить все</string>
<string name="shared_string_exit">Выход</string>
@ -267,4 +267,8 @@
<string name="last_update_from_telegram_duration">Последнее обновление от Telegram: %1$s назад</string>
<string name="last_response_date">Последний ответ: %1$s</string>
<string name="last_update_from_telegram_date">Последнее обновление от Telegram: %1$s</string>
<string name="shared_string_export">Экспорт</string>
<string name="logcat_buffer">Буфер Logcat</string>
<string name="logcat_buffer_descr">Проверьте и поделитесь подробными журналами приложения</string>
<string name="send_report">Отправить отчёт</string>
</resources>

View file

@ -268,4 +268,8 @@
<string name="last_response_duration">Ùrtima risposta: %1$s a como</string>
<string name="duration_ago">%1$s a como</string>
<string name="shared_string_error_short">ERR</string>
<string name="shared_string_export">Esporta</string>
<string name="logcat_buffer">Buffer de Logcat</string>
<string name="logcat_buffer_descr">Verìfica e cumpartzi sos registros de s\'aplicatzione fatos a sa minuda</string>
<string name="send_report">Imbia resumu</string>
</resources>

View file

@ -267,4 +267,8 @@
<string name="last_response_duration">Son cevap: %1$s önce</string>
<string name="duration_ago">%1$s önce</string>
<string name="shared_string_error_short">HATA</string>
<string name="shared_string_export">Dışa aktar</string>
<string name="logcat_buffer">Logcat tamponu</string>
<string name="logcat_buffer_descr">Uygulamanın ayrıntılı günlük kayıtlarına göz atın ve paylaşın</string>
<string name="send_report">Rapor gönder</string>
</resources>

View file

@ -118,7 +118,7 @@
<string name="shared_string_settings">Налаштування</string>
<string name="no_location_permission">Застосунок не має дозволу до отримання даних позиціювання.</string>
<string name="gps_not_available">Будь ласка, увімкніть «Позиціювання» у системних налаштуваннях</string>
<string name="osmand_service">Фоновий режим</string>
<string name="osmand_service">Режим тла</string>
<string name="osmand_service_descr">OsmAnd Tracker працює у фоновому режимі з вимкненим екраном.</string>
<string name="shared_string_distance">Відстань</string>
<string name="share_location">Поділитися позицією</string>
@ -267,4 +267,8 @@
<string name="last_response_duration">Остання відповідь: %1$s тому</string>
<string name="duration_ago">%1$s тому</string>
<string name="shared_string_error_short">ПМЛК</string>
<string name="shared_string_export">Експорт</string>
<string name="logcat_buffer">Буфер logcat</string>
<string name="logcat_buffer_descr">Переглянути та надіслати докладний журнал застосунку</string>
<string name="send_report">Надіслати звіт</string>
</resources>

View file

@ -270,4 +270,8 @@
<string name="last_response_duration">最後回應:%1$s 前</string>
<string name="duration_ago">%1$s 前</string>
<string name="shared_string_error_short">ERR</string>
<string name="send_report">傳送報告</string>
<string name="shared_string_export">匯出</string>
<string name="logcat_buffer">Logcat 緩衝</string>
<string name="logcat_buffer_descr">檢查及分享應用程式的詳細紀錄</string>
</resources>

View file

@ -27,6 +27,7 @@
<dimen name="dialog_welcome_title_top_margin">89dp</dimen>
<dimen name="list_header_height">48dp</dimen>
<dimen name="list_description_height">44dp</dimen>
<dimen name="list_header_with_descr_height">42dp</dimen>
<dimen name="list_item_height">56dp</dimen>

View file

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="send_report">Send report</string>
<string name="logcat_buffer_descr">Check and share detailed logs of the app</string>
<string name="logcat_buffer">Logcat buffer</string>
<string name="shared_string_export">Export</string>
<string name="shared_string_error_short">ERR</string>
<string name="last_update_from_telegram_date">Last update from Telegram: %1$s</string>
<string name="last_response_date">Last response: %1$s</string>

View file

@ -3,16 +3,20 @@ package net.osmand.telegram
import android.app.Application
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.ConnectivityManager
import android.net.NetworkInfo
import android.os.Build
import android.os.Handler
import net.osmand.PlatformUtil
import net.osmand.telegram.ui.TrackerLogcatActivity
import net.osmand.telegram.helpers.*
import net.osmand.telegram.helpers.OsmandAidlHelper.OsmandHelperListener
import net.osmand.telegram.helpers.OsmandAidlHelper.UpdatesListener
import net.osmand.telegram.notifications.NotificationHelper
import net.osmand.telegram.utils.AndroidUtils
import net.osmand.telegram.utils.UiUtils
import java.io.File
class TelegramApplication : Application() {
@ -200,4 +204,33 @@ class TelegramApplication : Application() {
fun runInUIThread(action: (() -> Unit), delay: Long) {
uiHandler.postDelayed(action, delay)
}
fun sendCrashLog(file: File) {
val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("crash@osmand.net"))
intent.putExtra(Intent.EXTRA_STREAM, AndroidUtils.getUriForFile(this, file))
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.type = "vnd.android.cursor.dir/email"
intent.putExtra(Intent.EXTRA_SUBJECT, "OsmAnd bug")
val text = StringBuilder()
text.append("\nDevice : ").append(Build.DEVICE)
text.append("\nBrand : ").append(Build.BRAND)
text.append("\nModel : ").append(Build.MODEL)
text.append("\nProduct : ").append(Build.PRODUCT)
text.append("\nBuild : ").append(Build.DISPLAY)
text.append("\nVersion : ").append(Build.VERSION.RELEASE)
text.append("\nApp : ").append(getString(R.string.app_name_short))
try {
val info = packageManager.getPackageInfo(packageName, 0)
if (info != null) {
text.append("\nApk Version : ").append(info.versionName).append(" ").append(info.versionCode)
}
} catch (e: PackageManager.NameNotFoundException) {
PlatformUtil.getLog(TrackerLogcatActivity::class.java).error("", e)
}
intent.putExtra(Intent.EXTRA_TEXT, text.toString())
val chooserIntent = Intent.createChooser(intent, getString(R.string.send_report))
chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(chooserIntent)
}
}

View file

@ -110,7 +110,7 @@ private const val PROXY_ENABLED = "proxy_enabled"
private const val PROXY_PREFERENCES_KEY = "proxy_preferences"
private const val SHARING_INITIALIZATION_TIME = 60 * 2L // 2 minutes
private const val WAITING_TDLIB_TIME = 3 // 3 seconds
private const val WAITING_TDLIB_TIME = 7 // 7 seconds
private const val GPS_UPDATE_EXPIRED_TIME = 60 * 3L // 3 minutes
@ -540,14 +540,24 @@ class TelegramSettings(private val app: TelegramApplication) {
if (initTime && initSending) {
initializing = true
} else {
var waitingTimeError = false
val maxWaitingTime = WAITING_TDLIB_TIME * MAX_MESSAGES_IN_TDLIB_PER_CHAT * max(1, chatsCount)
val textSharingError = !shareInfo.lastTextMessageHandled && currentTime - shareInfo.lastSendTextMessageTime > maxWaitingTime
val mapSharingError = !shareInfo.lastMapMessageHandled && currentTime - shareInfo.lastSendMapMessageTime > maxWaitingTime
if (shareInfo.hasSharingError
|| (shareTypeValue == SHARE_TYPE_MAP_AND_TEXT && (textSharingError || mapSharingError))
|| textSharingError && (shareTypeValue == SHARE_TYPE_TEXT)
|| mapSharingError && (shareTypeValue == SHARE_TYPE_MAP)
) {
val textSharingWaitingTime = currentTime - shareInfo.lastSendTextMessageTime
val mapSharingWaitingTime = currentTime - shareInfo.lastSendMapMessageTime
val textSharingError = !shareInfo.lastTextMessageHandled && textSharingWaitingTime > maxWaitingTime
val mapSharingError = !shareInfo.lastMapMessageHandled && mapSharingWaitingTime > maxWaitingTime
if ((shareTypeValue == SHARE_TYPE_MAP_AND_TEXT && (textSharingError || mapSharingError))
|| textSharingError && (shareTypeValue == SHARE_TYPE_TEXT)
|| mapSharingError && (shareTypeValue == SHARE_TYPE_MAP)) {
waitingTimeError = true
log.debug("Send chats error for share type \"$shareTypeValue\"" +
"\nMax waiting time: ${maxWaitingTime}s" +
"\nLast text message handled: ${shareInfo.lastTextMessageHandled}" +
"\nText sharing waiting time: ${textSharingWaitingTime}s" +
"\nLast map message handled: ${shareInfo.lastMapMessageHandled}" +
"\nMap sharing waiting time: ${mapSharingWaitingTime}s")
}
if (shareInfo.hasSharingError || waitingTimeError) {
sendChatsErrors = true
locationTime = max(shareInfo.lastTextSuccessfulSendTime, shareInfo.lastMapSuccessfulSendTime)
chatsIds.add(shareInfo.chatId)

View file

@ -776,6 +776,7 @@ class TelegramHelper private constructor() {
client?.send(TdApi.CreatePrivateChat(userId, false)) { obj ->
when (obj.constructor) {
TdApi.Error.CONSTRUCTOR -> {
log.debug("createPrivateChatWithUser ERROR $obj")
val error = obj as TdApi.Error
if (error.code != IGNORED_ERROR_CODE) {
shareInfo.hasSharingError = true
@ -969,7 +970,7 @@ class TelegramHelper private constructor() {
val messageType = if (isBot) MESSAGE_TYPE_BOT else MESSAGE_TYPE_TEXT
when (obj.constructor) {
TdApi.Error.CONSTRUCTOR -> {
log.debug("handleTextLocationMessageUpdate - ERROR")
log.debug("handleTextLocationMessageUpdate - ERROR $obj")
val error = obj as TdApi.Error
if (error.code != IGNORED_ERROR_CODE) {
shareInfo.hasSharingError = true

View file

@ -213,6 +213,12 @@ class SettingsDialogFragment : BaseDialogFragment() {
DisconnectTelegramBottomSheet.showInstance(childFragmentManager)
}
mainView.findViewById<View>(R.id.logcat_row).setOnClickListener {
val intent = Intent(activity, TrackerLogcatActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
app.startActivity(intent)
}
return mainView
}

View file

@ -0,0 +1,271 @@
package net.osmand.telegram.ui
import android.os.AsyncTask
import android.os.Bundle
import android.view.*
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import net.osmand.PlatformUtil
import net.osmand.telegram.R
import net.osmand.telegram.TelegramApplication
import java.io.*
import java.lang.ref.WeakReference
import java.util.*
class TrackerLogcatActivity : AppCompatActivity() {
private var logcatAsyncTask: LogcatAsyncTask? = null
private val logs: MutableList<String> = ArrayList()
private var adapter: LogcatAdapter? = null
private val LEVELS = arrayOf("D", "I", "W", "E")
private var filterLevel = 1
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
val app: TelegramApplication = getApplication() as TelegramApplication
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_tracker_logcat)
val toolbar = findViewById<Toolbar>(R.id.toolbar).apply {
navigationIcon = app.uiUtils.getThemedIcon(R.drawable.ic_arrow_back)
setNavigationOnClickListener { onBackPressed() }
}
setSupportActionBar(toolbar)
setupIntermediateProgressBar()
adapter = LogcatAdapter()
recyclerView = findViewById<View>(R.id.recycler_view) as RecyclerView
recyclerView!!.layoutManager = LinearLayoutManager(this)
recyclerView!!.adapter = adapter
}
protected fun setupIntermediateProgressBar() {
val progressBar = ProgressBar(this)
progressBar.visibility = View.GONE
progressBar.isIndeterminate = true
val supportActionBar = supportActionBar
if (supportActionBar != null) {
supportActionBar.setDisplayShowCustomEnabled(true)
supportActionBar.customView = progressBar
setSupportProgressBarIndeterminateVisibility(false)
}
}
override fun setSupportProgressBarIndeterminateVisibility(visible: Boolean) {
val supportActionBar = supportActionBar
if (supportActionBar != null) {
supportActionBar.customView.visibility = if (visible) View.VISIBLE else View.GONE
}
}
override fun onResume() {
super.onResume()
startLogcatAsyncTask()
}
override fun onPause() {
super.onPause()
stopLogcatAsyncTask()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
val app: TelegramApplication = applicationContext as TelegramApplication
val share: MenuItem = menu.add(0, SHARE_ID, 0, R.string.shared_string_export)
share.icon = app.uiUtils.getThemedIcon(R.drawable.ic_action_share)
share.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
val level = menu.add(0, LEVEL_ID, 0, "")
level.title = getFilterLevel()
level.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
return super.onCreateOptionsMenu(menu)
}
private fun getFilterLevel(): String {
return "*:" + LEVELS[filterLevel]
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val itemId = item.itemId
when (itemId) {
android.R.id.home -> {
finish()
return true
}
LEVEL_ID -> {
filterLevel++
if (filterLevel >= LEVELS.size) {
filterLevel = 0
}
item.title = getFilterLevel()
stopLogcatAsyncTask()
logs.clear()
adapter!!.notifyDataSetChanged()
startLogcatAsyncTask()
return true
}
SHARE_ID -> {
startSaveLogsAsyncTask()
return true
}
}
return false
}
private fun startSaveLogsAsyncTask() {
val saveLogsAsyncTask = SaveLogsAsyncTask(this, logs)
saveLogsAsyncTask.execute()
}
private fun startLogcatAsyncTask() {
logcatAsyncTask = LogcatAsyncTask(this, getFilterLevel())
logcatAsyncTask!!.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
}
private fun stopLogcatAsyncTask() {
if (logcatAsyncTask != null && logcatAsyncTask!!.status == AsyncTask.Status.RUNNING) {
logcatAsyncTask!!.cancel(false)
logcatAsyncTask!!.stopLogging()
}
}
private inner class LogcatAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val inflater = LayoutInflater.from(viewGroup.context)
val itemView = inflater.inflate(R.layout.item_description_long, viewGroup, false) as TextView
itemView.gravity = Gravity.CENTER_VERTICAL
return LogViewHolder(itemView)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder is LogViewHolder) {
val log = getLog(position)
holder.logTextView.text = log
}
}
override fun getItemCount(): Int {
return logs.size
}
private fun getLog(position: Int): String {
return logs[position]
}
private inner class LogViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val logTextView: TextView = itemView.findViewById(R.id.description)
}
}
class SaveLogsAsyncTask internal constructor(logcatActivity: TrackerLogcatActivity, logs: Collection<String>) : AsyncTask<Void?, String?, File?>() {
private val logcatActivity: WeakReference<TrackerLogcatActivity>
private val logs: Collection<String>
override fun onPreExecute() {
val activity = logcatActivity.get()
activity?.setSupportProgressBarIndeterminateVisibility(true)
}
override fun doInBackground(vararg voids: Void?): File {
val app: TelegramApplication = logcatActivity.get()?.applicationContext as TelegramApplication
val file = File(app.getExternalFilesDir(null), LOGCAT_PATH)
try {
if (file.exists()) {
file.delete()
}
val stringBuilder = StringBuilder()
for (log in logs) {
stringBuilder.append(log)
stringBuilder.append("\n")
}
if (file.parentFile.canWrite()) {
val writer = BufferedWriter(FileWriter(file, true))
writer.write(stringBuilder.toString())
writer.close()
}
} catch (e: Exception) {
log.error(e)
}
return file
}
override fun onPostExecute(file: File?) {
val activity = logcatActivity.get()
if (activity != null && file != null) {
val app: TelegramApplication = activity.applicationContext as TelegramApplication
activity.setSupportProgressBarIndeterminateVisibility(false)
app.sendCrashLog(file)
}
}
init {
this.logcatActivity = WeakReference(logcatActivity)
this.logs = logs
}
}
class LogcatAsyncTask internal constructor(logcatActivity: TrackerLogcatActivity?, filterLevel: String) : AsyncTask<Void?, String?, Void?>() {
private var processLogcat: Process? = null
private val logcatActivity: WeakReference<TrackerLogcatActivity?>
private val filterLevel: String
override fun doInBackground(vararg voids: Void?): Void? {
try {
val filter = android.os.Process.myPid().toString()
val command = arrayOf("logcat", filterLevel, "--pid=$filter", "-T", MAX_BUFFER_LOG.toString())
processLogcat = Runtime.getRuntime().exec(command)
val bufferedReader = BufferedReader(InputStreamReader(processLogcat?.inputStream))
var line: String?
while (bufferedReader.readLine().also { line = it } != null && logcatActivity.get() != null) {
if (isCancelled) {
break
}
publishProgress(line)
}
stopLogging()
} catch (e: IOException) { // ignore
} catch (e: Exception) {
log.error(e)
}
return null
}
override fun onProgressUpdate(vararg values: String?) {
if (values.size > 0 && !isCancelled) {
val activity = logcatActivity.get()
if (activity != null) {
val autoscroll = !activity.recyclerView!!.canScrollVertically(1)
for (s in values) {
if (s != null) {
activity.logs.add(s)
}
}
activity.adapter!!.notifyDataSetChanged()
if (autoscroll) {
activity.recyclerView!!.scrollToPosition(activity.logs.size - 1)
}
}
}
}
fun stopLogging() {
if (processLogcat != null) {
processLogcat!!.destroy()
}
}
init {
this.logcatActivity = WeakReference(logcatActivity)
this.filterLevel = filterLevel
}
}
companion object {
private const val LOGCAT_PATH = "logcat.log"
private const val MAX_BUFFER_LOG = 10000
private const val SHARE_ID = 0
private const val LEVEL_ID = 1
private val log = PlatformUtil.getLog(TrackerLogcatActivity::class.java)
}
}

3
OsmAnd/.gitignore vendored
View file

@ -13,10 +13,13 @@ libs/it.unibo.alice.tuprolog-tuprolog-3.2.1.jar
libs/commons-codec-commons-codec-1.11.jar
libs/OsmAndCore_android-0.1-SNAPSHOT.jar
# Huawei
libs/huawei-*.jar
huaweidrmlib/
HwDRM_SDK_*
drm_strings.xml
agconnect-services.json
OsmAndHms.jks
# copy_widget_icons.sh
res/drawable-large/map_*

View file

@ -2,24 +2,31 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.huawei.android.sdk.drm.DrmDialogActivity"
android:configChanges="screenSize|orientation|keyboardHidden"
android:exported="false"
android:theme="@android:style/Theme.Translucent">
<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity>
<application
android:icon="@mipmap/icon_free"
android:label="@string/app_name_free"
tools:replace="android:icon, android:label">
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="101486545" />
<meta-data
android:name="com.huawei.hms.client.cpid"
android:value="890031000000000038" />
<activity
android:name="net.osmand.plus.activities.MapActivity"
android:theme="@style/FirstSplashScreenFree"
tools:replace="android:theme"/>
<service
android:name="net.osmand.plus.NavigationService"
tools:replace="android:process"
android:process="net.osmand.huawei"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="net.osmand.huawei.fileprovider"
tools:replace="android:authorities" />
<service
android:name="net.osmand.plus.NavigationService"
android:process="net.osmand.huawei"
tools:replace="android:process" />
tools:replace="android:authorities"
android:authorities="net.osmand.huawei.fileprovider"/>
</application>
</manifest>

View file

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.huawei.android.sdk.drm.DrmDialogActivity"
android:configChanges="screenSize|orientation|keyboardHidden"
android:exported="false"
android:theme="@android:style/Theme.Translucent">
<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="net.osmand.plus.huawei.fileprovider"
tools:replace="android:authorities" />
<service
android:name="net.osmand.plus.NavigationService"
android:process="net.osmand.plus.huawei"
tools:replace="android:process" />
</application>
</manifest>

View file

@ -371,6 +371,72 @@
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.xml" />
</intent-filter>
<intent-filter
android:label="@string/app_name"
android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file"/>
<data android:scheme="content"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\..*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.wpt.chart" />
</intent-filter>
<intent-filter
android:label="@string/app_name"
android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file"/>
<data android:scheme="content"/>
<data android:host="*"/>
<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\..*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.wpt.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.wpt.chart" />
</intent-filter>
<intent-filter
android:label="@string/app_name"
android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file"/>
<data android:scheme="content"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\..*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.3d.chart" />
</intent-filter>
<intent-filter
android:label="@string/app_name"
android:priority="50">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file"/>
<data android:scheme="content"/>
<data android:host="*"/>
<data android:mimeType="*/*"/>
<data android:pathPattern=".*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\..*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\.3d.chart" />
<data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.3d.chart" />
</intent-filter>
<!--trying to handle emails-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -488,6 +554,13 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
<intent-filter>
<data android:host="ge0.me" android:scheme="https"/>
<data android:host="ge0.me" android:scheme="http"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
<intent-filter>
<data android:scheme="http" android:host="openstreetmap.de" android:pathPrefix="/karte" />
<data android:scheme="https" android:host="openstreetmap.de" android:pathPrefix="/karte" />

View file

@ -40,15 +40,24 @@ android {
keyAlias "osmand"
keyPassword System.getenv("OSMAND_APK_PASSWORD")
}
publishingHuawei {
storeFile file("/var/lib/jenkins/osmand_hw_key")
storePassword System.getenv("OSMAND_HW_APK_PASSWORD")
keyAlias "osmand"
keyPassword System.getenv("OSMAND_HW_APK_PASSWORD")
v1SigningEnabled true
v2SigningEnabled true
}
}
defaultConfig {
minSdkVersion System.getenv("MIN_SDK_VERSION") ? System.getenv("MIN_SDK_VERSION").toInteger() : 15
targetSdkVersion 28
versionCode 370
versionCode 390
versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode
multiDexEnabled true
versionName "3.7.0"
versionName "3.9.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
// Stops the Gradle plugins automatic rasterization of vectors
@ -107,19 +116,26 @@ android {
debug {
manifest.srcFile "AndroidManifest-debug.xml"
}
full {
java.srcDirs = ["src-google"]
}
fulldev {
java.srcDirs = ["src-google"]
}
free {
java.srcDirs = ["src-google"]
manifest.srcFile "AndroidManifest-free.xml"
}
freedev {
java.srcDirs = ["src-google"]
manifest.srcFile "AndroidManifest-freedev.xml"
}
freecustom {
java.srcDirs = ["src-google"]
manifest.srcFile "AndroidManifest-freecustom.xml"
}
huawei {
manifest.srcFile "AndroidManifest-huawei.xml"
}
freehuawei {
java.srcDirs = ["src-huawei"]
manifest.srcFile "AndroidManifest-freehuawei.xml"
}
@ -185,21 +201,16 @@ android {
dimension "version"
applicationId "net.osmand.plus"
}
fulldev {
dimension "version"
applicationId "net.osmand.plus"
resConfig "en"
//resConfigs "xxhdpi", "nodpi"
}
huawei {
fulldev {
dimension "version"
applicationId "net.osmand.plus.huawei"
applicationId "net.osmand.plus"
resConfig "en"
// resConfigs "xxhdpi", "nodpi"
}
freehuawei {
dimension "version"
applicationId "net.osmand.huawei"
}
// CoreVersion
legacy {
dimension "coreversion"
@ -219,7 +230,11 @@ android {
signingConfig signingConfigs.development
}
release {
signingConfig signingConfigs.publishing
if (gradle.startParameter.taskNames.toString().contains("huawei")) {
signingConfig signingConfigs.publishingHuawei
} else {
signingConfig signingConfigs.publishing
}
}
}
@ -276,46 +291,6 @@ task downloadWorldMiniBasemap {
}
}
task downloadHuaweiDrmZip {
doLast {
ant.get(src: 'https://obs.cn-north-2.myhwclouds.com/hms-ds-wf/sdk/HwDRM_SDK_2.5.2.300_ADT.zip', dest: 'HwDRM_SDK_2.5.2.300_ADT.zip', skipexisting: 'true')
ant.unzip(src: 'HwDRM_SDK_2.5.2.300_ADT.zip', dest: 'huaweidrmlib/')
}
}
task copyHuaweiDrmLibs(type: Copy) {
dependsOn downloadHuaweiDrmZip
from "huaweidrmlib/HwDRM_SDK_2.5.2.300_ADT/libs"
into "libs"
}
task copyHuaweiDrmValues(type: Copy) {
dependsOn downloadHuaweiDrmZip
from "huaweidrmlib/HwDRM_SDK_2.5.2.300_ADT/res"
into "res"
}
task downloadPrebuiltHuaweiDrm {
dependsOn copyHuaweiDrmLibs, copyHuaweiDrmValues
}
task cleanHuaweiDrmLibs(type: Delete) {
delete "huaweidrmlib"
delete fileTree("libs").matching {
include "**/huawei-*.jar"
}
}
task cleanHuaweiDrmValues(type: Delete) {
delete fileTree("res").matching {
include "**/drm_strings.xml"
}
}
task cleanPrebuiltHuaweiDrm {
dependsOn cleanHuaweiDrmLibs, cleanHuaweiDrmValues
}
task collectVoiceAssets(type: Sync) {
from "../../resources/voice"
into "assets/voice"
@ -397,8 +372,6 @@ task copyLargePOIIcons(type: Sync) {
}
}
task copyWidgetIconsXhdpi(type: Sync) {
from "res/drawable-xxhdpi/"
into "res/drawable-large-xhdpi/"
@ -444,15 +417,6 @@ task collectExternalResources {
copyWidgetIconsXhdpi,
copyPoiCategories,
downloadWorldMiniBasemap
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase()
// Use Drm SDK only for huawei build
if (tskReqStr.contains("huawei")) {
dependsOn downloadPrebuiltHuaweiDrm
} else {
dependsOn cleanPrebuiltHuaweiDrm
}
}
// Legacy core build
@ -503,10 +467,16 @@ task cleanupDuplicatesInCore() {
file("libs/x86_64/libc++_shared.so").renameTo(file("libc++/x86_64/libc++_shared.so"))
}
}
afterEvaluate {
android.applicationVariants.all { variant ->
variant.javaCompiler.dependsOn(collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore)
}
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString().toLowerCase()
if (tskReqStr.contains("huawei")) {
apply plugin: 'com.huawei.agconnect'
}
}
task appStart(type: Exec) {
@ -516,15 +486,14 @@ task appStart(type: Exec) {
// commandLine 'cmd', '/c', 'adb', 'shell', 'am', 'start', '-n', 'net.osmand.plus/net.osmand.plus.activities.MapActivity'
}
dependencies {
implementation project(path: ':OsmAnd-java', configuration: 'android')
implementation project(':OsmAnd-api')
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.2.0-beta01'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.2.1'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.preference:preference:1.1.0'
implementation fileTree(include: ['gnu-trove-osmand.jar', 'icu4j-49_1_patched.jar'], dir: 'libs')
@ -565,6 +534,5 @@ dependencies {
}
implementation 'com.jaredrummler:colorpicker:1.1.0'
huaweiImplementation files('libs/huawei-android-drm_v2.5.2.300.jar')
freehuaweiImplementation files('libs/huawei-android-drm_v2.5.2.300.jar')
freehuaweiImplementation 'com.huawei.hms:iap:5.0.2.300'
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<nine-patch android:src="@drawable/bg_shadow_bottomsheet_sides"/>
</item>
<item>
<shape>
<solid android:color="@color/list_background_color_dark"/>
</shape>
</item>
</layer-list>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<nine-patch android:src="@drawable/bg_shadow_bottomsheet_sides"/>
</item>
<item>
<shape>
<solid android:color="@color/list_background_color_light"/>
</shape>
</item>
</layer-list>

View file

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="12dp"
android:height="6dp"
android:height="12dp"
android:viewportWidth="12"
android:viewportHeight="6">
android:viewportHeight="12">
<path
android:pathData="M0,6L6,0L12,6H0Z"
android:pathData="M0,12L6,0L12,12L6,8L0,12Z"
android:fillColor="#ffffff"/>
</vector>

View file

@ -0,0 +1,31 @@
<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,16L17,20L14,16H16V4H18V16H20Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M5,13H12V15L7.5,20H12V22H5V20L9.5,15H5V13Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillAlpha="0.5"/>
<path
android:pathData="M9.5,2H7.5L4,11H6L6.7692,9H10.2308L11,11H13L9.5,2ZM9.4615,7L8.5,4.5L7.5385,7H9.4615Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M20,16L17,20L14,16H16V4H18V16H20Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M5,13H12V15L7.5,20H12V22H5V20L9.5,15H5V13Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillAlpha="0.5"/>
<path
android:pathData="M9.5,2H7.5L4,11H6L6.7692,9H10.2308L11,11H13L9.5,2ZM9.4615,7L8.5,4.5L7.5385,7H9.4615Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>

View file

@ -0,0 +1,31 @@
<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,16L17,20L14,16H16V4H18V16H20Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M5,2H12V4L7.5,9H12V11H5V9L9.5,4H5V2Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M9.5,13H7.5L4,22H6L6.7692,20H10.2308L11,22H13L9.5,13ZM9.4615,18L8.5,15.5L7.5385,18H9.4615Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillAlpha="0.5"/>
<path
android:pathData="M20,16L17,20L14,16H16V4H18V16H20Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M5,2H12V4L7.5,9H12V11H5V9L9.5,4H5V2Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M9.5,13H7.5L4,22H6L6.7692,20H10.2308L11,22H13L9.5,13ZM9.4615,18L8.5,15.5L7.5385,18H9.4615Z"
android:strokeAlpha="0.5"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillAlpha="0.5"/>
</vector>

View file

@ -0,0 +1,39 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="32"
android:viewportHeight="32">
<path
android:pathData="M16,16m-16,0a16,16 0,1 1,32 0a16,16 0,1 1,-32 0"
android:fillColor="#ffffff"/>
<path
android:pathData="M23,22L21,22A1,1 0,0 0,20 23L20,23A1,1 0,0 0,21 24L23,24A1,1 0,0 0,24 23L24,23A1,1 0,0 0,23 22z"
android:fillColor="#8AC826"/>
<path
android:pathData="M9,10L11,10A1,1 0,0 1,12 11L12,11A1,1 0,0 1,11 12L9,12A1,1 0,0 1,8 11L8,11A1,1 0,0 1,9 10z"
android:fillColor="#140579"/>
<path
android:pathData="M14,10L16,10A1,1 0,0 1,17 11L17,11A1,1 0,0 1,16 12L14,12A1,1 0,0 1,13 11L13,11A1,1 0,0 1,14 10z"
android:fillColor="#FFC93A"/>
<path
android:pathData="M19,10L23,10A1,1 0,0 1,24 11L24,11A1,1 0,0 1,23 12L19,12A1,1 0,0 1,18 11L18,11A1,1 0,0 1,19 10z"
android:fillColor="#8AC826"/>
<path
android:pathData="M23,14L20,14A1,1 0,0 0,19 15L19,15A1,1 0,0 0,20 16L23,16A1,1 0,0 0,24 15L24,15A1,1 0,0 0,23 14z"
android:fillColor="#8AC826"/>
<path
android:pathData="M17,14L15,14A1,1 0,0 0,14 15L14,15A1,1 0,0 0,15 16L17,16A1,1 0,0 0,18 15L18,15A1,1 0,0 0,17 14z"
android:fillColor="#FFC93A"/>
<path
android:pathData="M12,14L9,14A1,1 0,0 0,8 15L8,15A1,1 0,0 0,9 16L12,16A1,1 0,0 0,13 15L13,15A1,1 0,0 0,12 14z"
android:fillColor="#140579"/>
<path
android:pathData="M23,18L18,18A1,1 0,0 0,17 19L17,19A1,1 0,0 0,18 20L23,20A1,1 0,0 0,24 19L24,19A1,1 0,0 0,23 18z"
android:fillColor="#8AC826"/>
<path
android:pathData="M15,18L12,18A1,1 0,0 0,11 19L11,19A1,1 0,0 0,12 20L15,20A1,1 0,0 0,16 19L16,19A1,1 0,0 0,15 18z"
android:fillColor="#FFC93A"/>
<path
android:pathData="M9,18L9,18A1,1 0,0 0,8 19L8,19A1,1 0,0 0,9 20L9,20A1,1 0,0 0,10 19L10,19A1,1 0,0 0,9 18z"
android:fillColor="#140579"/>
</vector>

View file

@ -0,0 +1,84 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="232dp"
android:height="24dp"
android:viewportWidth="232"
android:viewportHeight="24">
<path
android:pathData="M9.234,16.14C8.646,16.14 8.128,16 7.68,15.72C7.232,15.44 6.878,15.076 6.616,14.628V18.982H5.076V8.678H6.434V9.994C6.714,9.555 7.074,9.205 7.512,8.944C7.96,8.683 8.464,8.552 9.024,8.552C9.528,8.552 9.99,8.655 10.41,8.86C10.83,9.065 11.194,9.341 11.502,9.686C11.81,10.031 12.048,10.433 12.216,10.89C12.394,11.347 12.482,11.828 12.482,12.332C12.482,12.864 12.403,13.363 12.244,13.83C12.086,14.287 11.862,14.689 11.572,15.034C11.283,15.37 10.938,15.641 10.536,15.846C10.144,16.042 9.71,16.14 9.234,16.14ZM8.73,14.824C9.057,14.824 9.351,14.754 9.612,14.614C9.883,14.474 10.112,14.287 10.298,14.054C10.494,13.821 10.644,13.555 10.746,13.256C10.849,12.957 10.9,12.649 10.9,12.332C10.9,11.996 10.84,11.679 10.718,11.38C10.606,11.081 10.448,10.82 10.242,10.596C10.046,10.372 9.808,10.195 9.528,10.064C9.248,9.933 8.945,9.868 8.618,9.868C8.422,9.868 8.217,9.905 8.002,9.98C7.788,10.055 7.587,10.157 7.4,10.288C7.214,10.419 7.05,10.573 6.91,10.75C6.77,10.918 6.672,11.105 6.616,11.31V13.228C6.71,13.452 6.831,13.662 6.98,13.858C7.13,14.054 7.293,14.222 7.47,14.362C7.657,14.502 7.858,14.614 8.072,14.698C8.287,14.782 8.506,14.824 8.73,14.824Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M17.297,16.14C16.719,16.14 16.196,16.037 15.729,15.832C15.272,15.627 14.88,15.351 14.553,15.006C14.227,14.661 13.975,14.259 13.797,13.802C13.62,13.335 13.531,12.85 13.531,12.346C13.531,11.842 13.62,11.361 13.797,10.904C13.975,10.437 14.227,10.031 14.553,9.686C14.889,9.341 15.286,9.065 15.743,8.86C16.21,8.655 16.728,8.552 17.297,8.552C17.867,8.552 18.38,8.655 18.837,8.86C19.304,9.065 19.701,9.341 20.027,9.686C20.363,10.031 20.62,10.437 20.797,10.904C20.975,11.361 21.063,11.842 21.063,12.346C21.063,12.85 20.975,13.335 20.797,13.802C20.62,14.259 20.363,14.661 20.027,15.006C19.701,15.351 19.304,15.627 18.837,15.832C18.38,16.037 17.867,16.14 17.297,16.14ZM15.113,12.36C15.113,12.715 15.169,13.041 15.281,13.34C15.393,13.639 15.547,13.9 15.743,14.124C15.939,14.339 16.168,14.511 16.429,14.642C16.7,14.763 16.989,14.824 17.297,14.824C17.605,14.824 17.89,14.763 18.151,14.642C18.422,14.511 18.655,14.334 18.851,14.11C19.047,13.886 19.201,13.625 19.313,13.326C19.425,13.027 19.481,12.701 19.481,12.346C19.481,12.001 19.425,11.679 19.313,11.38C19.201,11.072 19.047,10.806 18.851,10.582C18.655,10.358 18.422,10.185 18.151,10.064C17.89,9.933 17.605,9.868 17.297,9.868C16.999,9.868 16.714,9.933 16.443,10.064C16.182,10.195 15.953,10.372 15.757,10.596C15.561,10.82 15.403,11.086 15.281,11.394C15.169,11.693 15.113,12.015 15.113,12.36Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M31.437,8.678H32.907L29.827,16H28.553L27.195,12.598L25.837,16H24.563L21.469,8.678H22.939L25.305,14.516L26.369,11.8L25.095,8.692H26.355L27.195,10.988L28.021,8.692H29.281L28.021,11.8L29.085,14.516L31.437,8.678Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M37.129,16.14C36.559,16.14 36.041,16.042 35.575,15.846C35.108,15.641 34.707,15.365 34.371,15.02C34.044,14.675 33.787,14.273 33.601,13.816C33.423,13.359 33.335,12.873 33.335,12.36C33.335,11.847 33.423,11.361 33.601,10.904C33.787,10.437 34.044,10.031 34.371,9.686C34.707,9.331 35.108,9.056 35.575,8.86C36.041,8.655 36.564,8.552 37.143,8.552C37.712,8.552 38.225,8.655 38.683,8.86C39.149,9.065 39.546,9.341 39.873,9.686C40.199,10.022 40.447,10.419 40.615,10.876C40.792,11.324 40.881,11.795 40.881,12.29C40.881,12.402 40.876,12.509 40.867,12.612C40.857,12.705 40.848,12.785 40.839,12.85H34.973C35.001,13.177 35.075,13.471 35.197,13.732C35.327,13.993 35.491,14.222 35.687,14.418C35.892,14.605 36.121,14.749 36.373,14.852C36.634,14.955 36.905,15.006 37.185,15.006C37.39,15.006 37.591,14.983 37.787,14.936C37.992,14.88 38.179,14.805 38.347,14.712C38.515,14.609 38.664,14.488 38.795,14.348C38.925,14.208 39.028,14.054 39.103,13.886L40.419,14.264C40.167,14.815 39.747,15.267 39.159,15.622C38.58,15.967 37.903,16.14 37.129,16.14ZM39.355,11.786C39.327,11.478 39.247,11.193 39.117,10.932C38.995,10.671 38.837,10.451 38.641,10.274C38.445,10.087 38.216,9.943 37.955,9.84C37.693,9.737 37.418,9.686 37.129,9.686C36.839,9.686 36.564,9.737 36.303,9.84C36.051,9.943 35.827,10.087 35.631,10.274C35.435,10.451 35.276,10.671 35.155,10.932C35.033,11.193 34.959,11.478 34.931,11.786H39.355Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M46.393,10.008C45.796,10.027 45.264,10.167 44.797,10.428C44.34,10.68 44.013,11.044 43.817,11.52V16H42.277V8.678H43.705V10.316C43.957,9.812 44.284,9.411 44.685,9.112C45.096,8.804 45.534,8.636 46.001,8.608C46.094,8.608 46.169,8.608 46.225,8.608C46.29,8.608 46.346,8.613 46.393,8.622V10.008Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M50.602,16.14C50.033,16.14 49.515,16.042 49.048,15.846C48.581,15.641 48.18,15.365 47.844,15.02C47.517,14.675 47.261,14.273 47.074,13.816C46.897,13.359 46.808,12.873 46.808,12.36C46.808,11.847 46.897,11.361 47.074,10.904C47.261,10.437 47.517,10.031 47.844,9.686C48.18,9.331 48.581,9.056 49.048,8.86C49.515,8.655 50.037,8.552 50.616,8.552C51.185,8.552 51.699,8.655 52.156,8.86C52.623,9.065 53.019,9.341 53.346,9.686C53.673,10.022 53.92,10.419 54.088,10.876C54.265,11.324 54.354,11.795 54.354,12.29C54.354,12.402 54.349,12.509 54.34,12.612C54.331,12.705 54.321,12.785 54.312,12.85H48.446C48.474,13.177 48.549,13.471 48.67,13.732C48.801,13.993 48.964,14.222 49.16,14.418C49.365,14.605 49.594,14.749 49.846,14.852C50.107,14.955 50.378,15.006 50.658,15.006C50.863,15.006 51.064,14.983 51.26,14.936C51.465,14.88 51.652,14.805 51.82,14.712C51.988,14.609 52.137,14.488 52.268,14.348C52.399,14.208 52.501,14.054 52.576,13.886L53.892,14.264C53.64,14.815 53.22,15.267 52.632,15.622C52.053,15.967 51.377,16.14 50.602,16.14ZM52.828,11.786C52.8,11.478 52.721,11.193 52.59,10.932C52.469,10.671 52.31,10.451 52.114,10.274C51.918,10.087 51.689,9.943 51.428,9.84C51.167,9.737 50.891,9.686 50.602,9.686C50.313,9.686 50.037,9.737 49.776,9.84C49.524,9.943 49.3,10.087 49.104,10.274C48.908,10.451 48.749,10.671 48.628,10.932C48.507,11.193 48.432,11.478 48.404,11.786H52.828Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M58.732,16.14C58.238,16.14 57.78,16.042 57.36,15.846C56.94,15.641 56.576,15.365 56.268,15.02C55.96,14.675 55.718,14.273 55.54,13.816C55.372,13.349 55.288,12.85 55.288,12.318C55.288,11.805 55.368,11.324 55.526,10.876C55.694,10.419 55.923,10.017 56.212,9.672C56.511,9.327 56.856,9.056 57.248,8.86C57.65,8.655 58.088,8.552 58.564,8.552C59.152,8.552 59.67,8.697 60.118,8.986C60.566,9.266 60.916,9.625 61.168,10.064V5.78H62.708V14.18C62.708,14.357 62.736,14.483 62.792,14.558C62.858,14.633 62.97,14.675 63.128,14.684V16C62.97,16.028 62.839,16.047 62.736,16.056C62.643,16.065 62.564,16.07 62.498,16.07C62.19,16.07 61.938,15.991 61.742,15.832C61.546,15.673 61.439,15.468 61.42,15.216L61.392,14.67C61.122,15.127 60.753,15.487 60.286,15.748C59.82,16.009 59.302,16.14 58.732,16.14ZM59.11,14.824C59.334,14.824 59.558,14.787 59.782,14.712C60.006,14.637 60.212,14.535 60.398,14.404C60.585,14.273 60.744,14.119 60.874,13.942C61.014,13.765 61.112,13.573 61.168,13.368V11.45C61.084,11.217 60.963,11.002 60.804,10.806C60.655,10.61 60.482,10.442 60.286,10.302C60.09,10.162 59.88,10.055 59.656,9.98C59.442,9.905 59.222,9.868 58.998,9.868C58.69,9.868 58.406,9.938 58.144,10.078C57.892,10.218 57.673,10.405 57.486,10.638C57.3,10.871 57.15,11.137 57.038,11.436C56.936,11.735 56.884,12.043 56.884,12.36C56.884,12.696 56.94,13.013 57.052,13.312C57.174,13.611 57.337,13.872 57.542,14.096C57.748,14.32 57.981,14.497 58.242,14.628C58.513,14.759 58.802,14.824 59.11,14.824Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M72.351,16.14C71.791,16.14 71.283,16.009 70.825,15.748C70.377,15.477 70.023,15.118 69.761,14.67V16H68.403V5.78H69.943V10.064C70.233,9.597 70.592,9.229 71.021,8.958C71.46,8.687 71.973,8.552 72.561,8.552C73.047,8.552 73.49,8.659 73.891,8.874C74.293,9.079 74.633,9.359 74.913,9.714C75.203,10.059 75.422,10.465 75.571,10.932C75.73,11.389 75.809,11.87 75.809,12.374C75.809,12.897 75.721,13.387 75.543,13.844C75.366,14.301 75.123,14.703 74.815,15.048C74.507,15.384 74.139,15.65 73.709,15.846C73.289,16.042 72.837,16.14 72.351,16.14ZM71.945,14.824C72.281,14.824 72.589,14.759 72.869,14.628C73.149,14.488 73.387,14.306 73.583,14.082C73.789,13.858 73.947,13.601 74.059,13.312C74.171,13.013 74.227,12.701 74.227,12.374C74.227,12.047 74.171,11.735 74.059,11.436C73.957,11.128 73.807,10.862 73.611,10.638C73.425,10.405 73.196,10.218 72.925,10.078C72.664,9.938 72.375,9.868 72.057,9.868C71.581,9.868 71.157,10.022 70.783,10.33C70.419,10.638 70.139,11.011 69.943,11.45V13.382C69.999,13.597 70.097,13.793 70.237,13.97C70.377,14.138 70.541,14.287 70.727,14.418C70.914,14.549 71.115,14.651 71.329,14.726C71.544,14.791 71.749,14.824 71.945,14.824Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M77.34,17.722C77.48,17.75 77.616,17.773 77.746,17.792C77.886,17.811 77.998,17.82 78.082,17.82C78.204,17.82 78.306,17.792 78.39,17.736C78.484,17.689 78.577,17.601 78.67,17.47C78.764,17.339 78.857,17.153 78.95,16.91C79.053,16.677 79.17,16.373 79.3,16L76.29,8.678H77.872L80.14,14.642L82.156,8.678H83.612L80.294,17.694C80.145,18.114 79.884,18.464 79.51,18.744C79.146,19.033 78.675,19.178 78.096,19.178C77.984,19.178 77.868,19.169 77.746,19.15C77.625,19.141 77.49,19.113 77.34,19.066V17.722Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M92.427,16.07C91.717,16.07 91.069,15.93 90.481,15.65C89.902,15.361 89.403,14.983 88.983,14.516C88.563,14.04 88.236,13.499 88.003,12.892C87.779,12.285 87.667,11.665 87.667,11.03C87.667,10.367 87.788,9.733 88.031,9.126C88.273,8.519 88.605,7.983 89.025,7.516C89.454,7.049 89.958,6.681 90.537,6.41C91.125,6.13 91.764,5.99 92.455,5.99C93.164,5.99 93.808,6.139 94.387,6.438C94.975,6.727 95.474,7.11 95.885,7.586C96.305,8.062 96.627,8.603 96.851,9.21C97.084,9.807 97.201,10.419 97.201,11.044C97.201,11.707 97.079,12.341 96.837,12.948C96.603,13.555 96.272,14.091 95.843,14.558C95.413,15.015 94.905,15.384 94.317,15.664C93.738,15.935 93.108,16.07 92.427,16.07ZM89.263,11.03C89.263,11.497 89.337,11.949 89.487,12.388C89.636,12.827 89.846,13.214 90.117,13.55C90.397,13.886 90.733,14.157 91.125,14.362C91.517,14.558 91.955,14.656 92.441,14.656C92.945,14.656 93.388,14.553 93.771,14.348C94.163,14.133 94.494,13.853 94.765,13.508C95.035,13.163 95.241,12.775 95.381,12.346C95.521,11.917 95.591,11.478 95.591,11.03C95.591,10.554 95.516,10.101 95.367,9.672C95.217,9.233 95.003,8.851 94.723,8.524C94.452,8.188 94.121,7.922 93.729,7.726C93.346,7.521 92.917,7.418 92.441,7.418C91.937,7.418 91.489,7.525 91.097,7.74C90.705,7.945 90.373,8.216 90.103,8.552C89.832,8.888 89.622,9.275 89.473,9.714C89.333,10.143 89.263,10.582 89.263,11.03Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M102.926,16.14C102.338,16.14 101.82,16 101.372,15.72C100.924,15.44 100.569,15.076 100.308,14.628V18.982H98.768V8.678H100.126V9.994C100.406,9.555 100.765,9.205 101.204,8.944C101.652,8.683 102.156,8.552 102.716,8.552C103.22,8.552 103.682,8.655 104.102,8.86C104.522,9.065 104.886,9.341 105.194,9.686C105.502,10.031 105.74,10.433 105.908,10.89C106.085,11.347 106.174,11.828 106.174,12.332C106.174,12.864 106.095,13.363 105.936,13.83C105.777,14.287 105.553,14.689 105.264,15.034C104.975,15.37 104.629,15.641 104.228,15.846C103.836,16.042 103.402,16.14 102.926,16.14ZM102.422,14.824C102.749,14.824 103.043,14.754 103.304,14.614C103.575,14.474 103.803,14.287 103.99,14.054C104.186,13.821 104.335,13.555 104.438,13.256C104.541,12.957 104.592,12.649 104.592,12.332C104.592,11.996 104.531,11.679 104.41,11.38C104.298,11.081 104.139,10.82 103.934,10.596C103.738,10.372 103.5,10.195 103.22,10.064C102.94,9.933 102.637,9.868 102.31,9.868C102.114,9.868 101.909,9.905 101.694,9.98C101.479,10.055 101.279,10.157 101.092,10.288C100.905,10.419 100.742,10.573 100.602,10.75C100.462,10.918 100.364,11.105 100.308,11.31V13.228C100.401,13.452 100.523,13.662 100.672,13.858C100.821,14.054 100.985,14.222 101.162,14.362C101.349,14.502 101.549,14.614 101.764,14.698C101.979,14.782 102.198,14.824 102.422,14.824Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M111.017,16.14C110.448,16.14 109.93,16.042 109.463,15.846C108.996,15.641 108.595,15.365 108.259,15.02C107.932,14.675 107.676,14.273 107.489,13.816C107.312,13.359 107.223,12.873 107.223,12.36C107.223,11.847 107.312,11.361 107.489,10.904C107.676,10.437 107.932,10.031 108.259,9.686C108.595,9.331 108.996,9.056 109.463,8.86C109.93,8.655 110.452,8.552 111.031,8.552C111.6,8.552 112.114,8.655 112.571,8.86C113.038,9.065 113.434,9.341 113.761,9.686C114.088,10.022 114.335,10.419 114.503,10.876C114.68,11.324 114.769,11.795 114.769,12.29C114.769,12.402 114.764,12.509 114.755,12.612C114.746,12.705 114.736,12.785 114.727,12.85H108.861C108.889,13.177 108.964,13.471 109.085,13.732C109.216,13.993 109.379,14.222 109.575,14.418C109.78,14.605 110.009,14.749 110.261,14.852C110.522,14.955 110.793,15.006 111.073,15.006C111.278,15.006 111.479,14.983 111.675,14.936C111.88,14.88 112.067,14.805 112.235,14.712C112.403,14.609 112.552,14.488 112.683,14.348C112.814,14.208 112.916,14.054 112.991,13.886L114.307,14.264C114.055,14.815 113.635,15.267 113.047,15.622C112.468,15.967 111.792,16.14 111.017,16.14ZM113.243,11.786C113.215,11.478 113.136,11.193 113.005,10.932C112.884,10.671 112.725,10.451 112.529,10.274C112.333,10.087 112.104,9.943 111.843,9.84C111.582,9.737 111.306,9.686 111.017,9.686C110.728,9.686 110.452,9.737 110.191,9.84C109.939,9.943 109.715,10.087 109.519,10.274C109.323,10.451 109.164,10.671 109.043,10.932C108.922,11.193 108.847,11.478 108.819,11.786H113.243Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M122.731,16H121.191V11.898C121.191,11.207 121.079,10.708 120.855,10.4C120.641,10.083 120.319,9.924 119.889,9.924C119.665,9.924 119.441,9.966 119.217,10.05C118.993,10.134 118.783,10.255 118.587,10.414C118.391,10.563 118.214,10.745 118.055,10.96C117.906,11.165 117.789,11.394 117.705,11.646V16H116.165V8.678H117.565V10.148C117.845,9.653 118.251,9.266 118.783,8.986C119.315,8.697 119.903,8.552 120.547,8.552C120.986,8.552 121.345,8.631 121.625,8.79C121.905,8.949 122.125,9.168 122.283,9.448C122.451,9.719 122.568,10.036 122.633,10.4C122.699,10.755 122.731,11.133 122.731,11.534V16Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M130.735,8.398C130.641,8.295 130.506,8.188 130.329,8.076C130.151,7.955 129.941,7.843 129.699,7.74C129.465,7.637 129.204,7.553 128.915,7.488C128.635,7.423 128.345,7.39 128.047,7.39C127.384,7.39 126.894,7.511 126.577,7.754C126.269,7.997 126.115,8.333 126.115,8.762C126.115,9.005 126.161,9.205 126.255,9.364C126.357,9.513 126.511,9.649 126.717,9.77C126.922,9.882 127.179,9.985 127.487,10.078C127.795,10.162 128.154,10.255 128.565,10.358C129.069,10.479 129.521,10.615 129.923,10.764C130.333,10.913 130.679,11.095 130.959,11.31C131.239,11.525 131.453,11.791 131.603,12.108C131.761,12.416 131.841,12.794 131.841,13.242C131.841,13.746 131.743,14.18 131.547,14.544C131.36,14.908 131.099,15.207 130.763,15.44C130.436,15.664 130.053,15.832 129.615,15.944C129.176,16.047 128.705,16.098 128.201,16.098C127.445,16.098 126.712,15.986 126.003,15.762C125.303,15.529 124.668,15.193 124.099,14.754L124.813,13.41C124.934,13.531 125.107,13.667 125.331,13.816C125.564,13.965 125.83,14.105 126.129,14.236C126.437,14.357 126.768,14.465 127.123,14.558C127.477,14.642 127.846,14.684 128.229,14.684C128.845,14.684 129.321,14.577 129.657,14.362C129.993,14.147 130.161,13.83 130.161,13.41C130.161,13.158 130.095,12.948 129.965,12.78C129.843,12.612 129.666,12.467 129.433,12.346C129.199,12.215 128.915,12.099 128.579,11.996C128.243,11.893 127.86,11.786 127.431,11.674C126.936,11.543 126.502,11.408 126.129,11.268C125.765,11.119 125.461,10.941 125.219,10.736C124.976,10.531 124.789,10.293 124.659,10.022C124.537,9.742 124.477,9.406 124.477,9.014C124.477,8.529 124.57,8.099 124.757,7.726C124.943,7.343 125.195,7.026 125.513,6.774C125.839,6.513 126.222,6.317 126.661,6.186C127.099,6.055 127.575,5.99 128.089,5.99C128.761,5.99 129.381,6.097 129.951,6.312C130.52,6.527 131.019,6.793 131.449,7.11L130.735,8.398Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M137.349,15.622C137.153,15.715 136.883,15.823 136.537,15.944C136.192,16.056 135.823,16.112 135.431,16.112C135.189,16.112 134.96,16.079 134.745,16.014C134.531,15.949 134.339,15.851 134.171,15.72C134.013,15.589 133.887,15.421 133.793,15.216C133.7,15.001 133.653,14.745 133.653,14.446V9.868H132.687V8.678H133.653V6.27H135.193V8.678H136.789V9.868H135.193V13.956C135.212,14.217 135.291,14.409 135.431,14.53C135.581,14.642 135.763,14.698 135.977,14.698C136.192,14.698 136.397,14.661 136.593,14.586C136.789,14.511 136.934,14.451 137.027,14.404L137.349,15.622Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M142.672,10.008C142.075,10.027 141.543,10.167 141.076,10.428C140.619,10.68 140.292,11.044 140.096,11.52V16H138.556V8.678H139.984V10.316C140.236,9.812 140.563,9.411 140.964,9.112C141.375,8.804 141.813,8.636 142.28,8.608C142.373,8.608 142.448,8.608 142.504,8.608C142.569,8.608 142.625,8.613 142.672,8.622V10.008Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M146.881,16.14C146.312,16.14 145.794,16.042 145.327,15.846C144.86,15.641 144.459,15.365 144.123,15.02C143.796,14.675 143.54,14.273 143.353,13.816C143.176,13.359 143.087,12.873 143.087,12.36C143.087,11.847 143.176,11.361 143.353,10.904C143.54,10.437 143.796,10.031 144.123,9.686C144.459,9.331 144.86,9.056 145.327,8.86C145.794,8.655 146.316,8.552 146.895,8.552C147.464,8.552 147.978,8.655 148.435,8.86C148.902,9.065 149.298,9.341 149.625,9.686C149.952,10.022 150.199,10.419 150.367,10.876C150.544,11.324 150.633,11.795 150.633,12.29C150.633,12.402 150.628,12.509 150.619,12.612C150.61,12.705 150.6,12.785 150.591,12.85H144.725C144.753,13.177 144.828,13.471 144.949,13.732C145.08,13.993 145.243,14.222 145.439,14.418C145.644,14.605 145.873,14.749 146.125,14.852C146.386,14.955 146.657,15.006 146.937,15.006C147.142,15.006 147.343,14.983 147.539,14.936C147.744,14.88 147.931,14.805 148.099,14.712C148.267,14.609 148.416,14.488 148.547,14.348C148.678,14.208 148.78,14.054 148.855,13.886L150.171,14.264C149.919,14.815 149.499,15.267 148.911,15.622C148.332,15.967 147.656,16.14 146.881,16.14ZM149.107,11.786C149.079,11.478 149,11.193 148.869,10.932C148.748,10.671 148.589,10.451 148.393,10.274C148.197,10.087 147.968,9.943 147.707,9.84C147.446,9.737 147.17,9.686 146.881,9.686C146.592,9.686 146.316,9.737 146.055,9.84C145.803,9.943 145.579,10.087 145.383,10.274C145.187,10.451 145.028,10.671 144.907,10.932C144.786,11.193 144.711,11.478 144.683,11.786H149.107Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M155.347,16.14C154.778,16.14 154.26,16.042 153.793,15.846C153.327,15.641 152.925,15.365 152.589,15.02C152.263,14.675 152.006,14.273 151.819,13.816C151.642,13.359 151.553,12.873 151.553,12.36C151.553,11.847 151.642,11.361 151.819,10.904C152.006,10.437 152.263,10.031 152.589,9.686C152.925,9.331 153.327,9.056 153.793,8.86C154.26,8.655 154.783,8.552 155.361,8.552C155.931,8.552 156.444,8.655 156.901,8.86C157.368,9.065 157.765,9.341 158.091,9.686C158.418,10.022 158.665,10.419 158.833,10.876C159.011,11.324 159.099,11.795 159.099,12.29C159.099,12.402 159.095,12.509 159.085,12.612C159.076,12.705 159.067,12.785 159.057,12.85H153.191C153.219,13.177 153.294,13.471 153.415,13.732C153.546,13.993 153.709,14.222 153.905,14.418C154.111,14.605 154.339,14.749 154.591,14.852C154.853,14.955 155.123,15.006 155.403,15.006C155.609,15.006 155.809,14.983 156.005,14.936C156.211,14.88 156.397,14.805 156.565,14.712C156.733,14.609 156.883,14.488 157.013,14.348C157.144,14.208 157.247,14.054 157.321,13.886L158.637,14.264C158.385,14.815 157.965,15.267 157.377,15.622C156.799,15.967 156.122,16.14 155.347,16.14ZM157.573,11.786C157.545,11.478 157.466,11.193 157.335,10.932C157.214,10.671 157.055,10.451 156.859,10.274C156.663,10.087 156.435,9.943 156.173,9.84C155.912,9.737 155.637,9.686 155.347,9.686C155.058,9.686 154.783,9.737 154.521,9.84C154.269,9.943 154.045,10.087 153.849,10.274C153.653,10.451 153.495,10.671 153.373,10.932C153.252,11.193 153.177,11.478 153.149,11.786H157.573Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M164.515,15.622C164.319,15.715 164.048,15.823 163.703,15.944C163.357,16.056 162.989,16.112 162.597,16.112C162.354,16.112 162.125,16.079 161.911,16.014C161.696,15.949 161.505,15.851 161.337,15.72C161.178,15.589 161.052,15.421 160.959,15.216C160.865,15.001 160.819,14.745 160.819,14.446V9.868H159.853V8.678H160.819V6.27H162.359V8.678H163.955V9.868H162.359V13.956C162.377,14.217 162.457,14.409 162.597,14.53C162.746,14.642 162.928,14.698 163.143,14.698C163.357,14.698 163.563,14.661 163.759,14.586C163.955,14.511 164.099,14.451 164.193,14.404L164.515,15.622Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M174.275,16V8.846L171.321,14.264H170.453L167.485,8.846V16H165.917V6.06H167.597L170.887,12.136L174.177,6.06H175.857V16H174.275Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M179.921,16.14C179.566,16.14 179.235,16.084 178.927,15.972C178.628,15.851 178.367,15.687 178.143,15.482C177.928,15.277 177.755,15.034 177.625,14.754C177.503,14.474 177.443,14.171 177.443,13.844C177.443,13.499 177.517,13.186 177.667,12.906C177.816,12.626 178.026,12.383 178.297,12.178C178.577,11.973 178.903,11.814 179.277,11.702C179.659,11.59 180.079,11.534 180.537,11.534C180.882,11.534 181.223,11.567 181.559,11.632C181.895,11.688 182.198,11.767 182.469,11.87V11.366C182.469,10.825 182.315,10.405 182.007,10.106C181.699,9.798 181.255,9.644 180.677,9.644C180.285,9.644 179.897,9.719 179.515,9.868C179.141,10.008 178.754,10.213 178.353,10.484L177.877,9.504C178.819,8.869 179.799,8.552 180.817,8.552C181.825,8.552 182.609,8.809 183.169,9.322C183.729,9.835 184.009,10.573 184.009,11.534V14.18C184.009,14.507 184.144,14.675 184.415,14.684V16C184.265,16.028 184.135,16.047 184.023,16.056C183.92,16.065 183.817,16.07 183.715,16.07C183.416,16.07 183.183,15.995 183.015,15.846C182.856,15.697 182.758,15.505 182.721,15.272L182.679,14.81C182.352,15.239 181.946,15.571 181.461,15.804C180.985,16.028 180.471,16.14 179.921,16.14ZM180.341,15.006C180.714,15.006 181.064,14.941 181.391,14.81C181.727,14.67 181.988,14.479 182.175,14.236C182.371,14.068 182.469,13.891 182.469,13.704V12.738C182.207,12.635 181.927,12.556 181.629,12.5C181.339,12.444 181.055,12.416 180.775,12.416C180.224,12.416 179.771,12.537 179.417,12.78C179.071,13.013 178.899,13.326 178.899,13.718C178.899,14.082 179.034,14.39 179.305,14.642C179.575,14.885 179.921,15.006 180.341,15.006Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M190.175,16.14C189.587,16.14 189.069,16 188.621,15.72C188.173,15.44 187.818,15.076 187.557,14.628V18.982H186.017V8.678H187.375V9.994C187.655,9.555 188.014,9.205 188.453,8.944C188.901,8.683 189.405,8.552 189.965,8.552C190.469,8.552 190.931,8.655 191.351,8.86C191.771,9.065 192.135,9.341 192.443,9.686C192.751,10.031 192.989,10.433 193.157,10.89C193.334,11.347 193.423,11.828 193.423,12.332C193.423,12.864 193.344,13.363 193.185,13.83C193.026,14.287 192.802,14.689 192.513,15.034C192.224,15.37 191.878,15.641 191.477,15.846C191.085,16.042 190.651,16.14 190.175,16.14ZM189.671,14.824C189.998,14.824 190.292,14.754 190.553,14.614C190.824,14.474 191.052,14.287 191.239,14.054C191.435,13.821 191.584,13.555 191.687,13.256C191.79,12.957 191.841,12.649 191.841,12.332C191.841,11.996 191.78,11.679 191.659,11.38C191.547,11.081 191.388,10.82 191.183,10.596C190.987,10.372 190.749,10.195 190.469,10.064C190.189,9.933 189.886,9.868 189.559,9.868C189.363,9.868 189.158,9.905 188.943,9.98C188.728,10.055 188.528,10.157 188.341,10.288C188.154,10.419 187.991,10.573 187.851,10.75C187.711,10.918 187.613,11.105 187.557,11.31V13.228C187.65,13.452 187.772,13.662 187.921,13.858C188.07,14.054 188.234,14.222 188.411,14.362C188.598,14.502 188.798,14.614 189.013,14.698C189.228,14.782 189.447,14.824 189.671,14.824Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M201.529,16.14C201.034,16.14 200.577,16.042 200.157,15.846C199.737,15.641 199.373,15.365 199.065,15.02C198.757,14.675 198.514,14.273 198.337,13.816C198.169,13.349 198.085,12.85 198.085,12.318C198.085,11.805 198.164,11.324 198.323,10.876C198.491,10.419 198.72,10.017 199.009,9.672C199.308,9.327 199.653,9.056 200.045,8.86C200.446,8.655 200.885,8.552 201.361,8.552C201.949,8.552 202.467,8.697 202.915,8.986C203.363,9.266 203.713,9.625 203.965,10.064V5.78H205.505V14.18C205.505,14.357 205.533,14.483 205.589,14.558C205.654,14.633 205.766,14.675 205.925,14.684V16C205.766,16.028 205.636,16.047 205.533,16.056C205.44,16.065 205.36,16.07 205.295,16.07C204.987,16.07 204.735,15.991 204.539,15.832C204.343,15.673 204.236,15.468 204.217,15.216L204.189,14.67C203.918,15.127 203.55,15.487 203.083,15.748C202.616,16.009 202.098,16.14 201.529,16.14ZM201.907,14.824C202.131,14.824 202.355,14.787 202.579,14.712C202.803,14.637 203.008,14.535 203.195,14.404C203.382,14.273 203.54,14.119 203.671,13.942C203.811,13.765 203.909,13.573 203.965,13.368V11.45C203.881,11.217 203.76,11.002 203.601,10.806C203.452,10.61 203.279,10.442 203.083,10.302C202.887,10.162 202.677,10.055 202.453,9.98C202.238,9.905 202.019,9.868 201.795,9.868C201.487,9.868 201.202,9.938 200.941,10.078C200.689,10.218 200.47,10.405 200.283,10.638C200.096,10.871 199.947,11.137 199.835,11.436C199.732,11.735 199.681,12.043 199.681,12.36C199.681,12.696 199.737,13.013 199.849,13.312C199.97,13.611 200.134,13.872 200.339,14.096C200.544,14.32 200.778,14.497 201.039,14.628C201.31,14.759 201.599,14.824 201.907,14.824Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M209.547,16.14C209.192,16.14 208.861,16.084 208.553,15.972C208.254,15.851 207.993,15.687 207.769,15.482C207.554,15.277 207.382,15.034 207.251,14.754C207.13,14.474 207.069,14.171 207.069,13.844C207.069,13.499 207.144,13.186 207.293,12.906C207.442,12.626 207.652,12.383 207.923,12.178C208.203,11.973 208.53,11.814 208.903,11.702C209.286,11.59 209.706,11.534 210.163,11.534C210.508,11.534 210.849,11.567 211.185,11.632C211.521,11.688 211.824,11.767 212.095,11.87V11.366C212.095,10.825 211.941,10.405 211.633,10.106C211.325,9.798 210.882,9.644 210.303,9.644C209.911,9.644 209.524,9.719 209.141,9.868C208.768,10.008 208.38,10.213 207.979,10.484L207.503,9.504C208.446,8.869 209.426,8.552 210.443,8.552C211.451,8.552 212.235,8.809 212.795,9.322C213.355,9.835 213.635,10.573 213.635,11.534V14.18C213.635,14.507 213.77,14.675 214.041,14.684V16C213.892,16.028 213.761,16.047 213.649,16.056C213.546,16.065 213.444,16.07 213.341,16.07C213.042,16.07 212.809,15.995 212.641,15.846C212.482,15.697 212.384,15.505 212.347,15.272L212.305,14.81C211.978,15.239 211.572,15.571 211.087,15.804C210.611,16.028 210.098,16.14 209.547,16.14ZM209.967,15.006C210.34,15.006 210.69,14.941 211.017,14.81C211.353,14.67 211.614,14.479 211.801,14.236C211.997,14.068 212.095,13.891 212.095,13.704V12.738C211.834,12.635 211.554,12.556 211.255,12.5C210.966,12.444 210.681,12.416 210.401,12.416C209.85,12.416 209.398,12.537 209.043,12.78C208.698,13.013 208.525,13.326 208.525,13.718C208.525,14.082 208.66,14.39 208.931,14.642C209.202,14.885 209.547,15.006 209.967,15.006Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M219.663,15.622C219.467,15.715 219.196,15.823 218.851,15.944C218.505,16.056 218.137,16.112 217.745,16.112C217.502,16.112 217.273,16.079 217.059,16.014C216.844,15.949 216.653,15.851 216.485,15.72C216.326,15.589 216.2,15.421 216.107,15.216C216.013,15.001 215.967,14.745 215.967,14.446V9.868H215.001V8.678H215.967V6.27H217.507V8.678H219.103V9.868H217.507V13.956C217.525,14.217 217.605,14.409 217.745,14.53C217.894,14.642 218.076,14.698 218.291,14.698C218.505,14.698 218.711,14.661 218.907,14.586C219.103,14.511 219.247,14.451 219.341,14.404L219.663,15.622Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M222.815,16.14C222.461,16.14 222.129,16.084 221.821,15.972C221.523,15.851 221.261,15.687 221.037,15.482C220.823,15.277 220.65,15.034 220.519,14.754C220.398,14.474 220.337,14.171 220.337,13.844C220.337,13.499 220.412,13.186 220.561,12.906C220.711,12.626 220.921,12.383 221.191,12.178C221.471,11.973 221.798,11.814 222.171,11.702C222.554,11.59 222.974,11.534 223.431,11.534C223.777,11.534 224.117,11.567 224.453,11.632C224.789,11.688 225.093,11.767 225.363,11.87V11.366C225.363,10.825 225.209,10.405 224.901,10.106C224.593,9.798 224.15,9.644 223.571,9.644C223.179,9.644 222.792,9.719 222.409,9.868C222.036,10.008 221.649,10.213 221.247,10.484L220.771,9.504C221.714,8.869 222.694,8.552 223.711,8.552C224.719,8.552 225.503,8.809 226.063,9.322C226.623,9.835 226.903,10.573 226.903,11.534V14.18C226.903,14.507 227.039,14.675 227.309,14.684V16C227.16,16.028 227.029,16.047 226.917,16.056C226.815,16.065 226.712,16.07 226.609,16.07C226.311,16.07 226.077,15.995 225.909,15.846C225.751,15.697 225.653,15.505 225.615,15.272L225.573,14.81C225.247,15.239 224.841,15.571 224.355,15.804C223.879,16.028 223.366,16.14 222.815,16.14ZM223.235,15.006C223.609,15.006 223.959,14.941 224.285,14.81C224.621,14.67 224.883,14.479 225.069,14.236C225.265,14.068 225.363,13.891 225.363,13.704V12.738C225.102,12.635 224.822,12.556 224.523,12.5C224.234,12.444 223.949,12.416 223.669,12.416C223.119,12.416 222.666,12.537 222.311,12.78C221.966,13.013 221.793,13.326 221.793,13.718C221.793,14.082 221.929,14.39 222.199,14.642C222.47,14.885 222.815,15.006 223.235,15.006Z"
android:fillColor="#BFBFBF"/>
</vector>

View file

@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="172dp"
android:height="36dp"
android:viewportWidth="172"
android:viewportHeight="36">
<group>
<clip-path android:pathData="M0,0h172v36h-172z M 0,0"/>
<path
android:pathData="M15.4629 34.252C13.2509 34.252 11.2349 33.818 9.41489 32.95C7.59489 32.082 6.0409 30.948 4.7529 29.548C3.4649 28.12 2.4569 26.496 1.7289 24.676C1.0289 22.856 0.678894 20.98 0.678894 19.048C0.678894 17.088 1.0429 15.198 1.7709 13.378C2.5269 11.558 3.56289 9.96203 4.87889 8.59003C6.2229 7.19003 7.8049 6.08403 9.6249 5.27203C11.4449 4.43203 13.4329 4.01203 15.5889 4.01203C17.8009 4.01203 19.8169 4.44603 21.6369 5.31403C23.4569 6.18203 25.0109 7.33003 26.2989 8.75803C27.5869 10.186 28.5809 11.81 29.2809 13.63C29.9809 15.45 30.3309 17.298 30.3309 19.174C30.3309 21.134 29.9529 23.024 29.1969 24.844C28.4689 26.664 27.4469 28.274 26.1309 29.674C24.8149 31.046 23.2469 32.152 21.4269 32.992C19.6069 33.832 17.6189 34.252 15.4629 34.252ZM7.69289 19.132C7.69289 20.28 7.8609 21.4 8.1969 22.492C8.5329 23.556 9.0229 24.508 9.6669 25.348C10.3389 26.188 11.1649 26.86 12.1449 27.364C13.1249 27.868 14.2449 28.12 15.5049 28.12C16.8209 28.12 17.9689 27.854 18.9489 27.322C19.9289 26.79 20.7409 26.104 21.3849 25.264C22.0289 24.396 22.5049 23.43 22.8129 22.366C23.1489 21.274 23.3169 20.168 23.3169 19.048C23.3169 17.9 23.1489 16.794 22.8129 15.73C22.4769 14.638 21.9729 13.686 21.3009 12.874C20.6289 12.034 19.8029 11.376 18.8229 10.9C17.8709 10.396 16.7649 10.144 15.5049 10.144C14.1889 10.144 13.0409 10.41 12.0609 10.942C11.1089 11.446 10.2969 12.118 9.6249 12.958C8.9809 13.798 8.4909 14.764 8.1549 15.856C7.8469 16.92 7.69289 18.012 7.69289 19.132Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M42.459 34.42C40.583 34.42 38.7351 34.126 36.9151 33.538C35.0951 32.922 33.555 32.04 32.295 30.892L34.6891 26.776C36.0331 27.7 37.3351 28.414 38.5951 28.918C39.8831 29.422 41.115 29.674 42.291 29.674C43.159 29.674 43.831 29.52 44.307 29.212C44.783 28.904 45.0211 28.456 45.0211 27.868C45.0211 27.28 44.713 26.818 44.097 26.482C43.509 26.118 42.459 25.74 40.947 25.348C39.463 24.928 38.203 24.522 37.167 24.13C36.159 23.738 35.3331 23.304 34.6891 22.828C34.0451 22.352 33.5831 21.806 33.3031 21.19C33.0231 20.574 32.8831 19.846 32.8831 19.006C32.8831 17.886 33.107 16.864 33.555 15.94C34.003 15.016 34.619 14.232 35.403 13.588C36.187 12.944 37.1111 12.44 38.1751 12.076C39.2671 11.712 40.4431 11.53 41.7031 11.53C43.3551 11.53 44.8951 11.754 46.3231 12.202C47.7791 12.65 49.1791 13.462 50.5231 14.638L47.9191 18.67C46.6591 17.802 45.5391 17.172 44.5591 16.78C43.5791 16.388 42.6271 16.192 41.7031 16.192C40.9751 16.192 40.3591 16.346 39.8551 16.654C39.3511 16.934 39.099 17.396 39.099 18.04C39.099 18.656 39.3651 19.118 39.8971 19.426C40.4571 19.734 41.4791 20.07 42.9631 20.434C44.5311 20.854 45.8471 21.274 46.9111 21.694C48.0031 22.114 48.885 22.59 49.557 23.122C50.229 23.626 50.719 24.214 51.0271 24.886C51.3351 25.558 51.4891 26.356 51.4891 27.28C51.4891 29.464 50.6771 31.2 49.0531 32.488C47.4291 33.776 45.231 34.42 42.459 34.42Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M89.584 34H82.864V21.61C82.864 20.154 82.598 19.104 82.066 18.46C81.534 17.788 80.848 17.452 80.008 17.452C79.56 17.452 79.098 17.55 78.622 17.746C78.174 17.942 77.754 18.222 77.362 18.586C76.97 18.922 76.606 19.328 76.27 19.804C75.962 20.28 75.71 20.798 75.514 21.358V34H68.794V21.61C68.794 20.154 68.528 19.104 67.996 18.46C67.464 17.788 66.778 17.452 65.938 17.452C65.042 17.452 64.16 17.816 63.292 18.544C62.452 19.244 61.836 20.182 61.444 21.358V34H54.724V11.95H60.772V15.646C61.584 14.302 62.676 13.28 64.048 12.58C65.448 11.88 67.072 11.53 68.92 11.53C69.844 11.53 70.642 11.642 71.314 11.866C72.014 12.09 72.616 12.398 73.12 12.79C73.624 13.182 74.03 13.644 74.338 14.176C74.646 14.68 74.87 15.226 75.01 15.814C75.85 14.442 76.956 13.392 78.328 12.664C79.7 11.908 81.268 11.53 83.032 11.53C84.432 11.53 85.552 11.796 86.392 12.328C87.26 12.832 87.932 13.504 88.408 14.344C88.884 15.156 89.192 16.052 89.332 17.032C89.5 18.012 89.584 18.964 89.584 19.888V34Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M102.628 4.18003H108.844L119.722 34H112.666L110.356 27.322H101.074L98.806 34H91.75L102.628 4.18003ZM109.222 22.576L105.736 12.034L102.166 22.576H109.222Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M143.365 34H136.645V21.61C136.645 20.154 136.365 19.104 135.805 18.46C135.273 17.788 134.559 17.452 133.663 17.452C133.187 17.452 132.711 17.55 132.235 17.746C131.759 17.942 131.297 18.222 130.849 18.586C130.401 18.922 129.995 19.328 129.631 19.804C129.295 20.28 129.029 20.798 128.833 21.358V34H122.113V11.95H128.161V15.646C128.973 14.33 130.121 13.322 131.605 12.622C133.089 11.894 134.797 11.53 136.729 11.53C138.157 11.53 139.305 11.796 140.173 12.328C141.041 12.832 141.713 13.504 142.189 14.344C142.665 15.156 142.973 16.052 143.113 17.032C143.281 18.012 143.365 18.964 143.365 19.888V34Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M156.986 34.42C155.474 34.42 154.074 34.14 152.786 33.58C151.526 32.992 150.434 32.18 149.51 31.144C148.586 30.108 147.858 28.904 147.326 27.532C146.822 26.132 146.57 24.606 146.57 22.954C146.57 21.358 146.808 19.86 147.284 18.46C147.76 17.06 148.431 15.856 149.299 14.848C150.167 13.812 151.189 13 152.365 12.412C153.569 11.824 154.886 11.53 156.314 11.53C157.854 11.53 159.239 11.894 160.471 12.622C161.731 13.35 162.698 14.33 163.37 15.562V3.34003H170.09V26.44C170.09 27.112 170.188 27.588 170.383 27.868C170.607 28.12 170.986 28.274 171.518 28.33V34C170.902 34.14 170.37 34.224 169.922 34.252C169.474 34.308 169.053 34.336 168.661 34.336C167.485 34.336 166.533 34.098 165.805 33.622C165.077 33.118 164.658 32.404 164.546 31.48L164.419 30.346C163.635 31.718 162.572 32.74 161.228 33.412C159.912 34.084 158.498 34.42 156.986 34.42ZM158.792 28.75C159.716 28.75 160.597 28.484 161.438 27.952C162.306 27.392 162.963 26.636 163.411 25.684V21.064C162.991 19.944 162.306 19.034 161.354 18.334C160.43 17.606 159.464 17.242 158.456 17.242C157.728 17.242 157.055 17.41 156.439 17.746C155.851 18.054 155.333 18.474 154.885 19.006C154.437 19.538 154.087 20.154 153.835 20.854C153.611 21.554 153.499 22.296 153.499 23.08C153.499 23.892 153.626 24.648 153.878 25.348C154.158 26.048 154.521 26.65 154.969 27.154C155.445 27.658 156.006 28.05 156.65 28.33C157.322 28.61 158.036 28.75 158.792 28.75Z"
android:fillColor="#BFBFBF"/>
</group>
</vector>

View file

@ -0,0 +1,37 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="172dp"
android:height="72dp"
android:viewportWidth="172"
android:viewportHeight="72">
<group>
<clip-path android:pathData="M0,0h172v72h-172z M 0,0"/>
<path
android:pathData="M152.786 33.58C154.074 34.14 155.474 34.42 156.986 34.42C158.497 34.42 159.912 34.084 161.228 33.412C162.572 32.74 163.635 31.718 164.419 30.346L164.546 31.48C164.658 32.404 165.077 33.118 165.805 33.622C166.533 34.098 167.486 34.336 168.661 34.336C169.053 34.336 169.474 34.308 169.922 34.252C170.37 34.224 170.902 34.14 171.518 34V28.33C170.986 28.274 170.607 28.12 170.383 27.868C170.188 27.588 170.09 27.112 170.09 26.44V3.34003H163.37V15.562C162.698 14.33 161.731 13.35 160.471 12.622C159.24 11.894 157.854 11.53 156.314 11.53C154.886 11.53 153.569 11.824 152.365 12.412C151.189 13 150.167 13.812 149.299 14.848C148.432 15.856 147.76 17.06 147.284 18.46C146.808 19.86 146.57 21.358 146.57 22.954C146.57 24.606 146.822 26.132 147.326 27.532C147.857 28.904 148.586 30.108 149.51 31.144C150.434 32.18 151.526 32.992 152.786 33.58ZM161.438 27.952C160.598 28.484 159.715 28.75 158.792 28.75C158.036 28.75 157.322 28.61 156.65 28.33C156.006 28.05 155.445 27.658 154.969 27.154C154.521 26.65 154.158 26.048 153.878 25.348C153.626 24.648 153.499 23.892 153.499 23.08C153.499 22.296 153.611 21.554 153.835 20.854C154.087 20.154 154.438 19.538 154.885 19.006C155.333 18.474 155.852 18.054 156.439 17.746C157.055 17.41 157.728 17.242 158.456 17.242C159.464 17.242 160.43 17.606 161.354 18.334C162.305 19.034 162.992 19.944 163.411 21.064V25.684C162.964 26.636 162.305 27.392 161.438 27.952Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
<path
android:pathData="M9.41489 32.95C11.2349 33.818 13.2509 34.252 15.4629 34.252C17.6189 34.252 19.6069 33.832 21.4269 32.992C23.2469 32.152 24.8149 31.046 26.1309 29.674C27.4469 28.274 28.4689 26.664 29.1969 24.844C29.9529 23.024 30.3309 21.134 30.3309 19.174C30.3309 17.298 29.9809 15.45 29.2809 13.63C28.5809 11.81 27.5869 10.186 26.2989 8.75803C25.0109 7.33003 23.4569 6.18203 21.6369 5.31403C19.8169 4.44603 17.8009 4.01203 15.5889 4.01203C13.4329 4.01203 11.4449 4.43203 9.6249 5.27203C7.8049 6.08403 6.2229 7.19003 4.87889 8.59003C3.56289 9.96203 2.5269 11.558 1.7709 13.378C1.0429 15.198 0.678894 17.088 0.678894 19.048C0.678894 20.98 1.0289 22.856 1.7289 24.676C2.4569 26.496 3.4649 28.12 4.7529 29.548C6.0409 30.948 7.59489 32.082 9.41489 32.95ZM8.1969 22.492C7.8609 21.4 7.69289 20.28 7.69289 19.132C7.69289 18.012 7.8469 16.92 8.1549 15.856C8.4909 14.764 8.9809 13.798 9.6249 12.958C10.2969 12.118 11.1089 11.446 12.0609 10.942C13.0409 10.41 14.1889 10.144 15.5049 10.144C16.7649 10.144 17.8709 10.396 18.8229 10.9C19.8029 11.376 20.6289 12.034 21.3009 12.874C21.9729 13.686 22.4769 14.638 22.8129 15.73C23.1489 16.794 23.3169 17.9 23.3169 19.048C23.3169 20.168 23.1489 21.274 22.8129 22.366C22.5049 23.43 22.0289 24.396 21.3849 25.264C20.7409 26.104 19.9289 26.79 18.9489 27.322C17.9689 27.854 16.8209 28.12 15.5049 28.12C14.2449 28.12 13.1249 27.868 12.1449 27.364C11.1649 26.86 10.3389 26.188 9.6669 25.348C9.0229 24.508 8.5329 23.556 8.1969 22.492Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
<path
android:pathData="M36.9151 33.538C38.7351 34.126 40.583 34.42 42.459 34.42C45.231 34.42 47.4291 33.776 49.0531 32.488C50.6771 31.2 51.4891 29.464 51.4891 27.28C51.4891 26.356 51.335 25.558 51.0271 24.886C50.7191 24.214 50.229 23.626 49.557 23.122C48.885 22.59 48.0031 22.114 46.9111 21.694C45.8471 21.274 44.5311 20.854 42.9631 20.434C41.4791 20.07 40.4571 19.734 39.8971 19.426C39.3651 19.118 39.099 18.656 39.099 18.04C39.099 17.396 39.3511 16.934 39.8551 16.654C40.3591 16.346 40.9751 16.192 41.7031 16.192C42.6271 16.192 43.5791 16.388 44.5591 16.78C45.5391 17.172 46.6591 17.802 47.9191 18.67L50.5231 14.638C49.1791 13.462 47.7791 12.65 46.3231 12.202C44.8951 11.754 43.3551 11.53 41.7031 11.53C40.4431 11.53 39.2671 11.712 38.1751 12.076C37.1111 12.44 36.187 12.944 35.403 13.588C34.619 14.232 34.0031 15.016 33.555 15.94C33.107 16.864 32.8831 17.886 32.8831 19.006C32.8831 19.846 33.0231 20.574 33.3031 21.19C33.583 21.806 34.0451 22.352 34.6891 22.828C35.3331 23.304 36.159 23.738 37.167 24.13C38.203 24.522 39.463 24.928 40.947 25.348C42.459 25.74 43.509 26.118 44.097 26.482C44.7131 26.818 45.0211 27.28 45.0211 27.868C45.0211 28.456 44.783 28.904 44.307 29.212C43.831 29.52 43.159 29.674 42.291 29.674C41.1151 29.674 39.883 29.422 38.5951 28.918C37.3351 28.414 36.0331 27.7 34.6891 26.776L32.295 30.892C33.555 32.04 35.0951 32.922 36.9151 33.538Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M89.584 34H82.864V21.61C82.864 20.154 82.598 19.104 82.066 18.46C81.534 17.788 80.848 17.452 80.008 17.452C79.56 17.452 79.098 17.55 78.622 17.746C78.174 17.942 77.754 18.222 77.362 18.586C76.97 18.922 76.606 19.328 76.27 19.804C75.962 20.28 75.71 20.798 75.514 21.358V34H68.794V21.61C68.794 20.154 68.528 19.104 67.996 18.46C67.464 17.788 66.778 17.452 65.938 17.452C65.042 17.452 64.16 17.816 63.292 18.544C62.452 19.244 61.836 20.182 61.444 21.358V34H54.724V11.95H60.772V15.646C61.584 14.302 62.676 13.28 64.048 12.58C65.448 11.88 67.072 11.53 68.92 11.53C69.844 11.53 70.642 11.642 71.314 11.866C72.014 12.09 72.616 12.398 73.12 12.79C73.624 13.182 74.03 13.644 74.338 14.176C74.646 14.68 74.87 15.226 75.01 15.814C75.85 14.442 76.956 13.392 78.328 12.664C79.7 11.908 81.268 11.53 83.032 11.53C84.432 11.53 85.552 11.796 86.392 12.328C87.26 12.832 87.932 13.504 88.408 14.344C88.884 15.156 89.192 16.052 89.332 17.032C89.5 18.012 89.584 18.964 89.584 19.888V34Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M108.844 4.18003H102.628L91.75 34H98.806L101.074 27.322H110.356L112.666 34H119.722L108.844 4.18003ZM105.736 12.034L109.222 22.576H102.166L105.736 12.034Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
<path
android:pathData="M143.365 34H136.645V21.61C136.645 20.154 136.365 19.104 135.805 18.46C135.273 17.788 134.559 17.452 133.663 17.452C133.187 17.452 132.711 17.55 132.235 17.746C131.759 17.942 131.297 18.222 130.849 18.586C130.401 18.922 129.995 19.328 129.631 19.804C129.295 20.28 129.029 20.798 128.833 21.358V34H122.113V11.95H128.161V15.646C128.973 14.33 130.121 13.322 131.605 12.622C133.089 11.894 134.797 11.53 136.729 11.53C138.157 11.53 139.305 11.796 140.173 12.328C141.041 12.832 141.713 13.504 142.189 14.344C142.665 15.156 142.973 16.052 143.113 17.032C143.281 18.012 143.365 18.964 143.365 19.888V34Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M159.895 59.016C159.895 58.6333 159.843 58.2833 159.741 57.966C159.638 57.6487 159.489 57.378 159.293 57.154C159.106 56.93 158.873 56.7573 158.593 56.636C158.313 56.5053 158 56.44 157.655 56.44H156.563V61.62H157.655C158.009 61.62 158.327 61.5547 158.607 61.424C158.887 61.2933 159.12 61.1113 159.307 60.878C159.503 60.6447 159.647 60.3693 159.741 60.052C159.843 59.7347 159.895 59.3893 159.895 59.016Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M68 49C68 47.8954 68.8954 47 70 47H169C170.105 47 171 47.8954 171 49V69C171 70.1046 170.105 71 169 71H70C68.8954 71 68 70.1046 68 69V49ZM82.9503 61.452C82.7263 61.592 82.4557 61.662 82.1383 61.662C81.821 61.662 81.5503 61.5967 81.3263 61.466C81.1117 61.326 80.9343 61.144 80.7943 60.92C80.6543 60.6867 80.5517 60.4207 80.4863 60.122C80.421 59.814 80.3883 59.4967 80.3883 59.17V54.06H77.6583V59.17C77.6583 59.8327 77.7423 60.4627 77.9103 61.06C78.0783 61.648 78.3443 62.166 78.7083 62.614C79.0723 63.062 79.5343 63.4213 80.0943 63.692C80.6637 63.9533 81.345 64.084 82.1383 64.084C82.9037 64.084 83.5663 63.958 84.1263 63.706C84.6957 63.454 85.167 63.1087 85.5403 62.67C85.9137 62.2313 86.189 61.7133 86.3663 61.116C86.5437 60.5093 86.6323 59.8607 86.6323 59.17V54.06H83.9023V59.17C83.9023 59.4967 83.8697 59.8093 83.8043 60.108C83.739 60.4067 83.6363 60.6727 83.4963 60.906C83.3563 61.13 83.1743 61.312 82.9503 61.452ZM92.0526 64V59.114L96.0006 64H98.1706V54.06H95.4406V59.114L91.4506 54.06H89.3226V64H92.0526ZM100.997 64V54.06H103.727V61.62H108.235V64H100.997ZM110.307 54.06V64H113.037V54.06H110.307ZM123.388 64V58.764L121.722 62.446H120.266L118.6 58.764V64H115.87V54.06H118.852L120.994 58.736L123.15 54.06H126.118V64H123.388ZM128.939 54.06V64H131.669V54.06H128.939ZM142.245 56.44H139.389V64H136.659V56.44H133.789V54.06H142.245V56.44ZM151.443 64V61.62H147.089V60.052H150.701V57.84H147.089V56.44H151.317V54.06H144.359V64H151.443ZM153.833 64V54.06H157.655C158.476 54.06 159.199 54.1907 159.825 54.452C160.45 54.7133 160.973 55.068 161.393 55.516C161.813 55.964 162.13 56.4913 162.345 57.098C162.559 57.6953 162.667 58.3347 162.667 59.016C162.667 59.772 162.545 60.458 162.303 61.074C162.069 61.6807 161.733 62.2033 161.295 62.642C160.856 63.0713 160.329 63.4073 159.713 63.65C159.097 63.8833 158.411 64 157.655 64H153.833Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
</group>
</vector>

View file

@ -0,0 +1,43 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="172dp"
android:height="72dp"
android:viewportWidth="172"
android:viewportHeight="72">
<group>
<clip-path android:pathData="M0,0h172v72h-172z M 0,0"/>
<path
android:pathData="M152.786 33.58C154.074 34.14 155.474 34.42 156.986 34.42C158.497 34.42 159.912 34.084 161.228 33.412C162.572 32.74 163.635 31.718 164.419 30.346L164.546 31.48C164.658 32.404 165.077 33.118 165.805 33.622C166.533 34.098 167.486 34.336 168.661 34.336C169.053 34.336 169.474 34.308 169.922 34.252C170.37 34.224 170.902 34.14 171.518 34V28.33C170.986 28.274 170.607 28.12 170.383 27.868C170.188 27.588 170.09 27.112 170.09 26.44V3.34003H163.37V15.562C162.698 14.33 161.731 13.35 160.471 12.622C159.24 11.894 157.854 11.53 156.314 11.53C154.886 11.53 153.569 11.824 152.365 12.412C151.189 13 150.167 13.812 149.299 14.848C148.432 15.856 147.76 17.06 147.284 18.46C146.808 19.86 146.57 21.358 146.57 22.954C146.57 24.606 146.822 26.132 147.326 27.532C147.857 28.904 148.586 30.108 149.51 31.144C150.434 32.18 151.526 32.992 152.786 33.58ZM161.438 27.952C160.598 28.484 159.715 28.75 158.792 28.75C158.036 28.75 157.322 28.61 156.65 28.33C156.006 28.05 155.445 27.658 154.969 27.154C154.521 26.65 154.158 26.048 153.878 25.348C153.626 24.648 153.499 23.892 153.499 23.08C153.499 22.296 153.611 21.554 153.835 20.854C154.087 20.154 154.438 19.538 154.885 19.006C155.333 18.474 155.852 18.054 156.439 17.746C157.055 17.41 157.728 17.242 158.456 17.242C159.464 17.242 160.43 17.606 161.354 18.334C162.305 19.034 162.992 19.944 163.411 21.064V25.684C162.964 26.636 162.305 27.392 161.438 27.952Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
<path
android:pathData="M9.41489 32.95C11.2349 33.818 13.2509 34.252 15.4629 34.252C17.6189 34.252 19.6069 33.832 21.4269 32.992C23.2469 32.152 24.8149 31.046 26.1309 29.674C27.4469 28.274 28.4689 26.664 29.1969 24.844C29.9529 23.024 30.3309 21.134 30.3309 19.174C30.3309 17.298 29.9809 15.45 29.2809 13.63C28.5809 11.81 27.5869 10.186 26.2989 8.75803C25.0109 7.33003 23.4569 6.18203 21.6369 5.31403C19.8169 4.44603 17.8009 4.01203 15.5889 4.01203C13.4329 4.01203 11.4449 4.43203 9.6249 5.27203C7.8049 6.08403 6.2229 7.19003 4.87889 8.59003C3.56289 9.96203 2.5269 11.558 1.7709 13.378C1.0429 15.198 0.678894 17.088 0.678894 19.048C0.678894 20.98 1.0289 22.856 1.7289 24.676C2.4569 26.496 3.4649 28.12 4.7529 29.548C6.0409 30.948 7.59489 32.082 9.41489 32.95ZM8.1969 22.492C7.8609 21.4 7.69289 20.28 7.69289 19.132C7.69289 18.012 7.8469 16.92 8.1549 15.856C8.4909 14.764 8.9809 13.798 9.6249 12.958C10.2969 12.118 11.1089 11.446 12.0609 10.942C13.0409 10.41 14.1889 10.144 15.5049 10.144C16.7649 10.144 17.8709 10.396 18.8229 10.9C19.8029 11.376 20.6289 12.034 21.3009 12.874C21.9729 13.686 22.4769 14.638 22.8129 15.73C23.1489 16.794 23.3169 17.9 23.3169 19.048C23.3169 20.168 23.1489 21.274 22.8129 22.366C22.5049 23.43 22.0289 24.396 21.3849 25.264C20.7409 26.104 19.9289 26.79 18.9489 27.322C17.9689 27.854 16.8209 28.12 15.5049 28.12C14.2449 28.12 13.1249 27.868 12.1449 27.364C11.1649 26.86 10.3389 26.188 9.6669 25.348C9.0229 24.508 8.5329 23.556 8.1969 22.492Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
<path
android:pathData="M36.9151 33.538C38.7351 34.126 40.583 34.42 42.459 34.42C45.231 34.42 47.4291 33.776 49.0531 32.488C50.6771 31.2 51.4891 29.464 51.4891 27.28C51.4891 26.356 51.335 25.558 51.0271 24.886C50.7191 24.214 50.229 23.626 49.557 23.122C48.885 22.59 48.0031 22.114 46.9111 21.694C45.8471 21.274 44.5311 20.854 42.9631 20.434C41.4791 20.07 40.4571 19.734 39.8971 19.426C39.3651 19.118 39.099 18.656 39.099 18.04C39.099 17.396 39.3511 16.934 39.8551 16.654C40.3591 16.346 40.9751 16.192 41.7031 16.192C42.6271 16.192 43.5791 16.388 44.5591 16.78C45.5391 17.172 46.6591 17.802 47.9191 18.67L50.5231 14.638C49.1791 13.462 47.7791 12.65 46.3231 12.202C44.8951 11.754 43.3551 11.53 41.7031 11.53C40.4431 11.53 39.2671 11.712 38.1751 12.076C37.1111 12.44 36.187 12.944 35.403 13.588C34.619 14.232 34.0031 15.016 33.555 15.94C33.107 16.864 32.8831 17.886 32.8831 19.006C32.8831 19.846 33.0231 20.574 33.3031 21.19C33.583 21.806 34.0451 22.352 34.6891 22.828C35.3331 23.304 36.159 23.738 37.167 24.13C38.203 24.522 39.463 24.928 40.947 25.348C42.459 25.74 43.509 26.118 44.097 26.482C44.7131 26.818 45.0211 27.28 45.0211 27.868C45.0211 28.456 44.783 28.904 44.307 29.212C43.831 29.52 43.159 29.674 42.291 29.674C41.1151 29.674 39.883 29.422 38.5951 28.918C37.3351 28.414 36.0331 27.7 34.6891 26.776L32.295 30.892C33.555 32.04 35.0951 32.922 36.9151 33.538Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M89.584 34H82.864V21.61C82.864 20.154 82.598 19.104 82.066 18.46C81.534 17.788 80.848 17.452 80.008 17.452C79.56 17.452 79.098 17.55 78.622 17.746C78.174 17.942 77.754 18.222 77.362 18.586C76.97 18.922 76.606 19.328 76.27 19.804C75.962 20.28 75.71 20.798 75.514 21.358V34H68.794V21.61C68.794 20.154 68.528 19.104 67.996 18.46C67.464 17.788 66.778 17.452 65.938 17.452C65.042 17.452 64.16 17.816 63.292 18.544C62.452 19.244 61.836 20.182 61.444 21.358V34H54.724V11.95H60.772V15.646C61.584 14.302 62.676 13.28 64.048 12.58C65.448 11.88 67.072 11.53 68.92 11.53C69.844 11.53 70.642 11.642 71.314 11.866C72.014 12.09 72.616 12.398 73.12 12.79C73.624 13.182 74.03 13.644 74.338 14.176C74.646 14.68 74.87 15.226 75.01 15.814C75.85 14.442 76.956 13.392 78.328 12.664C79.7 11.908 81.268 11.53 83.032 11.53C84.432 11.53 85.552 11.796 86.392 12.328C87.26 12.832 87.932 13.504 88.408 14.344C88.884 15.156 89.192 16.052 89.332 17.032C89.5 18.012 89.584 18.964 89.584 19.888V34Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M108.844 4.18003H102.628L91.75 34H98.806L101.074 27.322H110.356L112.666 34H119.722L108.844 4.18003ZM105.736 12.034L109.222 22.576H102.166L105.736 12.034Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
<path
android:pathData="M143.365 34H136.645V21.61C136.645 20.154 136.365 19.104 135.805 18.46C135.273 17.788 134.559 17.452 133.663 17.452C133.187 17.452 132.711 17.55 132.235 17.746C131.759 17.942 131.297 18.222 130.849 18.586C130.401 18.922 129.995 19.328 129.631 19.804C129.295 20.28 129.029 20.798 128.833 21.358V34H122.113V11.95H128.161V15.646C128.973 14.33 130.121 13.322 131.605 12.622C133.089 11.894 134.797 11.53 136.729 11.53C138.157 11.53 139.305 11.796 140.173 12.328C141.041 12.832 141.713 13.504 142.189 14.344C142.665 15.156 142.973 16.052 143.113 17.032C143.281 18.012 143.365 18.964 143.365 19.888V34Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M60.08 59.044C60.08 59.38 60.1266 59.7067 60.22 60.024C60.3133 60.332 60.4533 60.6073 60.64 60.85C60.8267 61.0927 61.06 61.2887 61.34 61.438C61.6293 61.5873 61.97 61.662 62.362 61.662C62.754 61.662 63.0947 61.5873 63.384 61.438C63.6733 61.2793 63.9067 61.0787 64.084 60.836C64.2707 60.584 64.406 60.2993 64.49 59.982C64.5833 59.6647 64.63 59.3427 64.63 59.016C64.63 58.68 64.5833 58.358 64.49 58.05C64.3967 57.7327 64.252 57.4573 64.056 57.224C63.8693 56.9813 63.6313 56.79 63.342 56.65C63.062 56.5007 62.7307 56.426 62.348 56.426C61.956 56.426 61.6153 56.5007 61.326 56.65C61.046 56.7993 60.8126 57 60.626 57.252C60.4393 57.4947 60.2993 57.7747 60.206 58.092C60.122 58.4 60.08 58.7173 60.08 59.044Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M97.1309 60.234L96.2489 57.154L95.3249 60.234H97.1309Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M120.467 57.966C120.57 58.2833 120.621 58.6333 120.621 59.016C120.621 59.3893 120.57 59.7347 120.467 60.052C120.374 60.3693 120.229 60.6447 120.033 60.878C119.847 61.1113 119.613 61.2933 119.333 61.424C119.053 61.5547 118.736 61.62 118.381 61.62H117.289V56.44H118.381C118.727 56.44 119.039 56.5053 119.319 56.636C119.599 56.7573 119.833 56.93 120.019 57.154C120.215 57.378 120.365 57.6487 120.467 57.966Z"
android:fillColor="#BFBFBF"/>
<path
android:pathData="M49 49C49 47.8954 49.8954 47 51 47H169C170.105 47 171 47.8954 171 49V69C171 70.1046 170.105 71 169 71H51C49.8954 71 49 70.1046 49 69V49ZM75.617 57.308C75.337 57.14 75.0477 56.9907 74.749 56.86C74.497 56.748 74.2124 56.6453 73.895 56.552C73.587 56.4493 73.2837 56.398 72.985 56.398C72.7424 56.398 72.5464 56.4353 72.397 56.51C72.257 56.5847 72.187 56.7107 72.187 56.888C72.187 57.0187 72.229 57.126 72.313 57.21C72.397 57.294 72.5184 57.3733 72.677 57.448C72.8357 57.5133 73.027 57.5787 73.251 57.644C73.4844 57.7093 73.7457 57.7887 74.035 57.882C74.4924 58.022 74.903 58.176 75.267 58.344C75.6404 58.512 75.9577 58.7127 76.219 58.946C76.4804 59.17 76.681 59.4453 76.821 59.772C76.961 60.0987 77.031 60.4953 77.031 60.962C77.031 61.5593 76.919 62.0633 76.695 62.474C76.4804 62.8753 76.191 63.1973 75.827 63.44C75.4724 63.6827 75.0664 63.86 74.609 63.972C74.161 64.0747 73.7084 64.126 73.251 64.126C72.887 64.126 72.5137 64.098 72.131 64.042C71.7484 63.986 71.3657 63.9067 70.983 63.804C70.6097 63.7013 70.2457 63.58 69.891 63.44C69.5457 63.3 69.2237 63.1413 68.925 62.964L70.101 60.57C70.4277 60.7753 70.7684 60.9573 71.123 61.116C71.4217 61.256 71.7577 61.382 72.131 61.494C72.5137 61.606 72.901 61.662 73.293 61.662C73.5917 61.662 73.797 61.6247 73.909 61.55C74.0304 61.466 74.091 61.3587 74.091 61.228C74.091 61.088 74.0304 60.9713 73.909 60.878C73.797 60.7753 73.6384 60.6867 73.433 60.612C73.2277 60.5373 72.9897 60.4627 72.719 60.388C72.4577 60.3133 72.1777 60.2247 71.879 60.122C71.4404 59.9727 71.0624 59.814 70.745 59.646C70.4277 59.4687 70.1664 59.2727 69.961 59.058C69.7557 58.834 69.6017 58.582 69.499 58.302C69.4057 58.022 69.359 57.7 69.359 57.336C69.359 56.7853 69.457 56.3 69.653 55.88C69.8584 55.46 70.1337 55.11 70.479 54.83C70.8244 54.55 71.2164 54.34 71.655 54.2C72.103 54.0507 72.5744 53.976 73.069 53.976C73.433 53.976 73.7877 54.0133 74.133 54.088C74.4784 54.1533 74.8097 54.242 75.127 54.354C75.4537 54.4567 75.757 54.5733 76.037 54.704C76.317 54.8253 76.569 54.942 76.793 55.054L75.617 57.308ZM62.334 64.084C61.578 64.084 60.892 63.9393 60.276 63.65C59.66 63.3607 59.1327 62.9827 58.694 62.516C58.2553 62.04 57.9146 61.4987 57.672 60.892C57.4293 60.2853 57.308 59.66 57.308 59.016C57.308 58.3627 57.434 57.7327 57.686 57.126C57.938 56.5193 58.288 55.9873 58.736 55.53C59.1933 55.0633 59.73 54.6947 60.346 54.424C60.9713 54.144 61.6526 54.004 62.39 54.004C63.146 54.004 63.832 54.1487 64.448 54.438C65.064 54.7273 65.5913 55.11 66.03 55.586C66.4687 56.062 66.8046 56.6033 67.038 57.21C67.2807 57.8167 67.402 58.4373 67.402 59.072C67.402 59.7253 67.276 60.3553 67.024 60.962C66.772 61.5593 66.422 62.0913 65.974 62.558C65.526 63.0153 64.9893 63.384 64.364 63.664C63.748 63.944 63.0713 64.084 62.334 64.084ZM86.8757 58.764V64H89.6057V54.06H86.6377L84.4817 58.736L82.3397 54.06H79.3577V64H82.0877V58.764L83.7537 62.446H85.2097L86.8757 58.764ZM95.0029 54.06H97.4949L100.939 64H98.1669L97.5649 62.054H94.9189L94.3309 64H91.5449L95.0029 54.06ZM105.615 64V59.114L109.563 64H111.733V54.06H109.003V59.114L105.013 54.06H102.885V64H105.615ZM114.559 64V54.06H118.381C119.203 54.06 119.926 54.1907 120.551 54.452C121.177 54.7133 121.699 55.068 122.119 55.516C122.539 55.964 122.857 56.4913 123.071 57.098C123.286 57.6953 123.393 58.3347 123.393 59.016C123.393 59.772 123.272 60.458 123.029 61.074C122.796 61.6807 122.46 62.2033 122.021 62.642C121.583 63.0713 121.055 63.4073 120.439 63.65C119.823 63.8833 119.137 64 118.381 64H114.559ZM129.965 54.06V64H137.203V61.62H132.695V54.06H129.965ZM139.275 64V54.06H142.005V64H139.275ZM148.702 60.57L146.756 54.06H143.872L147.568 64H149.836L153.49 54.06H150.62L148.702 60.57ZM162.449 61.62V64H155.365V54.06H162.323V56.44H158.095V57.84H161.707V60.052H158.095V61.62H162.449Z"
android:fillColor="#BFBFBF"
android:fillType="evenOdd"/>
</group>
</vector>

Some files were not shown because too many files have changed in this diff Show more