very basic screen for the wifi-p2p
This commit is contained in:
parent
23e39c026a
commit
7d0f3e88e0
5 changed files with 105 additions and 25 deletions
|
@ -13,7 +13,7 @@ import androidx.activity.compose.setContent
|
|||
import androidx.annotation.RequiresApi
|
||||
import com.faraphel.tasks_valider.connectivity.wifi_p2p.WifiP2pHelper
|
||||
import com.faraphel.tasks_valider.database.Database
|
||||
import com.faraphel.tasks_valider.ui.widgets.WifiP2pWidgetDevice
|
||||
import com.faraphel.tasks_valider.ui.screen.RoomScreen
|
||||
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
|
@ -54,28 +54,10 @@ class MainActivity : ComponentActivity() {
|
|||
// create a helper for handling the WiFi-Direct
|
||||
this.p2pHelper = WifiP2pHelper(p2pManager, p2pChannel)
|
||||
|
||||
// try to display the different devices when available.
|
||||
this.p2pHelper!!.registerListener(
|
||||
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION,
|
||||
{
|
||||
peers: WifiP2pDeviceList? ->
|
||||
|
||||
Log.d("wifi-p2p", "peers: $peers")
|
||||
if (peers != null) this.setContent {
|
||||
for (device in peers.deviceList) {
|
||||
Log.d("wifi-p2p", "device: ${device.deviceAddress}")
|
||||
WifiP2pWidgetDevice(device)
|
||||
}
|
||||
}
|
||||
},
|
||||
once = true
|
||||
)
|
||||
|
||||
// discovers the peers to trigger the peer changed event
|
||||
this.p2pHelper!!.discoverPeers(object : WifiP2pManager.ActionListener {
|
||||
override fun onSuccess() { Log.i("wifi-p2p", "discovering successful !") }
|
||||
override fun onFailure(reason: Int) { Log.e("wifi-p2p", "discovering failed. Reason: $reason") }
|
||||
})
|
||||
// open the room selection screen
|
||||
this.setContent {
|
||||
RoomScreen(this.p2pHelper!!)
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
package com.faraphel.tasks_valider.ui.screen
|
||||
|
||||
import android.net.wifi.p2p.WifiP2pDeviceList
|
||||
import android.net.wifi.p2p.WifiP2pManager
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import com.faraphel.tasks_valider.connectivity.wifi_p2p.WifiP2pHelper
|
||||
import com.faraphel.tasks_valider.ui.widgets.connectivity.WifiP2pDeviceListWidget
|
||||
|
||||
|
||||
@Composable
|
||||
fun RoomClientScreen(wifiP2pHelper: WifiP2pHelper) {
|
||||
val peers = remember { mutableStateOf<WifiP2pDeviceList?>(null) }
|
||||
|
||||
Column {
|
||||
Text(text = "Find a Server")
|
||||
WifiP2pDeviceListWidget(peers.value)
|
||||
}
|
||||
|
||||
// TODO(Faraphel): might be doubtful. Test with more phones, should it only run once ? refresh button ?
|
||||
wifiP2pHelper.registerListener(
|
||||
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION,
|
||||
{ new_peers: WifiP2pDeviceList? -> peers.value = new_peers },
|
||||
once = true
|
||||
)
|
||||
wifiP2pHelper.discoverPeers()
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package com.faraphel.tasks_valider.ui.screen
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import com.faraphel.tasks_valider.connectivity.wifi_p2p.WifiP2pHelper
|
||||
|
||||
|
||||
enum class RoomScreenType {
|
||||
UNDEFINED,
|
||||
HOST,
|
||||
CLIENT
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This screen will allow the user to choose which room is he connecting to, or let him create one.
|
||||
*/
|
||||
@Composable
|
||||
fun RoomScreen(wifiP2pHelper: WifiP2pHelper) {
|
||||
val roomMode = remember { mutableStateOf(RoomScreenType.UNDEFINED) }
|
||||
|
||||
when (roomMode.value) {
|
||||
RoomScreenType.UNDEFINED -> Column {
|
||||
Button(onClick = { roomMode.value = RoomScreenType.CLIENT }) {
|
||||
Text(text = "Join a room")
|
||||
}
|
||||
Button(onClick = { roomMode.value = RoomScreenType.HOST }) {
|
||||
Text(text = "Create a room")
|
||||
}
|
||||
}
|
||||
RoomScreenType.CLIENT -> {
|
||||
// Client mode
|
||||
RoomClientScreen(wifiP2pHelper)
|
||||
}
|
||||
RoomScreenType.HOST -> {
|
||||
// Host mode
|
||||
TODO("Faraphel: host mode not implemented")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package com.faraphel.tasks_valider.ui.widgets.connectivity
|
||||
|
||||
import android.net.wifi.p2p.WifiP2pDeviceList
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
||||
|
||||
/**
|
||||
* Represent a list of WiFi-Direct devices.
|
||||
*/
|
||||
@Composable
|
||||
fun WifiP2pDeviceListWidget(peers: WifiP2pDeviceList?) {
|
||||
Text(text = "Devices (${peers?.deviceList?.size ?: 0})")
|
||||
|
||||
Column {
|
||||
if (peers != null) {
|
||||
for (device in peers.deviceList) {
|
||||
WifiP2pDeviceWidget(device)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.faraphel.tasks_valider.ui.widgets
|
||||
package com.faraphel.tasks_valider.ui.widgets.connectivity
|
||||
|
||||
import android.net.wifi.p2p.WifiP2pDevice
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable
|
|||
|
||||
|
||||
@Composable
|
||||
fun WifiP2pWidgetDevice(device: WifiP2pDevice) {
|
||||
fun WifiP2pDeviceWidget(device: WifiP2pDevice) {
|
||||
Column {
|
||||
Row {
|
||||
Text(text = "Name: ")
|
Loading…
Reference in a new issue