@@ -5,10 +5,12 @@ import android.content.Context
55import android.content.Intent
66import android.content.IntentFilter
77import android.net.*
8+ import android.net.wifi.p2p.WifiP2pManager
89import android.os.Bundle
910import com.afollestad.inlineactivityresult.coroutines.startActivityAwaitResult
1011import com.jakewharton.rxbinding4.view.clicks
1112import com.tans.rxutils.ignoreSeveralClicks
13+ import com.tans.tadapter.adapter.DifferHandler
1214import com.tans.tadapter.spec.SimpleAdapterSpec
1315import com.tans.tadapter.spec.toAdapter
1416import com.tans.tfiletransporter.R
@@ -25,6 +27,7 @@ import com.tans.tfiletransporter.transferproto.qrscanconn.startQRCodeScanClientS
2527import com.tans.tfiletransporter.ui.activity.BaseFragment
2628import com.tans.tfiletransporter.ui.activity.commomdialog.loadingDialog
2729import com.tans.tfiletransporter.ui.activity.filetransport.FileTransportActivity
30+ import com.tans.tfiletransporter.ui.activity.filetransport.MyAppsFragment
2831import com.tans.tfiletransporter.ui.activity.qrcodescan.ScanQrCodeActivity
2932import com.tans.tfiletransporter.utils.fromJson
3033import com.tans.tfiletransporter.utils.showToastShort
@@ -75,13 +78,26 @@ class LocalNetworkConnectionFragment : BaseFragment<LocalNetworkConnectionFragme
7578 }
7679 }
7780
81+ private val wifiP2pConnectionBroadcastReceiver: BroadcastReceiver by lazy {
82+ object : BroadcastReceiver () {
83+ override fun onReceive (context : Context ? , intent : Intent ? ) {
84+ AndroidLog .d(TAG , " Wifi p2p changed." )
85+ updateAddress()
86+ }
87+ }
88+ }
89+
7890 override fun onCreate (savedInstanceState : Bundle ? ) {
7991 super .onCreate(savedInstanceState)
8092 connectivityManager.registerNetworkCallback(networkRequest, netWorkerCallback)
8193 val wifiApIf = IntentFilter ()
8294 // wifiApIf.addAction("android.net.wifi.WIFI_AP_STATE_CHANGED")
8395 wifiApIf.addAction(" android.net.conn.TETHER_STATE_CHANGED" )
8496 requireContext().registerReceiver(wifiApChangeBroadcastReceiver, wifiApIf)
97+
98+ val wifiP2pConnFilter = IntentFilter ()
99+ wifiP2pConnFilter.addAction(WifiP2pManager .WIFI_P2P_CONNECTION_CHANGED_ACTION )
100+ requireContext().registerReceiver(wifiP2pConnectionBroadcastReceiver, wifiP2pConnFilter)
85101 }
86102
87103 override fun initViews (binding : LocalNetworkConnectionFragmentBinding ) {
@@ -90,6 +106,7 @@ class LocalNetworkConnectionFragment : BaseFragment<LocalNetworkConnectionFragme
90106 AndroidLog .d(TAG , " Available addresses: $it " )
91107 }.bindLife()
92108
109+ val selectAddressChangePayload = Any ()
93110 binding.localAddressesRv.adapter = SimpleAdapterSpec <Pair <InetAddress , Boolean >, LocalAddressItemLayoutBinding > (
94111 layoutId = R .layout.local_address_item_layout,
95112 bindData = { _, data, lBinding ->
@@ -106,6 +123,23 @@ class LocalNetworkConnectionFragment : BaseFragment<LocalNetworkConnectionFragme
106123 }
107124 }
108125 },
126+ differHandler = DifferHandler (itemsTheSame = { d1, d2 -> d1.first == d2.first },
127+ contentTheSame = { d1, d2 -> d1 == d2 },
128+ changePayLoad = { d1, d2 ->
129+ if (d1.first == d2.first && d1.second != d2.second) {
130+ selectAddressChangePayload
131+ } else {
132+ null
133+ }
134+ }),
135+ bindDataPayload = { _, data, lBinding, payloads ->
136+ if (payloads.contains(selectAddressChangePayload)) {
137+ lBinding.addressRb.isChecked = data.second
138+ true
139+ } else {
140+ false
141+ }
142+ },
109143 dataUpdater = bindState()
110144 .map { it.selectedAddress to it.availableAddresses }
111145 .distinctUntilChanged()
@@ -278,6 +312,7 @@ class LocalNetworkConnectionFragment : BaseFragment<LocalNetworkConnectionFragme
278312 super .onDestroy()
279313 connectivityManager.unregisterNetworkCallback(netWorkerCallback)
280314 requireContext().unregisterReceiver(wifiApChangeBroadcastReceiver)
315+ requireContext().unregisterReceiver(wifiP2pConnectionBroadcastReceiver)
281316 }
282317
283318 companion object {
0 commit comments