Skip to content

Commit 2110c6a

Browse files
author
tanpengcheng
committed
[feat] local address add p2p connection observer.
1 parent fb1a3ec commit 2110c6a

4 files changed

Lines changed: 40 additions & 3 deletions

File tree

app/src/main/java/com/tans/tfiletransporter/ui/activity/connection/localconnetion/LocalNetworkConnectionFragment.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ import android.content.Context
55
import android.content.Intent
66
import android.content.IntentFilter
77
import android.net.*
8+
import android.net.wifi.p2p.WifiP2pManager
89
import android.os.Bundle
910
import com.afollestad.inlineactivityresult.coroutines.startActivityAwaitResult
1011
import com.jakewharton.rxbinding4.view.clicks
1112
import com.tans.rxutils.ignoreSeveralClicks
13+
import com.tans.tadapter.adapter.DifferHandler
1214
import com.tans.tadapter.spec.SimpleAdapterSpec
1315
import com.tans.tadapter.spec.toAdapter
1416
import com.tans.tfiletransporter.R
@@ -25,6 +27,7 @@ import com.tans.tfiletransporter.transferproto.qrscanconn.startQRCodeScanClientS
2527
import com.tans.tfiletransporter.ui.activity.BaseFragment
2628
import com.tans.tfiletransporter.ui.activity.commomdialog.loadingDialog
2729
import com.tans.tfiletransporter.ui.activity.filetransport.FileTransportActivity
30+
import com.tans.tfiletransporter.ui.activity.filetransport.MyAppsFragment
2831
import com.tans.tfiletransporter.ui.activity.qrcodescan.ScanQrCodeActivity
2932
import com.tans.tfiletransporter.utils.fromJson
3033
import 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 {

app/src/main/res/layout/local_network_connection_fragment.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
android:textStyle="bold"
3333
android:textSize="12sp"
3434
android:textColor="@color/gray_1"
35-
android:text="@string/wifi_p2p_connection_local_address" />
35+
android:text="@string/local_network_local_address" />
3636

3737
<androidx.recyclerview.widget.RecyclerView
3838
android:id="@+id/local_addresses_rv"

app/src/main/res/values-pt-rBR/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@
5757
<string name="wifi_p2p_connection_title">Conectar via WiFi P2P</string>
5858
<string name="wifi_p2p_connection_tips">Basta usar o WiFi perto do dispositivo alvo e o sistema o encontrará. Você não precisa manter os dois dispositivos na mesma rede.</string>
5959
<string name="wifi_p2p_connection_remote_device">Dispositivo remoto conectado\n Nome: %s\n Endereço IP: %s</string>
60-
<string name="wifi_p2p_connection_local_address">Endereço local:</string>
60+
<string name="wifi_p2p_connection_local_address">Endereço local: %s</string>
6161
<string name="wifi_p2p_connection_transfer_files">Transferir arquivos</string>
6262
<string name="wifi_p2p_connection_close_current_connection">Terminar a conexão</string>
63+
<string name="local_network_local_address">Endereço local: </string>
6364
<!-- Connection Activity End -->
6465

6566
<string name="size_B">%dB</string>

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,10 @@
5858
<string name="wifi_p2p_connection_title">Connect via WiFi P2P</string>
5959
<string name="wifi_p2p_connection_tips">Just open the WiFi and GPS, close to the target device and system will find it.</string>
6060
<string name="wifi_p2p_connection_remote_device">Connected Remote Device\n Name: %s\n Ip Address: %s</string>
61-
<string name="wifi_p2p_connection_local_address">Local Addresses: </string>
61+
<string name="wifi_p2p_connection_local_address">Local Address: %s</string>
6262
<string name="wifi_p2p_connection_transfer_files">Transfer Files</string>
6363
<string name="wifi_p2p_connection_close_current_connection">Close Connection</string>
64+
<string name="local_network_local_address">Local Addresses: </string>
6465
<!-- Connection Activity End -->
6566

6667
<string name="size_B">%dB</string>

0 commit comments

Comments
 (0)