Browse Source

release(v1.002): comprehensive transparent bidirectional logging and network disconnect diagnostics

main^2 v1.002
Ali Alavi 22 hours ago
parent
commit
6e18c46b55
  1. BIN
      .gradle/8.11.1/executionHistory/executionHistory.bin
  2. BIN
      .gradle/8.11.1/executionHistory/executionHistory.lock
  3. BIN
      .gradle/8.11.1/fileHashes/fileHashes.bin
  4. BIN
      .gradle/8.11.1/fileHashes/fileHashes.lock
  5. BIN
      .gradle/8.11.1/fileHashes/resourceHashesCache.bin
  6. BIN
      .gradle/buildOutputCleanup/buildOutputCleanup.lock
  7. 4
      app/build.gradle
  8. BIN
      app/build/intermediates/dex/debug/mergeProjectDexDebug/5/classes.dex
  9. 2
      app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt
  10. BIN
      app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources
  11. 4
      app/build/intermediates/manifest_merge_blame_file/debug/processDebugMainManifest/manifest-merger-blame-debug-report.txt
  12. 4
      app/build/intermediates/merged_manifest/debug/processDebugMainManifest/AndroidManifest.xml
  13. 4
      app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml
  14. 4
      app/build/intermediates/merged_manifests/debug/processDebugManifest/output-metadata.json
  15. 4
      app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/AndroidManifest.xml
  16. 4
      app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/output-metadata.json
  17. 4
      app/build/intermediates/processed_res/debug/processDebugResources/out/output-metadata.json
  18. BIN
      app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_
  19. BIN
      app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/soniox/remotemic/MainActivity.dex
  20. BIN
      app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/soniox/remotemic/StreamDictationClient.dex
  21. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab
  22. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab
  23. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at
  24. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab
  25. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at
  26. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab
  27. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at
  28. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab
  29. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at
  30. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab
  31. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at
  32. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab
  33. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at
  34. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab
  35. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at
  36. 2
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab
  37. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab
  38. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at
  39. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab
  40. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream
  41. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len
  42. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len
  43. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at
  44. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i
  45. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab
  46. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream
  47. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len
  48. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len
  49. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values
  50. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at
  51. 2
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s
  52. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i
  53. BIN
      app/build/kotlin/compileDebugKotlin/cacheable/last-build.bin
  54. BIN
      app/build/kotlin/compileDebugKotlin/local-state/build-history.bin
  55. BIN
      app/build/outputs/apk/debug/app-debug.apk
  56. 4
      app/build/outputs/apk/debug/output-metadata.json
  57. BIN
      app/build/tmp/kotlin-classes/debug/com/soniox/remotemic/MainActivity.class
  58. BIN
      app/build/tmp/kotlin-classes/debug/com/soniox/remotemic/StreamDictationClient.class
  59. 4
      app/src/main/java/com/soniox/remotemic/MainActivity.kt
  60. 23
      app/src/main/java/com/soniox/remotemic/StreamDictationClient.kt

BIN
.gradle/8.11.1/executionHistory/executionHistory.bin

BIN
.gradle/8.11.1/executionHistory/executionHistory.lock

BIN
.gradle/8.11.1/fileHashes/fileHashes.bin

BIN
.gradle/8.11.1/fileHashes/fileHashes.lock

BIN
.gradle/8.11.1/fileHashes/resourceHashesCache.bin

BIN
.gradle/buildOutputCleanup/buildOutputCleanup.lock

4
app/build.gradle

@ -11,8 +11,8 @@ android {
applicationId "com.soniox.remotemic"
minSdk 24
targetSdk 34
versionCode 2
versionName "1.001"
versionCode 3
versionName "1.002"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

BIN
app/build/intermediates/dex/debug/mergeProjectDexDebug/5/classes.dex

2
app/build/intermediates/incremental/packageDebug/tmp/debug/dex-renamer-state.txt

@ -1,4 +1,4 @@
#Tue Aug 25 18:43:45 UTC 2026
#Tue Aug 25 18:54:13 UTC 2026
path.3=5/classes.dex
path.2=10/classes.dex
path.1=0/classes.dex

BIN
app/build/intermediates/incremental/packageDebug/tmp/debug/zip-cache/androidResources

4
app/build/intermediates/manifest_merge_blame_file/debug/processDebugMainManifest/manifest-merger-blame-debug-report.txt

@ -1,8 +1,8 @@
1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 package="com.soniox.remotemic"
4 android:versionCode="2"
5 android:versionName="1.001" >
4 android:versionCode="3"
5 android:versionName="1.002" >
6
7 <uses-sdk
8 android:minSdkVersion="24"

4
app/build/intermediates/merged_manifest/debug/processDebugMainManifest/AndroidManifest.xml

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.soniox.remotemic"
android:versionCode="2"
android:versionName="1.001" >
android:versionCode="3"
android:versionName="1.002" >
<uses-sdk
android:minSdkVersion="24"

4
app/build/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.soniox.remotemic"
android:versionCode="2"
android:versionName="1.001" >
android:versionCode="3"
android:versionName="1.002" >
<uses-sdk
android:minSdkVersion="24"

4
app/build/intermediates/merged_manifests/debug/processDebugManifest/output-metadata.json

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 2,
"versionName": "1.001",
"versionCode": 3,
"versionName": "1.002",
"outputFile": "AndroidManifest.xml"
}
],

4
app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/AndroidManifest.xml

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.soniox.remotemic"
android:versionCode="2"
android:versionName="1.001" >
android:versionCode="3"
android:versionName="1.002" >
<uses-sdk
android:minSdkVersion="24"

4
app/build/intermediates/packaged_manifests/debug/processDebugManifestForPackage/output-metadata.json

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 2,
"versionName": "1.001",
"versionCode": 3,
"versionName": "1.002",
"outputFile": "AndroidManifest.xml"
}
],

4
app/build/intermediates/processed_res/debug/processDebugResources/out/output-metadata.json

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 2,
"versionName": "1.001",
"versionCode": 3,
"versionName": "1.002",
"outputFile": "resources-debug.ap_"
}
],

BIN
app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_

BIN
app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/soniox/remotemic/MainActivity.dex

BIN
app/build/intermediates/project_dex_archive/debug/dexBuilderDebug/out/com/soniox/remotemic/StreamDictationClient.dex

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at

2
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab

@ -1,2 +1,2 @@
65
67
0

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at

2
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.s

@ -1 +1 @@
фЮЭХтPЙАвUфДи!фщх*юТМ!циВoЭБШЫж к)ФТЦн9дГоь,ХХмО2АЧЭ9лм*Э3м&СЬ%л)и.Члиию!Ь,яФ²чяп/рК#д0ыФ5У÷сЕ#Вс<к3ГоЗМафа-л%ТьЕр/М(Т>ЖбХчЫ,н7ЭЪRкиМ!ТЪ*С/МрДЕ$мTФЙМящ1Ъ9р#юШу
фЮЭХтPЙАвUфДи!фщх*юТМ!циВoЭБШЫж к)ФТЦн9дГоь,ХХмО2АЧЭ9лм*Э3м&СЬ%л)и.Члиию!Ь,яФ²чяп/рК#д0ыФ5У÷сЕ#Вс<к3ГоЗМафа-л%ТьЕр/М(Т>ЖбХчЫ,н7ЭЪRкиМ!ТЪ*С/МрДЕ$мTФЙМящ1Ъ9р#юШумЩВЗ*Ы/Ц4Л#Ц;

BIN
app/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i

BIN
app/build/kotlin/compileDebugKotlin/cacheable/last-build.bin

BIN
app/build/kotlin/compileDebugKotlin/local-state/build-history.bin

BIN
app/build/outputs/apk/debug/app-debug.apk

4
app/build/outputs/apk/debug/output-metadata.json

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 2,
"versionName": "1.001",
"versionCode": 3,
"versionName": "1.002",
"outputFile": "app-debug.apk"
}
],

BIN
app/build/tmp/kotlin-classes/debug/com/soniox/remotemic/MainActivity.class

BIN
app/build/tmp/kotlin-classes/debug/com/soniox/remotemic/StreamDictationClient.class

4
app/src/main/java/com/soniox/remotemic/MainActivity.kt

@ -121,8 +121,8 @@ class MainActivity : AppCompatActivity() {
setupUI()
checkPermissions()
binding.tvSubtitle.text = "همگام‌سازی زنده و تایپ صوتی بیسیم (v1.001)"
AppLogger.log("Main", "اپلیکیشن راه‌اندازی شد (v1.001 - استریم زنده دورنگ در اینپوت‌باکس)")
binding.tvSubtitle.text = "همگام‌سازی زنده و تایپ صوتی بیسیم (v1.002)"
AppLogger.log("Main", "اپلیکیشن راه‌اندازی شد (v1.002 - همگام‌سازی دوطرفه شفاف و لاگ‌های تشخیصی)")
// Initialize Collaborative WebSocket Client
streamDictationClient = StreamDictationClient(

23
app/src/main/java/com/soniox/remotemic/StreamDictationClient.kt

@ -71,6 +71,23 @@ class StreamDictationClient(
connectWebSocket()
}
private fun diagnoseDisconnectReason(t: Throwable): String {
val msg = t.message ?: t.javaClass.simpleName
return when {
msg.contains("Software caused connection abort", ignoreCase = true) ->
"قطع شدن سوکت به دلیل سوییچ اینترنت/تغییر مسیر شبکه گوشی (Software connection abort)"
msg.contains("failed to connect", ignoreCase = true) && msg.contains("after", ignoreCase = true) ->
"تایم‌اوت شبکه اپراتور موبایل (عدم پاسخگویی پورت در بازه زمانی تعیین‌شده)"
msg.contains("sent ping but didn't receive pong", ignoreCase = true) ->
"افت پکت‌های شبکه یا تاخیر پینگ بین گوشی و سرور (Ping/Pong timeout)"
msg.contains("Connection refused", ignoreCase = true) ->
"سرویس سرور در دسترس نیست یا متوقف شده (Connection refused)"
msg.contains("Network is unreachable", ignoreCase = true) || msg.contains("ENETUNREACH", ignoreCase = true) ->
"عدم دسترسی گوشی به اینترنت (Network unreachable)"
else -> msg
}
}
@Synchronized
fun connectWebSocket() {
if (isConnected.get() || isConnecting.get()) return
@ -110,6 +127,9 @@ class StreamDictationClient(
val ts = json.optDouble("timestamp", System.currentTimeMillis() / 1000.0)
val payload = SyncStatePayload(source, app, txt, cursor, sel, rev, ts)
if (source != "android") {
AppLogger.log("MacSync", "📥 دریافت وضعیت از مک [$app]: '${txt.take(30)}' (کرسر: $cursor)")
}
mainHandler.post { onSyncStateReceived(payload) }
return
}
@ -151,7 +171,8 @@ class StreamDictationClient(
}
override fun onFailure(ws: WebSocket, t: Throwable, response: Response?) {
AppLogger.log(tag, "🔴 قطع سوکت: ${t.message}. تلاش مجدد...")
val diagnostic = diagnoseDisconnectReason(t)
AppLogger.log(tag, "🔴 قطع سوکت: $diagnostic. تلاش مجدد...")
isConnecting.set(false)
isConnected.set(false)
webSocket = null

Loading…
Cancel
Save