From 9f1c6735c1856627a6b62f8b671cd8b19d688f1a Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 20 Aug 2026 01:22:27 +0300 Subject: [PATCH] =?UTF-8?q?feat(app-glasses):=20AR-=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20RayNeoX2=20(com.rayneo.mercury.app)=20+=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=B0=20+=20landscape?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Из pair-view: meta-data com.rayneo.mercury.app=true — очки распознают приложение как AR (без неё открывалось как обычное). Тема Theme.ViewMateGlasses (чёрный фон, fullscreen), screenOrientation landscape, hardwareAccelerated. Плюс фикс краша: prefs читались в конструкторе Application (до attachBaseContext) — перенесено в onCreate. Проверено на железе: открывается через лаунчер нормально. --- app-glasses/src/main/AndroidManifest.xml | 11 +++++++++-- .../pw/binom/viewmate/glasses/GlassesApp.kt | 15 ++++++++++++++- .../pw/binom/viewmate/glasses/HostConnection.kt | 2 +- app-glasses/src/main/res/values/themes.xml | 9 +++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 app-glasses/src/main/res/values/themes.xml diff --git a/app-glasses/src/main/AndroidManifest.xml b/app-glasses/src/main/AndroidManifest.xml index f14276a..733063b 100644 --- a/app-glasses/src/main/AndroidManifest.xml +++ b/app-glasses/src/main/AndroidManifest.xml @@ -12,13 +12,20 @@ + + + + android:exported="true" + android:screenOrientation="landscape"> diff --git a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/GlassesApp.kt b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/GlassesApp.kt index 04821f5..bbc618e 100644 --- a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/GlassesApp.kt +++ b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/GlassesApp.kt @@ -1,6 +1,7 @@ package pw.binom.viewmate.glasses import android.app.Application +import android.content.Context import com.rayneo.arsdk.android.MercurySDK import java.io.File import kotlinx.coroutines.flow.MutableStateFlow @@ -28,12 +29,24 @@ class GlassesApp : Application() { lateinit var downloadManager: GlassesDownloadManager private set - /** Масштаб экрана очков (0.5..1.0); задаётся пультом телефона. */ + private val prefs by lazy { + getSharedPreferences("viewmate_prefs", Context.MODE_PRIVATE) + } + + /** Масштаб экрана очков (0.5..1.0). Загружается в onCreate (prefs — после привязки контекста). */ val scale = MutableStateFlow(1f) + /** Применить и сохранить масштаб. */ + fun applyScale(value: Float) { + val v = value.coerceIn(0.5f, 1f) + scale.value = v + prefs.edit().putFloat("scale", v).apply() + } + override fun onCreate() { super.onCreate() instance = this + scale.value = prefs.getFloat("scale", 1f).coerceIn(0.5f, 1f) MercurySDK.init(this) movieController = MovieController(applicationContext) movieController.eventLogger = { msg -> logToFile("mc: $msg") } diff --git a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/HostConnection.kt b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/HostConnection.kt index 947f5f6..9d798ac 100644 --- a/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/HostConnection.kt +++ b/app-glasses/src/main/kotlin/pw/binom/viewmate/glasses/HostConnection.kt @@ -223,7 +223,7 @@ class HostConnection( is SetMode -> addMessage("SetMode: ${msg.mode}") is SetScale -> { - GlassesApp.instance.scale.value = msg.scale.coerceIn(0.5f, 1f) + GlassesApp.instance.applyScale(msg.scale) log("app", "scale → ${msg.scale}") } diff --git a/app-glasses/src/main/res/values/themes.xml b/app-glasses/src/main/res/values/themes.xml new file mode 100644 index 0000000..95b9796 --- /dev/null +++ b/app-glasses/src/main/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + +