11package com.andrerinas.wirelesshelper.strategy
22
3- import android.app.Service
43import android.content.Context
54import android.content.Intent
6- import android.database.Cursor
75import android.net.ConnectivityManager
86import android.net.Network
9- import android.net.Uri
107import android.os.Build
118import android.os.Parcelable
129import android.util.Log
@@ -23,7 +20,6 @@ abstract class BaseStrategy(protected val context: Context, private val scope: C
2320 }
2421
2522 protected val TAG = " HUREV_WIFI"
26- private val carConnectionUri = Uri .Builder ().scheme(" content" ).authority(" androidx.car.app.connection" ).build()
2723 private var activeProxy: AapProxy ? = null
2824 var stateListener: StateListener ? = null
2925 protected val isLaunching = AtomicBoolean (false )
@@ -40,6 +36,19 @@ abstract class BaseStrategy(protected val context: Context, private val scope: C
4036 const val ACTION_TRIGGER_INTENT = " com.andrerinas.wirelesshelper.ACTION_TRIGGER_INTENT"
4137 }
4238
39+ private fun createFakeNetwork (netId : Int ): Network ? {
40+ val parcel = android.os.Parcel .obtain()
41+ return try {
42+ parcel.writeInt(netId)
43+ parcel.setDataPosition(0 )
44+ Network .CREATOR .createFromParcel(parcel)
45+ } catch (e: Exception ) {
46+ null
47+ } finally {
48+ parcel.recycle()
49+ }
50+ }
51+
4352 protected fun launchAndroidAuto (hostIp : String , forceFakeNetwork : Boolean = false) {
4453 if (isLaunching.get()) return
4554 if (! isLaunching.compareAndSet(false , true )) return
@@ -68,7 +77,9 @@ abstract class BaseStrategy(protected val context: Context, private val scope: C
6877 val localPort = proxy.start()
6978
7079 val connectivityManager = context.getSystemService(Context .CONNECTIVITY_SERVICE ) as ConnectivityManager
71- val activeNetwork = if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) connectivityManager.activeNetwork else null
80+ // FALLBACK TO ID 0 IF OFFLINE
81+ val targetNetwork = (if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) connectivityManager.activeNetwork else null )
82+ ? : createFakeNetwork(0 )
7283
7384 val wifiInfo: Parcelable ? = try {
7485 val clazz = Class .forName(" android.net.wifi.WifiInfo" )
@@ -82,11 +93,11 @@ abstract class BaseStrategy(protected val context: Context, private val scope: C
8293 addFlags(Intent .FLAG_ACTIVITY_NEW_TASK )
8394 putExtra(" PARAM_HOST_ADDRESS" , " 127.0.0.1" )
8495 putExtra(" PARAM_SERVICE_PORT" , localPort)
85- activeNetwork ?.let { putExtra(" PARAM_SERVICE_WIFI_NETWORK" , it) }
96+ targetNetwork ?.let { putExtra(" PARAM_SERVICE_WIFI_NETWORK" , it) }
8697 wifiInfo?.let { putExtra(" wifi_info" , it) }
8798 }
8899
89- Log .i(TAG , " Firing Proxy Intent. LocalPort= $localPort " )
100+ Log .i(TAG , " Firing Intent. Host=127.0.0.1, Port= $localPort , Network= $targetNetwork " )
90101
91102 // 1. Try via Broadcast (if TransparentTriggerActivity is active)
92103 val broadcastIntent = Intent (ACTION_TRIGGER_INTENT ).apply {
@@ -128,4 +139,4 @@ abstract class BaseStrategy(protected val context: Context, private val scope: C
128139 activeProxy = null
129140 isLaunching.set(false )
130141 }
131- }
142+ }
0 commit comments