From 77a063d26312887e3e129e6a997902459daa3a7a Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 9 Jul 2026 22:46:04 +0300 Subject: [PATCH] Preserve open positions carousel scroll --- android/TradeBotMonitor/app/build.gradle.kts | 4 ++-- .../java/xyz/kusoft/tradebotmonitor/MainActivity.kt | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/android/TradeBotMonitor/app/build.gradle.kts b/android/TradeBotMonitor/app/build.gradle.kts index bb56972..55e79f0 100644 --- a/android/TradeBotMonitor/app/build.gradle.kts +++ b/android/TradeBotMonitor/app/build.gradle.kts @@ -10,7 +10,7 @@ android { applicationId = "xyz.kusoft.tradebotmonitor" minSdk = 26 targetSdk = 36 - versionCode = 15 - versionName = "0.2.12" + versionCode = 16 + versionName = "0.2.13" } } diff --git a/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt b/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt index 9e4c7b4..f477e3a 100644 --- a/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt +++ b/android/TradeBotMonitor/app/src/main/java/xyz/kusoft/tradebotmonitor/MainActivity.kt @@ -59,6 +59,7 @@ class MainActivity : Activity() { var exposure: TextView? = null, var positionCount: TextView? = null, var positionsContainer: LinearLayout? = null, + var positionsScroller: HorizontalScrollView? = null, var positionsList: LinearLayout? = null, var closedTradesContainer: LinearLayout? = null, val positions: MutableMap = linkedMapOf(), @@ -258,7 +259,7 @@ class MainActivity : Activity() { val positionSignature = positionsSignature(data.positions) if (binding.positionSignature != positionSignature) { binding.positionsContainer?.let { container -> - rebuildPositionsContent(container, data.positions) + rebuildPositionsContent(container, data.positions, binding.positionsScroller?.scrollX ?: 0) binding.positionSignature = positionSignature } ?: return false } @@ -833,9 +834,10 @@ class MainActivity : Activity() { return section(null, body) } - private fun rebuildPositionsContent(container: LinearLayout, positions: List) { + private fun rebuildPositionsContent(container: LinearLayout, positions: List, preserveScrollX: Int = 0) { container.removeAllViews() assetsBindings?.positions?.clear() + assetsBindings?.positionsScroller = null assetsBindings?.positionsList = null if (positions.isEmpty()) { container.addView(text("Открытых позиций нет", 13f, Typeface.NORMAL, palette.muted)) @@ -852,7 +854,11 @@ class MainActivity : Activity() { isHorizontalScrollBarEnabled = false overScrollMode = View.OVER_SCROLL_NEVER addView(list, ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)) + if (preserveScrollX > 0) { + post { scrollTo(preserveScrollX, 0) } + } } + assetsBindings?.positionsScroller = scroller container.addView(scroller) } @@ -1533,7 +1539,7 @@ class MainActivity : Activity() { } private fun positionsSignature(positions: List): String = - positions.joinToString("|") { positionKey(it) } + positions.map { positionKey(it) }.sorted().joinToString("|") private fun positionKey(position: PositionData): String = when {