feat(app-glasses): AR-метка RayNeoX2 (com.rayneo.mercury.app) + тема + landscape
Из pair-view: meta-data com.rayneo.mercury.app=true — очки распознают приложение как AR (без неё открывалось как обычное). Тема Theme.ViewMateGlasses (чёрный фон, fullscreen), screenOrientation landscape, hardwareAccelerated. Плюс фикс краша: prefs читались в конструкторе Application (до attachBaseContext) — перенесено в onCreate. Проверено на железе: открывается через лаунчер нормально.
This commit is contained in:
@@ -12,13 +12,20 @@
|
||||
<application
|
||||
android:name=".GlassesApp"
|
||||
android:label="ViewMate Glasses"
|
||||
android:theme="@style/Theme.AppCompat"
|
||||
android:theme="@style/Theme.ViewMateGlasses"
|
||||
android:hardwareAccelerated="true"
|
||||
android:allowBackup="true"
|
||||
android:usesCleartextTraffic="true">
|
||||
|
||||
<!-- indicate this is an app that supports RayNeoX2 glasses -->
|
||||
<meta-data
|
||||
android:name="com.rayneo.mercury.app"
|
||||
android:value="true" />
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
android:exported="true"
|
||||
android:screenOrientation="landscape">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
||||
@@ -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") }
|
||||
|
||||
@@ -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}")
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Тема очков: чёрный фон окна, полноэкранно, без заголовка. -->
|
||||
<style name="Theme.ViewMateGlasses" parent="Theme.AppCompat.NoActionBar">
|
||||
<item name="android:windowBackground">@android:color/black</item>
|
||||
<item name="android:windowFullscreen">true</item>
|
||||
<item name="android:windowNoTitle">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user