Initial commit

This commit is contained in:
tanexc
2026-06-12 23:49:11 +03:00
commit f69ffd79c2
222 changed files with 7094 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
/build
+62
View File
@@ -0,0 +1,62 @@
plugins {
alias(libs.plugins.androidApplication)
alias(libs.plugins.composeCompiler)
}
android {
namespace = "ru.tanexc.hemoanalysis"
compileSdk {
version = release(36)
}
defaultConfig {
applicationId = "ru.tanexc.hemoanalysis"
minSdk = 26
targetSdk = 36
versionCode = 1
versionName = "1.0"
}
buildTypes {
debug {
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
splits {
abi {
isEnable = true
reset()
include("arm64-v8a", "armeabi-v7a", "x86", "x86_64")
isUniversalApk = false
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}
dependencies {
implementation(projects.shared)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.koin.core)
implementation(libs.koin.android)
implementation(libs.filekit.core)
implementation(libs.filekit.dialogs.compose)
}
+26
View File
@@ -0,0 +1,26 @@
-keepattributes RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,Signature,InnerClasses,EnclosingMethod
-keep class **$$serializer { *; }
-keepclassmembers class ** {
public static ** serializer(...);
}
-keepclassmembers class **$Companion {
public final kotlinx.serialization.KSerializer serializer(...);
}
-keep @kotlinx.serialization.Serializable class ru.tanexc.hemoanalysis.** { *; }
-keep class io.ktor.** { *; }
-keep class kotlinx.coroutines.** { *; }
-keep class kotlinx.serialization.** { *; }
-keepnames class io.ktor.** { *; }
-keep class ai.onnxruntime.** { *; }
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**
-dontwarn java.lang.management.**
Binary file not shown.
Binary file not shown.
Binary file not shown.
+87
View File
@@ -0,0 +1,87 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "ru.tanexc.hemoanalysis",
"variantName": "release",
"elements": [
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "armeabi-v7a"
}
],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "androidApp-armeabi-v7a-release.apk"
},
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "x86_64"
}
],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "androidApp-x86_64-release.apk"
},
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "arm64-v8a"
}
],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "androidApp-arm64-v8a-release.apk"
},
{
"type": "ONE_OF_MANY",
"filters": [
{
"filterType": "ABI",
"value": "x86"
}
],
"attributes": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "androidApp-x86-release.apk"
}
],
"elementType": "File",
"baselineProfiles": [
{
"minApi": 28,
"maxApi": 30,
"baselineProfiles": [
"baselineProfiles/1/androidApp-armeabi-v7a-release.dm",
"baselineProfiles/1/androidApp-x86_64-release.dm",
"baselineProfiles/1/androidApp-arm64-v8a-release.dm",
"baselineProfiles/1/androidApp-x86-release.dm"
]
},
{
"minApi": 31,
"maxApi": 2147483647,
"baselineProfiles": [
"baselineProfiles/0/androidApp-armeabi-v7a-release.dm",
"baselineProfiles/0/androidApp-x86_64-release.dm",
"baselineProfiles/0/androidApp-arm64-v8a-release.dm",
"baselineProfiles/0/androidApp-x86-release.dm"
]
}
],
"minSdkVersionForDexing": 26
}
+35
View File
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED"
android:minSdkVersion="34" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<application
android:name=".HemoAnalysisApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_policy"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.HemoAnalysis">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.HemoAnalysis">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,14 @@
package ru.tanexc.hemoanalysis
import android.app.Application
import ru.tanexc.hemoanalysis.di.koinInit
import org.koin.android.ext.koin.androidContext
class HemoAnalysisApplication: Application() {
override fun onCreate() {
super.onCreate()
koinInit {
androidContext(this@HemoAnalysisApplication)
}
}
}
@@ -0,0 +1,21 @@
package ru.tanexc.hemoanalysis
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import io.github.vinceglb.filekit.FileKit
import io.github.vinceglb.filekit.dialogs.init
import ru.tanexc.hemoanalysis.navigation.provideRootComponent
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
val root = provideRootComponent()
FileKit.init(this)
setContent {
App(root)
}
}
}
@@ -0,0 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="80"
android:viewportHeight="80">
<group android:scaleX="0.5"
android:scaleY="0.5"
android:translateX="20"
android:translateY="20">
<path
android:pathData="M37.691,23.516C42.2,23.22 46.21,24.387 49.722,27.017C53.235,29.648 55.483,33.168 56.467,37.578C57.451,41.988 56.465,46.167 53.508,50.116C50.55,54.065 46.817,56.188 42.308,56.484C37.8,56.78 33.789,55.613 30.277,52.983C26.765,50.352 24.517,46.832 23.532,42.422C22.548,38.012 23.534,33.833 26.492,29.884C29.449,25.935 33.182,23.812 37.691,23.516ZM28.951,41.098C29.834,43.954 31.492,46.293 33.923,48.114C36.354,49.935 39.065,50.867 42.054,50.911C45.044,50.954 47.511,49.678 49.455,47.081C51.4,44.485 51.931,41.758 51.048,38.902C50.165,36.046 48.508,33.707 46.076,31.886C43.645,30.065 40.934,29.133 37.945,29.089C34.956,29.046 32.488,30.322 30.544,32.919C28.599,35.515 28.069,38.242 28.951,41.098ZM33.314,38.792C33.309,39.549 33.59,40.16 34.155,40.625C34.72,41.091 35.367,41.259 36.096,41.13C36.569,41.062 37.045,41.059 37.525,41.123C38.004,41.186 38.424,41.353 38.784,41.623C39.145,41.893 39.423,42.249 39.618,42.691C39.814,43.133 39.946,43.591 40.014,44.063C40.095,44.8 40.417,45.379 40.98,45.8C41.543,46.222 42.209,46.341 42.979,46.157C43.704,45.94 44.309,45.507 44.795,44.858C45.281,44.209 45.504,43.489 45.464,42.699C45.4,41.469 45.104,40.34 44.575,39.31C44.046,38.281 43.331,37.429 42.43,36.754C41.53,36.08 40.521,35.62 39.405,35.375C38.288,35.13 37.131,35.15 35.933,35.435C35.164,35.618 34.536,36.035 34.049,36.684C33.563,37.333 33.318,38.036 33.314,38.792Z"
android:fillColor="#BCF0B4"/>
<path
android:pathData="M17.012,69.981C15.179,69.981 13.61,69.329 12.304,68.023C10.998,66.718 10.346,65.148 10.346,63.315V53.315C10.346,52.37 10.665,51.579 11.304,50.94C11.943,50.301 12.735,49.981 13.679,49.981C14.623,49.981 15.415,50.301 16.054,50.94C16.693,51.579 17.012,52.37 17.012,53.315V63.315H27.012C27.957,63.315 28.749,63.634 29.387,64.273C30.026,64.912 30.346,65.704 30.346,66.648C30.346,67.593 30.026,68.384 29.387,69.023C28.749,69.662 27.957,69.981 27.012,69.981H17.012ZM63.679,69.981H53.679C52.735,69.981 51.943,69.662 51.304,69.023C50.665,68.384 50.346,67.593 50.346,66.648C50.346,65.704 50.665,64.912 51.304,64.273C51.943,63.634 52.735,63.315 53.679,63.315H63.679V53.315C63.679,52.37 63.999,51.579 64.637,50.94C65.276,50.301 66.068,49.981 67.012,49.981C67.957,49.981 68.748,50.301 69.387,50.94C70.026,51.579 70.346,52.37 70.346,53.315V63.315C70.346,65.148 69.693,66.718 68.387,68.023C67.082,69.329 65.512,69.981 63.679,69.981ZM10.346,26.648V16.648C10.346,14.815 10.998,13.245 12.304,11.94C13.61,10.634 15.179,9.981 17.012,9.981H27.012C27.957,9.981 28.749,10.301 29.387,10.94C30.026,11.579 30.346,12.37 30.346,13.315C30.346,14.259 30.026,15.051 29.387,15.69C28.749,16.329 27.957,16.648 27.012,16.648H17.012V26.648C17.012,27.593 16.693,28.384 16.054,29.023C15.415,29.662 14.623,29.981 13.679,29.981C12.735,29.981 11.943,29.662 11.304,29.023C10.665,28.384 10.346,27.593 10.346,26.648ZM63.679,26.648V16.648H53.679C52.735,16.648 51.943,16.329 51.304,15.69C50.665,15.051 50.346,14.259 50.346,13.315C50.346,12.37 50.665,11.579 51.304,10.94C51.943,10.301 52.735,9.981 53.679,9.981H63.679C65.512,9.981 67.082,10.634 68.387,11.94C69.693,13.245 70.346,14.815 70.346,16.648V26.648C70.346,27.593 70.026,28.384 69.387,29.023C68.748,29.662 67.957,29.981 67.012,29.981C66.068,29.981 65.276,29.662 64.637,29.023C63.999,28.384 63.679,27.593 63.679,26.648Z"
android:fillColor="#BCF0B4"/>
</group>
</vector>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<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>
</resources>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#235024</color>
</resources>
@@ -0,0 +1,3 @@
<resources>
<string name="app_name">HemoAnalysis</string>
</resources>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.HemoAnalysis" parent="android:Theme.Material.Light.NoActionBar" />
</resources>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">111.88.154.194</domain>
</domain-config>
</network-security-config>