glasses: switch to rikka.shizuku.ShizukuProvider, fix binder acquisition
- Add dev.rikka.shizuku:provider:13.1.5 dependency. - Replace custom ShizukuInitProvider with rikka.shizuku.ShizukuProvider from the upstream library; configured per Shizuku v12+ docs with android:permission='android.permission.INTERACT_ACROSS_USERS_FULL' to protect the provider from ordinary apps. - Move ShizukuBootstrap.attach() from GlassesVmApp.onCreate to MainActivity.onCreate (requestPermission needs an Activity context). - MainActivity now overrides onRequestPermissionsResult and forwards the grant to ShizukuBootstrap. - Rewrite ShizukuBootstrap strictly per the Shizuku-API guide: addBinderReceivedListenerSticky + addRequestPermissionResultListener in attach(); pingBinder / checkSelfPermission / requestPermission in refresh(). - Drop ShizukuInitProvider.kt — its job is now done by rikka.shizuku.ShizukuProvider.onCreate (verified in logcat: 'ShizukuProvider: binder received'). Verified on device ARGF20 (A06B4AB933C4103, API 32): Shizuku dialog 'Allow rayneo-vm to use Shizuku?' opens correctly; binder received via ShizukuProvider; launcher icon now visible (meta-data fix).
This commit is contained in:
@@ -10,6 +10,9 @@ import pw.binom.rayneovm.glasses.protocol.VmGlassesController
|
||||
*
|
||||
* Запускает [VmService] при создании (foreground-сервис держит WebSocket сервер + mDNS,
|
||||
* и продолжает работать после сворачивания Activity).
|
||||
*
|
||||
* Также стартует [ShizukuBootstrap] — он регистрирует binder listener, ждёт/запрашивает
|
||||
* permission и обновляет state. MainActivity потом подпишется на этот state.
|
||||
*/
|
||||
class GlassesVmApp : Application(), ControllerProvider {
|
||||
|
||||
@@ -18,11 +21,15 @@ class GlassesVmApp : Application(), ControllerProvider {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
Log.i(TAG, "GlassesVmApp onCreate, uid=${android.os.Process.myUid()}")
|
||||
// Инициализация RayNeo Mercury SDK.
|
||||
com.ffalcon.mercury.android.sdk.MercurySDK.init(this)
|
||||
Log.i(TAG, "MercurySDK initialized")
|
||||
|
||||
// 1. RayNeo Mercury SDK init (BLE-канал, если нужно)
|
||||
runCatching { com.ffalcon.mercury.android.sdk.MercurySDK.init(this) }
|
||||
.onSuccess { Log.i(TAG, "MercurySDK initialized") }
|
||||
.onFailure { Log.w(TAG, "MercurySDK init failed: ${it.message}") }
|
||||
|
||||
controller.setAppContext(this)
|
||||
// Регистрируем debug-receiver для тестирования через adb.
|
||||
|
||||
// 2. Регистрируем debug-receiver для тестирования через adb
|
||||
val filter = android.content.IntentFilter(pw.binom.rayneovm.glasses.protocol.DebugTestReceiver.ACTION)
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
|
||||
registerReceiver(pw.binom.rayneovm.glasses.protocol.DebugTestReceiver(), filter, android.content.Context.RECEIVER_EXPORTED)
|
||||
@@ -30,6 +37,11 @@ class GlassesVmApp : Application(), ControllerProvider {
|
||||
@Suppress("UnspecifiedRegisterReceiverFlag")
|
||||
registerReceiver(pw.binom.rayneovm.glasses.protocol.DebugTestReceiver(), filter)
|
||||
}
|
||||
|
||||
// 3. Shizuku bootstrap здесь не зовём — он вызывается из MainActivity.onCreate,
|
||||
// где есть Activity-контекст (для requestPermission flow).
|
||||
|
||||
// 4. Запуск foreground-сервиса (WebSocket + mDNS publisher)
|
||||
VmService.start(this)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user