Compare commits

...

51 Commits

Author SHA1 Message Date
Vitalik 8516b73966 fix: clear logs 3 months ago
Vitalik 88ce995c09 fix | call avatar 3 months ago
Vitalik 6f45928b29 fix | chat bugs 3 months ago
Vitalik e315bf5c97 FIX | Calls issues 4 months ago
Vitalik 53bca72fbe FIX | Android calls 4 months ago
Vitalik dda75cea99 FIX | android calls 4 months ago
Vitalik ba4c3b8627 FIX | Add alert to catch calls 4 months ago
Vitalik d60df39f45 FEATURE | Android calls 4 months ago
Vitalik 64816e569c FIX | Forward list scroll 4 months ago
Vitalik daf1cb11a5 FIX | Forward message 4 months ago
Vitalik b4f35d7448 fix | reject call on android 4 months ago
Vitalik d164fcbdf3 FIX | Scroll to bottom in chats 4 months ago
Vitalik 931a76a1b6 FIX | Scroll on forwarding message screen 4 months ago
Vitalik b5d4ed944b feature| self mode 4 months ago
Vitalik 2fb7234bd6 Process 4 months ago
Vitalik 23b75add79 fix | calls 4 months ago
Vitalik 05025f0f99 FIX | Group chat screen 5 months ago
Vitalik 603b598cbf CHORE | Fast chat messages loading 5 months ago
Vitalik a8b82da3c0 FEATURE | Multi forward messages 5 months ago
Vitalik 9584ece1ea OPT | Moved some data to states | Chat 5 months ago
Vitalik ef189cc013 FIX | Loading chats to select 5 months ago
Vitalik 5989573193 FIX | Negotiation 6 months ago
Vitalik e2db9778a3 FIX | Call timmers sync 6 months ago
Vitalik 8e18d18897 Merge branch 'call' into stage 6 months ago
Vitalik e957cad230 FIX | android birthday 6 months ago
Vitalik a9b445b1a3 CHORE | Fix tabs buttons in contacts screen 6 months ago
Vitalik 3246c27785 CHORE | Add loader to contacts list screen 6 months ago
Vitalik 349dc65b27 FIX | Fix logout 6 months ago
Vitalik 522bf71a2e FIX | Refresh token concurencyy for socket 6 months ago
Vitalik d454d62523 FEATURE | Fix refresh sessions concurency 6 months ago
Vitalik f405216bd0 Merge branch 'stage' of https://gitlab.work-jetup.site/task-me/application into stage 6 months ago
Yevhen Romanenko b27b8297ea FEATURE | setup sentry enviroments (#45) 6 months ago
Vitalik e2413b8cae Merge branch 'stage' of https://gitlab.work-jetup.site/task-me/application into stage 6 months ago
Yevhen Romanenko 7decce1f3e CHANGE | add sentry config, remove from .gitingnore (#44) 6 months ago
Vitalik 82e9bd074d Merge branch 'stage' of https://gitlab.work-jetup.site/task-me/application into stage 6 months ago
Vitalik abd739a331 FIX | Calss bugs 6 months ago
Yevhen Romanenko 63d119d870 FEATURE | setup application sentry logging (#43) 6 months ago
Vitalik 711ecc5c25 Merge branch 'stage' into call 6 months ago
Vitalik b9265e9995 CHANGE | Reload calls list after end call in real time 6 months ago
Yevhen Romanenko 4a9df62fde BUGFIX | open android media gallery on different AOS versions, update document picker lib version, update msg loader icon (fontello) (#42) 7 months ago
Yevhen Romanenko 0928bb06a3 BUGFIX | Application fixes (#41) 7 months ago
Vitalik e82a9b1d14 FIX | Calls icons&connections 7 months ago
Vitalik 23c32ac791 Merge branch 'stage' into call 7 months ago
Vitalik 4858287b6c fix | calls bugs 7 months ago
Vitalik 471b88e0bf FEATURE | Calls 7 months ago
Vitalik ccefe51229 FEATURE | Calls ios 7 months ago
Vitalik 8777c371eb FEATURE | Call ket 7 months ago
Vitalik b86ec0f991 FEATURE | Voip notifications 7 months ago
Vitalik 4aac8a6006 FEATURE | Calls history 7 months ago
Vitalik 7cfdc600f3 FEATURE | Calls 7 months ago
Vitalik 2ce4f2006b FEATURE | Clls 7 months ago
  1. 0
      .babelrc
  2. 0
      .bundle/config
  3. 6
      .env.development
  4. 4
      .env.production
  5. 4
      .env.stage
  6. 2
      .eslintrc.js
  7. 4
      .gitignore
  8. 0
      .node-version
  9. 0
      .npmrc
  10. 0
      .prettierrc.js
  11. 0
      .watchmanconfig
  12. 24
      App.tsx
  13. 0
      Gemfile
  14. 0
      Gemfile.lock
  15. 0
      __tests__/App-test.tsx
  16. 29
      android/app/build.gradle
  17. 26
      android/app/src/debug/AndroidManifest.xml
  18. 150
      android/app/src/debug/java/com/taskme2/ReactNativeFlipper.java
  19. 328
      android/app/src/main/AndroidManifest.xml
  20. BIN
      android/app/src/main/assets/fonts/fontello.ttf
  21. 14
      android/app/src/main/file_viewer_provider_paths.xml
  22. 22
      android/app/src/main/java/com/app/task_me/Constants.kt
  23. 140
      android/app/src/main/java/com/app/task_me/MainActivity.java
  24. 102
      android/app/src/main/java/com/app/task_me/MainApplication.java
  25. 15
      android/app/src/main/java/com/app/task_me/bridge/CallsModule.kt
  26. 19
      android/app/src/main/java/com/app/task_me/bridge/EmitterPackage.kt
  27. 24
      android/app/src/main/java/com/app/task_me/bridge/EventEmitterModule.kt
  28. 84
      android/app/src/main/java/com/app/task_me/core/action/ActionReceiver.kt
  29. 20
      android/app/src/main/java/com/app/task_me/core/cancelled/CancelCallManager.kt
  30. 31
      android/app/src/main/java/com/app/task_me/core/incoming/IncomingManager.kt
  31. 94
      android/app/src/main/java/com/app/task_me/custom_view/ShakingCardView.kt
  32. 115
      android/app/src/main/java/com/app/task_me/domain/ApiService.kt
  33. 18
      android/app/src/main/java/com/app/task_me/domain/api/Api.kt
  34. 193
      android/app/src/main/java/com/app/task_me/features/activity/CallActivity.kt
  35. 70
      android/app/src/main/java/com/app/task_me/features/activity/WorkAroundActivity.kt
  36. 378
      android/app/src/main/java/com/app/task_me/features/notifications/NotificationService.kt
  37. 64
      android/app/src/main/java/com/app/task_me/features/notifications/NotificationUtils.kt
  38. 27
      android/app/src/main/java/com/app/task_me/lifecycle/LifecycleManager.kt
  39. 67
      android/app/src/main/java/com/app/task_me/model/Call.kt
  40. 55
      android/app/src/main/java/com/app/task_me/service/FirebaseService.kt
  41. 41
      android/app/src/main/java/com/taskme2/MainActivity.java
  42. 63
      android/app/src/main/java/com/taskme2/MainApplication.java
  43. 394
      android/app/src/main/res/drawable/bg_call.xml
  44. 6
      android/app/src/main/res/drawable/bg_notification.xml
  45. 5
      android/app/src/main/res/drawable/bg_notification_answer.xml
  46. 6
      android/app/src/main/res/drawable/bg_notification_call_icon.xml
  47. 6
      android/app/src/main/res/drawable/bg_notification_cancel.xml
  48. 6
      android/app/src/main/res/drawable/bg_notification_cirle.xml
  49. 9
      android/app/src/main/res/drawable/ic_accept_call.xml
  50. 9
      android/app/src/main/res/drawable/ic_answer.xml
  51. BIN
      android/app/src/main/res/drawable/ic_answer_green.png
  52. 17
      android/app/src/main/res/drawable/ic_cancel.xml
  53. BIN
      android/app/src/main/res/drawable/ic_cancel_red.png
  54. 9
      android/app/src/main/res/drawable/ic_decline_call.xml
  55. 148
      android/app/src/main/res/drawable/ic_launcher_background.xml
  56. BIN
      android/app/src/main/res/drawable/ic_notification_answer.png
  57. BIN
      android/app/src/main/res/drawable/ic_notification_cancel.png
  58. BIN
      android/app/src/main/res/drawable/ic_notification_phone.png
  59. 13
      android/app/src/main/res/drawable/ic_notification_small.xml
  60. 72
      android/app/src/main/res/drawable/rn_edit_text_material.xml
  61. 4
      android/app/src/main/res/drawable/rounded_background.xml
  62. 72
      android/app/src/main/res/font/gilroy.xml
  63. 117
      android/app/src/main/res/layout/a_call.xml
  64. 30
      android/app/src/main/res/layout/incoming_call_view.xml
  65. 24
      android/app/src/main/res/layout/launch_screen.xml
  66. 128
      android/app/src/main/res/layout/v_notification_expanded.xml
  67. 135
      android/app/src/main/res/layout/v_notification_heads_up.xml
  68. 81
      android/app/src/main/res/layout/v_notification_small.xml
  69. 8
      android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  70. 8
      android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  71. 6
      android/app/src/main/res/mipmap-hdpi-v26/ic_launcher.xml
  72. 6
      android/app/src/main/res/mipmap-ldpi-v26/ic_launcher.xml
  73. 6
      android/app/src/main/res/mipmap-mdpi-v26/ic_launcher.xml
  74. 6
      android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher.xml
  75. 6
      android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher.xml
  76. 6
      android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher.xml
  77. 6
      android/app/src/main/res/values/colors-icon.xml
  78. 18
      android/app/src/main/res/values/colors.xml
  79. 12
      android/app/src/main/res/values/strings.xml
  80. 38
      android/app/src/main/res/values/styles.xml
  81. 40
      android/app/src/release/java/com/taskme2/ReactNativeFlipper.java
  82. 7
      android/build.gradle
  83. 2
      android/link-assets-manifest.json
  84. 7
      android/sentry.properties
  85. 0
      app.json
  86. 0
      babel.config.js
  87. 0
      index.js
  88. 0
      ios/.xcode.env
  89. 0
      ios/CallKitEventHandler.swift
  90. 0
      ios/OneSignalNotificationServiceExtension/Info.plist
  91. 0
      ios/OneSignalNotificationServiceExtension/NotificationService.swift
  92. 0
      ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements
  93. 0
      ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtensionStage.Release.entitlements
  94. 0
      ios/Podfile
  95. 16
      ios/Podfile.lock
  96. 30
      ios/ShareExtensionTaskme/Info.plist
  97. 0
      ios/TaskMeShareExtension/Base.lproj/MainInterface.storyboard
  98. 34
      ios/TaskMeShareExtension/Info.plist
  99. 10
      ios/TaskMeShareExtension/ShareViewController.swift
  100. 0
      ios/TaskMeShareExtension/TaskMeShareExtension.entitlements
  101. Some files were not shown because too many files have changed in this diff Show More

0
.bundle/config

6
.env.development

@ -1,3 +1,7 @@ @@ -1,3 +1,7 @@
API_URL=http://localhost:3000
SOCKET_URL=http://localhost:3000
ONE_SIGNAL_KEY=8b9066f5-8c3f-49f7-bef4-c5ab621f9d27
ONE_SIGNAL_KEY=8b9066f5-8c3f-49f7-bef4-c5ab621f9d27
SENTRY_ENVIROMENT=develop
SHOW_VERSION_MODAL=true

4
.env.production

@ -2,6 +2,10 @@ API_URL=https://tasks-api.rwsbank.com.ua @@ -2,6 +2,10 @@ API_URL=https://tasks-api.rwsbank.com.ua
SOCKET_URL=https://tasks-api.rwsbank.com.ua
ONE_SIGNAL_KEY=5e1a5e18-33e5-4ed3-8423-45b1abc354c6
SENTRY_ENVIROMENT=production
SHOW_VERSION_MODAL=true
# API_URL=https://taskme-api.work-jetup.site
# SOCKET_URL=https://taskme-api.work-jetup.site
# ONE_SIGNAL_KEY=8b9066f5-8c3f-49f7-bef4-c5ab621f9d27

4
.env.stage

@ -1,3 +1,7 @@ @@ -1,3 +1,7 @@
API_URL=https://taskme-api.work-jetup.site
SOCKET_URL=https://taskme-api.work-jetup.site
ONE_SIGNAL_KEY=8b9066f5-8c3f-49f7-bef4-c5ab621f9d27
SENTRY_ENVIROMENT=stage
SHOW_VERSION_MODAL=false

2
.eslintrc.js

@ -18,6 +18,7 @@ module.exports = { @@ -18,6 +18,7 @@ module.exports = {
],
rules: {
'no-console': 'off',
curly: 'off',
'react-native/no-inline-styles': 0,
'react-native/split-platform-components': 2,
'react-native/no-raw-text': 0,
@ -32,6 +33,7 @@ module.exports = { @@ -32,6 +33,7 @@ module.exports = {
'react-hooks/exhaustive-deps': 0,
'prettier/prettier': 1,
'@typescript-eslint/no-explicit-any': 0,
'react-native/split-platform-components': 0,
'@typescript-eslint/ban-types': [
'off',
{

4
.gitignore vendored

@ -69,9 +69,9 @@ buck-out/ @@ -69,9 +69,9 @@ buck-out/
./vendor
./vendor/*
./vendor/*
vendor
.env
.env

0
.node-version

0
.prettierrc.js

0
.watchmanconfig

24
App.tsx

@ -1,24 +0,0 @@ @@ -1,24 +0,0 @@
import React from 'react'
import { AppRegistry, Platform, SafeAreaView, Text } from 'react-native'
function App(): JSX.Element {
return (
<SafeAreaView>
<Text>test</Text>
</SafeAreaView>
)
}
export default App
if (Platform.OS === 'android') {
AppRegistry.registerHeadlessTask(
'RNCallKeepBackgroundMessage',
() =>
({ name, callUUID, handle }) => {
// Make your call here
console.log('something')
return Promise.resolve()
},
)
}

0
Gemfile.lock

0
__tests__/App-test.tsx

29
android/app/build.gradle

@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
apply plugin: "com.android.application"
apply plugin: "com.facebook.react"
apply plugin: "kotlin-android"
apply plugin: 'com.google.gms.google-services'
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle"
import com.android.build.OutputFile
react {}
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
@ -17,6 +17,7 @@ def reactNativeArchitectures() { @@ -17,6 +17,7 @@ def reactNativeArchitectures() {
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}
apply from: new File(["node", "--print", "require.resolve('@sentry/react-native/package.json')"].execute().text.trim(), "../sentry.gradle")
android {
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
@ -26,9 +27,12 @@ android { @@ -26,9 +27,12 @@ android {
applicationId "com.app.task_me"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 230
versionName "2.3"
versionCode 255
versionName "2.6"
resValue "string", "build_config_package", "com.app.task_me"
def appId = project.env.get("API_URL")
buildConfigField "String", "ENV_API_URL", "\"${appId}\""
}
splits {
@ -64,7 +68,12 @@ android { @@ -64,7 +68,12 @@ android {
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
buildFeatures {
viewBinding true
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
@ -86,9 +95,21 @@ android { @@ -86,9 +95,21 @@ android {
dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
implementation project(':react-native-config')
implementation ("org.jetbrains.kotlin:kotlin-stdlib:1.6.10")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
implementation project(':react-native-view-pdf')\
implementation project(':react-native-view-pdf')
implementation platform("com.google.firebase:firebase-bom:32.1.1")
implementation ("com.google.firebase:firebase-messaging-ktx")
implementation ("com.github.bumptech.glide:glide:4.16.0")
implementation ("com.google.android.material:material:1.5.0")
implementation("androidx.appcompat:appcompat:1.4.2")
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {

26
android/app/src/debug/AndroidManifest.xml

@ -1,13 +1,13 @@ @@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
</application>
</manifest>

150
android/app/src/debug/java/com/taskme2/ReactNativeFlipper.java

@ -1,75 +1,75 @@ @@ -1,75 +1,75 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.app.task_me;
import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.android.utils.FlipperUtils;
import com.facebook.flipper.core.FlipperClient;
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
import com.facebook.react.ReactInstanceEventListener;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
/**
* Class responsible of loading Flipper inside your React Native application. This is the debug
* flavor of it. Here you can add your own plugins and customize the Flipper setup.
*/
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
if (FlipperUtils.shouldEnableFlipper(context)) {
final FlipperClient client = AndroidFlipperClient.getInstance(context);
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
client.addPlugin(new DatabasesFlipperPlugin(context));
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
client.addPlugin(CrashReporterPlugin.getInstance());
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
NetworkingModule.setCustomClientBuilder(
new NetworkingModule.CustomClientBuilder() {
@Override
public void apply(OkHttpClient.Builder builder) {
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
}
});
client.addPlugin(networkFlipperPlugin);
client.start();
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
// Hence we run if after all native modules have been initialized
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext == null) {
reactInstanceManager.addReactInstanceEventListener(
new ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
reactInstanceManager.removeReactInstanceEventListener(this);
reactContext.runOnNativeModulesQueueThread(
new Runnable() {
@Override
public void run() {
client.addPlugin(new FrescoFlipperPlugin());
}
});
}
});
} else {
client.addPlugin(new FrescoFlipperPlugin());
}
}
}
}
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.app.task_me;
import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.android.utils.FlipperUtils;
import com.facebook.flipper.core.FlipperClient;
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
import com.facebook.react.ReactInstanceEventListener;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
/**
* Class responsible of loading Flipper inside your React Native application. This is the debug
* flavor of it. Here you can add your own plugins and customize the Flipper setup.
*/
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
if (FlipperUtils.shouldEnableFlipper(context)) {
final FlipperClient client = AndroidFlipperClient.getInstance(context);
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
client.addPlugin(new DatabasesFlipperPlugin(context));
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
client.addPlugin(CrashReporterPlugin.getInstance());
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
NetworkingModule.setCustomClientBuilder(
new NetworkingModule.CustomClientBuilder() {
@Override
public void apply(OkHttpClient.Builder builder) {
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
}
});
client.addPlugin(networkFlipperPlugin);
client.start();
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
// Hence we run if after all native modules have been initialized
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext == null) {
reactInstanceManager.addReactInstanceEventListener(
new ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
reactInstanceManager.removeReactInstanceEventListener(this);
reactContext.runOnNativeModulesQueueThread(
new Runnable() {
@Override
public void run() {
client.addPlugin(new FrescoFlipperPlugin());
}
});
}
});
} else {
client.addPlugin(new FrescoFlipperPlugin());
}
}
}
}

328
android/app/src/main/AndroidManifest.xml

@ -1,139 +1,191 @@ @@ -1,139 +1,191 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
<uses-permission android:name="com.sec.android.provider.badge.permission.READ" tools:node="remove" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" tools:node="remove" />
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" tools:node="remove" />
<uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT" tools:node="remove" />
<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" tools:node="remove" />
<uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE" tools:node="remove" />
<uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT" tools:node="remove" />
<uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE" tools:node="remove" />
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" tools:node="remove"/>
<uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS" tools:node="remove" />
<uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" tools:node="remove" />
<uses-permission android:name="android.permission.READ_APP_BADGE" tools:node="remove" />
<uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS" tools:node="remove" />
<uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS" tools:node="remove" />
<uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.onesignal.NotificationServiceExtension"
android:value="com.app.task_me.NotificationServiceExtension"
/>
<meta-data android:name="com.onesignal.BadgeCount" android:value="DISABLE" />
<meta-data android:name="com.onesignal.messaging.default_notification_icon" android:resource="@mipmap/ic_launcher" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/msword" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<data android:mimeType="application/vnd.ms-excel" />
<data android:mimeType="application/zip" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
<data android:mimeType="video/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/msword" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
<data android:mimeType="application/vnd.ms-excel" />
<data android:mimeType="application/zip" />
</intent-filter>
</activity>
<provider
android:name="com.vinzscam.reactnativefileviewer.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_viewer_provider_paths"
/>
</provider>
<service android:name="io.wazo.callkeep.VoiceConnectionService"
android:label="Wazo"
android:exported="true"
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
android:foregroundServiceType="camera|microphone"
>
<intent-filter>
<action android:name="android.telecom.ConnectionService" />
</intent-filter>
</service>
<service android:name="io.wazo.callkeep.RNCallKeepBackgroundMessagingService" />
</application>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/pdf" />
</intent>
</queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="text/plain" />
</intent>
</queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/msword" />
</intent>
</queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
</intent>
</queries>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.front"
android:required="false" />
<uses-permission
android:name="com.sec.android.provider.badge.permission.READ"
tools:node="remove" />
<uses-permission
android:name="com.sec.android.provider.badge.permission.WRITE"
tools:node="remove" />
<uses-permission
android:name="com.htc.launcher.permission.READ_SETTINGS"
tools:node="remove" />
<uses-permission
android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"
tools:node="remove" />
<uses-permission
android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"
tools:node="remove" />
<uses-permission
android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"
tools:node="remove" />
<uses-permission
android:name="com.anddoes.launcher.permission.UPDATE_COUNT"
tools:node="remove" />
<uses-permission
android:name="com.majeur.launcher.permission.UPDATE_BADGE"
tools:node="remove" />
<uses-permission
android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"
tools:node="remove" />
<uses-permission
android:name="com.huawei.android.launcher.permission.READ_SETTINGS"
tools:node="remove" />
<uses-permission
android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"
tools:node="remove" />
<uses-permission
android:name="android.permission.READ_APP_BADGE"
tools:node="remove" />
<uses-permission
android:name="com.oppo.launcher.permission.READ_SETTINGS"
tools:node="remove" />
<uses-permission
android:name="com.oppo.launcher.permission.WRITE_SETTINGS"
tools:node="remove" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<application
android:name=".MainApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<meta-data
android:name="com.onesignal.NotificationServiceExtension"
android:value="com.app.task_me.NotificationServiceExtension" />
<meta-data
android:name="com.onesignal.BadgeCount"
android:value="DISABLE" />
<meta-data
android:name="com.onesignal.messaging.default_notification_icon"
android:resource="@mipmap/ic_launcher" />
<activity
android:name="com.app.task_me.MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"
android:showOnLockScreen="true"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
<provider
android:name="com.vinzscam.reactnativefileviewer.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_viewer_provider_paths" />
</provider>
<service
android:name="io.wazo.callkeep.VoiceConnectionService"
android:exported="true"
android:foregroundServiceType="camera|microphone"
android:label="Wazo"
android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
<intent-filter>
<action android:name="android.telecom.ConnectionService" />
</intent-filter>
</service>
<service android:name="io.wazo.callkeep.RNCallKeepBackgroundMessagingService" />
<service
android:name="com.app.task_me.service.FirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
android:name="com.app.task_me.features.notifications.NotificationService"
android:foregroundServiceType="phoneCall">
</service>
<service android:name="com.app.task_me.domain.ApiService" />
<activity
android:name="com.app.task_me.features.activity.CallActivity"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleInstance"
android:screenOrientation="sensorPortrait"
android:showOnLockScreen="true"
android:theme="@style/AppTheme.TaskMe"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
</activity>
<activity
android:name="com.app.task_me.features.activity.WorkAroundActivity"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleInstance"
android:theme="@style/NoAnimation" />
<receiver android:name="com.app.task_me.core.action.ActionReceiver" />
</application>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/pdf" />
</intent>
</queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="text/plain" />
</intent>
</queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/msword" />
</intent>
</queries>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
</intent>
</queries>
</manifest>

BIN
android/app/src/main/assets/fonts/fontello.ttf

Binary file not shown.

14
android/app/src/main/file_viewer_provider_paths.xml

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="files" path="/" />
<external-files-path name="external_files" path="" />
<external-path name="external" path="." />
<cache-path name="cache" path="/" />
</paths>
<?xml version='1.0' encoding='utf-8'?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="files" path="/" />
<external-files-path name="external_files" path="" />
<external-path name="external" path="." />
<cache-path name="cache" path="/" />
</paths>

22
android/app/src/main/java/com/app/task_me/Constants.kt

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
package com.app.task_me
object Constants {
const val PUSH_TYPE_FCM_KEY = "type"
const val TYPE_INCOME = "income"
const val TYPE_REJECT = "cancelled"
const val PHOTO_FCM_KEY = "avatarUrl"
const val USER_FCM_KEY = "callerName"
const val UUID_FCM_KEY = "uuid"
const val AUTH_TOKEN_FCM_KEY = "authToken"
const val DATA_BUNDLE_KEY = "data"
const val ACTION_ANSWER = "action.answer"
const val ACTION_REJECT = "action.reject"
const val ACTION_CLOSE_ACTIVITY = "action.close"
const val USER_RESPONSE_TYPE_KEY = "userResponseType"
const val USER_RESPONSE_ANSWER = "accepted"
const val TAG = "MY_SOME_TAG"
}

140
android/app/src/main/java/com/app/task_me/MainActivity.java

@ -0,0 +1,140 @@ @@ -0,0 +1,140 @@
package com.app.task_me;
import static com.app.task_me.Constants.DATA_BUNDLE_KEY;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import com.app.task_me.lifecycle.LifecycleManager;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactActivityDelegate;
import com.facebook.react.ReactRootView;
import com.facebook.react.modules.core.DeviceEventManagerModule;
public class MainActivity extends ReactActivity {
private LifecycleManager lifecycleManager;
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "taskme2";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleManager = new LifecycleManager(this);
lifecycleManager.onActive();
Log.i("MY_SOME_TAG", "onCreate MAIN ACTIVITY");
}
@Override
protected void onResume() {
super.onResume();
Log.i("MY_SOME_TAG", "onResume: ");
lifecycleManager.onActive();
}
@Override
protected void onStop() {
super.onStop();
Log.i("MY_SOME_TAG", "onStop: ");
lifecycleManager.onInactive();
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("MY_SOME_TAG", "onDestroy: ");
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
if (intent.getExtras() != null && intent.getExtras().containsKey(DATA_BUNDLE_KEY)) {
ReactContext reactContext = getReactInstanceManager().getCurrentReactContext();
if (reactContext != null) {
Log.i("MY_SOME_TAG", "onNewIntent: ");
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("CallEvent", intent.getExtras().getString(DATA_BUNDLE_KEY));
}
}
}
/**
* Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
* DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
* (aka React 18) with two boolean flags.
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
Log.i("MY_SOME_TAG", "createReactActivityDelegate");
return new TaskmeActivityDelegate(this, getMainComponentName());
}
public static class TaskmeActivityDelegate extends ReactActivityDelegate {
private Bundle mInitialProps = null;
private final ReactActivity mActivity;
public TaskmeActivityDelegate(ReactActivity activity, String mainComponentName) {
super(activity, mainComponentName);
this.mActivity = activity;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i("MY_SOME_TAG", "onCreate DELEGATE");
Bundle bundle = mActivity.getIntent().getExtras();
if (bundle != null) {
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
Log.d("MY_SOME_TAG", String.format("Key: %s, Value: %s", key, value));
}
} else {
Log.d("MY_SOME_TAG ", "Bundle is null");
}
if (bundle != null
&& bundle.containsKey(Constants.USER_RESPONSE_TYPE_KEY)
&& Constants.USER_RESPONSE_ANSWER.equals(bundle.getString(Constants.USER_RESPONSE_TYPE_KEY))
&& bundle.containsKey(DATA_BUNDLE_KEY)) {
Log.i("MY_SOME_TAG", "onCreate: DELEGATE CONTAINS KEYS");
mInitialProps = new Bundle();
mInitialProps.putString(Constants.USER_RESPONSE_TYPE_KEY, Constants.USER_RESPONSE_ANSWER);
mInitialProps.putString(DATA_BUNDLE_KEY, bundle.getString(DATA_BUNDLE_KEY));
}
super.onCreate(savedInstanceState);
}
@Nullable
@Override
protected Bundle getLaunchOptions() {
Log.i("MY_SOME_TAG", "getLaunchOptions: DELEGATE ");
return mInitialProps;
}
}
}

102
android/app/src/main/java/com/app/task_me/MainApplication.java

@ -0,0 +1,102 @@ @@ -0,0 +1,102 @@
package com.app.task_me;
import android.app.Application;
import com.app.task_me.bridge.EmitterPackage;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactNativeHost;
import com.facebook.soloader.SoLoader;
import java.util.List;
import com.rumax.reactnative.pdfviewer.PDFViewPackage;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.android.gms.tasks.OnCompleteListener;
import com.lugg.RNCConfig.RNCConfigPackage;
import com.google.android.gms.tasks.Task;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new DefaultReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
packages.add(new PDFViewPackage());
packages.add(new EmitterPackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected boolean isNewArchEnabled() {
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
}
@Override
protected Boolean isHermesEnabled() {
return BuildConfig.IS_HERMES_ENABLED;
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
Log.i("", "onCreate: APP");
SoLoader.init(this, /* native exopackage */ false);
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(Task<String> task) {
if (!task.isSuccessful()) {
Log.w("MY_SOME_TAG", "Получение токена не удалось", task.getException());
return;
}
// Получаем токен
String token = task.getResult();
// Логгируем токен
Log.d("MY_SOME_TAG", "FCM токен: " + token);
}
});
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
// If you opted-in for the New Architecture, we load the native entry point for this app.
DefaultNewArchitectureEntryPoint.load();
}
com.app.task_me.ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
}

15
android/app/src/main/java/com/app/task_me/bridge/CallsModule.kt

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
package com.app.task_me.bridge
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
class CallsModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(
reactContext
) {
init {
EventEmitterModule.init(reactContext)
}
override fun getName() = "CallsModule"
}

19
android/app/src/main/java/com/app/task_me/bridge/EmitterPackage.kt

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
package com.app.task_me.bridge
import android.view.View
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ReactShadowNode
import com.facebook.react.uimanager.ViewManager
class EmitterPackage : ReactPackage {
override fun createNativeModules(p0: ReactApplicationContext): MutableList<NativeModule> {
return mutableListOf(CallsModule(p0))
}
override fun createViewManagers(p0: ReactApplicationContext): MutableList<ViewManager<View, ReactShadowNode<*>>> {
return mutableListOf()
}
}

24
android/app/src/main/java/com/app/task_me/bridge/EventEmitterModule.kt

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
package com.app.task_me.bridge
import android.util.Log
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.modules.core.DeviceEventManagerModule
object EventEmitterModule {
private var reactContext: ReactApplicationContext? = null
fun init(reactApplicationContext: ReactApplicationContext) {
reactContext = reactApplicationContext
}
fun sendEvent(
eventName: String,
params: String
) {
Log.i("MY_SOME_TAG", "sendEvent: context is null ${reactContext == null}")
reactContext
?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
?.emit(eventName, params)
}
}

84
android/app/src/main/java/com/app/task_me/core/action/ActionReceiver.kt

@ -0,0 +1,84 @@ @@ -0,0 +1,84 @@
package com.app.task_me.core.action
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log
import com.app.task_me.BuildConfig
import com.app.task_me.Constants
import com.app.task_me.Constants.DATA_BUNDLE_KEY
import com.app.task_me.Constants.TAG
import com.app.task_me.Constants.USER_RESPONSE_ANSWER
import com.app.task_me.Constants.USER_RESPONSE_TYPE_KEY
import com.app.task_me.core.cancelled.CancelCallManager
import com.app.task_me.data.model.Call
import com.app.task_me.features.notifications.NotificationService
import com.app.task_me.bridge.EventEmitterModule
import com.app.task_me.features.activity.WorkAroundActivity
import com.app.task_me.lifecycle.LifecycleManager
class ActionReceiver : BroadcastReceiver() {
override fun onReceive(
context: Context,
intent: Intent?
) {
Log.i(TAG, "onReceive: ${intent?.action}")
if (intent?.action == Constants.ACTION_ANSWER)
onAnswered(context, intent)
if (intent?.action == Constants.ACTION_REJECT)
onRejected(context, intent)
}
private fun onAnswered(
context: Context,
intent: Intent?
) {
Log.i(TAG, "onAnswer: RECEIVER")
NotificationService.cancelNotification(context)
closeActivity(context)
startReactNativeActivity(context, intent?.extras)
}
private fun startReactNativeActivity(
context: Context,
args: Bundle?
) {
val call = Call.fromBundle(args)
val lifecycleManager = LifecycleManager(context)
if (lifecycleManager.isActive()) {
EventEmitterModule.sendEvent("CallEvent", call.data)
return
}
val extra = Bundle()
.apply {
putString(USER_RESPONSE_TYPE_KEY, USER_RESPONSE_ANSWER)
putString(DATA_BUNDLE_KEY, call.data)
}
val intent = Intent(context, WorkAroundActivity::class.java)
.apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
putExtras(extra)
}
Log.i(TAG, "startReactNativeActivity: ")
context.startActivity(intent)
}
private fun onRejected(
context: Context,
intent: Intent?
) {
Log.i(TAG, "onRejected: RECEIVER 1")
CancelCallManager().onCancelled(context, Call.fromBundle(intent?.extras))
NotificationService.cancelNotification(context)
closeActivity(context)
}
private fun closeActivity(context: Context) {
context.sendBroadcast(
Intent().apply {
action = Constants.ACTION_CLOSE_ACTIVITY
})
}
}

20
android/app/src/main/java/com/app/task_me/core/cancelled/CancelCallManager.kt

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
package com.app.task_me.core.cancelled
import android.content.Context
import com.app.task_me.BuildConfig
import com.app.task_me.data.model.Call
import android.util.Log
import com.app.task_me.domain.ApiService
import com.app.task_me.Constants.TAG
class CancelCallManager {
fun onCancelled(
context: Context,
call: Call
) {
Log.i(TAG, "onRejected: RECEIVER 2")
ApiService.sendCallCancelledRequest(
context, call.authToken, call.uuid
)
}
}

31
android/app/src/main/java/com/app/task_me/core/incoming/IncomingManager.kt

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
package com.app.task_me.core.incoming
import android.app.KeyguardManager
import android.content.Context
import android.os.Build
import android.util.Log
import com.app.task_me.Constants.TAG
import com.app.task_me.data.model.Call
import com.app.task_me.features.activity.CallActivity
import com.app.task_me.features.notifications.NotificationService
class IncomingManager(
private val context: Context
) {
fun onIncomingCall(
call: Call
) {
Log.i(TAG, "onIncomingCall: INCOMING_MANAGER")
NotificationService.showNotification(context, call)
if (isDeviceLocked()) {
CallActivity.startActivity(context, call)
}
}
private fun isDeviceLocked(): Boolean {
val keyguardManager =
context.getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager
return keyguardManager.isKeyguardLocked
}
}

94
android/app/src/main/java/com/app/task_me/custom_view/ShakingCardView.kt

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
package com.app.task_me.custom_view
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.cardview.widget.CardView
class ShakingCardView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : CardView(context, attrs, defStyleAttr) {
var animated: Boolean = false
set(value) {
field = value
if (value) {
startShakingAnimation()
} else {
stopShakingAnimation()
}
}
private var animatorSet: AnimatorSet? = null
private val shakeDuration = 2000L
private val pauseDuration = 1000L
init {
setOnTouchListener { v, event ->
when (event.action) {
MotionEvent.ACTION_DOWN -> {
v.scaleX = 0.9f
v.scaleY = 0.9f
if (animated) stopShakingAnimation()
}
MotionEvent.ACTION_UP -> {
v.scaleX = 1f
v.scaleY = 1f
if (event.x > 0 && event.x < v.width && event.y > 0 && event.y < v.height) {
v.performClick()
} else {
if (animated) startShakingAnimation()
}
}
MotionEvent.ACTION_CANCEL -> {
v.scaleX = 1f
v.scaleY = 1f
if (animated) startShakingAnimation()
}
}
true
}
}
private fun startShakingAnimation() {
animatorSet = AnimatorSet().apply {
val animatorX = ObjectAnimator.ofFloat(this@ShakingCardView, "translationX", -5f, 5f).apply {
duration = 100
repeatMode = ObjectAnimator.REVERSE
repeatCount = ObjectAnimator.INFINITE
}
val animatorY = ObjectAnimator.ofFloat(this@ShakingCardView, "translationY", -5f, 5f).apply {
duration = 100
repeatMode = ObjectAnimator.REVERSE
repeatCount = ObjectAnimator.INFINITE
}
playTogether(animatorX, animatorY)
start()
}
postDelayed({ pauseAnimation() }, shakeDuration)
}
private fun pauseAnimation() {
animatorSet?.pause()
postDelayed({ resumeAnimation() }, pauseDuration)
}
private fun resumeAnimation() {
animatorSet?.resume()
postDelayed({ pauseAnimation() }, shakeDuration)
}
private fun stopShakingAnimation() {
animatorSet?.cancel()
animatorSet = null
translationX = 0f
translationY = 0f
}
override fun performClick(): Boolean {
return super.performClick()
}
}

115
android/app/src/main/java/com/app/task_me/domain/ApiService.kt

@ -0,0 +1,115 @@ @@ -0,0 +1,115 @@
package com.app.task_me.domain
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.IBinder
import android.util.Log
import com.app.task_me.BuildConfig
import com.app.task_me.Constants
import com.app.task_me.domain.api.Api
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import com.app.task_me.Constants.TAG
class ApiService : Service() {
private val TAG = "API_TAG"
override fun onBind(p0: Intent?): IBinder? = null
private lateinit var api: Api
override fun onCreate() {
super.onCreate()
Log.i(TAG, "onCreate: ")
val logging = HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
val client = OkHttpClient
.Builder()
.addInterceptor(logging)
.build()
val retrofit = Retrofit
.Builder()
.baseUrl(BuildConfig.ENV_API_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
api = retrofit.create(Api::class.java)
}
override fun onStartCommand(
intent: Intent?,
flags: Int,
startId: Int
): Int {
Log.i(TAG, "onStartCommand: ")
val authToken = intent?.getStringExtra(Constants.AUTH_TOKEN_FCM_KEY)
val uuid = intent?.getStringExtra(Constants.UUID_FCM_KEY)
if (authToken != null && uuid != null) {
sendCancelRequest(authToken, uuid, 0)
}
return START_NOT_STICKY
}
private fun sendCancelRequest(
authToken: String,
uuid: String,
retryCount: Int
) {
api
.rejectCall(authToken, uuid)
.enqueue(object : Callback<Void> {
override fun onResponse(
call: Call<Void>,
response: Response<Void>
) {
Log.i(
TAG, "onResponse: code = ${response.code()}" +
"\nmessage = ${response.message()}"
)
stopSelf()
}
override fun onFailure(
call: Call<Void>,
t: Throwable
) {
Log.e(TAG, "onFailure: Error = ${t.message}", t)
if (retryCount < 3) {
sendCancelRequest(authToken, uuid, retryCount + 1)
}
else {
stopSelf()
}
}
})
}
companion object {
fun sendCallCancelledRequest(
context: Context,
authToken: String,
uuid: String
) {
val intent = Intent(context, ApiService::class.java)
.apply {
putExtra(Constants.AUTH_TOKEN_FCM_KEY, authToken)
putExtra(Constants.UUID_FCM_KEY, uuid)
}
context.startService(intent)
}
}
}

18
android/app/src/main/java/com/app/task_me/domain/api/Api.kt

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
package com.app.task_me.domain.api
import retrofit2.Call
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.POST
interface Api {
@FormUrlEncoded
@POST("/calls/reject-by-token")
fun rejectCall(
@Field("authToken")
authToken: String,
@Field("uuid")
uuid: String
): Call<Void>
}

193
android/app/src/main/java/com/app/task_me/features/activity/CallActivity.kt

@ -0,0 +1,193 @@ @@ -0,0 +1,193 @@
package com.app.task_me.features.activity
import android.annotation.SuppressLint
import android.app.KeyguardManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
import androidx.core.view.isGone
import com.app.task_me.Constants
import com.app.task_me.Constants.TAG
import com.app.task_me.core.action.ActionReceiver
import com.app.task_me.data.model.Call
import com.app.task_me.databinding.ACallBinding
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
class CallActivity : AppCompatActivity() {
private var _binding: ACallBinding? = null
private val binding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.i(TAG, "onCreate: CALL ACTIVITY")
_binding = ACallBinding.inflate(layoutInflater)
setContentView(binding.root)
registerReceiver()
showWhenLockedAndTurnScreenOn()
init()
}
private fun showWhenLockedAndTurnScreenOn() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
}
else {
window.addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
)
}
}
private fun showInLockScreen() {
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
window.addFlags(
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true)
setTurnScreenOn(true)
Log.i(TAG, "showInLockScreen: ")
}
}
private fun init() {
binding.cardAnswer.animated = true
val caller = intent.extras?.getString(Constants.USER_FCM_KEY) ?: ""
val photo = intent.extras?.getString(Constants.PHOTO_FCM_KEY)
binding.tvCaller.text = caller
binding.tvCallerLetter.text = caller
.firstOrNull()
?.toString() ?: "S"
photo?.let {
loadPhoto(it)
}
initListeners()
}
private fun initListeners() {
binding.cardAnswer.setOnClickListener { onAnswerClicked() }
binding.cardCancel.setOnClickListener { onCancelClicked() }
}
private fun loadPhoto(url: String) {
Glide
.with(this)
.asBitmap()
.load(url)
.into(object : CustomTarget<Bitmap>() {
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?
) {
onPhotoLoaded(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
}
})
}
private fun onPhotoLoaded(bitmap: Bitmap) {
with(binding) {
ivPhoto.setImageBitmap(bitmap)
ivPhoto.isGone = false
tvCallerLetter.isGone = true
}
}
private fun onAnswerClicked() {
// sendBroadcast(
// Intent(this, ActionReceiver::class.java).apply {
// action = Constants.ACTION_ANSWER
// })
WorkAroundActivity.start(this, intent.extras)
finish()
}
private fun onCancelClicked() {
sendBroadcast(
Intent(this, ActionReceiver::class.java).apply {
action = Constants.ACTION_REJECT
})
finish()
}
@SuppressLint("UnspecifiedRegisterReceiverFlag")
private fun registerReceiver() {
val intentFilter = IntentFilter()
.apply { addAction(Constants.ACTION_CLOSE_ACTIVITY) }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
registerReceiver(
receiver, intentFilter,
RECEIVER_EXPORTED
)
return
}
registerReceiver(
receiver, intentFilter
)
}
private val receiver = object : BroadcastReceiver() {
override fun onReceive(
p0: Context?,
p1: Intent?
) {
Log.i(TAG, "onReceive: ACTIVITY")
if (p1?.action == Constants.ACTION_CLOSE_ACTIVITY)
finish()
}
}
override fun onDestroy() {
super.onDestroy()
_binding = null
unregisterReceiver(receiver)
}
companion object {
fun startActivity(
context: Context,
call: Call
) {
val args = bundleOf(
Pair(Constants.USER_FCM_KEY, call.name),
Pair(Constants.PHOTO_FCM_KEY, call.photo)
)
val intent = Intent(context, CallActivity::class.java)
intent.putExtras(args)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
context.startActivity(intent)
}
}
}

70
android/app/src/main/java/com/app/task_me/features/activity/WorkAroundActivity.kt

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
package com.app.task_me.features.activity
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.view.View
import com.app.task_me.Constants
import com.app.task_me.Constants.DATA_BUNDLE_KEY
import com.app.task_me.Constants.TAG
import com.app.task_me.Constants.USER_RESPONSE_ANSWER
import com.app.task_me.Constants.USER_RESPONSE_TYPE_KEY
import com.app.task_me.MainActivity
import com.app.task_me.bridge.EventEmitterModule
import com.app.task_me.features.notifications.NotificationService
import com.app.task_me.lifecycle.LifecycleManager
class WorkAroundActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.i(TAG, "onCreate: WORKAROUND")
// setContentView(View(this)
// .apply { setBackgroundColor(Color.TRANSPARENT) })
NotificationService.cancelNotification(this)
closeCallActivity()
val data = intent.extras?.getString(DATA_BUNDLE_KEY) ?: ""
// val lifecycleManager = LifecycleManager(this)
// if (lifecycleManager.isActive()) {
// EventEmitterModule.sendEvent("CallEvent", data)
// finish()
// return
// }
val intent = Intent(this, MainActivity::class.java)
val bundle = Bundle()
.apply {
putString(USER_RESPONSE_TYPE_KEY, USER_RESPONSE_ANSWER)
putString(DATA_BUNDLE_KEY, data)
}
intent.putExtras(bundle)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}
private fun closeCallActivity() {
sendBroadcast(
Intent().apply {
action = Constants.ACTION_CLOSE_ACTIVITY
})
}
companion object {
fun start(
context: Context,
bundle: Bundle?
) {
val intent = Intent(context, WorkAroundActivity::class.java)
bundle?.let {
intent.putExtras(it)
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(intent)
}
}
}

378
android/app/src/main/java/com/app/task_me/features/notifications/NotificationService.kt

@ -0,0 +1,378 @@ @@ -0,0 +1,378 @@
package com.app.task_me.features.notifications
import android.app.Activity
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.app.Person
import android.app.Service
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.Bitmap
import android.graphics.drawable.Drawable
import android.graphics.drawable.Icon
import android.media.AudioManager
import android.media.MediaPlayer
import android.media.RingtoneManager
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.IBinder
import android.view.View
import android.widget.RemoteViews
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.IconCompat
import androidx.core.os.bundleOf
import androidx.core.text.HtmlCompat
import com.app.task_me.Constants
import com.app.task_me.R
import com.app.task_me.core.action.ActionReceiver
import com.app.task_me.data.model.Call
import com.app.task_me.features.activity.CallActivity
import com.app.task_me.features.activity.WorkAroundActivity
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.transition.Transition
class NotificationService : Service() {
private val notificationsManager by lazy {
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
}
private var mediaPlayer: MediaPlayer? = null
private var receiverRegistered = false
private val audioManager by lazy {
getSystemService(AUDIO_SERVICE) as AudioManager
}
private var originalMode = AudioManager.MODE_NORMAL
override fun onBind(p0: Intent?): IBinder? = null
override fun onCreate() {
super.onCreate()
listenVolumeDown()
}
override fun onStartCommand(
intent: Intent?,
flags: Int,
startId: Int
): Int {
if (intent?.action == ACTION_SHOW) {
playDefaultRingtone()
showNotification(intent.extras)
}
else {
hide()
}
return START_STICKY
}
private fun playDefaultRingtone() {
originalMode = audioManager.mode
audioManager.mode = AudioManager.MODE_IN_CALL
val ringtoneUri: Uri =
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
mediaPlayer = MediaPlayer.create(this, ringtoneUri)
mediaPlayer?.isLooping = true
mediaPlayer?.start()
}
private fun listenVolumeDown() {
val intentFilter = IntentFilter("android.media.VOLUME_CHANGED_ACTION")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
registerReceiver(
volumeReceiver, intentFilter,
RECEIVER_EXPORTED
)
else registerReceiver(volumeReceiver, intentFilter)
receiverRegistered = true
}
private val volumeReceiver = object : BroadcastReceiver() {
override fun onReceive(
p0: Context?,
p1: Intent?
) {
if (p1?.action == "android.media.VOLUME_CHANGED_ACTION") {
releaseRingtone()
}
}
}
private fun showNotification(
args: Bundle?,
photo: Bitmap? = null
) {
if (!hasNotificationPermission())
return
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createChannel()
}
val call = Call.fromBundle(args)
val notification = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
getNotificationApi31(call, photo)
else
getNotificationApi25(call, photo)
startForeground(NOTIFICATION_ID, notification)
if (photo == null)
loadPhoto(args, call.photo)
}
private fun hasNotificationPermission(): Boolean {
return NotificationManagerCompat
.from(this)
.areNotificationsEnabled()
}
private fun loadPhoto(
args: Bundle?,
url: String
) {
Glide
.with(this)
.asBitmap()
.load(url)
.into(object : CustomTarget<Bitmap>() {
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?
) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
showNotification(args, roundPhoto(resource))
}
}
override fun onLoadCleared(placeholder: Drawable?) {
}
})
}
@RequiresApi(Build.VERSION_CODES.S)
private fun getNotificationApi31(
call: Call,
photo: Bitmap? = null
): Notification {
val person = getPerson(call.name)
val notificationBuilder = Notification
.Builder(this, CHANNEL_ID)
.addPerson(person)
.setContentIntent(getFullscreenIntent(call))
.setSmallIcon(R.drawable.ic_notification_small)
.setStyle(
Notification.CallStyle.forIncomingCall(
person, getCancelIntent(call), getAnswerIntent(call)
)
)
.setCategory(Notification.CATEGORY_CALL)
.setFullScreenIntent(getFullscreenIntent(call), true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
notificationBuilder.setFlag(Notification.FLAG_ONGOING_EVENT, true)
}
if (photo != null)
notificationBuilder.setLargeIcon(photo)
return notificationBuilder.build()
}
private fun getNotificationApi25(
call: Call,
photo: Bitmap?
): Notification {
val notificationBuilder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
NotificationCompat.Builder(this, CHANNEL_ID)
else NotificationCompat.Builder(this)
val cancelText = HtmlCompat.fromHtml(
"<font color=\"${
ContextCompat.getColor(
this, R.color.color_red
)
}\">${getString(R.string.cancel)}</font>",
HtmlCompat.FROM_HTML_MODE_LEGACY
)
val answerText = HtmlCompat.fromHtml(
"<font color=\"${
ContextCompat.getColor(
this, R.color.color_green
)
}\">${getString(R.string.answer)}</font>",
HtmlCompat.FROM_HTML_MODE_LEGACY
)
val cancelAction = NotificationCompat.Action.Builder(
IconCompat.createWithResource(this, R.drawable.ic_cancel_red),
cancelText, getCancelIntent(call)
)
val answerAction = NotificationCompat.Action.Builder(
IconCompat.createWithResource(this, R.drawable.ic_answer_green),
answerText, getAnswerIntent(call)
)
notificationBuilder
.setContentText(call.name)
.setContentTitle(getString(R.string.incoming_call))
.setSmallIcon(R.drawable.ic_notification_small)
.setContentIntent(getFullscreenIntent(call))
.setAutoCancel(false)
.setCategory(Notification.CATEGORY_CALL)
.setFullScreenIntent(getFullscreenIntent(call), true)
.addAction(cancelAction.build())
.addAction(answerAction.build())
if (photo == null) {
notificationBuilder.setLargeIcon(createCircularLetterBitmap(this, call.name))
}
else {
notificationBuilder.setLargeIcon(photo)
}
return notificationBuilder.build()
}
private fun hide() {
releaseRingtone()
releaseMediaSession()
cancelNotification()
stopSelf()
}
override fun onDestroy() {
super.onDestroy()
releaseRingtone()
releaseMediaSession()
}
private fun releaseRingtone() {
audioManager.mode = originalMode
mediaPlayer?.release()
mediaPlayer = null
}
private fun releaseMediaSession() {
if (receiverRegistered) {
receiverRegistered = false
unregisterReceiver(volumeReceiver)
}
}
private fun cancelNotification() {
notificationsManager.cancel(NOTIFICATION_ID)
}
@RequiresApi(Build.VERSION_CODES.O)
private fun createChannel() {
val channel = NotificationChannel(
CHANNEL_ID, getString(R.string.notification_channel_title),
NotificationManager.IMPORTANCE_HIGH
).apply {
setSound(null, null)
}
notificationsManager.createNotificationChannel(channel)
}
private fun getAnswerIntent(call: Call): PendingIntent {
val intent = Intent(this, WorkAroundActivity::class.java)
.apply {
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
action = Constants.ACTION_ANSWER
putExtras(
bundleOf(
Pair(Constants.DATA_BUNDLE_KEY, call.data)
)
)
}
return PendingIntent.getActivity(
this, 0, intent,
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
}
private fun getCancelIntent(call: Call): PendingIntent {
val intent = Intent(this, ActionReceiver::class.java)
.apply {
action = Constants.ACTION_REJECT
putExtras(
bundleOf(
Pair(Constants.AUTH_TOKEN_FCM_KEY, call.authToken),
Pair(Constants.UUID_FCM_KEY, call.uuid)
)
)
}
return PendingIntent.getBroadcast(
this, 0, intent,
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
}
private fun getFullscreenIntent(call: Call): PendingIntent {
val intent = Intent(this, CallActivity::class.java)
intent.putExtras(
bundleOf(
Pair(Constants.USER_FCM_KEY, call.name),
Pair(Constants.PHOTO_FCM_KEY, call.photo)
)
)
return PendingIntent.getActivity(
this, 0, intent,
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
}
@RequiresApi(Build.VERSION_CODES.P)
private fun getPerson(caller: String) = Person
.Builder()
.setName(caller)
.setImportant(true)
.build()
companion object {
const val CHANNEL_ID = "incoming_channel"
const val NOTIFICATION_ID = 1
private const val ACTION_SHOW = "action.show"
private const val ACTION_HIDE = "action.hide"
fun showNotification(
context: Context,
call: Call
) {
val intent = Intent(context, NotificationService::class.java)
.apply {
action = ACTION_SHOW
putExtras(call.toBundle())
}
context.startService(intent)
}
fun cancelNotification(context: Context) {
val intent = Intent(context, NotificationService::class.java)
.apply {
action = ACTION_HIDE
}
context.startService(intent)
}
}
}

64
android/app/src/main/java/com/app/task_me/features/notifications/NotificationUtils.kt

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
package com.app.task_me.features.notifications
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.RectF
import android.graphics.Typeface
import android.util.TypedValue
import com.app.task_me.data.model.Call
fun roundPhoto(bitmap: Bitmap): Bitmap {
val size = bitmap.width.coerceAtMost(bitmap.height)
val output = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888)
val canvas = Canvas(output)
val paint = Paint()
paint.isAntiAlias = true
val rect = Rect(0, 0, size, size)
val rectF = RectF(rect)
canvas.drawARGB(0, 0, 0, 0)
canvas.drawOval(rectF, paint)
paint.xfermode =
android.graphics.PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN)
canvas.drawBitmap(bitmap, null, rect, paint)
return output
}
fun createCircularLetterBitmap(context: Context, input: String, sizeDp: Int = 64): Bitmap {
val firstLetter = input.firstOrNull()?.uppercaseChar() ?: 'A'
val sizePx = TypedValue
.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sizeDp.toFloat(), context.resources.displayMetrics).toInt()
val bitmap = Bitmap.createBitmap(sizePx, sizePx, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val paintBackground = Paint().apply {
color = Color.parseColor("#2B2D30")
isAntiAlias = true
}
canvas.drawCircle(sizePx / 2f, sizePx / 2f, sizePx / 2f, paintBackground)
val paintText = Paint().apply {
color = Color.WHITE
textSize = sizePx * 0.5f
typeface = Typeface.DEFAULT_BOLD
isAntiAlias = true
textAlign = Paint.Align.CENTER
}
val xPos = canvas.width / 2
val yPos = (canvas.height / 2 - (paintText.descent() + paintText.ascent()) / 2)
canvas.drawText(firstLetter.toString(), xPos.toFloat(), yPos, paintText)
return bitmap
}

27
android/app/src/main/java/com/app/task_me/lifecycle/LifecycleManager.kt

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
package com.app.task_me.lifecycle
import android.content.Context
class LifecycleManager(context: Context) {
private val prefs =
context.getSharedPreferences("TaskmeLyfecycle", Context.MODE_PRIVATE)
fun onActive() {
prefs
.edit()
.putBoolean("is_active", true)
.apply()
}
fun onInactive() {
prefs
.edit()
.putBoolean("is_active", false)
.apply()
}
fun isActive(): Boolean {
return prefs.getBoolean("is_active", false)
}
}

67
android/app/src/main/java/com/app/task_me/model/Call.kt

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
package com.app.task_me.data.model
import android.os.Bundle
import androidx.core.os.bundleOf
import com.app.task_me.Constants
data class Call(
val name: String,
val photo: String,
val uuid: String,
val authToken: String,
val data: String
) {
fun toBundle(): Bundle {
return bundleOf(
Pair(Constants.USER_FCM_KEY, name),
Pair(Constants.PHOTO_FCM_KEY, photo),
Pair(Constants.UUID_FCM_KEY, uuid),
Pair(Constants.AUTH_TOKEN_FCM_KEY, authToken),
Pair(Constants.DATA_BUNDLE_KEY, data)
)
}
companion object {
fun fromFCMData(data: Map<String, String>): Call {
val name = data[Constants.USER_FCM_KEY] ?: "Username"
val photo = data[Constants.PHOTO_FCM_KEY] ?: ""
val uuid = data[Constants.UUID_FCM_KEY] ?: ""
val authToken = data[Constants.AUTH_TOKEN_FCM_KEY] ?: ""
val dataStr = mapToJson(data)
return Call(name, photo, uuid, authToken, dataStr)
}
fun fromBundle(bundle: Bundle?): Call {
val name = bundle?.getString(Constants.USER_FCM_KEY) ?: "Username"
val photo = bundle?.getString(Constants.PHOTO_FCM_KEY) ?: ""
val uuid = bundle?.getString(Constants.UUID_FCM_KEY) ?: ""
val authToken = bundle?.getString(Constants.AUTH_TOKEN_FCM_KEY) ?: ""
val dataStr = bundle?.getString(Constants.DATA_BUNDLE_KEY) ?: ""
return Call(name, photo, uuid, authToken, dataStr)
}
private fun mapToJson(map: Map<String, Any>): String {
val jsonBuilder = StringBuilder()
jsonBuilder.append("{")
map.entries.forEachIndexed { index, entry ->
jsonBuilder.append("\"${entry.key}\":")
when (val value = entry.value) {
is String -> jsonBuilder.append("\"$value\"")
is Number, is Boolean -> jsonBuilder.append(value)
is Map<*, *> -> jsonBuilder.append(
mapToJson(value as Map<String, Any>)
)
else -> jsonBuilder.append(
"\"$value\""
)
}
if (index < map.size - 1) {
jsonBuilder.append(",")
}
}
jsonBuilder.append("}")
return jsonBuilder.toString()
}
}
}

55
android/app/src/main/java/com/app/task_me/service/FirebaseService.kt

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
package com.app.task_me.service
import android.content.Intent
import android.util.Log
import com.app.task_me.Constants
import com.app.task_me.Constants.TAG
import com.app.task_me.core.incoming.IncomingManager
import com.app.task_me.data.model.Call
import com.app.task_me.features.notifications.NotificationService
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class FirebaseService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
}
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
val data = message.data
handleData(data)
}
private fun handleData(data: Map<String, String>) {
if (data.containsKey(Constants.PUSH_TYPE_FCM_KEY)) {
if (data[Constants.PUSH_TYPE_FCM_KEY] == Constants.TYPE_INCOME) {
onIncomingCall(data)
return
}
if (data[Constants.PUSH_TYPE_FCM_KEY] == Constants.TYPE_REJECT)
onCancelled()
}
}
private fun logData(data: Map<String, String>) {
for (key in data.keys) {
Log.i(TAG, "logData: $key = ${data[key]}")
}
}
private fun onIncomingCall(data: Map<String, String>) {
IncomingManager(this).onIncomingCall(Call.fromFCMData(data))
}
private fun onCancelled() {
Log.i(TAG, "onCancelled: ")
NotificationService.cancelNotification(this)
sendBroadcast(
Intent().apply {
action = Constants.ACTION_CLOSE_ACTIVITY
})
}
}

41
android/app/src/main/java/com/taskme2/MainActivity.java

@ -1,41 +0,0 @@ @@ -1,41 +0,0 @@
package com.app.task_me;
import android.content.Intent;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactActivityDelegate;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "taskme2";
}
/**
* Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
* DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
* (aka React 18) with two boolean flags.
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new DefaultReactActivityDelegate(
this,
getMainComponentName(),
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
DefaultNewArchitectureEntryPoint.getFabricEnabled()
);
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
}

63
android/app/src/main/java/com/taskme2/MainApplication.java

@ -1,63 +0,0 @@ @@ -1,63 +0,0 @@
package com.app.task_me;
import android.app.Application;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactNativeHost;
import com.facebook.soloader.SoLoader;
import java.util.List;
import com.rumax.reactnative.pdfviewer.PDFViewPackage;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new DefaultReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
packages.add(new PDFViewPackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected boolean isNewArchEnabled() {
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
}
@Override
protected Boolean isHermesEnabled() {
return BuildConfig.IS_HERMES_ENABLED;
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
// If you opted-in for the New Architecture, we load the native entry point for this app.
DefaultNewArchitectureEntryPoint.load();
}
ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
}

394
android/app/src/main/res/drawable/bg_call.xml

@ -0,0 +1,394 @@ @@ -0,0 +1,394 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="375dp"
android:height="812dp"
android:viewportWidth="375"
android:viewportHeight="812">
<group>
<clip-path
android:pathData="M0,0h375v812h-375z"/>
<path
android:pathData="M551.91,-17.38H-110.05V812H551.91V-17.38Z"
android:fillColor="#232323"/>
<path
android:pathData="M98.19,791.84L92.21,789.54C91.98,789.54 91.98,789.25 91.75,788.96C91.75,788.67 91.75,788.39 91.98,788.39L96.58,783.2C96.81,782.92 97.04,782.92 97.04,782.92C97.27,782.92 97.27,783.2 97.5,783.49L98.65,790.98C98.65,791.27 98.65,791.55 98.42,791.55C98.42,791.84 98.42,791.84 98.19,791.84ZM93.59,788.39L97.5,790.11L96.58,785.22L93.59,788.39Z"
android:fillColor="#505050"/>
<path
android:pathData="M294.94,191.98H294.71C294.48,191.98 294.48,191.7 294.48,191.41L293.8,179.89C293.8,179.6 293.8,179.31 294.02,179.31C294.26,179.02 294.48,179.02 294.48,179.31L302.76,184.21C302.99,184.21 302.99,184.5 302.99,184.78C302.99,185.07 302.99,185.36 302.76,185.36L295.17,191.98C295.17,191.98 295.17,191.98 294.94,191.98ZM294.94,181.04L295.4,189.97L301.38,184.78L294.94,181.04Z"
android:fillColor="#505050"/>
<path
android:pathData="M214.26,378.88C214.04,378.88 213.8,378.88 213.8,378.59L209.9,370.82C209.9,370.53 209.67,370.24 209.9,370.24C209.9,369.95 210.13,369.95 210.36,369.95L217.48,369.67C217.71,369.67 217.94,369.67 217.94,369.95C217.94,370.24 218.17,370.53 217.94,370.53L214.49,378.59C214.49,378.88 214.26,378.88 214.26,378.88ZM211.28,371.11L214.03,376.58L216.56,370.82L211.28,371.11Z"
android:fillColor="#505050"/>
<path
android:pathData="M147.38,499.55C147.15,499.55 147.15,499.55 146.92,499.26C146.69,498.97 146.69,498.68 146.69,498.68L148.99,486.59C148.99,486.3 149.22,486.01 149.45,486.01C149.68,486.01 149.91,486.01 149.91,486.3L157.03,494.94C157.26,495.23 157.26,495.51 157.26,495.51C157.26,495.8 157.03,496.09 156.8,496.09L147.38,499.55ZM149.91,488.03L148.07,497.82L155.88,494.94L149.91,488.03Z"
android:fillColor="#505050"/>
<path
android:pathData="M118.42,227.69C118.19,227.69 118.42,227.69 118.42,227.69L106.47,221.65C106.24,221.65 106.24,221.36 106.01,221.07C106.01,220.78 106.01,220.49 106.24,220.49L116.12,210.7C116.35,210.41 116.58,210.41 116.58,210.7C116.81,210.7 116.81,210.99 117.04,211.28L118.65,226.83C118.65,227.12 118.65,227.41 118.42,227.41C118.65,227.69 118.42,227.69 118.42,227.69ZM107.85,220.78L117.73,225.68L116.35,212.43L107.85,220.78Z"
android:fillColor="#505050"/>
<path
android:pathData="M46.71,375.71H46.48L23.26,359.3C23.03,359.3 23.03,359.01 23.03,358.72C23.03,358.44 23.03,358.15 23.26,358.15L46.25,341.16C46.48,341.16 46.71,341.16 46.71,341.16C46.94,341.16 46.94,341.45 46.94,341.73L47.4,375.14C47.4,375.43 47.4,375.71 47.17,375.71C46.71,375.43 46.71,375.71 46.71,375.71ZM24.41,358.44L46.02,373.41L45.56,342.6L24.41,358.44Z"
android:fillColor="#505050"/>
<path
android:pathData="M370.33,22.65C370.11,22.65 370.33,22.65 370.33,22.65C369.88,22.65 369.88,22.37 369.88,22.08L367.58,3.65C367.58,3.36 367.58,3.07 367.81,3.07C367.81,2.78 368.04,2.78 368.04,2.78L382.06,9.41C382.29,9.41 382.29,9.69 382.52,9.98C382.52,10.27 382.52,10.56 382.29,10.56L370.79,22.37C370.56,22.65 370.33,22.65 370.33,22.65ZM368.73,4.51L370.79,20.64L380.91,10.27L368.73,4.51Z"
android:fillColor="#505050"/>
<path
android:pathData="M145.31,44.54C144.85,44.54 144.85,44.25 144.85,43.96L143.47,36.76C143.47,36.48 143.47,36.19 143.7,36.19C143.93,35.9 144.16,35.9 144.16,35.9L149.91,37.92C150.14,37.92 150.37,38.2 150.37,38.49C150.37,38.78 150.37,39.07 150.14,39.07L145.77,44.25C145.77,44.25 145.54,44.54 145.31,44.54ZM144.85,37.63L145.77,42.52L148.53,39.07L144.85,37.63Z"
android:fillColor="#505050"/>
<path
android:pathData="M66.7,506.74C66.47,506.74 66.7,506.74 66.7,506.74L45.56,497.82C45.33,497.82 45.33,497.53 45.1,497.24C45.1,496.95 45.1,496.67 45.33,496.67L61.87,478.23C62.1,477.95 62.33,477.95 62.33,477.95C62.56,477.95 62.56,478.23 62.79,478.52L67.16,505.59C67.16,505.88 67.16,506.17 66.93,506.17C66.93,506.46 66.7,506.74 66.7,506.74ZM46.7,496.95L65.78,505.02L61.64,480.25L46.7,496.95Z"
android:fillColor="#505050"/>
<path
android:pathData="M22.11,75.07C21.88,75.07 22.11,75.07 22.11,75.07C21.65,75.07 21.65,74.78 21.65,74.49L16.37,45.4C16.37,45.12 16.37,44.83 16.6,44.83C16.83,44.54 17.06,44.54 17.06,44.54L39.81,53.18C40.04,53.18 40.04,53.47 40.27,53.76C40.27,54.04 40.27,54.33 40.04,54.33L22.57,74.49C22.34,75.07 22.11,75.07 22.11,75.07ZM17.52,46.56L22.34,73.05L38.2,54.62L17.52,46.56Z"
android:fillColor="#505050"/>
<path
android:pathData="M0.74,750.66C0.51,750.66 0.51,750.66 0.74,750.66C0.51,750.66 0.28,750.37 0.28,750.37L-6.85,732.81C-6.85,732.52 -6.85,732.23 -6.85,732.23C-6.85,731.94 -6.62,731.94 -6.39,731.94L9.24,732.81C9.47,732.81 9.7,733.09 9.7,733.09C9.7,733.38 9.7,733.67 9.7,733.67L1.2,750.09C0.97,750.66 0.74,750.66 0.74,750.66ZM-5.7,733.38L0.51,748.65L7.86,734.25L-5.7,733.38Z"
android:fillColor="#505050"/>
<path
android:pathData="M130.6,670.6C130.37,670.6 130.37,670.6 130.14,670.32C129.91,670.03 129.91,669.74 129.91,669.74L135.66,640.65C135.66,640.37 135.89,640.08 136.12,640.08C136.35,640.08 136.58,640.08 136.58,640.37L153.82,661.1C154.05,661.39 154.05,661.68 154.05,661.68C154.05,661.96 153.82,662.25 153.59,662.25L130.6,670.6C130.83,670.6 130.6,670.6 130.6,670.6ZM136.58,642.09L131.29,668.88L152.44,661.1L136.58,642.09Z"
android:fillColor="#505050"/>
<path
android:pathData="M177.03,640.37C176.8,640.37 176.8,640.37 176.57,640.08C176.34,639.79 176.34,639.79 176.34,639.5L177.26,631.73C177.26,631.44 177.49,631.15 177.72,631.15C177.95,631.15 178.18,631.15 178.18,631.15L183.23,636.05C183.46,636.34 183.46,636.34 183.46,636.62C183.46,636.91 183.23,637.2 183,637.2L177.03,640.37C177.26,640.37 177.26,640.37 177.03,640.37ZM178.41,633.17L177.95,638.35L181.85,636.34L178.41,633.17Z"
android:fillColor="#505050"/>
<path
android:pathData="M220.7,80.83H220.47L208.06,73.05C207.83,73.05 207.83,72.76 207.83,72.47C207.83,72.19 207.83,71.9 208.06,71.9L219.78,62.39C220.01,62.39 220.24,62.11 220.24,62.39C220.47,62.39 220.47,62.68 220.47,62.97L221.16,80.25C221.16,80.54 221.16,80.83 220.93,80.83C220.93,80.83 220.93,80.83 220.7,80.83ZM209.44,72.19L220.01,79.1L219.32,64.12L209.44,72.19Z"
android:fillColor="#505050"/>
<path
android:pathData="M178.41,431.58C178.18,431.58 177.95,431.58 177.95,431.29C177.95,431.01 177.95,430.72 177.95,430.72L193.12,395.87C193.12,395.58 193.35,395.58 193.58,395.58C193.81,395.58 194.04,395.58 194.04,395.87L210.59,429.57C210.59,429.85 210.59,430.14 210.59,430.14C210.59,430.43 210.36,430.43 210.13,430.43L178.41,431.58ZM193.35,397.31L179.1,429.85L208.75,428.99L193.35,397.31Z"
android:fillColor="#505050"/>
<path
android:pathData="M109.45,435.33C109.22,435.33 108.99,435.33 108.99,435.04L104.4,427.26C104.17,426.97 104.17,426.69 104.4,426.69C104.4,426.4 104.63,426.4 104.86,426.11L112.44,424.96C112.67,424.96 112.9,424.96 112.9,425.25C113.13,425.54 113.13,425.82 112.9,425.82L109.91,434.75C109.91,435.33 109.91,435.33 109.45,435.33C109.68,435.33 109.68,435.33 109.45,435.33ZM106,427.55L109.45,433.31L111.52,426.69L106,427.55Z"
android:fillColor="#505050"/>
<path
android:pathData="M357.23,557.43C357,557.43 356.77,557.43 356.77,557.14C356.54,556.85 356.54,556.57 356.77,556.57L369.19,519.99C369.19,519.7 369.42,519.7 369.64,519.7C369.88,519.7 370.11,519.7 370.11,519.99L389.18,551.96C389.41,552.24 389.41,552.53 389.18,552.53C389.18,552.82 388.95,552.82 388.72,552.82L357.23,557.43ZM369.88,521.72L358.15,555.99L387.57,551.67L369.88,521.72Z"
android:fillColor="#505050"/>
<path
android:pathData="M63.94,184.21H63.71L53.37,177.3C53.14,177.3 53.14,177.01 53.14,176.72C53.14,176.43 53.14,176.15 53.37,176.15L63.25,168.37C63.48,168.37 63.71,168.37 63.71,168.37C63.94,168.37 63.94,168.66 63.94,168.95L64.17,183.63C64.17,183.92 64.17,184.21 63.94,184.21C64.17,184.21 63.94,184.21 63.94,184.21ZM54.75,176.43L63.25,182.19L63.02,170.1L54.75,176.43Z"
android:fillColor="#505050"/>
<path
android:pathData="M283.45,674.35C283.22,674.35 282.99,674.35 282.99,674.06C282.99,673.77 282.76,673.48 282.99,673.48L285.75,667.15C285.75,666.86 285.98,666.86 286.21,666.86C286.43,666.86 286.67,666.86 286.67,667.15L289.65,673.2C289.65,673.48 289.88,673.77 289.65,673.77C289.65,674.06 289.42,674.06 289.19,674.06L283.45,674.35C283.68,674.35 283.45,674.35 283.45,674.35ZM286.21,668.88L284.37,672.91L288.04,672.62L286.21,668.88Z"
android:fillColor="#505050"/>
<path
android:pathData="M153.13,449.15C152.9,449.15 152.67,449.15 152.67,448.86L148.76,440.8C148.76,440.51 148.76,440.22 148.76,440.22C148.76,439.93 148.99,439.93 149.22,439.93L156.8,439.64C157.03,439.64 157.26,439.64 157.26,439.93C157.26,440.22 157.26,440.51 157.26,440.51L153.59,448.86C153.59,448.86 153.35,449.15 153.13,449.15ZM150.37,441.08L153.35,447.13L156.11,441.08H150.37Z"
android:fillColor="#505050"/>
<path
android:pathData="M110.37,744.04C110.14,744.04 109.91,744.04 109.91,743.75L106.93,737.7C106.93,737.41 106.93,737.13 106.93,737.13C106.93,736.84 107.16,736.84 107.39,736.84H113.13C113.36,736.84 113.59,736.84 113.59,737.13C113.59,737.41 113.59,737.7 113.59,737.7L110.83,744.04C110.6,743.75 110.37,744.04 110.37,744.04ZM108.31,737.7L110.14,741.73L111.98,737.7H108.31Z"
android:fillColor="#505050"/>
<path
android:pathData="M168.76,19.49C168.53,19.49 168.3,19.49 168.3,19.2L161.17,6.24C160.94,5.95 160.94,5.66 161.17,5.66C161.17,5.38 161.4,5.38 161.63,5.38L174.27,3.94C174.5,3.94 174.73,3.94 174.73,4.22C174.96,4.51 174.96,4.8 174.73,4.8L169.22,19.2C169.22,19.49 168.99,19.49 168.76,19.49C168.99,19.49 168.76,19.49 168.76,19.49ZM162.55,6.53L168.53,17.47L173.12,5.38L162.55,6.53Z"
android:fillColor="#505050"/>
<path
android:pathData="M17.29,10.56H17.06C16.83,10.56 16.83,10.27 16.83,9.98L16.37,2.21C16.37,1.92 16.37,1.63 16.6,1.63C16.83,1.63 17.06,1.34 17.06,1.63L22.57,5.38C22.8,5.38 22.8,5.66 22.8,5.95C22.8,6.24 22.8,6.53 22.57,6.53L17.29,10.56C17.52,10.56 17.29,10.56 17.29,10.56ZM17.52,3.36L17.75,8.54L21.19,5.66L17.52,3.36Z"
android:fillColor="#505050"/>
<path
android:pathData="M189.67,258.8L176.11,257.64C175.88,257.64 175.65,257.36 175.65,257.36C175.65,257.07 175.65,256.78 175.65,256.78L183.01,242.67C183.01,242.38 183.24,242.38 183.47,242.38C183.7,242.38 183.93,242.67 183.93,242.67L189.9,257.93C189.9,258.22 189.9,258.51 189.9,258.51C189.9,258.8 189.9,258.8 189.67,258.8ZM177.26,256.49L188.75,257.36L183.7,244.4L177.26,256.49Z"
android:fillColor="#505050"/>
<path
android:pathData="M338.62,339.72C338.39,339.72 338.39,339.72 338.62,339.72L331.03,336.55C330.8,336.55 330.8,336.26 330.57,335.97C330.57,335.68 330.57,335.4 330.8,335.4L336.55,329.06C336.78,328.77 337.01,328.77 337.01,329.06C337.24,329.06 337.24,329.35 337.47,329.64L339.08,339.14C339.08,339.43 339.08,339.72 338.85,339.72H338.62ZM332.18,335.68L337.7,337.99L336.55,330.79L332.18,335.68Z"
android:fillColor="#505050"/>
<path
android:pathData="M316.55,143.6C316.32,143.6 316.32,143.6 316.55,143.6C316.09,143.6 316.09,143.32 316.09,143.03L313.79,131.8C313.79,131.51 313.79,131.22 314.02,131.22C314.25,130.93 314.48,130.93 314.48,130.93L323.44,134.1C323.67,134.1 323.9,134.39 323.9,134.68C323.9,134.96 323.9,135.25 323.67,135.25L317.01,143.32C316.78,143.6 316.55,143.6 316.55,143.6ZM314.94,132.66L316.78,141.59L322.06,135.25L314.94,132.66Z"
android:fillColor="#505050"/>
<path
android:pathData="M191.28,122.58C191.05,122.58 190.82,122.29 190.82,122.01L186.68,104.73C186.68,104.44 186.68,104.15 186.91,104.15C187.14,103.86 187.37,103.86 187.37,103.86L201.39,107.89C201.62,107.89 201.85,108.18 201.85,108.47C201.85,108.76 201.85,109.05 201.62,109.05L191.74,122.29C191.74,122.58 191.51,122.58 191.28,122.58ZM188.06,105.59L191.74,120.57L200.24,109.05L188.06,105.59Z"
android:fillColor="#505050"/>
<path
android:pathData="M264.83,450.3C264.6,450.3 264.83,450.3 264.83,450.3C264.37,450.01 264.37,450.01 264.37,449.73L262.3,428.99C262.3,428.7 262.3,428.42 262.53,428.42C262.76,428.13 262.99,428.13 262.99,428.42L278.62,436.48C278.85,436.48 278.85,436.77 279.08,437.05C279.08,437.34 279.08,437.63 278.85,437.63L265.52,450.3C265.06,450.3 265.06,450.3 264.83,450.3ZM263.45,429.86L265.29,448.29L277.24,437.05L263.45,429.86Z"
android:fillColor="#505050"/>
<path
android:pathData="M68.54,124.31C68.31,124.31 68.54,124.31 68.54,124.31L42.8,122.29C42.57,122.29 42.34,122.01 42.34,122.01C42.34,121.72 42.34,121.43 42.34,121.43L56.59,94.36C56.59,94.07 56.82,94.07 57.05,94.07C57.28,94.07 57.51,94.36 57.51,94.36L69,123.16C69,123.45 69,123.73 69,123.73C68.77,124.31 68.54,124.31 68.54,124.31ZM43.72,121.14L67.39,122.87L56.59,96.09L43.72,121.14Z"
android:fillColor="#505050"/>
<path
android:pathData="M246.9,793.57L222.77,792.71C222.54,792.71 222.31,792.42 222.31,792.42C222.31,792.13 222.31,791.84 222.31,791.84L234.95,765.92C234.95,765.64 235.18,765.64 235.41,765.64C235.64,765.64 235.87,765.92 235.87,765.92L247.37,792.71C247.37,792.99 247.37,793.28 247.37,793.28C247.37,793.28 247.13,793.57 246.9,793.57ZM223.69,791.27L245.99,792.13L235.41,767.65L223.69,791.27Z"
android:fillColor="#505050"/>
<path
android:pathData="M180.94,740.29H180.71C180.48,740.29 180.48,740.01 180.48,739.72V731.94C180.48,731.66 180.48,731.37 180.71,731.37C180.94,731.37 181.17,731.37 181.17,731.37L186.46,735.11C186.68,735.11 186.68,735.4 186.68,735.69C186.68,735.97 186.68,736.26 186.46,736.26L181.17,740.29C181.17,740.29 181.17,740.29 180.94,740.29ZM181.4,733.09V738.28L184.85,735.69L181.4,733.09Z"
android:fillColor="#505050"/>
<path
android:pathData="M325.97,88.31C325.74,88.31 325.74,88.31 325.51,88.02L306.89,61.53C306.66,61.24 306.66,60.95 306.89,60.95C306.89,60.67 307.12,60.67 307.35,60.38L334.94,53.47C335.17,53.47 335.39,53.47 335.39,53.76C335.39,54.04 335.63,54.33 335.39,54.33L326.43,87.74C326.43,88.31 326.2,88.31 325.97,88.31ZM308.5,61.82L325.74,86.3L334.02,55.2L308.5,61.82Z"
android:fillColor="#505050"/>
<path
android:pathData="M209.67,154.26C209.44,154.26 209.44,154.26 209.67,154.26C209.21,153.97 209.21,153.97 209.21,153.68L208.52,145.62C208.52,145.33 208.52,145.04 208.75,145.04C208.98,144.76 209.21,144.76 209.21,145.04L215.19,148.21C215.42,148.21 215.42,148.5 215.42,148.79C215.42,149.08 215.42,149.36 215.19,149.36L209.9,154.26H209.67ZM209.44,146.77L209.9,152.24L213.58,148.79L209.44,146.77Z"
android:fillColor="#505050"/>
<path
android:pathData="M332.41,744.61L322.3,741.16C322.07,741.16 321.84,740.87 321.84,740.58C321.84,740.29 321.84,740.01 322.07,740.01L329.42,731.08C329.65,730.79 329.88,730.79 329.88,730.79C330.11,730.79 330.34,731.08 330.34,731.37L332.87,743.75C332.87,744.04 332.87,744.33 332.64,744.33C332.87,744.61 332.64,744.61 332.41,744.61ZM323.68,740.29L331.72,743.17L329.65,733.09L323.68,740.29Z"
android:fillColor="#505050"/>
<path
android:pathData="M307.13,12H306.9L300.92,6.81C300.69,6.81 300.69,6.53 300.69,6.24C300.69,5.95 300.92,5.66 300.92,5.66L307.58,1.63C307.82,1.63 308.05,1.63 308.05,1.63C308.27,1.63 308.27,1.92 308.27,2.21L307.82,11.42C307.82,11.71 307.58,12 307.58,12C307.36,12 307.36,12 307.13,12ZM302.3,6.24L306.67,9.98L307.13,3.36L302.3,6.24Z"
android:fillColor="#505050"/>
<path
android:pathData="M237.94,130.65C237.71,130.65 237.48,130.65 237.48,130.36L234.26,123.16C234.26,122.87 234.26,122.58 234.26,122.58C234.26,122.29 234.49,122.29 234.72,122.29H241.39C241.62,122.29 241.85,122.29 241.85,122.58C241.85,122.87 241.85,123.16 241.85,123.16L238.4,130.36C238.4,130.36 238.17,130.65 237.94,130.65ZM235.64,123.45L237.94,128.63L240.24,123.45H235.64Z"
android:fillColor="#505050"/>
<path
android:pathData="M317.01,292.49C316.78,292.49 316.78,292.49 316.55,292.2C316.32,291.91 316.32,291.63 316.32,291.63L321.61,270.89C321.61,270.6 321.83,270.6 322.07,270.32C322.3,270.32 322.52,270.32 322.52,270.6L334.25,286.73C334.48,287.02 334.48,287.31 334.48,287.31C334.48,287.59 334.25,287.59 334.02,287.88L317.01,292.49ZM322.52,272.33L317.93,290.76L332.87,286.73L322.52,272.33Z"
android:fillColor="#505050"/>
<path
android:pathData="M60.73,607.54C60.27,607.54 59.81,607.25 59.12,607.25C58.66,606.96 57.74,606.67 57.51,606.96C57.28,607.25 57.05,607.25 56.59,607.25C56.36,606.96 56.36,606.67 56.36,606.1C57.05,604.95 58.2,605.52 59.12,605.81C59.58,606.1 60.5,606.38 60.73,606.1C60.96,605.81 60.5,604.94 60.27,604.37C59.81,603.22 59.12,602.07 59.81,600.91C60.5,599.76 61.65,600.34 62.57,600.63C63.03,600.91 63.95,601.2 64.18,600.91C64.4,600.63 63.95,599.76 63.72,599.18C63.26,598.03 62.57,596.88 63.26,595.73C63.95,594.58 65.09,595.15 66.01,595.44C66.47,595.73 67.39,596.02 67.62,595.73C67.85,595.44 67.39,594.58 67.16,594C66.7,592.85 66.01,591.7 66.7,590.55C66.93,590.26 67.16,590.26 67.62,590.26C67.85,590.55 67.85,590.83 67.85,591.41C67.62,591.7 68.08,592.56 68.31,593.14C68.77,594.29 69.46,595.44 68.77,596.59C68.08,597.74 66.93,597.17 66.01,596.88C65.55,596.59 64.63,596.3 64.4,596.59C64.18,596.88 64.63,597.74 64.86,598.32C65.32,599.47 66.01,600.63 65.32,601.78C64.63,602.93 63.49,602.35 62.57,602.07C62.11,601.78 61.19,601.49 60.96,601.78C60.73,602.07 61.19,602.93 61.42,603.51C61.88,604.66 62.57,605.81 61.88,606.96C61.65,607.54 61.19,607.54 60.73,607.54Z"
android:fillColor="#505050"/>
<path
android:pathData="M16.6,318.7C16.37,318.7 16.14,318.7 16.14,318.41C15.91,318.12 16.14,317.54 16.37,317.54C17.97,316.39 17.51,312.65 17.06,309.19C16.6,305.16 15.91,301.13 18.2,299.4C20.5,297.67 23.26,300.26 25.79,302.57C28.09,304.58 30.39,306.89 32,305.74C33.6,304.58 33.14,300.84 32.69,297.39C32.23,293.35 31.54,289.32 33.83,287.59C36.13,285.86 38.89,288.46 41.42,290.76C43.72,292.78 46.02,295.08 47.63,293.93C49.23,292.78 48.77,289.03 48.31,285.58C47.86,281.55 47.17,277.51 49.46,275.79C51.76,274.06 54.52,276.65 57.05,278.95C59.35,280.97 61.65,283.27 63.26,282.12C63.48,281.83 63.94,282.12 63.94,282.41C64.17,282.7 63.94,283.27 63.71,283.27C61.42,285 58.66,282.41 56.13,280.11C53.83,278.09 51.53,275.79 49.92,276.94C48.31,278.09 48.77,281.83 49.23,285.29C49.69,289.32 50.38,293.35 48.08,295.08C45.79,296.81 43.03,294.22 40.5,291.91C38.2,289.9 35.9,287.59 34.29,288.74C32.69,289.9 33.14,293.64 33.6,297.1C34.06,301.13 34.75,305.16 32.46,306.89C30.16,308.62 27.4,306.02 24.87,303.72C22.57,301.7 20.27,299.4 18.66,300.55C17.06,301.7 17.51,305.45 17.97,308.9C18.43,312.93 19.12,316.97 16.83,318.7C16.6,318.7 16.6,318.7 16.6,318.7Z"
android:fillColor="#505050"/>
<path
android:pathData="M359.53,155.99C359.3,155.99 359.3,155.99 359.53,155.99C359.07,155.7 358.84,155.41 359.07,155.12C359.76,152.82 357.23,150.23 354.93,147.64C352.4,144.76 349.64,142.16 350.56,138.71C351.48,135.25 354.93,135.25 358.38,134.96C361.37,134.68 364.58,134.39 365.05,132.09C365.73,129.78 363.21,127.19 360.91,124.6C358.38,121.72 355.62,119.13 356.54,115.67C357.46,112.21 360.91,112.21 364.36,111.93C367.34,111.64 370.56,111.35 371.02,109.05C371.71,106.74 369.18,104.15 366.88,101.56C364.36,98.68 361.6,96.09 362.52,92.63C363.44,89.18 366.88,89.18 370.33,88.89C373.32,88.6 376.54,88.31 377,86.01C377,85.72 377.46,85.43 377.69,85.43C377.92,85.43 378.15,86.01 378.15,86.3C377.23,89.75 373.78,89.75 370.33,90.04C367.34,90.33 364.13,90.62 363.67,92.92C362.98,95.22 365.5,97.82 367.8,100.41C370.33,103.29 373.09,105.88 372.17,109.33C371.25,112.79 367.8,112.79 364.36,113.08C361.37,113.37 358.15,113.65 357.69,115.96C357,118.26 359.53,120.85 361.83,123.45C364.36,126.32 367.11,128.92 366.19,132.37C365.27,135.83 361.83,135.83 358.38,136.12C355.39,136.4 352.17,136.69 351.71,139C351.02,141.3 353.55,143.89 355.85,146.48C358.38,149.36 361.14,151.96 360.22,155.41C359.99,155.7 359.76,155.99 359.53,155.99Z"
android:fillColor="#505050"/>
<path
android:pathData="M19.12,155.12C18.89,155.12 18.66,154.84 18.66,154.55C18.43,153.4 17.05,152.82 15.44,152.53C13.61,151.96 11.54,151.38 11.31,149.36C11.08,147.35 12.69,145.91 14.52,144.76C15.9,143.89 17.28,142.74 17.05,141.59C16.82,140.44 15.44,139.86 13.84,139.57C12,139 9.93,138.42 9.7,136.4C9.47,134.39 11.08,132.95 12.92,131.8C14.29,130.93 15.67,129.78 15.44,128.63C15.21,127.48 13.84,126.9 12.23,126.61C10.39,126.04 8.32,125.46 8.09,123.45C7.86,121.43 9.47,119.99 11.31,118.84C12.69,117.97 14.07,116.82 13.84,115.67C13.84,115.38 14.07,114.81 14.29,114.81C14.52,114.81 14.98,115.1 14.98,115.38C15.21,117.4 13.61,118.84 11.77,119.99C10.39,120.85 9.01,122.01 9.24,123.16C9.47,124.31 10.85,124.89 12.46,125.17C14.29,125.75 16.36,126.33 16.59,128.34C16.82,130.36 15.21,131.8 13.38,132.95C12,133.81 10.62,134.96 10.85,136.12C11.08,137.27 12.46,137.85 14.07,138.13C15.9,138.71 17.97,139.29 18.2,141.3C18.43,143.32 16.82,144.76 14.98,145.91C13.61,146.77 12.23,147.92 12.46,149.08C12.69,150.23 14.07,150.8 15.67,151.09C17.51,151.67 19.58,152.24 19.81,154.26C19.58,154.84 19.35,155.12 19.12,155.12Z"
android:fillColor="#505050"/>
<path
android:pathData="M372.63,363.33C371.02,363.33 370.1,361.32 369.18,359.3C368.49,357.57 367.58,355.84 366.66,355.84C366.43,355.84 365.97,355.55 365.97,355.27C365.97,354.98 366.2,354.4 366.43,354.4C368.27,354.11 369.18,356.42 370.1,358.43C370.79,360.16 371.71,361.89 372.63,361.89C373.55,361.6 374.01,359.59 374.47,357.86C374.93,355.55 375.39,352.96 377.23,352.67C379.07,352.39 379.99,354.69 380.91,356.71C381.6,358.43 382.52,360.16 383.43,360.16C384.35,359.88 384.81,357.86 385.27,356.13C385.73,353.83 386.19,351.23 388.03,350.95C389.87,350.66 390.79,352.96 391.71,354.98C392.4,356.71 393.32,358.43 394.24,358.43C395.16,358.15 395.62,356.13 396.08,354.4C396.54,352.1 397,349.51 398.83,349.22C399.06,349.22 399.52,349.51 399.52,349.8C399.52,350.08 399.29,350.66 399.06,350.66C398.14,350.95 397.68,352.96 397.23,354.69C396.77,356.99 396.31,359.59 394.47,359.88C392.63,360.16 391.71,357.86 390.79,355.84C390.1,354.11 389.18,352.39 388.26,352.39C387.34,352.67 386.88,354.69 386.42,356.42C385.96,358.72 385.5,361.32 383.66,361.6C381.83,361.89 380.91,359.59 379.99,357.57C379.3,355.84 378.38,354.11 377.46,354.11C376.54,354.4 376.08,356.42 375.62,358.15C375.16,360.45 374.7,363.04 372.86,363.33H372.63Z"
android:fillColor="#505050"/>
<path
android:pathData="M169.9,159.73C169.21,159.73 168.76,159.44 168.07,158.87C166.23,157.14 167.15,153.68 167.84,150.51C168.52,147.63 169.21,144.76 168.07,143.6C166.92,142.45 164.85,143.89 162.78,145.33C160.48,147.06 157.95,148.79 156.11,147.06C154.27,145.33 155.19,141.88 155.88,138.71C156.57,135.83 157.26,132.95 156.11,131.8C154.96,130.65 152.9,132.09 150.83,133.52C148.53,135.25 146,136.98 144.16,135.25C142.32,133.52 143.24,130.07 143.93,126.9C144.62,124.02 145.31,121.14 144.16,119.99C143.93,119.7 143.93,119.41 144.16,118.84C144.39,118.55 144.62,118.55 145.08,118.84C146.92,120.57 146,124.02 145.31,127.19C144.62,130.07 143.93,132.95 145.08,134.1C146.23,135.25 148.3,133.81 150.37,132.37C152.67,130.65 155.19,128.92 157.03,130.65C158.87,132.37 157.95,135.83 157.26,139C156.57,141.88 155.88,144.76 157.03,145.91C158.18,147.06 160.25,145.62 162.32,144.18C164.62,142.45 167.15,140.72 168.99,142.45C170.82,144.18 169.9,147.63 169.21,150.8C168.52,153.68 167.84,156.56 168.99,157.71C170.13,158.87 172.2,157.43 174.27,155.99C176.57,154.26 179.1,152.53 180.94,154.26C181.17,154.55 181.17,154.84 180.94,155.41C180.71,155.7 180.48,155.7 180.02,155.41C178.87,154.26 176.8,155.7 174.73,157.14C172.89,158.58 171.28,159.73 169.9,159.73Z"
android:fillColor="#505050"/>
<path
android:pathData="M371.02,329.06H370.79C370.56,328.77 370.33,328.49 370.56,328.2C371.71,325.61 369.64,322.44 367.57,318.98C365.28,315.24 362.98,311.49 364.36,308.33C365.96,305.16 369.64,305.73 373.32,306.31C376.54,306.89 379.99,307.46 381.14,305.16C382.29,302.57 380.22,299.4 378.15,295.94C375.85,292.2 373.55,288.46 374.93,285.29C376.54,282.12 380.22,282.7 383.89,283.27C387.11,283.85 390.56,284.42 391.71,282.12C392.86,279.53 390.79,276.36 388.72,272.91C386.42,269.16 384.12,265.42 385.5,262.25C387.11,259.08 390.79,259.66 394.47,260.23C397.68,260.81 401.13,261.39 402.28,259.08C402.51,258.8 402.74,258.51 402.97,258.8C403.2,259.08 403.43,259.37 403.2,259.66C401.59,262.83 397.91,262.25 394.24,261.67C391.02,261.1 387.57,260.52 386.42,262.83C385.27,265.42 387.34,268.59 389.41,272.04C391.71,275.79 394.01,279.53 392.63,282.7C391.02,285.86 387.34,285.29 383.66,284.71C380.45,284.14 377,283.56 375.85,285.86C374.7,288.46 376.77,291.62 378.84,295.08C381.14,298.82 383.43,302.57 382.05,305.73C380.45,308.9 376.77,308.33 373.09,307.75C369.87,307.17 366.42,306.6 365.28,308.9C364.13,311.49 366.2,314.66 368.26,318.12C370.56,321.86 372.86,325.61 371.48,328.77C371.48,329.06 371.25,329.06 371.02,329.06Z"
android:fillColor="#505050"/>
<path
android:pathData="M282.99,392.42C282.76,392.42 282.76,392.42 282.53,392.42C281.61,392.13 281.38,390.4 281.38,389.25C281.38,388.67 281.38,387.52 280.92,387.52C280.69,387.52 280.23,388.1 279.77,388.67C279.08,389.54 278.39,390.69 277.47,390.4C276.55,390.11 276.32,388.39 276.32,387.23C276.32,386.66 276.32,385.51 275.86,385.51C275.63,385.51 275.17,386.08 274.71,386.66C274.02,387.52 273.33,388.67 272.42,388.39C271.5,388.1 271.27,386.37 271.27,385.22C271.27,384.64 271.27,383.49 270.81,383.49C270.58,383.49 270.35,382.91 270.35,382.63C270.35,382.34 270.81,382.05 271.04,382.05C271.96,382.34 272.19,384.07 272.19,385.22C272.19,385.79 272.19,386.95 272.64,386.95C272.88,386.95 273.33,386.37 273.8,385.79C274.48,384.93 275.17,383.78 276.09,384.07C277.01,384.35 277.24,386.08 277.24,387.23C277.24,387.81 277.24,388.96 277.7,388.96C277.93,388.96 278.39,388.39 278.85,387.81C279.54,386.95 280.23,385.79 281.15,386.08C282.07,386.37 282.3,388.1 282.3,389.25C282.3,389.83 282.3,390.98 282.76,390.98C282.99,390.98 283.45,390.4 283.91,389.83C284.6,388.96 285.29,387.81 286.21,388.1C286.44,388.1 286.67,388.67 286.67,388.96C286.67,389.25 286.21,389.54 285.98,389.54C285.75,389.54 285.29,390.11 284.83,390.69C284.6,391.55 283.91,392.42 282.99,392.42Z"
android:fillColor="#505050"/>
<path
android:pathData="M139.79,419.77C139.56,419.77 139.33,419.77 139.33,419.49C137.73,416.03 140.25,412 142.55,408.26C144.62,404.8 146.92,401.06 145.77,398.46C144.62,395.87 140.94,396.45 137.49,397.31C133.59,398.18 129.68,398.75 128.07,395.58C126.46,392.13 128.99,388.1 131.29,384.35C133.36,380.9 135.66,377.15 134.51,374.56C133.36,371.97 129.68,372.55 126.23,373.41C122.32,374.27 118.42,374.85 116.81,371.68C115.2,368.23 117.73,364.2 120.03,360.45C122.1,356.99 124.39,353.25 123.25,350.66C122.1,348.07 118.42,348.64 114.97,349.51C111.06,350.37 107.15,350.95 105.55,347.49C105.32,347.2 105.55,346.63 105.78,346.63C106.01,346.34 106.47,346.63 106.47,346.92C107.61,349.51 111.29,348.93 114.74,348.07C118.65,347.2 122.56,346.63 124.16,350.08C125.77,353.54 123.25,357.57 120.95,361.32C118.88,364.77 116.58,368.51 117.73,371.11C118.88,373.7 122.56,373.12 126,372.26C129.91,371.39 133.82,370.82 135.43,373.99C137.04,377.44 134.51,381.47 132.21,385.22C130.14,388.67 127.84,392.42 128.99,395.01C130.14,397.6 133.82,397.02 137.26,396.16C141.17,395.3 145.08,394.72 146.69,397.89C148.3,401.34 145.77,405.38 143.47,409.12C141.4,412.58 139.1,416.32 140.25,418.91C140.48,419.2 140.25,419.77 140.02,419.77H139.79Z"
android:fillColor="#505050"/>
<path
android:pathData="M420.21,795.59C417.68,795.3 416.99,791.55 416.53,788.1C415.84,785.22 415.38,782.05 413.77,781.76C412.16,781.47 411.01,784.35 409.64,786.95C408.26,790.11 406.88,793.28 404.35,792.71C402.05,792.42 401.36,788.67 400.67,785.22C399.98,782.34 399.52,779.17 397.91,778.88C396.3,778.59 395.15,781.47 393.78,784.07C392.4,787.23 391.02,790.4 388.49,789.83C386.19,789.54 385.5,785.79 384.81,782.34C384.12,779.46 383.66,776.29 382.05,776C380.44,775.72 379.3,778.59 377.92,781.19C376.54,784.35 375.16,787.52 372.63,786.95C372.4,786.95 372.17,786.66 372.17,786.08C372.17,785.79 372.63,785.51 372.86,785.51C374.47,785.79 375.62,782.91 377,780.32C378.38,777.16 379.76,773.99 382.28,774.56C384.58,774.85 385.27,778.59 385.96,782.05C386.65,784.93 387.11,788.1 388.72,788.39C390.33,788.67 391.48,785.79 392.86,783.2C394.23,780.03 395.61,776.87 398.14,777.44C400.44,777.73 401.13,781.47 401.82,784.93C402.51,787.81 402.97,790.98 404.58,791.27C406.19,791.55 407.34,788.67 408.72,786.08C410.1,782.91 411.47,779.75 414,780.32C416.3,780.61 416.99,784.35 417.68,787.81C418.37,790.69 418.83,793.86 420.44,794.15C420.67,794.15 420.9,794.43 420.9,795.01C420.9,795.59 420.67,795.59 420.21,795.59Z"
android:fillColor="#505050"/>
<path
android:pathData="M55.44,786.95C53.37,786.66 52.91,783.49 52.45,780.9C51.99,778.59 51.53,776.29 50.38,776C49.23,775.72 48.08,777.73 47.16,780.03C46.01,782.63 44.87,784.93 42.8,784.64C40.96,784.35 40.27,781.47 39.81,778.59C39.35,776.29 38.89,773.99 37.74,773.7C36.59,773.41 35.44,775.43 34.52,777.73C33.37,780.32 31.99,782.63 30.16,782.34C28.32,782.05 27.63,779.17 27.17,776.29C26.71,773.99 26.25,771.68 25.1,771.4C23.95,771.11 22.8,773.12 21.88,775.43C20.73,778.02 19.35,780.32 17.51,780.03C17.28,780.03 17.05,779.46 17.05,779.17C17.05,778.88 17.51,778.59 17.74,778.59C18.89,778.88 20.04,776.87 20.96,774.56C22.11,771.97 23.49,769.67 25.33,769.96C27.17,770.24 27.86,773.12 28.32,776C28.78,778.31 29.24,780.61 30.38,780.9C31.53,781.19 32.68,779.17 33.6,776.87C34.75,774.28 36.13,771.97 37.97,772.26C39.81,772.55 40.5,775.43 40.96,778.31C41.42,780.61 41.88,782.91 43.03,783.2C44.18,783.49 45.33,781.47 46.24,779.17C47.39,776.58 48.77,774.28 50.61,774.56C52.45,774.85 53.14,777.73 53.6,780.61C54.06,782.91 54.52,785.22 55.67,785.51C55.9,785.51 56.13,786.08 56.13,786.37C55.9,786.66 55.67,786.95 55.44,786.95Z"
android:fillColor="#505050"/>
<path
android:pathData="M172.21,372.55C171.98,372.55 171.98,372.55 171.74,372.26C171.29,371.39 171.74,370.53 171.98,369.67C172.21,369.38 172.43,368.8 172.43,368.52C172.21,368.52 171.74,368.8 171.51,368.8C170.82,369.09 169.91,369.38 169.45,368.52C168.99,367.65 169.45,366.79 169.68,365.92C169.91,365.64 170.14,365.06 170.14,364.77C169.91,364.77 169.45,365.06 169.22,365.06C168.53,365.35 167.61,365.64 167.15,364.77C166.69,363.91 167.15,363.04 167.38,362.18C167.61,361.89 167.84,361.32 167.84,361.03C167.84,361.03 167.15,361.32 166.92,361.32C166.23,361.6 165.31,361.89 164.85,361.03C164.62,360.74 164.62,360.16 164.85,359.88C165.08,359.59 165.54,359.59 165.77,359.88C166,359.88 166.46,359.59 166.69,359.59C167.38,359.3 168.3,359.01 168.76,359.88C169.22,360.74 168.76,361.6 168.53,362.47C168.3,362.76 168.07,363.33 168.07,363.62C168.07,363.62 168.76,363.33 168.99,363.33C169.68,363.04 170.6,362.76 171.05,363.62C171.51,364.48 171.05,365.35 170.82,366.21C170.6,366.5 170.37,367.08 170.37,367.36C170.6,367.36 171.05,367.08 171.29,367.08C171.98,366.79 172.89,366.5 173.35,367.36C173.81,368.23 173.35,369.09 173.12,369.95C172.89,370.24 172.66,370.82 172.66,371.11C172.89,371.39 172.89,371.97 172.66,371.97C172.43,372.55 172.43,372.55 172.21,372.55Z"
android:fillColor="#505050"/>
<path
android:pathData="M317.7,684.71C317.24,684.71 317.01,684.14 317.24,683.85C317.47,682.41 318.85,681.84 320.22,681.55C321.14,681.26 322.06,680.97 322.29,680.4C322.29,679.82 321.6,679.24 320.68,678.67C319.53,677.8 318.39,676.94 318.61,675.21C318.85,673.77 320.22,673.2 321.6,672.91C322.52,672.62 323.44,672.33 323.67,671.76C323.67,671.18 322.98,670.6 322.06,670.03C320.91,669.16 319.76,668.3 319.99,666.57C320.22,665.13 321.6,664.56 322.98,664.27C323.9,663.98 324.82,663.69 325.05,663.12C325.05,662.54 324.36,661.96 323.44,661.1C322.29,660.24 321.14,659.37 321.37,657.64C321.37,657.36 321.83,657.07 322.06,657.07C322.29,657.07 322.52,657.64 322.52,657.93C322.52,658.51 323.21,659.08 324.13,659.95C325.28,660.81 326.43,661.68 326.2,663.4C325.97,664.84 324.59,665.42 323.21,665.71C322.29,666 321.37,666.28 321.14,666.86C321.14,667.44 321.83,668.01 322.75,668.59C323.9,669.45 325.05,670.32 324.82,672.04C324.59,673.48 323.21,674.06 321.83,674.35C320.91,674.64 319.99,674.92 319.76,675.5C319.76,676.08 320.45,676.65 321.37,677.23C322.52,678.09 323.67,678.96 323.44,680.68C323.21,682.12 321.83,682.7 320.45,682.99C319.53,683.27 318.61,683.56 318.39,684.14C318.39,684.43 317.92,684.71 317.7,684.71Z"
android:fillColor="#505050"/>
<path
android:pathData="M298.85,634.61C298.39,634.61 298.16,634.03 298.39,633.74C298.39,633.46 297.7,633.17 297.47,632.88C296.78,632.3 295.86,631.73 296.09,630.58C296.32,629.42 297.24,629.14 297.93,628.85C298.16,628.85 298.85,628.56 299.08,628.27C299.08,627.98 298.39,627.7 298.16,627.41C297.47,626.83 296.55,626.26 296.78,625.1C297.01,623.95 297.93,623.66 298.62,623.38C298.85,623.38 299.54,623.09 299.77,622.8C299.77,622.51 299.08,622.22 298.85,621.94C298.16,621.36 297.24,620.78 297.47,619.63C297.7,618.48 298.62,618.19 299.31,617.91C299.54,617.91 300.23,617.62 300.46,617.33C300.46,617.04 300.92,616.75 301.15,616.75C301.38,616.75 301.61,617.04 301.61,617.62C301.38,618.77 300.46,619.06 299.77,619.34C299.54,619.34 298.85,619.63 298.62,619.92C298.62,620.21 299.31,620.5 299.54,620.78C300.23,621.36 301.15,621.94 300.92,623.09C300.69,624.24 299.77,624.53 299.08,624.82C298.85,624.82 298.16,625.1 297.93,625.39C297.93,625.68 298.62,625.97 298.85,626.26C299.54,626.83 300.46,627.41 300.23,628.56C300,629.71 299.08,630 298.39,630.29C298.16,630.29 297.47,630.58 297.24,630.86C297.24,631.15 297.93,631.44 298.16,631.73C298.85,632.3 299.77,632.88 299.54,634.03C299.54,634.32 299.08,634.61 298.85,634.61Z"
android:fillColor="#505050"/>
<path
android:pathData="M82.11,639.5C80.73,639.5 79.35,638.06 78.2,636.62C76.82,635.18 75.44,633.46 74.52,634.03C74.29,634.32 73.83,634.03 73.83,633.74C73.6,633.46 73.83,632.88 74.06,632.88C75.67,631.73 77.51,633.74 79.12,635.47C80.5,636.91 81.88,638.64 82.79,638.06C83.71,637.49 83.71,635.18 83.48,632.88C83.25,630 83.25,627.41 84.86,626.26C86.47,625.1 88.31,627.12 89.92,628.85C91.3,630.29 92.68,632.02 93.6,631.44C94.52,630.86 94.52,628.56 94.29,626.26C94.06,623.38 94.06,620.78 95.67,619.63C97.28,618.48 99.11,620.5 100.72,622.22C102.1,623.66 103.48,625.39 104.4,624.82C105.32,624.24 105.32,621.94 105.09,619.63C104.86,616.75 104.86,614.16 106.47,613.01C106.7,612.72 107.16,613.01 107.16,613.3C107.39,613.59 107.16,614.16 106.93,614.16C106.01,614.74 106.01,617.04 106.24,619.34C106.47,622.22 106.47,624.82 104.86,625.97C103.25,627.12 101.41,625.1 99.8,623.38C98.42,621.94 97.05,620.21 96.13,620.78C95.21,621.36 95.21,623.66 95.44,625.97C95.67,628.85 95.67,631.44 94.06,632.59C92.45,633.74 90.61,631.73 89,630C87.62,628.56 86.24,626.83 85.32,627.41C84.4,627.98 84.4,630.29 84.63,632.59C84.86,635.47 84.86,638.06 83.25,639.22C82.79,639.5 82.56,639.5 82.11,639.5Z"
android:fillColor="#505050"/>
<path
android:pathData="M271.27,788.1C271.04,788.1 270.81,787.81 270.81,787.52C270.81,787.23 271.04,786.66 271.27,786.66C272.65,786.37 273.34,783.78 273.8,781.19C274.49,778.02 275.18,774.85 277.48,774.56C279.54,774.28 280.92,777.16 282.07,780.03C282.99,782.34 284.14,784.93 285.52,784.64C286.9,784.35 287.59,781.76 288.05,779.17C288.74,776 289.43,772.84 291.73,772.55C293.79,772.26 295.17,775.14 296.32,778.02C297.24,780.32 298.39,782.91 299.77,782.63C301.15,782.34 301.84,779.75 302.3,777.16C302.99,773.99 303.68,770.82 305.98,770.53C308.05,770.24 309.42,773.12 310.57,776C311.49,778.31 312.64,780.9 314.02,780.61C314.25,780.61 314.71,780.9 314.71,781.19C314.71,781.47 314.48,782.05 314.25,782.05C312.18,782.34 310.8,779.46 309.65,776.58C308.73,774.28 307.58,771.68 306.21,771.97C304.83,772.26 304.14,774.85 303.68,777.44C302.99,780.61 302.3,783.78 300,784.07C297.93,784.35 296.55,781.47 295.4,778.59C294.48,776.29 293.33,773.7 291.95,773.99C290.58,774.28 289.89,776.87 289.43,779.46C288.74,782.63 288.05,785.79 285.75,786.08C283.68,786.37 282.3,783.49 281.15,780.61C280.23,778.31 279.08,775.72 277.7,776C276.33,776.29 275.64,778.88 275.18,781.47C274.26,784.64 273.57,787.81 271.27,788.1C271.5,788.1 271.27,788.1 271.27,788.1Z"
android:fillColor="#505050"/>
<path
android:pathData="M190.59,795.88C190.36,795.88 190.13,795.59 190.13,795.3C190.13,794.72 189.21,794.43 188.52,794.15C187.37,793.86 186.22,793.28 185.99,791.84C185.99,790.4 187.14,789.54 188.06,788.96C188.75,788.67 189.44,788.1 189.44,787.52C189.44,786.95 188.52,786.66 187.83,786.37C186.68,786.08 185.53,785.51 185.3,784.07C185.3,782.63 186.45,781.76 187.37,781.19C188.06,780.9 188.75,780.32 188.75,779.75C188.75,779.17 187.83,778.88 187.14,778.6C185.99,778.31 184.84,777.73 184.62,776.29C184.62,774.85 185.76,773.99 186.68,773.41C187.37,773.12 188.06,772.55 188.06,771.97C188.06,771.68 188.29,771.11 188.52,771.11C188.75,771.11 189.21,771.4 189.21,771.68C189.21,773.12 188.06,773.99 187.14,774.56C186.45,774.85 185.76,775.43 185.76,776C185.76,776.58 186.68,776.87 187.37,777.16C188.52,777.44 189.67,778.02 189.9,779.46C189.9,780.9 188.75,781.76 187.83,782.34C187.14,782.63 186.45,783.2 186.45,783.78C186.45,784.36 187.37,784.64 188.06,784.93C189.21,785.22 190.36,785.79 190.59,787.23C190.59,788.67 189.44,789.54 188.52,790.11C187.83,790.4 187.14,790.98 187.14,791.55C187.14,792.13 188.06,792.42 188.75,792.71C189.9,792.99 191.05,793.57 191.28,795.01C191.05,795.59 190.82,795.88 190.59,795.88Z"
android:fillColor="#505050"/>
<path
android:pathData="M369.88,593.71C369.65,593.71 369.65,593.71 369.42,593.43C369.19,593.14 369.19,592.56 369.42,592.27C369.42,591.99 369.19,591.41 369.19,591.12C368.96,590.26 368.5,589.11 369.19,588.24C369.88,587.38 370.8,587.95 371.48,588.24C371.71,588.24 372.4,588.53 372.4,588.53C372.4,588.24 372.17,587.67 372.17,587.38C371.95,586.51 371.48,585.36 372.17,584.5C372.86,583.64 373.78,584.21 374.47,584.5C374.7,584.5 375.39,584.79 375.39,584.79C375.39,584.5 375.16,583.92 375.16,583.64C374.93,582.77 374.47,581.62 375.16,580.76C375.85,579.89 376.77,580.47 377.46,580.76C377.69,581.04 378.38,581.04 378.38,581.04C378.61,580.76 379.07,580.76 379.3,581.04C379.53,581.33 379.53,581.91 379.3,582.2C378.61,583.06 377.69,582.48 377,582.2C376.77,582.2 376.08,581.91 376.08,581.91C376.08,582.2 376.31,582.77 376.31,583.06C376.54,583.92 377,585.07 376.31,585.94C375.62,586.8 374.7,586.23 374.01,585.94C373.78,585.65 373.09,585.65 373.09,585.65C373.09,585.94 373.32,586.51 373.32,586.8C373.55,587.67 374.01,588.82 373.32,589.68C372.64,590.55 371.71,589.97 371.03,589.68C370.8,589.68 370.11,589.39 370.11,589.39C370.11,589.68 370.34,590.26 370.34,590.55C370.57,591.41 371.03,592.56 370.34,593.43C370.34,593.43 370.11,593.71 369.88,593.71Z"
android:fillColor="#505050"/>
<path
android:pathData="M206.45,346.34C206.22,346.34 206.22,346.34 205.99,346.05C203.69,343.75 204.84,339.14 205.99,334.82C206.91,331.08 208.06,327.05 206.45,325.32C204.84,323.59 201.85,325.61 199.09,327.62C195.88,329.64 192.66,331.94 190.36,329.64C188.06,327.33 189.21,322.73 190.36,318.41C191.28,314.66 192.43,310.63 190.82,308.9C189.21,307.17 186.22,309.19 183.46,311.21C180.24,313.22 177.03,315.53 174.73,313.22C172.43,310.92 173.58,306.31 174.73,301.99C175.65,298.25 176.8,294.22 174.96,292.49C173.35,290.76 170.36,292.78 167.6,294.5C164.39,296.52 161.17,298.82 158.87,296.52C158.64,296.23 158.64,295.94 158.87,295.37C159.1,295.08 159.33,295.08 159.79,295.37C161.4,297.1 164.39,295.08 167.14,293.35C170.36,291.34 173.58,289.03 175.88,291.34C178.18,293.64 177.03,298.25 175.88,302.57C174.96,306.31 173.81,310.34 175.65,312.07C177.26,313.8 180.24,311.78 183,309.77C186.22,307.75 189.44,305.45 191.74,307.75C194.04,310.05 192.89,314.66 191.74,318.98C190.82,322.73 189.67,326.76 191.28,328.49C192.89,330.21 195.88,328.2 198.63,326.18C201.85,324.17 205.07,321.86 207.37,324.17C209.67,326.47 208.52,331.08 207.37,335.4C206.45,339.14 205.3,343.17 206.91,344.9C207.14,345.19 207.14,345.48 206.91,346.05C206.68,346.34 206.68,346.34 206.45,346.34Z"
android:fillColor="#505050"/>
<path
android:pathData="M375.16,748.93C374.24,748.93 373.78,747.78 373.55,746.92C373.55,746.63 373.32,745.77 373.09,745.77C372.86,745.77 372.64,746.63 372.64,746.92C372.4,747.78 371.95,748.93 371.03,748.93C370.11,748.93 369.88,747.78 369.42,746.92C369.42,746.63 369.19,745.77 368.96,745.77C368.73,745.77 368.5,746.63 368.5,746.92C368.27,747.78 367.81,748.93 366.89,748.93C365.97,748.93 365.74,747.78 365.28,746.92C365.28,746.63 365.05,745.77 364.82,745.77C364.59,745.77 364.36,745.48 364.36,744.9C364.36,744.61 364.59,744.33 365.05,744.33C365.97,744.33 366.2,745.48 366.66,746.34C366.66,746.63 366.89,747.49 367.12,747.49C367.35,747.49 367.58,746.63 367.58,746.34C367.81,745.48 368.27,744.33 369.19,744.33C370.11,744.33 370.34,745.48 370.8,746.34C370.8,746.63 371.03,747.49 371.26,747.49C371.48,747.49 371.71,746.63 371.71,746.34C371.95,745.48 372.4,744.33 373.32,744.33C374.24,744.33 374.47,745.48 374.93,746.34C374.93,746.63 375.16,747.49 375.39,747.49C375.62,747.49 375.85,746.63 375.85,746.34C376.08,745.48 376.54,744.33 377.46,744.33C377.69,744.33 377.92,744.61 377.92,745.19C377.92,745.48 377.69,745.77 377.46,745.77C377.23,745.77 377,746.63 377,746.92C376.31,747.78 375.85,748.93 375.16,748.93Z"
android:fillColor="#505050"/>
<path
android:pathData="M148.07,327.91C147.84,327.91 147.84,327.91 148.07,327.91C146.92,327.33 146.69,325.89 146.69,324.45C146.69,323.59 146.46,322.44 146.23,322.44C146,322.44 145.31,323.3 144.85,323.88C144.16,325.03 143.47,326.18 142.32,325.61C141.18,325.32 141.18,323.59 141.18,322.15C141.18,321.29 140.95,320.14 140.72,320.14C140.49,320.14 139.8,321 139.34,321.58C138.65,322.73 137.96,323.88 136.81,323.3C135.66,323.02 135.66,321.29 135.66,319.85C135.66,318.98 135.43,317.83 135.2,317.83C134.97,317.83 134.28,318.7 133.82,319.27C133.13,320.42 132.44,321.58 131.29,321C131.06,321 130.83,320.42 130.83,320.14C130.83,319.85 131.29,319.56 131.52,319.56C131.75,319.56 132.44,318.7 132.9,318.12C133.59,316.97 134.28,315.82 135.43,316.39C136.58,316.68 136.58,318.41 136.58,319.85C136.58,320.71 136.81,321.86 137.04,321.86C137.27,321.86 137.96,321 138.42,320.42C139.11,319.27 139.8,318.12 140.95,318.7C142.1,318.98 142.1,320.71 142.1,322.15C142.1,323.02 142.32,324.17 142.55,324.17C142.78,324.17 143.47,323.3 143.93,322.73C144.62,321.58 145.31,320.42 146.46,321C147.61,321.29 147.61,323.02 147.61,324.45C147.61,325.32 147.84,326.47 148.07,326.47C148.3,326.47 148.53,327.05 148.53,327.33C148.53,327.91 148.3,327.91 148.07,327.91Z"
android:fillColor="#505050"/>
<path
android:pathData="M260.24,503.58C259.09,503.58 258.17,502.42 257.02,501.56C255.87,500.41 254.95,499.55 254.26,499.83C254.03,500.12 253.57,499.83 253.57,499.55C253.34,499.26 253.57,498.68 253.8,498.68C255.18,497.82 256.56,499.26 257.94,500.41C259.09,501.56 260.01,502.42 260.7,502.14C261.39,501.56 261.16,499.83 260.93,498.39C260.7,496.38 260.47,494.07 261.85,493.21C263.23,492.35 264.6,493.79 265.98,494.94C267.13,496.09 268.05,496.95 268.74,496.67C269.43,496.09 269.2,494.36 268.97,492.92C268.74,490.9 268.51,488.6 269.89,487.74C271.27,486.87 272.65,488.31 274.03,489.47C275.18,490.62 276.1,491.48 276.79,491.19C277.48,490.62 277.24,488.89 277.02,487.45C276.79,485.43 276.56,483.13 277.93,482.27C278.17,481.98 278.63,482.27 278.63,482.55C278.85,482.84 278.63,483.42 278.39,483.42C277.7,483.99 277.93,485.72 278.17,487.16C278.39,489.18 278.63,491.48 277.24,492.35C275.87,493.21 274.49,491.77 273.11,490.62C271.96,489.47 271.04,488.6 270.35,488.89C269.66,489.47 269.89,491.19 270.12,492.63C270.35,494.65 270.58,496.95 269.2,497.82C267.82,498.68 266.44,497.24 265.06,496.09C263.91,494.94 262.99,494.07 262.3,494.36C261.62,494.94 261.85,496.67 262.08,498.11C262.3,500.12 262.54,502.42 261.16,503.29C260.93,503.58 260.47,503.58 260.24,503.58Z"
android:fillColor="#505050"/>
<path
android:pathData="M260.69,697.39C260.46,697.39 260.69,697.39 260.69,697.39C259.08,696.81 259.08,694.79 259.08,692.78C259.08,691.34 259.08,689.9 258.4,689.61C257.94,689.32 257.02,690.47 256.33,691.34C255.41,692.78 254.26,694.22 252.88,693.64C251.5,693.07 251.5,691.05 251.5,689.03C251.5,687.59 251.5,686.16 250.81,685.87C250.12,685.58 249.43,686.73 248.74,687.59C247.82,689.03 246.67,690.47 245.29,689.9C243.91,689.32 243.91,687.31 243.91,685.29C243.91,683.85 243.91,682.41 243.23,682.12C242.77,681.84 241.85,682.99 241.16,683.85C240.24,685.29 239.09,686.73 237.71,686.16C237.48,686.16 237.25,685.58 237.48,685.29C237.48,685 237.94,684.72 238.17,685C238.63,685.29 239.55,684.14 240.24,683.28C241.16,681.84 242.31,680.4 243.68,680.97C245.07,681.55 245.07,683.56 245.07,685.58C245.07,687.02 245.07,688.46 245.75,688.75C246.21,689.03 247.13,687.88 247.82,687.02C248.74,685.58 249.89,684.14 251.27,684.72C252.65,685.29 252.65,687.31 252.65,689.32C252.65,690.76 252.65,692.2 253.34,692.49C253.8,692.78 254.72,691.63 255.41,690.76C256.33,689.32 257.48,687.88 258.86,688.46C260.23,689.03 260.23,691.05 260.23,693.07C260.23,694.51 260.23,695.95 260.92,696.23C261.15,696.23 261.38,696.81 261.15,697.1C261.15,697.1 260.92,697.39 260.69,697.39Z"
android:fillColor="#505050"/>
<path
android:pathData="M40.73,557.43C39.35,557.43 38.43,555.7 37.51,553.68C36.82,552.24 35.9,550.52 34.98,550.8C34.75,550.8 34.29,550.52 34.29,550.23C34.29,549.94 34.52,549.37 34.75,549.37C36.36,549.08 37.28,551.09 38.43,553.11C39.12,554.55 40.04,556.28 40.96,555.99C41.88,555.7 42.11,553.97 42.34,552.24C42.8,549.94 43.03,547.64 44.64,547.35C46.25,547.06 47.17,549.08 48.31,551.09C49,552.53 49.92,554.26 50.84,553.97C51.76,553.68 51.99,551.96 52.22,550.23C52.68,547.93 52.91,545.62 54.52,545.33C56.13,545.05 57.05,547.06 58.2,549.08C58.89,550.52 59.81,552.24 60.73,551.96C61.65,551.67 61.88,549.94 62.11,548.21C62.56,545.91 62.79,543.61 64.4,543.32C64.63,543.32 65.09,543.61 65.09,543.89C65.09,544.18 64.86,544.76 64.63,544.76C63.71,545.05 63.48,546.77 63.25,548.5C62.79,550.8 62.56,553.11 60.96,553.4C59.35,553.68 58.43,551.67 57.28,549.65C56.59,548.21 55.67,546.49 54.75,546.77C53.83,547.06 53.6,548.79 53.37,550.52C52.91,552.82 52.68,555.13 51.07,555.41C49.46,555.7 48.54,553.68 47.39,551.67C46.71,550.23 45.79,548.5 44.87,548.79C43.95,549.08 43.72,550.8 43.49,552.53C43.03,554.84 42.8,557.14 41.19,557.43C40.96,557.43 40.96,557.43 40.73,557.43Z"
android:fillColor="#505050"/>
<path
android:pathData="M332.87,416.03C332.64,416.03 332.41,415.74 332.41,415.45C331.95,413.73 329.65,413.44 327.58,413.15C325.05,412.86 322.3,412.58 321.61,409.7C320.92,407.1 323.22,405.09 325.29,403.07C327.12,401.34 328.96,399.62 328.5,397.89C328.04,396.16 325.74,395.87 323.68,395.58C321.15,395.3 318.39,395.01 317.7,392.13C317.01,389.25 319.31,387.52 321.38,385.51C323.22,383.78 325.05,382.05 324.6,380.32C324.14,378.59 321.84,378.31 319.77,378.02C317.24,377.73 314.48,377.44 313.79,374.56C313.1,371.97 315.4,369.95 317.47,367.94C319.31,366.21 321.15,364.48 320.69,362.76C320.69,362.47 320.69,361.89 321.15,361.89C321.38,361.89 321.84,361.89 321.84,362.47C322.53,365.06 320.23,367.08 318.16,369.09C316.32,370.82 314.48,372.55 314.94,374.27C315.4,376 317.7,376.29 319.77,376.58C322.3,376.87 325.05,377.15 325.74,380.03C326.43,382.63 324.14,384.64 322.07,386.66C320.23,388.39 318.39,390.11 318.85,391.84C319.31,393.57 321.61,393.86 323.68,394.14C326.2,394.43 328.96,394.72 329.65,397.6C330.34,400.19 328.04,402.21 325.97,404.22C324.14,405.95 322.3,407.68 322.76,409.41C323.22,411.14 325.52,411.42 327.58,411.71C330.11,412 332.87,412.29 333.56,415.17C333.33,415.45 333.33,416.03 332.87,416.03Z"
android:fillColor="#505050"/>
<path
android:pathData="M245.53,553.11C245.3,553.11 245.3,553.11 245.07,552.82C243.69,550.8 244.84,547.92 245.76,545.04C246.68,542.74 247.6,540.15 246.68,539C245.76,537.85 243.69,538.71 241.62,539.57C239.32,540.73 236.79,541.88 235.41,539.86C234.04,537.85 235.18,534.97 236.1,532.09C237.02,529.78 237.94,527.19 237.02,526.04C236.1,524.89 234.04,525.75 231.97,526.61C229.67,527.77 227.14,528.92 225.76,526.9C224.38,524.89 225.53,522.01 226.45,519.13C227.37,516.82 228.29,514.23 227.37,513.08C226.45,511.93 224.38,512.79 222.31,513.66C220.01,514.81 217.49,515.96 216.11,513.94C215.88,513.66 215.88,513.08 216.11,512.79C216.34,512.5 216.8,512.5 217.03,512.79C217.95,513.94 220.01,513.08 222.08,512.22C224.38,511.06 226.91,509.91 228.29,511.93C229.67,513.94 228.52,516.82 227.6,519.7C226.68,522.01 225.76,524.6 226.68,525.75C227.6,526.9 229.67,526.04 231.74,525.17C234.04,524.02 236.56,522.87 237.94,524.89C239.32,526.9 238.17,529.78 237.25,532.66C236.33,534.97 235.41,537.56 236.33,538.71C237.25,539.86 239.32,539 241.39,538.13C243.69,536.98 246.22,535.83 247.6,537.85C248.98,539.86 247.83,542.74 246.91,545.62C245.99,547.92 245.07,550.52 245.99,551.67C246.22,551.96 246.22,552.53 245.99,552.82C245.76,553.11 245.76,553.11 245.53,553.11Z"
android:fillColor="#505050"/>
<path
android:pathData="M114.28,702.86C114.05,702.86 114.05,702.86 113.82,702.57C112.44,701.13 113.13,698.83 113.82,696.52C114.28,694.79 114.74,692.78 114.05,691.91C113.36,691.05 111.98,692.2 110.6,693.07C108.99,694.22 107.15,695.37 105.78,693.93C104.4,692.49 105.09,690.19 105.78,687.88C106.24,686.16 106.69,684.14 106,683.28C105.32,682.41 103.94,683.56 102.56,684.43C100.95,685.58 99.11,686.73 97.73,685.29C96.35,683.85 97.04,681.55 97.73,679.24C98.19,677.23 98.65,675.5 97.96,674.64C97.27,673.77 95.89,674.92 94.51,675.79C92.9,676.94 91.07,678.09 89.69,676.65C89.46,676.36 89.46,676.08 89.69,675.5C89.92,675.21 90.15,675.21 90.61,675.5C91.29,676.36 92.67,675.21 94.05,674.35C95.66,673.2 97.5,672.04 98.88,673.48C100.26,674.92 99.57,677.23 98.88,679.53C98.42,681.26 97.96,683.28 98.65,684.14C99.34,685 100.72,683.85 102.1,682.99C103.71,681.84 105.55,680.68 106.93,682.12C108.3,683.56 107.61,685.87 106.93,688.17C106.46,690.19 106,691.91 106.69,692.78C107.38,693.64 108.76,692.49 110.14,691.63C111.75,690.47 113.59,689.32 114.97,690.76C116.35,692.2 115.66,694.51 114.97,696.81C114.51,698.54 114.05,700.55 114.74,701.42C114.97,701.71 114.97,701.99 114.74,702.57C114.51,702.86 114.51,702.86 114.28,702.86Z"
android:fillColor="#505050"/>
<path
android:pathData="M282.3,246.41C281.84,246.41 281.38,246.41 281.15,246.12C279.31,244.68 279.77,241.8 280.23,238.93C280.46,236.33 280.92,234.03 279.77,233.16C278.62,232.3 277.01,234.03 275.4,235.47C273.57,237.2 271.5,239.21 269.89,237.77C268.05,236.62 268.51,233.45 268.97,230.57C269.2,227.98 269.66,225.68 268.51,224.81C267.36,223.95 265.75,225.68 264.14,227.12C262.3,228.85 260.23,230.86 258.63,229.42C256.79,228.27 257.25,225.1 257.71,222.22C257.94,219.63 258.39,217.33 257.25,216.46C257.02,216.17 256.79,215.89 257.02,215.6C257.25,215.31 257.48,215.02 257.71,215.31C259.54,216.46 259.08,219.63 258.63,222.51C258.39,225.1 257.94,227.41 259.08,228.27C260.23,229.13 261.84,227.41 263.45,225.97C265.29,224.24 267.36,222.22 268.97,223.66C270.81,224.81 270.35,227.98 269.89,230.86C269.66,233.45 269.2,235.76 270.35,236.62C271.5,237.49 273.11,235.76 274.71,234.32C276.55,232.59 278.62,230.57 280.23,232.01C282.07,233.45 281.61,236.33 281.15,239.21C280.92,241.8 280.46,244.11 281.61,244.97C282.76,245.84 284.37,244.11 285.98,242.67C287.82,240.94 289.89,238.93 291.49,240.37C291.72,240.65 291.95,240.94 291.72,241.23C291.49,241.52 291.26,241.8 291.03,241.52C289.89,240.65 288.28,242.38 286.67,243.82C285.06,244.97 283.68,246.41 282.3,246.41Z"
android:fillColor="#505050"/>
<path
android:pathData="M208.52,231.73C208.29,231.73 208.06,231.73 208.06,231.44C206.91,229.13 208.52,226.54 209.9,223.66C211.27,221.36 212.42,219.05 211.73,217.62C211.04,216.18 208.75,216.75 206.68,217.33C204.15,217.9 201.62,218.48 200.24,216.18C199.09,213.87 200.7,211.28 202.08,208.4C203.46,206.1 204.61,203.79 203.92,202.35C203.23,200.91 200.93,201.49 198.86,202.06C196.33,202.64 193.81,203.22 192.43,200.91C191.28,198.61 192.89,196.02 194.26,193.14C195.65,190.83 196.79,188.53 196.1,187.09C195.41,185.65 193.12,186.23 191.05,186.8C188.52,187.38 185.99,187.95 184.61,185.65C184.38,185.36 184.61,184.79 184.84,184.79C185.07,184.5 185.53,184.79 185.53,185.07C186.22,186.51 188.52,185.94 190.59,185.36C193.12,184.79 195.65,184.21 197.02,186.51C198.17,188.82 196.56,191.41 195.18,194.29C193.81,196.59 192.66,198.9 193.35,200.34C194.04,201.78 196.33,201.2 198.4,200.62C200.93,200.05 203.46,199.47 204.84,201.78C205.99,204.08 204.38,206.67 203,209.55C201.62,211.86 200.47,214.16 201.16,215.6C201.85,217.04 204.15,216.46 206.22,215.89C208.75,215.31 211.27,214.74 212.65,217.04C213.8,219.34 212.19,221.93 210.82,224.82C209.44,227.12 208.29,229.42 208.98,230.86C209.21,231.15 208.98,231.73 208.75,231.73C208.75,231.44 208.75,231.73 208.52,231.73Z"
android:fillColor="#505050"/>
<path
android:pathData="M107.39,289.32C107.16,289.32 106.93,289.03 106.93,288.74C106.01,286.15 102.56,286.15 99.34,286.44C95.67,286.44 91.99,286.73 90.61,283.27C89.46,279.82 92.22,276.36 94.75,273.19C97.04,270.32 99.57,267.43 98.65,264.84C97.73,262.25 94.29,262.25 91.07,262.54C87.39,262.54 83.71,262.83 82.33,259.37C81.18,255.92 83.94,252.46 86.47,249.29C88.77,246.41 91.3,243.53 90.38,240.94C89.46,238.35 86.01,238.35 82.79,238.64C79.12,238.64 75.44,238.93 74.06,235.47C72.91,232.01 75.67,228.56 78.2,225.39C80.5,222.51 83.02,219.63 82.1,217.04C81.87,216.75 82.1,216.18 82.33,216.18C82.56,215.89 83.02,216.18 83.02,216.46C84.17,219.92 81.41,223.37 78.89,226.54C76.59,229.42 74.06,232.3 74.98,234.89C75.9,237.49 79.35,237.49 82.56,237.2C86.24,237.2 89.92,236.91 91.3,240.37C92.45,243.82 89.69,247.28 87.16,250.44C84.86,253.32 82.33,256.2 83.25,258.8C84.17,261.39 87.62,261.39 90.84,261.1C94.52,261.1 98.19,260.81 99.57,264.27C100.72,267.72 97.96,271.18 95.44,274.35C93.14,277.23 90.61,280.11 91.53,282.7C92.45,285.29 95.9,285.29 99.11,285C102.79,285 106.47,284.71 107.85,288.17C108.08,288.74 107.85,289.32 107.39,289.32C107.62,289.32 107.39,289.32 107.39,289.32Z"
android:fillColor="#505050"/>
<path
android:pathData="M175.65,542.74C175.19,542.74 174.96,542.45 175.19,541.88C175.65,537.84 179.56,536.41 183.47,535.25C186.91,534.1 190.59,532.95 190.82,529.78C191.05,526.61 187.83,524.6 184.62,522.29C181.17,519.99 177.49,517.4 177.95,513.37C178.41,509.34 182.32,507.9 186.22,506.74C189.67,505.59 193.35,504.44 193.58,501.27C193.81,498.1 190.59,496.09 187.37,493.79C183.93,491.48 180.25,488.89 180.71,484.86C181.17,480.83 185.07,479.39 188.98,478.23C192.43,477.08 196.11,475.93 196.34,472.76C196.57,469.6 193.35,467.58 190.13,465.27C186.68,462.97 183.01,460.38 183.47,456.35C183.47,456.06 183.93,455.77 184.15,455.77C184.38,455.77 184.62,456.06 184.62,456.64C184.38,459.8 187.6,461.82 190.82,464.12C194.27,466.43 197.95,469.02 197.49,473.05C197.03,477.08 193.12,478.52 189.21,479.67C185.76,480.83 182.09,481.98 181.86,485.14C181.63,488.31 184.85,490.33 188.06,492.63C191.51,494.94 195.19,497.53 194.73,501.56C194.27,505.59 190.36,507.03 186.45,508.18C183.01,509.33 179.33,510.49 179.1,513.66C178.87,516.82 182.09,518.84 185.3,521.14C188.75,523.45 192.43,526.04 191.97,530.07C191.51,534.1 187.6,535.54 183.7,536.69C180.25,537.84 176.57,539 176.34,542.16C176.11,542.45 175.88,542.74 175.65,542.74Z"
android:fillColor="#505050"/>
<path
android:pathData="M77.97,54.33C77.74,54.33 77.51,54.04 77.51,53.76C77.28,51.74 74.75,51.16 72.45,50.88C69.69,50.3 66.93,49.72 66.48,46.84C66.02,43.96 68.31,41.95 70.84,40.22C72.91,38.49 74.98,36.76 74.52,35.04C74.29,33.02 71.76,32.44 69.46,32.16C66.71,31.58 63.95,31 63.49,28.13C63.03,25.25 65.33,23.23 67.85,21.5C69.92,19.77 71.99,18.33 71.53,16.32C71.3,14.3 68.77,13.73 66.48,13.44C63.72,12.86 60.96,12.29 60.5,9.41C60.04,6.53 62.34,4.51 64.87,2.78C66.93,1.06 69,-0.38 68.54,-2.4C68.54,-2.69 68.77,-3.26 69,-3.26C69.23,-3.26 69.69,-2.98 69.69,-2.69C70.15,0.19 67.85,2.21 65.33,3.93C63.26,5.66 61.19,7.1 61.65,9.12C61.88,11.13 64.41,11.71 66.71,12C69.46,12.57 72.22,13.15 72.68,16.03C73.14,18.91 70.84,20.93 68.31,22.65C66.25,24.38 64.18,25.82 64.64,27.84C64.87,29.85 67.39,30.43 69.69,30.72C72.45,31.29 75.21,31.87 75.67,34.75C76.13,37.63 73.83,39.64 71.3,41.37C69.23,43.1 67.16,44.83 67.62,46.56C67.85,48.57 70.38,49.15 72.68,49.44C75.44,50.01 78.2,50.59 78.66,53.47C78.66,54.04 78.43,54.33 77.97,54.33Z"
android:fillColor="#505050"/>
<path
android:pathData="M237.02,302.57C236.79,302.57 236.56,302.28 236.56,301.99C236.33,300.55 234.26,299.98 232.42,299.4C230.12,298.82 227.82,298.25 227.37,295.66C226.9,293.07 228.97,291.63 231.04,289.9C232.65,288.46 234.49,287.3 234.26,285.86C234.03,284.43 231.96,283.85 230.12,283.27C227.82,282.7 225.53,282.12 225.07,279.53C224.61,276.94 226.68,275.5 228.74,273.77C230.35,272.62 232.19,271.18 231.96,269.74C231.73,268.3 229.66,267.72 227.82,267.15C225.53,266.57 223.23,265.99 222.77,263.4C222.31,260.81 224.38,259.37 226.45,257.93C228.05,256.78 229.89,255.34 229.66,253.9C229.66,253.61 229.89,253.04 230.12,253.04C230.35,253.04 230.81,253.32 230.81,253.61C231.27,256.2 229.2,257.64 227.13,259.08C225.53,260.23 223.69,261.67 223.92,263.11C224.15,264.55 226.21,265.13 228.05,265.71C230.35,266.28 232.65,266.86 233.11,269.45C233.57,272.04 231.5,273.48 229.43,275.21C227.82,276.36 225.99,277.8 226.21,279.24C226.45,280.68 228.51,281.26 230.35,281.83C232.65,282.41 234.95,282.99 235.41,285.58C235.87,288.17 233.8,289.61 231.73,291.34C230.12,292.78 228.28,293.93 228.51,295.37C228.74,296.81 230.81,297.39 232.65,297.96C234.95,298.54 237.25,299.11 237.71,301.7C237.71,302.28 237.48,302.57 237.02,302.57C237.25,302.57 237.25,302.57 237.02,302.57Z"
android:fillColor="#505050"/>
<path
android:pathData="M0.04,546.77H-0.19C-0.41,546.49 -0.41,546.2 -0.41,545.91C0.5,544.18 2.34,544.76 3.95,545.05C5.33,545.33 6.71,545.62 7.17,545.05C7.63,544.18 6.71,542.74 6.02,541.3C5.1,539.57 3.95,537.56 4.87,535.83C5.79,534.1 7.63,534.68 9.24,534.97C10.62,535.26 12,535.54 12.46,534.97C12.92,534.1 12,532.66 11.31,531.22C10.39,529.49 9.24,527.48 10.16,525.75C11.08,524.02 12.92,524.6 14.53,524.89C15.9,525.17 17.28,525.46 17.74,524.89C18.2,524.02 17.28,522.58 16.59,521.14C15.67,519.42 14.53,517.4 15.44,515.67C15.67,515.38 15.9,515.38 16.13,515.38C16.36,515.67 16.36,515.96 16.36,516.25C15.9,517.11 16.82,518.55 17.51,519.99C18.43,521.72 19.58,523.74 18.66,525.46C17.74,527.19 15.9,526.61 14.3,526.33C12.92,526.04 11.54,525.75 11.08,526.33C10.62,527.19 11.54,528.63 12.23,530.07C13.15,531.8 14.3,533.82 13.38,535.54C12.46,537.27 10.62,536.7 9.01,536.41C7.63,536.12 6.25,535.83 5.79,536.41C5.33,537.27 6.25,538.71 6.94,540.15C7.86,541.88 9.01,543.89 8.09,545.62C7.17,547.35 5.33,546.77 3.72,546.49C2.34,546.2 0.96,545.91 0.5,546.49C0.5,546.77 0.27,546.77 0.04,546.77Z"
android:fillColor="#505050"/>
<path
android:pathData="M206.45,709.48C205.99,709.19 205.76,708.91 205.99,708.62C206.45,706.6 204.38,704.3 202.31,702.28C200.01,699.98 197.49,697.39 198.18,694.51C198.86,691.34 202.08,691.05 205.07,690.76C207.6,690.47 210.36,690.19 211.05,688.17C211.51,686.16 209.44,683.85 207.37,681.84C205.07,679.53 202.54,676.94 203.23,674.06C203.92,670.89 207.14,670.6 210.13,670.32C212.65,670.03 215.41,669.74 216.1,667.72C216.56,665.71 214.49,663.4 212.43,661.39C210.13,659.09 207.6,656.49 208.29,653.61C208.98,650.45 212.2,650.16 215.18,649.87C217.71,649.58 220.47,649.29 221.16,647.28C221.16,646.99 221.62,646.7 221.85,646.7C222.08,646.7 222.31,647.28 222.31,647.57C221.62,650.73 218.4,651.02 215.41,651.31C212.88,651.6 210.13,651.89 209.44,653.9C208.98,655.92 211.05,658.22 213.12,660.24C215.41,662.54 217.94,665.13 217.25,668.01C216.56,671.18 213.35,671.47 210.36,671.76C207.83,672.04 205.07,672.33 204.38,674.35C203.92,676.36 205.99,678.67 208.06,680.68C210.36,682.99 212.88,685.58 212.2,688.46C211.51,691.63 208.29,691.91 205.3,692.2C202.77,692.49 200.01,692.78 199.32,694.79C198.86,696.81 200.93,699.11 203,701.13C205.3,703.43 207.83,706.03 207.14,708.91C206.91,709.19 206.68,709.48 206.45,709.48Z"
android:fillColor="#505050"/>
<path
android:pathData="M403.2,219.05C402.97,219.05 402.97,219.05 402.74,218.77C400.91,216.75 402.05,213.58 402.97,210.13C403.89,207.25 404.58,204.37 403.43,203.21C402.29,202.06 399.99,203.21 397.92,204.65C395.39,206.1 392.86,207.82 391.25,205.81C389.41,203.79 390.56,200.62 391.48,197.17C392.4,194.29 393.09,191.41 391.94,190.26C390.79,188.82 388.49,190.26 386.42,191.7C383.9,193.14 381.37,194.86 379.76,192.85C377.92,190.83 379.07,187.66 379.99,184.21C380.91,181.33 381.6,178.45 380.45,177.3C379.3,175.86 377,177.3 374.93,178.74C372.4,180.18 369.88,181.9 368.27,179.89C368.04,179.6 368.04,179.31 368.27,178.74C368.5,178.45 368.73,178.45 369.19,178.74C370.34,180.18 372.63,178.74 374.7,177.3C377.23,175.86 379.76,174.13 381.37,176.15C383.21,178.16 382.06,181.33 381.14,184.79C380.22,187.66 379.53,190.54 380.68,191.7C381.83,193.14 384.13,191.7 386.2,190.26C388.72,188.82 391.25,187.09 392.86,189.1C394.7,191.12 393.55,194.29 392.63,197.74C391.71,200.62 391.02,203.5 392.17,204.65C393.32,206.1 395.62,204.65 397.69,203.21C400.22,201.77 402.74,200.05 404.35,202.06C406.19,204.08 405.04,207.25 404.12,210.7C403.2,213.58 402.52,216.46 403.66,217.61C403.89,217.9 403.89,218.19 403.66,218.77C403.66,219.05 403.43,219.05 403.2,219.05Z"
android:fillColor="#505050"/>
<path
android:pathData="M7.17,380.9C6.94,380.9 6.94,380.9 7.17,380.9C5.33,380.61 4.87,377.73 4.41,375.43C4.18,373.41 3.72,371.11 2.8,371.11C1.89,370.82 0.97,372.83 0.05,374.56C-1.1,376.87 -2.25,378.88 -3.86,378.59C-5.7,378.31 -5.93,375.43 -6.39,373.12C-6.62,371.11 -7.08,368.8 -8,368.8C-8.92,368.52 -9.84,370.53 -10.76,372.26C-11.91,374.56 -13.06,376.58 -14.66,376.29C-16.5,376 -16.73,373.12 -17.19,370.82C-17.42,368.8 -17.88,366.5 -18.8,366.5C-19.72,366.21 -20.64,368.23 -21.56,369.95C-22.71,372.26 -23.86,374.27 -25.47,373.99C-25.7,373.99 -25.93,373.41 -25.93,373.12C-25.93,372.83 -25.47,372.55 -25.24,372.55C-24.32,372.83 -23.4,370.82 -22.48,369.09C-21.33,366.79 -20.18,364.77 -18.57,365.06C-16.73,365.35 -16.5,368.23 -16.04,370.53C-15.81,372.55 -15.35,374.85 -14.43,374.85C-13.51,375.14 -12.6,373.12 -11.68,371.39C-10.53,369.09 -9.38,367.08 -7.77,367.36C-5.93,367.65 -5.7,370.53 -5.24,372.83C-5.01,374.85 -4.55,377.15 -3.63,377.15C-2.71,377.44 -1.79,375.43 -0.87,373.7C0.28,371.39 1.43,369.38 3.03,369.67C4.87,369.95 5.1,372.83 5.56,375.14C5.79,377.15 6.25,379.46 7.17,379.46C7.4,379.46 7.63,380.03 7.63,380.32C7.63,380.61 7.4,380.9 7.17,380.9Z"
android:fillColor="#505050"/>
<path
android:pathData="M40.04,727.62C39.81,727.62 39.58,727.34 39.58,727.05C39.35,726.47 38.43,726.47 37.51,726.18C36.36,726.18 34.98,725.9 34.53,724.46C34.07,723.02 35.21,721.86 36.13,721C36.82,720.42 37.51,719.56 37.51,718.98C37.28,718.41 36.36,718.41 35.44,718.12C34.3,718.12 32.92,717.83 32.46,716.39C32,714.95 33.15,713.8 34.07,712.94C34.75,712.36 35.44,711.5 35.44,710.92C35.21,710.34 34.3,710.34 33.38,710.06C32.23,710.06 30.85,709.77 30.39,708.33C29.93,706.89 31.08,705.74 32,704.87C32.69,704.3 33.38,703.43 33.38,702.86C33.38,702.57 33.38,701.99 33.84,701.99C34.07,701.99 34.53,701.99 34.53,702.57C34.98,704.01 33.84,705.16 32.92,706.03C32.23,706.6 31.54,707.47 31.54,708.04C31.77,708.62 32.69,708.62 33.61,708.91C34.75,708.91 36.13,709.19 36.59,710.63C37.05,712.07 35.9,713.22 34.98,714.09C34.3,714.66 33.61,715.53 33.61,716.1C33.84,716.68 34.75,716.68 35.67,716.97C36.82,716.97 38.2,717.26 38.66,718.7C39.12,720.14 37.97,721.29 37.05,722.15C36.36,722.73 35.67,723.59 35.67,724.17C35.9,724.74 36.82,724.74 37.74,725.03C38.89,725.03 40.27,725.32 40.73,726.76C40.73,727.05 40.5,727.34 40.04,727.62Z"
android:fillColor="#505050"/>
<path
android:pathData="M20.27,478.23H20.04C19.81,477.95 19.81,477.66 19.81,477.37C20.96,475.07 19.12,471.9 17.29,468.73C15.22,464.99 13.15,461.24 14.76,458.36C16.37,455.48 19.81,456.35 23.26,457.21C26.25,458.08 29.47,458.94 30.62,456.64C31.77,454.33 29.93,451.17 28.09,448C26.02,444.25 23.95,440.8 25.56,437.63C27.17,434.75 30.62,435.61 34.06,436.48C37.05,437.34 40.27,438.21 41.42,435.9C42.57,433.6 40.73,430.43 38.89,427.26C36.82,423.52 34.75,420.06 36.36,416.9C37.97,414.02 41.42,414.88 44.87,415.74C47.86,416.61 51.07,417.47 52.22,415.17C52.45,414.88 52.68,414.88 52.91,414.88C53.14,415.17 53.14,415.46 53.14,415.74C51.53,418.62 48.09,417.76 44.64,416.9C41.65,416.03 38.43,415.17 37.28,417.47C36.13,419.77 37.97,422.94 39.81,426.11C41.88,429.86 43.95,433.31 42.34,436.48C40.73,439.36 37.28,438.49 33.83,437.63C30.85,436.77 27.63,435.9 26.48,438.21C25.33,440.51 27.17,443.68 29.01,446.85C31.08,450.59 33.15,454.05 31.54,457.21C29.93,460.09 26.48,459.23 23.03,458.36C20.04,457.5 16.83,456.64 15.68,458.94C14.53,461.24 16.37,464.41 18.21,467.58C20.27,471.32 22.34,475.07 20.73,477.95C20.5,477.95 20.5,478.23 20.27,478.23Z"
android:fillColor="#505050"/>
<path
android:pathData="M369.64,447.13C369.41,447.13 369.18,447.13 369.18,446.85C368.04,444.25 370.1,441.66 371.71,439.07C373.32,436.77 374.93,434.46 374.24,432.73C373.55,431.01 371.02,431.29 368.73,431.58C365.97,431.87 363.21,432.16 362.06,429.57C360.91,426.98 362.98,424.38 364.59,421.79C366.2,419.49 367.8,417.18 367.12,415.45C366.43,413.73 363.9,414.02 361.6,414.3C358.84,414.59 356.08,414.88 354.93,412.29C353.79,409.7 355.85,407.1 357.46,404.51C359.07,402.21 360.68,399.9 359.99,398.18C359.3,396.45 356.77,396.74 354.47,397.02C351.72,397.31 348.96,397.6 347.81,395.01C347.58,394.72 347.81,394.14 348.04,394.14C348.27,393.86 348.73,394.14 348.73,394.43C349.42,396.16 351.95,395.87 354.24,395.58C357,395.3 359.76,395.01 360.91,397.6C362.06,400.19 359.99,402.78 358.38,405.38C356.77,407.68 355.16,409.98 355.85,411.71C356.54,413.44 359.07,413.15 361.37,412.86C364.13,412.58 366.89,412.29 368.04,414.88C369.18,417.47 367.12,420.06 365.51,422.65C363.9,424.96 362.29,427.26 362.98,428.99C363.67,430.72 366.2,430.43 368.49,430.14C371.25,429.85 374.01,429.57 375.16,432.16C376.31,434.75 374.24,437.34 372.63,439.93C371.02,442.24 369.41,444.54 370.1,446.27C370.33,446.56 370.1,447.13 369.87,447.13C369.87,447.13 369.87,447.13 369.64,447.13Z"
android:fillColor="#505050"/>
<path
android:pathData="M345.74,635.18C345.51,635.18 345.51,635.18 345.28,634.9C343.67,632.3 345.28,628.85 346.66,625.39C348.04,622.51 349.42,619.34 348.27,617.62C347.12,615.89 344.36,617.04 341.83,617.9C338.84,619.06 335.86,620.21 334.02,617.62C332.41,615.02 334.02,611.57 335.4,608.11C336.77,605.23 338.15,602.07 337.01,600.34C335.86,598.61 333.1,599.76 330.57,600.63C327.58,601.78 324.59,602.93 322.76,600.34C321.15,597.75 322.76,594.29 324.13,590.83C325.51,587.95 326.89,584.79 325.74,583.06C324.59,581.33 321.83,582.2 319.31,583.35C316.32,584.5 313.33,585.65 311.49,583.06C311.26,582.77 311.26,582.2 311.49,581.91C311.72,581.62 312.18,581.62 312.41,581.91C313.56,583.64 316.32,582.77 318.85,581.62C321.83,580.47 324.82,579.32 326.66,581.91C328.27,584.5 326.66,587.95 325.28,591.41C323.9,594.29 322.52,597.46 323.67,599.19C324.82,600.91 327.58,599.76 330.11,598.9C333.1,597.75 336.09,596.59 337.92,599.19C339.53,601.78 337.92,605.23 336.55,608.69C335.17,611.57 333.79,614.74 334.94,616.46C336.09,618.19 338.84,617.04 341.37,616.18C344.36,615.02 347.35,613.87 349.19,616.46C350.8,619.06 349.19,622.51 347.81,625.97C346.43,628.85 345.05,632.02 346.2,633.74C346.43,634.03 346.43,634.61 346.2,634.9C345.97,634.9 345.97,635.18 345.74,635.18Z"
android:fillColor="#505050"/>
<path
android:pathData="M76.12,717.83C75.66,717.83 75.2,717.54 74.74,716.97C74.05,715.82 74.74,714.66 75.2,713.51C75.43,712.94 75.89,712.07 75.89,711.78C75.66,711.5 74.97,711.78 74.28,711.78C73.37,712.07 72.22,712.36 71.53,711.5C70.84,710.34 71.53,709.19 71.99,708.04C72.22,707.47 72.68,706.6 72.68,706.31C72.45,706.03 71.76,706.31 71.07,706.31C70.15,706.6 69,706.89 68.31,706.03C67.62,704.87 68.31,703.72 68.77,702.57C69,701.99 69.46,701.13 69.46,700.84C69.23,700.55 69.23,699.98 69.69,699.98C69.92,699.69 70.38,699.69 70.38,700.27C71.07,701.42 70.38,702.57 69.92,703.72C69.69,704.3 69.23,705.16 69.23,705.45C69.46,705.74 70.15,705.45 70.84,705.45C71.76,705.16 72.91,704.87 73.6,705.74C74.28,706.89 73.6,708.04 73.14,709.19C72.91,709.77 72.45,710.63 72.45,710.92C72.68,711.21 73.37,710.92 74.05,710.92C74.97,710.63 76.12,710.34 76.81,711.21C77.5,712.36 76.81,713.51 76.35,714.66C76.12,715.24 75.66,716.1 75.66,716.39C75.89,716.68 76.58,716.39 77.27,716.39C78.19,716.1 79.34,715.82 80.03,716.68C80.26,716.97 80.26,717.54 79.8,717.54C79.57,717.83 79.11,717.83 79.11,717.26C78.88,716.97 78.19,717.26 77.5,717.26C77.04,717.54 76.58,717.83 76.12,717.83Z"
android:fillColor="#505050"/>
<path
android:pathData="M185.53,593.43H185.3C182.77,591.41 183.46,586.8 183.92,582.48C184.38,578.45 185.07,574.42 183.01,572.98C181.17,571.54 178.41,574.13 175.88,576.43C173.12,579.03 170.13,581.91 167.6,580.18C165.08,578.16 165.77,573.56 166.23,569.24C166.68,565.2 167.38,561.17 165.31,559.73C163.47,558.29 160.71,560.89 158.18,563.19C155.42,565.78 152.43,568.66 149.91,566.93C147.38,564.92 148.07,560.31 148.53,555.99C148.99,551.96 149.68,547.93 147.61,546.49C145.77,545.05 143.01,547.64 140.48,549.94C137.72,552.53 134.74,555.41 132.21,553.68C131.98,553.4 131.75,553.11 131.98,552.82C132.21,552.53 132.44,552.24 132.67,552.53C134.51,553.97 137.26,551.38 139.79,549.08C142.55,546.49 145.54,543.61 148.07,545.33C150.6,547.35 149.91,551.96 149.45,556.28C148.99,560.31 148.3,564.34 150.37,565.78C152.21,567.22 154.96,564.63 157.49,562.32C160.25,559.45 163.24,556.85 165.77,558.58C168.29,560.6 167.6,565.2 167.15,569.52C166.68,573.56 166,577.59 168.06,579.03C169.9,580.47 172.66,577.88 175.19,575.57C177.95,572.69 180.94,570.1 183.46,571.83C185.99,573.84 185.3,578.45 184.84,582.77C184.38,586.8 183.69,590.83 185.76,592.27C185.99,592.56 186.22,592.85 185.99,593.14C185.99,593.14 185.76,593.43 185.53,593.43Z"
android:fillColor="#505050"/>
<path
android:pathData="M4.64,416.9C3.72,416.9 3.49,415.46 3.26,414.59C3.26,414.3 3.03,413.44 2.8,413.44C2.57,413.44 2.34,414.3 2.11,414.59C1.65,415.46 1.19,416.61 0.27,416.32C-0.65,416.32 -0.88,414.88 -1.11,414.02C-1.11,413.73 -1.34,412.86 -1.57,412.86C-1.8,412.86 -2.02,413.73 -2.25,414.02C-2.71,414.88 -3.17,416.03 -4.09,415.74C-5.01,415.74 -5.24,414.3 -5.47,413.44C-5.47,413.15 -5.7,412.29 -5.93,412.29C-6.16,412.29 -6.39,413.15 -6.62,413.44C-7.08,414.3 -7.54,415.46 -8.46,415.17C-8.69,415.17 -8.92,414.88 -8.92,414.3C-8.92,414.02 -8.69,413.73 -8.23,413.73C-8,413.73 -7.77,412.86 -7.54,412.58C-7.08,411.71 -6.62,410.56 -5.7,410.85C-4.78,410.85 -4.55,412.29 -4.32,413.15C-4.32,413.44 -4.09,414.3 -3.86,414.3C-3.63,414.3 -3.4,413.44 -3.17,413.15C-2.71,412.29 -2.25,411.14 -1.34,411.42C-0.42,411.42 -0.19,412.86 0.04,413.73C0.04,414.02 0.27,414.88 0.5,414.88C0.73,414.88 0.96,414.02 1.19,413.73C1.65,412.86 2.11,411.71 3.03,412C3.95,412 4.18,413.44 4.41,414.3C4.41,414.59 4.64,415.46 4.87,415.46C5.1,415.46 5.33,415.74 5.33,416.32C5.1,416.61 4.87,416.9 4.64,416.9Z"
android:fillColor="#505050"/>
<path
android:pathData="M-47.53,696.23C-47.76,696.23 -47.99,695.95 -47.99,695.66C-47.99,695.37 -47.76,694.79 -47.53,694.79C-45.92,694.79 -45.01,691.63 -44.09,688.75C-42.94,685.29 -42.02,681.84 -39.49,681.84C-36.96,681.84 -35.81,685.29 -34.66,688.75C-33.74,691.63 -32.59,694.79 -30.98,694.79C-29.38,694.79 -28.46,691.63 -27.54,688.75C-26.39,685.29 -25.47,681.84 -22.94,681.84C-20.41,681.84 -19.26,685.29 -18.11,688.75C-17.19,691.63 -16.04,694.79 -14.44,694.79C-12.83,694.79 -11.91,691.63 -10.99,688.75C-9.84,685.29 -8.92,681.84 -6.39,681.84C-3.86,681.84 -2.71,685.29 -1.56,688.75C-0.64,691.63 0.5,694.79 2.11,694.79C2.34,694.79 2.57,695.08 2.57,695.37C2.57,695.66 2.34,696.23 2.11,696.23C-0.41,696.23 -1.56,692.78 -2.48,689.32C-3.4,686.44 -4.55,683.28 -6.16,683.28C-7.77,683.28 -8.69,686.44 -9.61,689.32C-10.76,692.78 -11.68,696.23 -14.21,696.23C-16.73,696.23 -17.88,692.78 -19.03,689.32C-19.95,686.44 -21.1,683.28 -22.71,683.28C-24.32,683.28 -25.24,686.44 -26.16,689.32C-27.31,692.78 -28.23,696.23 -30.75,696.23C-33.28,696.23 -34.43,692.78 -35.58,689.32C-36.5,686.44 -37.65,683.28 -39.26,683.28C-40.87,683.28 -41.79,686.44 -42.71,689.32C-44.09,692.78 -45.01,696.23 -47.53,696.23Z"
android:fillColor="#505050"/>
<path
android:pathData="M283.68,109.33C282.99,109.33 282.53,109.05 281.84,108.76C279.55,106.74 280.23,102.71 280.92,98.68C281.61,95.22 282.07,91.48 280.46,90.04C278.86,88.6 276.33,90.9 274.03,92.92C271.27,95.22 268.51,97.82 266.21,95.8C263.92,93.78 264.61,89.75 265.3,85.72C265.98,82.26 266.44,78.52 264.83,77.08C263.23,75.64 260.7,77.95 258.4,79.96C255.64,82.26 252.88,84.86 250.59,82.84C248.29,80.82 248.98,76.79 249.66,72.76C250.35,69.31 250.81,65.56 249.21,64.12C248.98,63.83 248.98,63.55 248.98,63.26C249.21,62.97 249.43,62.97 249.66,62.97C251.96,64.99 251.27,69.02 250.59,73.05C249.9,76.51 249.43,80.25 251.04,81.69C252.65,83.13 255.18,80.82 257.48,78.81C260.24,76.51 263,73.91 265.3,75.93C267.59,77.95 266.9,81.98 266.21,86.01C265.52,89.46 265.07,93.21 266.67,94.65C268.28,96.09 270.81,93.78 273.11,91.77C275.87,89.46 278.63,86.87 280.92,88.89C283.22,90.9 282.53,94.94 281.84,98.97C281.15,102.42 280.7,106.17 282.3,107.61C283.91,109.05 286.44,106.74 288.74,104.73C291.5,102.42 294.26,99.83 296.55,101.85C296.78,102.14 296.78,102.42 296.78,102.71C296.55,103 296.33,103 296.1,103C294.49,101.56 291.96,103.86 289.66,105.88C287.59,107.61 285.52,109.33 283.68,109.33Z"
android:fillColor="#505050"/>
<path
android:pathData="M260.7,737.99H260.47C259.55,737.7 259.32,736.55 259.09,735.4C259.09,734.82 258.86,733.96 258.63,733.96C258.4,733.96 257.94,734.82 257.71,735.11C257.25,735.97 256.56,737.13 255.64,736.84C254.72,736.55 254.49,735.4 254.26,734.25C254.26,733.67 254.03,732.81 253.8,732.81C253.57,732.81 253.11,733.67 252.88,733.96C252.42,734.82 251.73,735.97 250.81,735.69C249.89,735.4 249.66,734.25 249.43,733.09C249.43,732.52 249.2,731.66 248.97,731.66C248.74,731.66 248.51,731.08 248.51,730.79C248.51,730.5 248.97,730.22 249.2,730.22C250.12,730.5 250.35,731.66 250.58,732.81C250.58,733.38 250.81,734.25 251.04,734.25C251.27,734.25 251.73,733.38 251.96,733.09C252.42,732.23 253.11,731.08 254.03,731.37C254.95,731.66 255.18,732.81 255.41,733.96C255.41,734.53 255.64,735.4 255.87,735.4C256.1,735.4 256.56,734.53 256.79,734.25C257.25,733.38 257.94,732.23 258.86,732.52C259.78,732.81 260.01,733.96 260.24,735.11C260.24,735.69 260.47,736.55 260.7,736.55C260.92,736.55 261.39,735.69 261.61,735.4C262.08,734.53 262.76,733.38 263.68,733.67C263.91,733.67 264.14,734.25 264.14,734.53C264.14,734.82 263.68,735.11 263.45,735.11C263.22,735.11 262.76,735.97 262.53,736.26C261.85,737.13 261.39,737.99 260.7,737.99Z"
android:fillColor="#505050"/>
<path
android:pathData="M152.9,608.11C151.75,608.11 151.29,606.67 151.06,605.23C150.83,604.37 150.6,603.51 150.37,603.51C150.14,603.51 149.68,604.37 149.45,605.23C148.99,606.38 148.53,607.82 147.38,607.82C146.23,607.82 146,606.38 145.54,604.95C145.31,604.08 145.08,603.22 144.85,603.22C144.39,603.22 144.16,604.08 143.93,604.95C143.47,606.1 143.01,607.54 141.87,607.54C140.72,607.54 140.49,606.1 140.03,604.66C139.8,603.79 139.57,602.93 139.11,602.93C138.88,602.93 138.42,603.79 138.19,604.66C137.73,605.81 137.27,607.25 136.12,607.25C135.89,607.25 135.66,606.96 135.66,606.38C135.66,606.1 135.89,605.81 136.35,605.81C136.58,605.81 137.04,604.95 137.27,604.08C137.73,602.93 138.19,601.49 139.34,601.49C140.49,601.49 140.72,602.93 141.18,604.37C141.4,605.23 141.63,606.1 141.87,606.1C142.32,606.1 142.55,605.23 142.79,604.37C143.24,603.22 143.7,601.78 144.85,601.78C146,601.78 146.23,603.22 146.69,604.66C146.92,605.52 147.15,606.38 147.38,606.38C147.61,606.38 148.07,605.52 148.3,604.66C148.76,603.51 149.22,602.07 150.37,602.07C151.52,602.07 151.75,603.51 152.21,604.95C152.44,605.81 152.67,606.67 152.9,606.67C153.13,606.67 153.36,606.96 153.36,607.54C153.59,607.82 153.13,608.11 152.9,608.11Z"
android:fillColor="#505050"/>
<path
android:pathData="M86.7,405.66C86.24,405.66 86.01,405.38 86.24,404.8C86.47,401.63 83.02,399.62 79.8,397.6C76.12,395.58 72.45,393.28 72.68,389.25C72.91,385.22 76.81,383.49 80.72,382.05C84.17,380.61 87.85,379.17 87.85,376C88.08,372.83 84.63,370.82 81.41,368.8C77.73,366.79 74.06,364.48 74.29,360.45C74.51,356.42 78.42,354.69 82.33,353.25C85.78,351.81 89.46,350.37 89.46,347.2C89.69,344.04 86.24,342.02 83.02,340C79.34,337.99 75.66,335.68 75.89,331.65C76.12,327.62 80.03,325.89 83.94,324.45C87.39,323.01 91.06,321.57 91.06,318.41C91.06,318.12 91.29,317.54 91.75,317.83C91.98,317.83 92.21,318.12 92.21,318.69C91.98,322.73 88.08,324.45 84.17,325.89C80.72,327.33 77.04,328.77 77.04,331.94C76.81,335.11 80.26,337.13 83.48,339.14C87.16,341.16 90.83,343.46 90.6,347.49C90.37,351.52 86.47,353.25 82.56,354.69C79.11,356.13 75.43,357.57 75.43,360.74C75.2,363.91 78.65,365.92 81.87,367.94C85.55,369.95 89.23,372.26 89,376.29C88.77,380.32 84.86,382.05 80.95,383.49C77.5,384.93 73.83,386.37 73.83,389.54C73.6,392.7 77.04,394.72 80.26,396.74C83.94,398.75 87.62,401.06 87.39,405.09C87.16,405.38 86.93,405.66 86.7,405.66Z"
android:fillColor="#505050"/>
<path
android:pathData="M152.21,88.03C151.06,88.03 150.83,86.59 150.37,85.43C150.14,84.86 149.91,83.99 149.68,83.99C149.45,83.99 149.22,84.86 148.99,85.43C148.53,86.59 148.07,87.74 147.15,87.74C146.23,87.74 145.77,86.3 145.54,85.15C145.31,84.57 145.08,83.71 144.85,83.71C144.62,83.71 144.39,84.57 144.16,85.15C143.7,86.3 143.24,87.45 142.32,87.45C141.4,87.45 140.94,86.01 140.71,84.86C140.48,84.28 140.25,83.42 140.02,83.42C139.79,83.42 139.56,84.28 139.34,84.86C138.88,86.01 138.41,87.16 137.5,87.16C137.27,87.16 137.04,86.87 137.04,86.3C137.04,86.01 137.27,85.72 137.73,85.72C137.96,85.72 138.18,84.86 138.41,84.28C138.88,83.13 139.34,81.98 140.25,81.98C141.17,81.98 141.63,83.42 141.86,84.57C142.09,85.15 142.32,86.01 142.55,86.01C142.78,86.01 143.01,85.15 143.24,84.57C143.7,83.42 144.16,82.27 145.08,82.27C146,82.27 146.46,83.71 146.69,84.86C146.92,85.43 147.15,86.3 147.38,86.3C147.61,86.3 147.84,85.43 148.07,84.86C148.53,83.71 148.99,82.55 149.91,82.55C150.83,82.55 151.29,83.99 151.52,85.15C151.75,85.72 151.98,86.59 152.21,86.59C152.44,86.59 152.67,86.87 152.67,87.45C152.67,87.74 152.44,88.03 152.21,88.03Z"
android:fillColor="#505050"/>
<path
android:pathData="M284.37,350.66C284.37,350.37 284.37,350.66 284.37,350.66C283.91,350.37 283.68,350.08 283.91,349.8C284.6,347.78 286.44,347.78 288.51,347.78C290.12,347.78 291.73,347.78 291.95,346.63C292.18,345.48 291.04,344.04 289.89,342.89C288.51,341.16 286.9,339.43 287.59,337.41C288.28,335.4 290.12,335.4 292.18,335.4C293.79,335.4 295.4,335.4 295.63,334.25C295.86,333.09 294.71,331.65 293.56,330.5C292.18,328.77 290.58,327.05 291.27,325.03C291.95,323.02 293.79,323.02 295.86,323.02C297.47,323.02 299.08,323.02 299.31,321.86C299.54,320.71 298.39,319.27 297.24,318.12C295.86,316.39 294.25,314.66 294.94,312.65C294.94,312.36 295.4,312.07 295.63,312.36C295.86,312.36 296.09,312.94 295.86,313.22C295.63,314.38 296.78,315.82 297.93,316.97C299.31,318.7 300.92,320.42 300.23,322.44C299.54,324.45 297.7,324.45 295.63,324.45C294.02,324.45 292.41,324.45 292.18,325.61C291.95,326.76 293.1,328.2 294.25,329.35C295.63,331.08 297.24,332.81 296.55,334.82C295.86,336.84 294.02,336.84 291.95,336.84C290.35,336.84 288.74,336.84 288.51,337.99C288.28,339.14 289.43,340.58 290.58,341.73C291.95,343.46 293.56,345.19 292.87,347.2C292.18,349.22 290.35,349.22 288.28,349.22C286.67,349.22 285.06,349.22 284.83,350.37C284.83,350.37 284.6,350.66 284.37,350.66Z"
android:fillColor="#505050"/>
<path
android:pathData="M232.65,620.78C232.43,620.78 232.2,620.5 232.2,620.21L230.59,586.23L218.18,603.79C217.95,604.08 217.71,604.08 217.49,604.08C217.26,604.08 217.03,603.79 217.03,603.51L215.19,564.34C215.19,564.05 215.42,563.48 215.65,563.48C215.88,563.48 216.34,563.76 216.34,564.05L218.18,601.49L230.59,583.92C230.82,583.63 231.05,583.63 231.28,583.63C231.51,583.63 231.74,583.92 231.74,584.21L233.35,619.92C233.35,620.5 233.12,620.78 232.65,620.78C232.88,620.78 232.65,620.78 232.65,620.78Z"
android:fillColor="#505050"/>
<path
android:pathData="M42.57,226.83C42.34,226.83 42.11,226.83 42.11,226.54L26.94,200.91L24.41,222.8C24.41,223.09 24.18,223.37 23.95,223.37C23.72,223.37 23.49,223.37 23.26,223.09L5.56,193.42C5.33,193.14 5.33,192.56 5.79,192.56C6.02,192.27 6.48,192.27 6.48,192.85L23.26,221.07L25.79,199.18C25.79,198.9 26.02,198.61 26.25,198.61C26.48,198.61 26.71,198.61 26.94,198.9L43.03,225.96C43.26,226.25 43.26,226.83 42.8,226.83H42.57Z"
android:fillColor="#505050"/>
<path
android:pathData="M274.25,596.31C274.02,596.31 274.02,596.31 274.25,596.31C273.79,596.02 273.57,595.73 273.79,595.44L281.15,573.56L270.35,579.03C270.12,579.03 269.89,579.03 269.66,578.74C269.43,578.45 269.43,578.16 269.43,577.88L276.55,556.57C276.78,556.28 277.01,555.99 277.24,556.28C277.47,556.57 277.7,556.85 277.47,557.14L270.81,577.01L281.61,571.54C281.84,571.54 282.07,571.54 282.3,571.83C282.53,572.12 282.53,572.4 282.53,572.69L274.48,596.31C274.71,596.31 274.48,596.31 274.25,596.31Z"
android:fillColor="#505050"/>
<path
android:pathData="M113.82,129.78C113.59,129.78 113.36,129.78 113.36,129.49L105.78,111.93L102.79,124.89C102.79,125.17 102.56,125.46 102.33,125.46C102.1,125.46 101.87,125.46 101.87,125.17L92.68,104.15C92.45,103.86 92.68,103.29 92.91,103.29C93.14,103 93.6,103.29 93.6,103.57L102.1,123.16L105.09,110.2C105.09,109.91 105.32,109.62 105.55,109.62C105.78,109.62 106.01,109.62 106.01,109.91L114.28,128.92C114.51,129.21 114.28,129.78 114.05,129.78C113.82,129.78 113.82,129.78 113.82,129.78Z"
android:fillColor="#505050"/>
<path
android:pathData="M355.85,258.51C355.63,258.51 355.63,258.51 355.39,258.22C355.17,257.93 355.17,257.64 355.39,257.07L364.82,241.52L354.24,243.24C354.02,243.24 353.79,243.24 353.79,242.96C353.56,242.67 353.79,242.38 353.79,242.09L365.05,223.38C365.28,223.09 365.51,223.09 365.97,223.38C366.2,223.66 366.2,223.95 365.97,224.53L355.39,241.8L365.97,240.08C366.2,240.08 366.43,240.08 366.43,240.37C366.66,240.65 366.43,240.94 366.43,241.23L356.08,258.22C356.08,258.51 356.08,258.51 355.85,258.51Z"
android:fillColor="#505050"/>
<path
android:pathData="M24.87,598.03C24.64,598.03 24.64,598.03 24.41,597.75L19.81,592.28V596.88C19.81,597.17 19.58,597.46 19.35,597.46C19.12,597.46 18.89,597.46 18.66,597.17L13.61,590.84C13.38,590.55 13.38,589.97 13.61,589.68C13.84,589.4 14.3,589.4 14.53,589.68L18.43,594.58V589.97C18.43,589.68 18.66,589.4 18.89,589.4C19.12,589.4 19.35,589.4 19.58,589.68L25.1,596.59C25.33,596.88 25.33,597.46 25.1,597.75C25.33,598.03 25.1,598.03 24.87,598.03Z"
android:fillColor="#505050"/>
<path
android:pathData="M74.75,759.59C74.52,759.59 74.29,759.59 74.29,759.3L71.07,753.25L70.38,757.28C70.38,757.57 70.15,757.86 69.92,757.86C69.69,757.86 69.46,757.86 69.23,757.57L65.78,750.95C65.55,750.66 65.78,750.09 66.01,750.09C66.24,749.8 66.7,750.09 66.7,750.37L69.46,755.56L70.15,751.53C70.15,751.24 70.38,750.95 70.61,750.95C70.84,750.95 71.07,750.95 71.3,751.24L75.21,758.72C75.44,759.01 75.21,759.59 74.98,759.59C74.98,759.59 74.98,759.59 74.75,759.59Z"
android:fillColor="#505050"/>
<path
android:pathData="M55.44,665.13C55.21,665.13 55.21,665.13 54.98,664.84L35.9,640.94V664.56C35.9,664.84 35.67,665.13 35.44,665.13C35.21,665.13 34.98,665.13 34.75,664.84L12.69,636.91C12.46,636.62 12.46,636.05 12.69,635.76C12.92,635.47 13.38,635.47 13.61,635.76L34.75,662.25V638.64C34.75,638.35 34.98,638.06 35.21,638.06C35.44,638.06 35.67,638.06 35.9,638.35L55.9,663.69C56.13,663.98 56.13,664.56 55.9,664.84C55.67,665.13 55.67,665.13 55.44,665.13Z"
android:fillColor="#505050"/>
<path
android:pathData="M131.98,797.03C131.75,797.03 131.75,797.03 131.52,796.74C131.29,796.45 131.29,795.87 131.52,795.59L151.52,776L134.05,773.41C133.82,773.41 133.59,773.12 133.59,772.84C133.59,772.55 133.59,772.26 133.82,771.97L157.04,749.22C157.27,748.93 157.73,748.93 157.96,749.22C158.18,749.51 158.18,750.09 157.96,750.37L135.89,771.97L153.36,774.56C153.59,774.56 153.82,774.85 153.82,775.14C153.82,775.43 153.82,775.72 153.59,776L132.44,796.74C132.21,797.03 131.98,797.03 131.98,797.03Z"
android:fillColor="#505050"/>
<path
android:pathData="M339.3,21.79C338.85,21.79 338.61,21.21 338.85,20.93L340.45,9.69L335.63,14.01C335.4,14.3 335.17,14.3 334.94,14.01C334.71,13.73 334.71,13.44 334.71,13.15L336.55,-0.96C336.55,-1.25 337.01,-1.54 337.24,-1.54C337.47,-1.54 337.7,-0.96 337.7,-0.67L336.09,11.71L340.91,7.39C341.14,7.1 341.37,7.1 341.6,7.39C341.83,7.68 341.83,7.97 341.83,8.26L339.99,20.93C339.76,21.5 339.53,21.79 339.3,21.79Z"
android:fillColor="#505050"/>
<path
android:pathData="M367.8,55.48H367.57L359.99,51.45C359.76,51.16 359.53,50.88 359.76,50.59C359.99,50.3 360.22,50.01 360.45,50.3L366.65,53.76L365.28,49.15C365.28,48.86 365.28,48.57 365.51,48.28C365.73,48 365.96,48 366.2,48.28L373.09,52.03C373.32,52.32 373.55,52.6 373.32,52.89C373.09,53.18 372.86,53.47 372.63,53.18L367.11,50.01L368.49,54.62C368.49,54.91 368.49,55.19 368.26,55.48C368.26,55.48 368.03,55.48 367.8,55.48Z"
android:fillColor="#505050"/>
<path
android:pathData="M250.58,344.9L241.62,344.33C241.39,344.33 241.16,344.04 241.16,343.46C241.16,343.17 241.39,342.6 241.85,342.89L249.2,343.46L245.98,338.85C245.75,338.57 245.75,338.28 245.98,337.99C245.98,337.7 246.21,337.41 246.44,337.7L256.1,338.28C256.33,338.28 256.56,338.57 256.56,339.14C256.56,339.43 256.33,340.01 255.87,339.72L247.59,339.14L250.81,343.75C251.04,344.04 251.04,344.33 250.81,344.61C251.04,344.61 250.81,344.9 250.58,344.9Z"
android:fillColor="#505050"/>
<path
android:pathData="M11.77,258.22C11.54,258.22 11.31,257.93 11.31,257.64L10.85,250.44L8.55,253.9C8.32,254.19 8.09,254.19 7.86,254.19C7.63,254.19 7.4,253.9 7.4,253.61L6.71,243.82C6.71,243.53 6.94,242.96 7.17,242.96C7.4,242.96 7.86,243.24 7.86,243.53L8.55,251.6L10.85,248.14C11.08,247.85 11.31,247.85 11.54,247.85C11.77,247.85 12,248.14 12,248.43L12.68,257.36C12.45,257.64 12.23,257.93 11.77,258.22C12,258.22 12,258.22 11.77,258.22Z"
android:fillColor="#505050"/>
<path
android:pathData="M210.36,18.33C210.13,18.33 209.9,18.05 209.9,17.76L209.44,9.12L206.91,12.86C206.68,13.15 206.45,13.15 206.22,13.15C205.99,13.15 205.76,12.86 205.76,12.57L205.07,3.36C205.07,3.07 205.3,2.5 205.53,2.5C205.76,2.5 206.22,2.78 206.22,3.07L206.68,10.56L209.21,6.81C209.44,6.53 209.67,6.53 209.9,6.53C210.13,6.53 210.36,6.81 210.36,7.1L211.05,17.47C210.82,17.76 210.59,18.33 210.36,18.33Z"
android:fillColor="#505050"/>
<path
android:pathData="M232.42,190.54C232.19,190.54 232.19,190.54 231.96,190.26C231.73,189.97 231.73,189.68 231.96,189.1L237.71,180.75L232.42,181.33C232.19,181.33 231.96,181.33 231.96,181.04C231.96,180.75 231.96,180.47 231.96,180.18L237.94,171.25C238.17,170.96 238.4,170.96 238.86,171.25C239.09,171.54 239.09,171.83 238.86,172.4L233.8,179.89L239.09,179.31C239.32,179.31 239.55,179.31 239.55,179.6C239.55,179.89 239.55,180.18 239.55,180.47L232.88,190.26C232.88,190.54 232.65,190.54 232.42,190.54Z"
android:fillColor="#505050"/>
<path
android:pathData="M84.17,460.67C83.94,460.67 83.71,460.38 83.71,460.09L81.18,449.73L78.42,456.06C78.42,456.35 78.19,456.35 77.96,456.35C77.73,456.35 77.5,456.06 77.5,455.77L74.51,442.52C74.51,442.24 74.51,441.66 74.97,441.66C75.2,441.66 75.66,441.66 75.66,442.24L78.42,454.04L81.18,447.71C81.18,447.42 81.41,447.42 81.64,447.42C81.87,447.42 82.1,447.71 82.1,448L84.86,460.09C84.86,460.09 84.63,460.67 84.17,460.67C84.4,460.67 84.4,460.67 84.17,460.67Z"
android:fillColor="#505050"/>
<path
android:pathData="M231.27,471.32H231.04L223.46,465.27C223.23,464.99 223.23,464.7 223.23,464.41C223.46,464.12 223.69,464.12 223.92,464.12L230.36,469.31L229.44,463.83C229.44,463.55 229.44,463.26 229.67,462.97C229.9,462.68 230.13,462.68 230.36,462.97L237.25,468.44C237.48,468.73 237.48,469.02 237.48,469.31C237.25,469.6 237.02,469.6 236.79,469.6L231.04,464.99L231.96,470.46C231.96,470.75 231.96,471.03 231.74,471.32C231.51,471.32 231.27,471.32 231.27,471.32Z"
android:fillColor="#505050"/>
<path
android:pathData="M355.39,718.41C354.94,718.12 354.71,717.83 354.94,717.54L361.83,692.49L348.96,700.55C348.73,700.55 348.5,700.55 348.27,700.55C348.04,700.27 348.04,699.98 348.04,699.69L356.08,670.32C356.08,670.03 356.55,669.74 356.77,669.74C357,669.74 357.23,670.32 357.23,670.6L349.65,698.25L362.52,690.19C362.75,690.19 362.98,690.19 363.21,690.19C363.44,690.47 363.44,690.76 363.44,691.05L356.08,717.54C356.08,718.12 355.86,718.41 355.39,718.41Z"
android:fillColor="#505050"/>
<path
android:pathData="M239.09,420.35C238.63,420.35 238.4,419.78 238.63,419.49L243,401.35L234.03,407.68C233.8,407.68 233.57,407.68 233.34,407.68C233.11,407.39 233.11,407.11 233.11,406.82L238.17,384.93C238.17,384.64 238.63,384.36 238.86,384.36C239.09,384.36 239.32,384.93 239.32,385.22L234.49,405.38L243.46,399.04C243.69,399.04 243.92,399.04 244.15,399.04C244.38,399.33 244.38,399.62 244.38,399.91L239.78,419.78C239.78,420.35 239.55,420.35 239.09,420.35Z"
android:fillColor="#505050"/>
<path
android:pathData="M102.33,520.57C102.1,520.57 102.1,520.57 101.87,520.28C101.64,519.99 101.64,519.42 101.87,519.13L122.78,492.35L102.1,492.63C101.87,492.63 101.64,492.35 101.64,492.06C101.64,491.77 101.64,491.48 101.87,491.19L126,460.38C126.23,460.09 126.69,460.09 126.92,460.38C127.15,460.67 127.15,461.24 126.92,461.53L103.71,491.48L124.39,491.19C124.62,491.19 124.85,491.48 124.85,491.77C124.85,492.06 124.85,492.35 124.62,492.63L102.79,520.57C102.79,520.57 102.56,520.57 102.33,520.57Z"
android:fillColor="#505050"/>
<path
android:pathData="M264.37,288.75C264.14,288.75 263.91,288.46 263.91,288.17C263.91,287.88 264.14,287.31 264.37,287.31L269.43,287.02L267.13,284.43C266.9,284.14 266.9,283.85 266.9,283.56C266.9,283.27 267.13,282.99 267.36,282.99L274.49,282.41C274.72,282.41 275.18,282.7 275.18,282.99C275.18,283.27 274.95,283.85 274.72,283.85L268.97,284.43L271.27,287.02C271.5,287.31 271.5,287.59 271.5,287.88C271.5,288.17 271.27,288.46 271.04,288.46L264.37,288.75Z"
android:fillColor="#505050"/>
<path
android:pathData="M211.51,747.21C211.28,747.21 211.05,746.92 211.05,746.63C210.82,746.34 211.05,745.77 211.28,745.77L216.56,742.89L213.58,741.45C213.35,741.45 213.12,741.16 213.12,740.87C213.12,740.58 213.35,740.29 213.58,740.29L219.55,737.13C219.78,736.84 220.24,737.13 220.24,737.41C220.47,737.7 220.24,738.28 220.01,738.28L215.41,740.87L218.4,742.31C218.63,742.31 218.86,742.6 218.86,742.89C218.86,743.17 218.63,743.46 218.4,743.46L211.51,747.21Z"
android:fillColor="#505050"/>
<path
android:pathData="M318.62,238.35C318.39,238.35 318.39,238.35 318.16,238.06C317.93,237.77 317.93,237.49 318.16,236.91L337.01,206.38L317.93,209.55C317.7,209.55 317.47,209.55 317.47,209.26C317.47,208.98 317.47,208.69 317.47,208.4L335.4,179.6C335.63,179.31 335.86,179.31 336.32,179.6C336.55,179.89 336.55,180.18 336.32,180.75L319.31,208.4L338.38,205.23C338.61,205.23 338.84,205.23 338.84,205.52C338.84,205.81 338.84,206.1 338.84,206.38L319.08,238.35C319.08,238.35 318.85,238.35 318.62,238.35Z"
android:fillColor="#505050"/>
<path
android:pathData="M107.84,10.85C107.61,10.85 107.38,10.56 107.38,10.27C107.38,9.98 107.61,9.41 107.84,9.41L117.27,9.12L112.9,3.65C112.67,3.36 112.67,3.07 112.67,2.78C112.67,2.49 112.9,2.21 113.13,2.21L125.08,1.92C125.31,1.92 125.54,2.21 125.54,2.49C125.54,2.78 125.31,3.36 125.08,3.36L114.51,3.65L118.88,9.12C119.11,9.41 119.11,9.69 119.11,9.98C119.11,10.27 118.88,10.56 118.65,10.56L107.84,10.85Z"
android:fillColor="#505050"/>
<path
android:pathData="M265.98,33.6C265.76,33.6 265.76,33.6 265.98,33.6L233.81,19.2C233.58,19.2 233.35,18.62 233.35,18.33C233.35,18.05 233.81,17.76 234.04,17.76L264.61,31.29L255.87,8.25C255.87,7.97 255.87,7.68 255.87,7.39C256.1,7.1 256.33,7.1 256.56,7.1L285.52,20.06C285.75,20.06 285.98,20.64 285.98,20.93C285.98,21.21 285.52,21.5 285.29,21.5L257.71,9.41L266.45,32.44C266.45,32.73 266.45,33.02 266.45,33.31C266.21,33.6 265.98,33.6 265.98,33.6Z"
android:fillColor="#505050"/>
<path
android:pathData="M333.1,798.75C332.87,798.75 332.64,798.47 332.64,798.18C332.64,797.89 332.64,797.31 333.1,797.31L350.57,790.11L340.45,783.78C340.22,783.78 340.22,783.49 340.22,783.2C340.22,782.91 340.45,782.63 340.68,782.63L357.69,775.72C357.92,775.72 358.38,775.72 358.38,776.29C358.38,776.58 358.38,777.16 357.92,777.16L342.06,783.49L352.18,789.83C352.41,789.83 352.41,790.11 352.41,790.4C352.41,790.69 352.18,790.98 351.95,790.98L333.1,798.75C333.33,798.47 333.1,798.75 333.1,798.75Z"
android:fillColor="#505050"/>
<path
android:pathData="M157.03,225.39C156.8,225.39 156.57,225.1 156.57,224.82L149.91,188.53L140.02,208.4C139.79,208.69 139.56,208.69 139.33,208.69C139.1,208.69 138.87,208.4 138.87,208.11L132.67,173.55C132.67,173.27 132.9,172.69 133.13,172.69C133.36,172.69 133.82,172.98 133.82,173.27L139.79,206.1L149.68,186.23C149.91,185.94 150.13,185.94 150.37,185.94C150.6,185.94 150.82,186.23 150.82,186.51L157.72,224.53C157.72,225.1 157.49,225.39 157.03,225.39Z"
android:fillColor="#505050"/>
<path
android:pathData="M137.73,278.09C137.27,278.09 137.04,277.8 137.27,277.23L137.96,265.99L134.05,270.31C133.82,270.6 133.59,270.6 133.36,270.31C133.13,270.31 133.13,270.03 133.13,269.74L133.82,257.93C133.82,257.64 134.05,257.36 134.51,257.36C134.74,257.36 134.97,257.64 134.97,258.22L134.28,268.3L138.19,263.98C138.42,263.69 138.65,263.69 138.88,263.98C139.1,263.98 139.1,264.27 139.1,264.55L138.42,277.51C138.42,277.8 138.19,278.09 137.73,278.09Z"
android:fillColor="#505050"/>
<path
android:pathData="M267.36,177.59H267.13C266.9,177.3 266.67,177.01 266.9,176.72L274.95,160.31L265.75,163.19C265.52,163.19 265.29,163.19 265.06,162.9C264.83,162.61 264.83,162.32 265.06,162.04L272.88,145.62C273.11,145.33 273.34,145.04 273.57,145.33C273.8,145.62 274.03,145.91 273.8,146.2L266.67,161.17L275.86,158.29C276.1,158.29 276.32,158.29 276.55,158.58C276.78,158.87 276.78,159.15 276.55,159.44L267.82,177.59C267.59,177.3 267.36,177.59 267.36,177.59Z"
android:fillColor="#505050"/>
<path
android:pathData="M97.96,171.83C97.73,171.83 97.73,171.83 97.5,171.54L92.22,166.35C91.99,166.07 91.99,165.78 92.22,165.2C92.45,164.91 92.68,164.91 93.14,165.2L97.27,169.24L96.81,165.49C96.81,165.2 96.81,164.91 97.04,164.91C97.27,164.91 97.5,164.91 97.73,164.91L102.56,169.81C102.79,170.1 102.79,170.39 102.56,170.96C102.33,171.25 102.1,171.25 101.64,170.96L97.96,167.22L98.42,170.96C98.42,171.25 98.42,171.54 98.19,171.54C98.19,171.83 98.19,171.83 97.96,171.83Z"
android:fillColor="#505050"/>
<path
android:pathData="M317.47,486.59C317.24,486.59 316.78,486.3 317.01,485.72L318.16,452.32L304.6,467.87C304.37,468.16 304.14,468.16 303.91,467.87C303.68,467.87 303.68,467.58 303.68,467.29L305.06,428.7C305.06,428.42 305.29,427.84 305.75,428.13C305.98,428.13 306.21,428.42 306.21,428.99L304.83,465.85L318.39,450.3C318.62,450.01 318.85,450.01 319.08,450.3C319.31,450.3 319.31,450.59 319.31,450.88L317.93,486.01C317.93,486.3 317.7,486.59 317.47,486.59Z"
android:fillColor="#505050"/>
<path
android:pathData="M112.21,592.56C111.98,592.56 111.75,592.27 111.75,591.98L109,559.73L97.73,577.3C97.5,577.59 97.27,577.59 97.04,577.59C96.81,577.59 96.58,577.3 96.58,577.01L93.36,539.57C93.36,539.28 93.59,538.71 93.82,538.71C94.05,538.71 94.51,539 94.51,539.28L97.73,574.99L109,557.43C109.22,557.14 109.45,557.14 109.68,557.14C109.91,557.14 110.14,557.43 110.14,557.72L113.13,591.7C112.9,591.98 112.67,592.27 112.21,592.56C112.44,592.56 112.21,592.56 112.21,592.56Z"
android:fillColor="#505050"/>
<path
android:pathData="M97.73,68.15C97.5,68.15 97.27,67.87 97.27,67.58C97.27,67.29 97.5,66.71 97.73,66.71L110.83,63.26L103.25,57.21C103.02,56.92 103.02,56.63 103.02,56.35C103.02,56.06 103.25,55.77 103.48,55.77L119.34,51.45C119.57,51.45 120.03,51.74 120.03,52.03C120.03,52.31 119.8,52.89 119.57,52.89L105.09,56.92L112.67,62.97C112.9,63.26 112.9,63.55 112.9,63.83C112.9,64.12 112.67,64.41 112.44,64.41L97.73,68.15C97.96,68.15 97.96,68.15 97.73,68.15Z"
android:fillColor="#505050"/>
<path
android:pathData="M342.29,497.53C342.06,497.53 341.83,497.24 341.83,496.95C341.83,496.67 342.06,496.09 342.29,496.09L376.54,490.62L359.53,473.91C359.3,473.63 359.3,473.34 359.3,473.05C359.3,472.76 359.53,472.47 359.76,472.47L391.94,467.29C392.17,467.29 392.63,467.58 392.63,467.87C392.63,468.15 392.4,468.73 392.17,468.73L361.37,473.63L378.38,490.33C378.61,490.62 378.61,490.9 378.61,491.19C378.61,491.48 378.38,491.77 378.15,491.77L342.29,497.53Z"
android:fillColor="#505050"/>
<path
android:pathData="M259.32,643.82C259.09,643.82 259.09,643.82 258.86,643.53C258.63,643.25 258.63,642.67 258.86,642.38L262.3,637.77H259.55C259.32,637.77 259.09,637.49 259.09,637.49C259.09,637.2 259.09,636.91 259.09,636.62L262.99,631.44C263.23,631.15 263.68,631.15 263.91,631.44C264.14,631.73 264.14,632.3 263.91,632.59L260.93,636.62H263.68C263.91,636.62 264.14,636.91 264.14,636.91C264.14,637.2 264.14,637.49 264.14,637.77L259.78,643.53C259.55,643.82 259.32,643.82 259.32,643.82Z"
android:fillColor="#505050"/>
<path
android:pathData="M295.4,729.06C295.17,729.06 295.4,729.06 295.4,729.06C294.94,729.06 294.71,728.49 294.94,728.2L297.01,718.7L292.41,721.86C292.18,722.15 291.95,721.86 291.72,721.86C291.49,721.58 291.49,721.29 291.49,721L294.02,708.62C294.02,708.33 294.48,708.04 294.71,708.04C294.94,708.04 295.17,708.62 295.17,708.91L292.87,719.56L297.47,716.39C297.7,716.1 297.93,716.39 298.16,716.39C298.39,716.68 298.39,716.97 298.39,717.26L296.09,728.49C295.86,729.06 295.63,729.06 295.4,729.06Z"
android:fillColor="#505050"/>
<path
android:pathData="M180.93,60.38L173.81,58.36C173.58,58.36 173.35,57.79 173.35,57.5C173.35,57.21 173.81,56.92 174.04,56.92L179.79,58.65L177.95,55.2C177.72,54.91 177.72,54.62 177.95,54.33C178.18,54.04 178.41,54.04 178.64,54.04L185.07,55.77C185.3,55.77 185.53,56.35 185.53,56.64C185.53,56.92 185.07,57.21 184.84,57.21L179.79,55.77L181.63,59.23C181.85,59.52 181.85,59.8 181.63,60.09C181.4,60.09 181.16,60.38 180.93,60.38Z"
android:fillColor="#505050"/>
<path
android:pathData="M146.46,714.09C146.23,714.09 146,713.8 146,713.51C145.77,713.22 146,712.65 146.23,712.65L159.1,706.03L151.29,701.99C151.06,701.99 150.83,701.71 150.83,701.42C150.83,701.13 151.06,700.84 151.29,700.84L164.16,694.22C164.39,693.93 164.85,694.22 164.85,694.51C165.08,694.79 164.85,695.37 164.62,695.37L153.13,701.13L160.94,705.16C161.17,705.16 161.4,705.45 161.4,705.74C161.4,706.03 161.17,706.31 160.94,706.31L146.46,714.09C146.69,714.09 146.46,714.09 146.46,714.09Z"
android:fillColor="#505050"/>
<path
android:pathData="M330.34,547.06C330.11,547.06 330.11,547.06 329.88,546.77L310.8,521.43L310.11,543.32C310.11,543.6 309.89,543.89 309.65,543.89C309.42,543.89 309.2,543.89 308.96,543.6L290.81,519.41C290.58,519.13 290.58,518.55 290.81,518.26C291.04,517.97 291.5,517.97 291.73,518.26L308.96,541.3L309.65,519.41C309.65,519.13 309.89,518.84 310.11,518.84C310.34,518.84 310.57,518.84 310.8,519.13L330.8,545.91C331.03,546.2 331.03,546.77 330.8,547.06C330.57,547.06 330.34,547.06 330.34,547.06Z"
android:fillColor="#505050"/>
</group>
</vector>

6
android/app/src/main/res/drawable/bg_notification.xml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="16dp" />
<solid android:color="#F6F6F6" />
</shape>

5
android/app/src/main/res/drawable/bg_notification_answer.xml

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="16dp" />
<solid android:color="@color/color_green" />
</shape>

6
android/app/src/main/res/drawable/bg_notification_call_icon.xml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="20dp" />
<solid android:color="#FFFFFF" />
</shape>

6
android/app/src/main/res/drawable/bg_notification_cancel.xml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="16dp" />
<solid android:color="@color/color_red" />
</shape>

6
android/app/src/main/res/drawable/bg_notification_cirle.xml

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="50dp" />
<solid android:color="#2B2D30" />
</shape>

9
android/app/src/main/res/drawable/ic_accept_call.xml

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#00FF00"
android:pathData="M12,2C6.48,2 2,6.48 2,12C2,17.52 6.48,22 12,22C17.52,22 22,17.52 22,12C22,6.48 17.52,2 12,2ZM10,17L5,12L6.41,10.59L10,14.17L17.59,6.58L19,8L10,17Z"/>
</vector>

9
android/app/src/main/res/drawable/ic_answer.xml

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:viewportWidth="30"
android:viewportHeight="30">
<path
android:pathData="M16.844,5.445C16.876,5.326 16.931,5.214 17.006,5.117C17.081,5.019 17.174,4.937 17.281,4.875C17.388,4.814 17.505,4.774 17.627,4.758C17.75,4.742 17.874,4.75 17.993,4.782C19.731,5.235 21.316,6.144 22.586,7.414C23.856,8.684 24.765,10.269 25.218,12.007C25.25,12.126 25.258,12.25 25.242,12.373C25.226,12.495 25.186,12.612 25.125,12.719C25.063,12.826 24.981,12.919 24.883,12.994C24.786,13.069 24.674,13.124 24.555,13.156C24.476,13.177 24.394,13.187 24.313,13.188C24.106,13.188 23.905,13.119 23.741,12.993C23.577,12.868 23.46,12.691 23.407,12.491C23.037,11.073 22.295,9.778 21.259,8.741C20.222,7.705 18.927,6.963 17.509,6.593C17.389,6.562 17.278,6.507 17.18,6.432C17.082,6.357 17,6.264 16.938,6.157C16.877,6.05 16.837,5.932 16.82,5.81C16.804,5.688 16.812,5.564 16.844,5.445ZM16.571,10.343C18.187,10.775 19.225,11.813 19.657,13.429C19.71,13.628 19.827,13.805 19.991,13.931C20.155,14.057 20.356,14.125 20.563,14.125C20.644,14.125 20.726,14.114 20.805,14.093C20.924,14.061 21.036,14.007 21.133,13.932C21.231,13.857 21.313,13.763 21.375,13.657C21.436,13.55 21.476,13.432 21.492,13.31C21.508,13.188 21.5,13.064 21.468,12.945C20.868,10.7 19.3,9.132 17.055,8.532C16.936,8.5 16.812,8.492 16.69,8.508C16.568,8.524 16.45,8.564 16.344,8.626C16.237,8.688 16.144,8.77 16.069,8.867C15.994,8.965 15.939,9.077 15.907,9.196C15.875,9.314 15.867,9.439 15.884,9.561C15.9,9.683 15.94,9.8 16.001,9.907C16.063,10.014 16.145,10.107 16.243,10.182C16.341,10.257 16.452,10.312 16.571,10.343ZM26.173,21.517C25.965,23.105 25.185,24.563 23.98,25.618C22.774,26.673 21.227,27.253 19.625,27.25C10.32,27.25 2.75,19.68 2.75,10.375C2.747,8.773 3.327,7.226 4.382,6.02C5.437,4.815 6.895,4.036 8.483,3.827C8.884,3.778 9.291,3.86 9.642,4.061C9.993,4.262 10.27,4.571 10.431,4.942L12.906,10.468V10.482C13.029,10.766 13.08,11.076 13.054,11.384C13.028,11.693 12.926,11.991 12.757,12.25C12.736,12.282 12.713,12.311 12.69,12.34L10.25,15.232C11.128,17.016 12.993,18.865 14.8,19.745L17.653,17.318C17.681,17.295 17.71,17.273 17.741,17.253C18,17.08 18.298,16.974 18.609,16.945C18.919,16.917 19.232,16.966 19.518,17.089L19.534,17.096L25.054,19.569C25.426,19.73 25.736,20.006 25.938,20.357C26.139,20.708 26.222,21.115 26.173,21.517ZM24.313,21.283C24.313,21.283 24.304,21.283 24.3,21.283L18.792,18.816L15.938,21.243C15.911,21.266 15.882,21.288 15.852,21.309C15.582,21.489 15.27,21.596 14.946,21.619C14.623,21.642 14.299,21.581 14.006,21.442C11.811,20.382 9.623,18.21 8.561,16.039C8.421,15.748 8.358,15.426 8.378,15.103C8.399,14.781 8.502,14.469 8.679,14.199C8.698,14.167 8.721,14.137 8.745,14.109L11.188,11.213L8.727,5.705C8.726,5.7 8.726,5.696 8.727,5.691C7.59,5.839 6.547,6.397 5.792,7.259C5.037,8.121 4.622,9.229 4.625,10.375C4.629,14.352 6.211,18.165 9.023,20.977C11.835,23.789 15.648,25.371 19.625,25.375C20.77,25.379 21.878,24.966 22.741,24.212C23.603,23.459 24.162,22.417 24.313,21.282V21.283Z"
android:fillColor="#ffffff"/>
</vector>

BIN
android/app/src/main/res/drawable/ic_answer_green.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

17
android/app/src/main/res/drawable/ic_cancel.xml

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="30dp"
android:height="30dp"
android:viewportWidth="30"
android:viewportHeight="30">
<group>
<clip-path
android:pathData="M0,0h30v30h-30z"/>
<path
android:pathData="M18.174,14.405C16.114,13.71 13.873,13.706 11.81,14.395C11.66,14.446 11.526,14.535 11.422,14.651C11.318,14.768 11.247,14.909 11.216,15.061L10.521,18.368C10.491,18.514 10.423,18.651 10.324,18.765C10.226,18.879 10.099,18.968 9.956,19.023L4.483,21.125C4.298,21.197 4.093,21.208 3.9,21.157C3.708,21.106 3.537,20.996 3.415,20.843C2.594,19.804 2.191,18.509 2.282,17.202C2.373,15.895 2.952,14.665 3.909,13.743C6.866,10.893 10.868,9.301 15.034,9.317C19.199,9.334 23.188,10.956 26.122,13.828C27.072,14.758 27.64,15.993 27.72,17.301C27.801,18.608 27.387,19.899 26.558,20.932C26.434,21.084 26.263,21.193 26.07,21.243C25.877,21.292 25.672,21.279 25.487,21.206L20.027,19.06C19.886,19.004 19.761,18.916 19.664,18.802C19.566,18.688 19.499,18.553 19.469,18.408L18.765,15.069C18.734,14.919 18.663,14.778 18.56,14.662C18.456,14.545 18.323,14.457 18.174,14.405V14.405Z"
android:strokeLineJoin="round"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#ffffff"
android:strokeLineCap="round"/>
</group>
</vector>

BIN
android/app/src/main/res/drawable/ic_cancel_red.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

9
android/app/src/main/res/drawable/ic_decline_call.xml

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF0000"
android:pathData="M15.88,3.39C15.09,2.6 13.82,2.6 13.03,3.39L12,4.41L10.97,3.39C10.18,2.6 8.91,2.6 8.12,3.39L3.39,8.12C2.6,8.91 2.6,10.18 3.39,10.97L4.41,12L3.39,13.03C2.6,13.82 2.6,15.09 3.39,15.88L8.12,20.61C8.91,21.4 10.18,21.4 10.97,20.61L12,19.59L13.03,20.61C13.82,21.4 15.09,21.4 15.88,20.61L20.61,15.88C21.4,15.09 21.4,13.82 20.61,13.03L19.59,12L20.61,10.97C21.4,10.18 21.4,8.91 20.61,8.12L15.88,3.39Z"/>
</vector>

148
android/app/src/main/res/drawable/ic_launcher_background.xml

@ -1,74 +1,74 @@ @@ -1,74 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<vector
android:height="108dp"
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#D82439"
android:pathData="M0,0h108v108h-108z"/>
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<vector
android:height="108dp"
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108"
xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#D82439"
android:pathData="M0,0h108v108h-108z"/>
<path android:fillColor="#00000000" android:pathData="M9,0L9,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,0L59,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,0L69,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,9L108,9"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,19L108,19"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,39L108,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,59L108,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>

BIN
android/app/src/main/res/drawable/ic_notification_answer.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
android/app/src/main/res/drawable/ic_notification_cancel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

BIN
android/app/src/main/res/drawable/ic_notification_phone.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

13
android/app/src/main/res/drawable/ic_notification_small.xml

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="18dp"
android:viewportWidth="18"
android:viewportHeight="18">
<path
android:pathData="M5.571,9.057C6.294,10.535 7.492,11.727 8.973,12.443C9.081,12.495 9.201,12.517 9.321,12.508C9.44,12.499 9.556,12.459 9.655,12.392L11.836,10.938C11.932,10.873 12.043,10.834 12.159,10.823C12.274,10.813 12.391,10.831 12.497,10.877L16.577,12.625C16.716,12.684 16.831,12.787 16.907,12.917C16.982,13.047 17.013,13.199 16.995,13.348C16.866,14.357 16.374,15.285 15.61,15.957C14.847,16.629 13.864,17 12.847,17C9.705,17 6.692,15.752 4.47,13.53C2.248,11.308 1,8.295 1,5.153C1,4.136 1.371,3.153 2.043,2.39C2.715,1.626 3.643,1.134 4.652,1.005C4.801,0.987 4.953,1.018 5.083,1.093C5.213,1.169 5.316,1.284 5.375,1.423L7.125,5.507C7.17,5.612 7.188,5.727 7.178,5.842C7.168,5.956 7.13,6.066 7.067,6.163L5.618,8.377C5.552,8.477 5.513,8.592 5.505,8.711C5.497,8.83 5.52,8.949 5.571,9.057V9.057Z"
android:strokeLineJoin="round"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#00CC5E"
android:strokeLineCap="round"/>
</vector>

72
android/app/src/main/res/drawable/rn_edit_text_material.xml

@ -1,36 +1,36 @@ @@ -1,36 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>

4
android/app/src/main/res/drawable/rounded_background.xml

@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#444444"/>
<corners android:radius="16dp"/>
</shape>

72
android/app/src/main/res/font/gilroy.xml

@ -1,37 +1,37 @@ @@ -1,37 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:ignore="UnusedAttribute">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/gilroy_regular"
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/gilroy_regular" />
<font
android:fontStyle="normal"
android:fontWeight="500"
android:font="@font/gilroy_medium"
app:fontStyle="normal"
app:fontWeight="500"
app:font="@font/gilroy_medium" />
<font
android:fontStyle="normal"
android:fontWeight="600"
android:font="@font/gilroy_semibold"
app:fontStyle="normal"
app:fontWeight="600"
app:font="@font/gilroy_semibold" />
<font
android:fontStyle="normal"
android:fontWeight="700"
android:font="@font/gilroy_bold"
app:fontStyle="normal"
app:fontWeight="700"
app:font="@font/gilroy_bold" />
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:ignore="UnusedAttribute">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/gilroy_regular"
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/gilroy_regular" />
<font
android:fontStyle="normal"
android:fontWeight="500"
android:font="@font/gilroy_medium"
app:fontStyle="normal"
app:fontWeight="500"
app:font="@font/gilroy_medium" />
<font
android:fontStyle="normal"
android:fontWeight="600"
android:font="@font/gilroy_semibold"
app:fontStyle="normal"
app:fontWeight="600"
app:font="@font/gilroy_semibold" />
<font
android:fontStyle="normal"
android:fontWeight="700"
android:font="@font/gilroy_bold"
app:fontStyle="normal"
app:fontWeight="700"
app:font="@font/gilroy_bold" />
</font-family>

117
android/app/src/main/res/layout/a_call.xml

@ -0,0 +1,117 @@ @@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/bg_call" />
<com.app.task_me.custom_view.ShakingCardView
android:id="@+id/cardAnswer"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_marginEnd="36dp"
android:layout_marginBottom="86dp"
app:cardBackgroundColor="@color/color_green"
app:cardCornerRadius="27dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/cardCancel"
app:layout_constraintHorizontal_bias="0.14"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
app:srcCompat="@drawable/ic_answer" />
</com.app.task_me.custom_view.ShakingCardView>
<com.app.task_me.custom_view.ShakingCardView
android:id="@+id/cardCancel"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_marginStart="36dp"
android:layout_marginBottom="86dp"
app:cardBackgroundColor="@color/color_red"
app:cardCornerRadius="27dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/cardAnswer">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
app:srcCompat="@drawable/ic_cancel" />
</com.app.task_me.custom_view.ShakingCardView>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvIncoming"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:text="@string/incoming_call"
android:textColor="@color/white"
android:textSize="25sp"
app:layout_constraintBottom_toTopOf="@id/cardCancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvCaller"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginBottom="30dp"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:textColor="@color/white"
android:textSize="30sp"
app:layout_constraintBottom_toTopOf="@id/tvIncoming"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="Caller name" />
<com.google.android.material.card.MaterialCardView
android:layout_width="0dp"
android:layout_height="0dp"
app:cardBackgroundColor="#454545"
app:cardCornerRadius="100dp"
app:layout_constraintBottom_toTopOf="@id/tvCaller"
app:layout_constraintDimensionRatio="H, 1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.45">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvCallerLetter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@color/white"
android:textSize="72sp"
android:textStyle="bold"
tools:text="C" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:visibility="gone" />
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>

30
android/app/src/main/res/layout/incoming_call_view.xml

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/rounded_background"
android:padding="16dp">
<TextView
android:id="@+id/call_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Вхідний дзвінок"
android:textColor="@android:color/white"
android:textSize="18sp"
android:layout_alignParentStart="true"/>
<ImageButton
android:id="@+id/decline_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentEnd="true"
android:background="@android:color/transparent"
android:src="@drawable/ic_decline_call"
android:layout_marginStart="8dp"/>
<ImageButton
android:id="@+id/accept_button"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_toStartOf="@id/decline_button"
android:background="@android:color/transparent"
android:src="@drawable/ic_accept_call"/>
</RelativeLayout>

24
android/app/src/main/res/layout/launch_screen.xml

@ -1,13 +1,13 @@ @@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">
<ImageView
android:layout_width="237dp"
android:layout_height="93dp"
android:layout_centerInParent="true"
android:src="@drawable/logo" />
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical">
<ImageView
android:layout_width="237dp"
android:layout_height="93dp"
android:layout_centerInParent="true"
android:src="@drawable/logo" />
</RelativeLayout>

128
android/app/src/main/res/layout/v_notification_expanded.xml

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_notification"
android:orientation="vertical"
android:padding="24dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/fPhoto"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/bg_notification_cirle">
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:visibility="gone" />
<TextView
android:id="@+id/tvLetter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#FFFFFF"
android:textSize="22sp"
tools:text="I" />
<FrameLayout
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="end|bottom"
android:background="@drawable/bg_notification_call_icon">
<ImageView
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_gravity="center"
android:src="@drawable/ic_notification_phone" />
</FrameLayout>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="24dp"
android:orientation="vertical">
<TextView
android:id="@+id/tvCaller"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
android:textColor="#000000"
android:textSize="18sp"
tools:text="Caller username" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/incoming_call"
android:textColor="#000000" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp">
<LinearLayout
android:id="@+id/btnCancel"
android:layout_width="135dp"
android:layout_height="38dp"
android:background="@drawable/bg_notification_cancel"
android:gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="1dp"
android:src="@drawable/ic_notification_cancel" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:fontFamily="sans-serif-medium"
android:text="@string/cancel"
android:textColor="@color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/btnAnswer"
android:layout_width="135dp"
android:layout_height="38dp"
android:layout_marginStart="16dp"
android:background="@drawable/bg_notification_answer"
android:gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_notification_answer" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:fontFamily="sans-serif-medium"
android:text="@string/answer"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

135
android/app/src/main/res/layout/v_notification_heads_up.xml

@ -0,0 +1,135 @@ @@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="86dp"
android:background="@drawable/bg_notification"
android:orientation="vertical"
android:paddingTop="7dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/fPhoto"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/bg_notification_cirle">
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:visibility="gone" />
<TextView
android:id="@+id/tvLetter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#FFFFFF"
android:textSize="14sp"
tools:text="I" />
<FrameLayout
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_gravity="end|bottom"
android:background="@drawable/bg_notification_call_icon">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:padding="2dp"
android:src="@drawable/ic_notification_phone" />
</FrameLayout>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="24dp"
android:orientation="vertical">
<TextView
android:id="@+id/tvCaller"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
android:textColor="#000000"
android:textSize="13sp"
tools:text="Caller username" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/incoming_call"
android:textColor="#000000"
android:textSize="11sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp">
<LinearLayout
android:id="@+id/btnCancel"
android:layout_width="120dp"
android:layout_height="30dp"
android:background="@drawable/bg_notification_cancel"
android:gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="1dp"
android:src="@drawable/ic_notification_cancel" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:fontFamily="sans-serif-medium"
android:textSize="12sp"
android:text="@string/cancel"
android:textColor="@color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/btnAnswer"
android:layout_width="120dp"
android:layout_height="30dp"
android:layout_marginStart="16dp"
android:background="@drawable/bg_notification_answer"
android:gravity="center">
<ImageView
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_notification_answer" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:textSize="12sp"
android:fontFamily="sans-serif-medium"
android:text="@string/answer"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

81
android/app/src/main/res/layout/v_notification_small.xml

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/bg_notification"
android:orientation="vertical"
android:gravity="center_vertical"
android:paddingHorizontal="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/fPhoto"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@drawable/bg_notification_cirle">
<ImageView
android:id="@+id/ivPhoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:visibility="gone" />
<TextView
android:id="@+id/tvLetter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#FFFFFF"
android:textSize="18sp"
tools:text="I" />
<FrameLayout
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_gravity="end|bottom"
android:background="@drawable/bg_notification_call_icon">
<ImageView
android:layout_width="7dp"
android:layout_height="7dp"
android:layout_gravity="center"
android:src="@drawable/ic_notification_phone" />
</FrameLayout>
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="24dp"
android:orientation="vertical">
<TextView
android:id="@+id/tvCaller"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:maxLines="1"
android:textColor="#000000"
android:textSize="15sp"
tools:text="Caller username" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/incoming_call"
android:textColor="#000000"
android:textSize="11sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

8
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

8
android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/mipmap-hdpi-v26/ic_launcher.xml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/mipmap-ldpi-v26/ic_launcher.xml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/mipmap-mdpi-v26/ic_launcher.xml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/mipmap-xhdpi-v26/ic_launcher.xml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/mipmap-xxhdpi-v26/ic_launcher.xml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/mipmap-xxxhdpi-v26/ic_launcher.xml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/iconBackground"/>
<foreground android:drawable="@mipmap/ic_foreground"/>
</adaptive-icon>

6
android/app/src/main/res/values/colors-icon.xml

@ -1,3 +1,3 @@ @@ -1,3 +1,3 @@
<resources>
<color name ='iconBackground'>#FFFFFF</color>
</resources>
<resources>
<color name ='iconBackground'>#FFFFFF</color>
</resources>

18
android/app/src/main/res/values/colors.xml

@ -1,4 +1,16 @@ @@ -1,4 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary_dark">#DE253B</color>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="primary_dark">#DE253B</color>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="color_green">#00CC5E</color>
<color name="color_red">#DE253B</color>
</resources>

12
android/app/src/main/res/values/strings.xml

@ -1,3 +1,9 @@ @@ -1,3 +1,9 @@
<resources>
<string name="app_name">taskme</string>
</resources>
<resources>
<string name="app_name">taskme</string>
<string name="notification_channel_title">Вхідні дзвінки</string>
<string name="incoming_call">Вхідний дзвінок</string>
<string name="answer">Відповісти</string>
<string name="cancel">Відхилити</string>
</resources>

38
android/app/src/main/res/values/styles.xml

@ -1,9 +1,29 @@ @@ -1,9 +1,29 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:textColor">#000000</item>
</style>
</resources>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:textColor">#000000</item>
</style>
<style name="AppTheme.TaskMe" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<!-- Customize your theme here. -->
</style>
<style name="NoAnimation">
<item name="android:windowEnterAnimation">@null</item>
<item name="android:windowExitAnimation">@null</item>
</style>
</resources>

40
android/app/src/release/java/com/taskme2/ReactNativeFlipper.java

@ -1,20 +1,20 @@ @@ -1,20 +1,20 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.app.task_me;
import android.content.Context;
import com.facebook.react.ReactInstanceManager;
/**
* Class responsible of loading Flipper inside your React Native application. This is the release
* flavor of it so it's empty as we don't want to load Flipper.
*/
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
// Do nothing as we don't want to initialize Flipper on Release.
}
}
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.app.task_me;
import android.content.Context;
import com.facebook.react.ReactInstanceManager;
/**
* Class responsible of loading Flipper inside your React Native application. This is the release
* flavor of it so it's empty as we don't want to load Flipper.
*/
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
// Do nothing as we don't want to initialize Flipper on Release.
}
}

7
android/build.gradle

@ -2,10 +2,10 @@ @@ -2,10 +2,10 @@
buildscript {
ext {
buildToolsVersion = "33.0.0"
buildToolsVersion = "34.0.0"
minSdkVersion = 25
compileSdkVersion = 33
targetSdkVersion = 33
compileSdkVersion = 34
targetSdkVersion = 34
// We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
ndkVersion = "23.1.7779620"
@ -23,6 +23,7 @@ buildscript { @@ -23,6 +23,7 @@ buildscript {
}
dependencies {
classpath("com.android.tools.build:gradle")
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
classpath("com.facebook.react:react-native-gradle-plugin")
classpath 'com.google.gms:google-services:4.4.1'
}

2
android/link-assets-manifest.json

@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
},
{
"path": "src/assets/fonts/fontello.ttf",
"sha1": "03d635d6ff58b549d8a826a607091e9ebe801af6"
"sha1": "c7687d15e59715fd39d0c1dbfb18e9cf24730b28"
}
]
}

7
android/sentry.properties

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
auth.token=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
defaults.org=jetup-digital
defaults.project=application-taskme
defaults.url=https://sentry.io/

0
babel.config.js

0
ios/.xcode.env

0
ios/CallKitEventHandler.swift

0
ios/OneSignalNotificationServiceExtension/Info.plist

0
ios/OneSignalNotificationServiceExtension/NotificationService.swift

0
ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtension.entitlements

0
ios/OneSignalNotificationServiceExtension/OneSignalNotificationServiceExtensionStage.Release.entitlements

0
ios/Podfile

16
ios/Podfile.lock

@ -475,7 +475,7 @@ PODS: @@ -475,7 +475,7 @@ PODS:
- react-native-config/Extension (1.5.1)
- react-native-date-picker (4.3.6):
- React-Core
- react-native-document-picker (9.1.1):
- react-native-document-picker (9.1.2):
- React-Core
- react-native-html-to-pdf (0.12.0):
- React-Core
@ -686,6 +686,11 @@ PODS: @@ -686,6 +686,11 @@ PODS:
- RNScreens (3.29.0):
- RCT-Folly (= 2021.07.22.00)
- React-Core
- RNSentry (5.22.2):
- hermes-engine
- React-Core
- React-hermes
- Sentry/HybridSDK (= 8.25.0)
- RNShare (9.4.1):
- React-Core
- RNSoundLevel (1.2.1):
@ -703,6 +708,7 @@ PODS: @@ -703,6 +708,7 @@ PODS:
- SDWebImageWebPCoder (0.8.5):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10)
- Sentry/HybridSDK (8.25.0)
- SocketRocket (0.6.1)
- TOCropViewController (2.7.2)
- Yoga (1.14.0)
@ -795,6 +801,7 @@ DEPENDENCIES: @@ -795,6 +801,7 @@ DEPENDENCIES:
- RNPermissions (from `../node_modules/react-native-permissions`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- "RNSentry (from `../node_modules/@sentry/react-native`)"
- RNShare (from `../node_modules/react-native-share`)
- "RNSoundLevel (from `../node_modules/@tomlangan/react-native-sound-level`)"
- RNSVG (from `../node_modules/react-native-svg`)
@ -824,6 +831,7 @@ SPEC REPOS: @@ -824,6 +831,7 @@ SPEC REPOS:
- PromisesObjC
- SDWebImage
- SDWebImageWebPCoder
- Sentry
- SocketRocket
- TOCropViewController
@ -986,6 +994,8 @@ EXTERNAL SOURCES: @@ -986,6 +994,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-reanimated"
RNScreens:
:path: "../node_modules/react-native-screens"
RNSentry:
:path: "../node_modules/@sentry/react-native"
RNShare:
:path: "../node_modules/react-native-share"
RNSoundLevel:
@ -1043,7 +1053,7 @@ SPEC CHECKSUMS: @@ -1043,7 +1053,7 @@ SPEC CHECKSUMS:
react-native-cameraroll: 4701ae7c3dbcd3f5e9e150ca17f250a276154b35
react-native-config: 86038147314e2e6d10ea9972022aa171e6b1d4d8
react-native-date-picker: c28ccf1b3bc3de3bc6a785792a393fee49677f89
react-native-document-picker: 3599b238843369026201d2ef466df53f77ae0452
react-native-document-picker: 86bcfb8e2c94cd587ca9feb0049831b806df590d
react-native-html-to-pdf: 4c5c6e26819fe202971061594058877aa9b25265
react-native-image-picker: 3269f75c251cdcd61ab51b911dd30d6fff8c6169
react-native-netinfo: 48c5f79a84fbc3ba1d28a8b0d04adeda72885fa8
@ -1097,6 +1107,7 @@ SPEC CHECKSUMS: @@ -1097,6 +1107,7 @@ SPEC CHECKSUMS:
RNPermissions: 0a4aa6c2f46c2cd55fbfa095bcdbad20118ea46f
RNReanimated: 43675f1f0e704abe8ebf953fd79b00e66302cda2
RNScreens: 3c5b9f4a9dcde752466854b6109b79c0e205dad3
RNSentry: f6a5aee809d646763640130714d1fdfe69aac36b
RNShare: 32e97adc8d8c97d4a26bcdd3c45516882184f8b6
RNSoundLevel: c031ed233382b6aeabe44b3d5e895b906e69952f
RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396
@ -1104,6 +1115,7 @@ SPEC CHECKSUMS: @@ -1104,6 +1115,7 @@ SPEC CHECKSUMS:
RNVoipPushNotification: 543e18f83089134a35e7f1d2eba4c8b1f7776b08
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
Sentry: cd86fc55628f5b7c572cabe66cc8f95a9d2f165a
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
TOCropViewController: bf38459e9da6efe414de22087ebd5c530640f4bd
Yoga: d0003f849d2b5224c072cef6568b540d8bb15cd3

30
ios/ShareExtensionTaskme/Info.plist

@ -1,30 +0,0 @@ @@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>PHSupportedMediaTypes</key>
<array>
<string>Video</string>
<string>Image</string>
</array>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>100</integer>
<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
<integer>100</integer>
<key>NSExtensionActivationSupportsFileWithMaxCount</key>
<integer>100</integer>
</dict>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
</dict>
</plist>

0
ios/ShareExtensionTaskme/Base.lproj/MainInterface.storyboard → ios/TaskMeShareExtension/Base.lproj/MainInterface.storyboard

34
ios/TaskMeShareExtension/Info.plist

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>NSExtensionActivationRule</key>
<dict>
<key>NSExtensionActivationSupportsFileWithMaxCount</key>
<integer>100</integer>
<key>NSExtensionActivationSupportsImageWithMaxCount</key>
<integer>100</integer>
<key>NSExtensionActivationSupportsMovieWithMaxCount</key>
<integer>100</integer>
<key>NSExtensionActivationSupportsText</key>
<true/>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
</dict>
<key>PHSupportedMediaTypes</key>
<array>
<string>Video</string>
<string>Image</string>
</array>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.share-services</string>
</dict>
</dict>
</plist>

10
ios/ShareExtensionTaskme/ShareViewController.swift → ios/TaskMeShareExtension/ShareViewController.swift

@ -7,7 +7,7 @@ import Photos @@ -7,7 +7,7 @@ import Photos
class ShareViewController: SLComposeServiceViewController {
// TODO: IMPORTANT: This should be your host app bundle identifier
let hostAppBundleIdentifier = "com.app.taskme"
let shareProtocol = "ShareMediaTaskme" //share url protocol (must be unique to your app, suggest using your apple bundle id, ie: `hostAppBundleIdentifier`)
let shareProtocol = "ComTaskmeAppShare" //share url protocol (must be unique to your app, suggest using your apple bundle id, ie: `hostAppBundleIdentifier`)
let sharedKey = "ShareKey"
var sharedMedia: [SharedMediaFile] = []
var sharedText: [String] = []
@ -23,6 +23,10 @@ class ShareViewController: SLComposeServiceViewController { @@ -23,6 +23,10 @@ class ShareViewController: SLComposeServiceViewController {
override func viewDidLoad() {
super.viewDidLoad();
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if let content = extensionContext!.inputItems[0] as? NSExtensionItem {
if let contents = content.attachments {
@ -41,10 +45,6 @@ class ShareViewController: SLComposeServiceViewController { @@ -41,10 +45,6 @@ class ShareViewController: SLComposeServiceViewController {
}
}
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
override func didSelectPost() {

0
ios/ShareExtensionTaskme/ShareExtensionTaskme.entitlements → ios/TaskMeShareExtension/TaskMeShareExtension.entitlements

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

Loading…
Cancel
Save