From 7f2aefdd72fe0c3bf80a7a67a04538f0b293f41d Mon Sep 17 00:00:00 2001 From: Eugene Date: Tue, 30 Jun 2026 18:18:17 +0300 Subject: [PATCH] add pigreceiver --- .../androidApp/src/main/AndroidManifest.xml | 11 +++++ .../videobox/multiplatform/MainActivity.kt | 2 +- .../videobox/multiplatform/PigReceiver.kt | 42 +++++++++++++++++++ .../multiplatform/SecretCodeReceiver.kt | 32 -------------- 4 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/PigReceiver.kt delete mode 100644 apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/SecretCodeReceiver.kt diff --git a/apps/vbox/client/androidApp/src/main/AndroidManifest.xml b/apps/vbox/client/androidApp/src/main/AndroidManifest.xml index 48964e4..52be9c1 100644 --- a/apps/vbox/client/androidApp/src/main/AndroidManifest.xml +++ b/apps/vbox/client/androidApp/src/main/AndroidManifest.xml @@ -28,6 +28,7 @@ android:configChanges="screenSize|screenLayout|orientation|smallestScreenSize" android:exported="true" android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" android:supportsPictureInPicture="true"> @@ -98,6 +99,7 @@ android:name="android.app.shortcuts" android:resource="@xml/shortcuts" /> + @@ -108,5 +110,14 @@ android:scheme="android_secret_code" /> + + + + + + diff --git a/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/MainActivity.kt b/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/MainActivity.kt index 4493663..6826fe0 100644 --- a/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/MainActivity.kt +++ b/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/MainActivity.kt @@ -42,7 +42,7 @@ class MainActivity : ComponentActivity() { .setData(null) .setAction(null) } - val isPiggyActivity = componentName?.className == SecretCodeReceiver.PIGGY_CLS + val isPiggyActivity = componentName?.className == PigReceiver.PIGGY_CLS setContent { if (isPiggyActivity) { CompositionLocalProvider(LocalColorSchemeProvider provides getPiggyColorScheme()) { diff --git a/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/PigReceiver.kt b/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/PigReceiver.kt new file mode 100644 index 0000000..30d951c --- /dev/null +++ b/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/PigReceiver.kt @@ -0,0 +1,42 @@ +package ru.shadowsparky.videobox.multiplatform + +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.util.Log + +// adb shell am broadcast -a ru.shadowsparky.videobox.ACTION_SWITCH_PIGGY_ICON -p ru.shadowsparky.videobox.multiplatform.debug +// adb shell am broadcast -a ru.shadowsparky.videobox.ACTION_SWITCH_PIGGY_ICON -p ru.shadowsparky.videobox.multiplatform +open class PigReceiver : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + Log.d("PigReceiver", "intent ${intent?.action} received. context $context") + if (context == null) return + when (intent?.action) { + "android.provider.Telephony.SECRET_CODE", + "ru.shadowsparky.videobox.ACTION_SWITCH_PIGGY_ICON" -> { + val pm = context.packageManager + val mainActivity = ComponentName(context, MainActivity::class.java) + val piggyActivityAlias = ComponentName(context, PIGGY_CLS) + val isMainEnabled = pm.getComponentEnabledSetting(mainActivity) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED + pm.setState(piggyActivityAlias, isMainEnabled) + pm.setState(mainActivity, !isMainEnabled) + } + } + } + + private fun PackageManager.setState(cn: ComponentName, isEnabled: Boolean) { + setComponentEnabledSetting( + cn, + if (isEnabled) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP + ) + } + + companion object { + const val PIGGY_CLS = "ru.shadowsparky.videobox.multiplatform.PiggyActivity" + } +} + +class SecretCodeReceiver : PigReceiver() diff --git a/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/SecretCodeReceiver.kt b/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/SecretCodeReceiver.kt deleted file mode 100644 index cfd7e2c..0000000 --- a/apps/vbox/client/androidApp/src/main/kotlin/ru/shadowsparky/videobox/multiplatform/SecretCodeReceiver.kt +++ /dev/null @@ -1,32 +0,0 @@ -package ru.shadowsparky.videobox.multiplatform - -import android.content.BroadcastReceiver -import android.content.ComponentName -import android.content.Context -import android.content.Intent -import android.content.pm.PackageManager - -// adb shell am broadcast -a android.provider.Telephony.SECRET_CODE -d android_secret_code://676767 -class SecretCodeReceiver : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (context == null || intent?.action != "android.provider.Telephony.SECRET_CODE") return - val pm = context.packageManager - val mainActivity = ComponentName(context, MainActivity::class.java) - val piggyActivityAlias = ComponentName(context, PIGGY_CLS) - val isMainEnabled = pm.getComponentEnabledSetting(mainActivity) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED - pm.setState(piggyActivityAlias, isMainEnabled) - pm.setState(mainActivity, !isMainEnabled) - } - - private fun PackageManager.setState(cn: ComponentName, isEnabled: Boolean) { - setComponentEnabledSetting( - cn, - if (isEnabled) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP - ) - } - - companion object { - const val PIGGY_CLS = "ru.shadowsparky.videobox.multiplatform.PiggyActivity" - } -}