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 androidx.annotation.RequiresApi
|
||||||
import com.faraphel.tasks_valider.connectivity.wifi_p2p.WifiP2pHelper
|
import com.faraphel.tasks_valider.connectivity.wifi_p2p.WifiP2pHelper
|
||||||
import com.faraphel.tasks_valider.database.Database
|
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() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
@ -54,29 +54,11 @@ class MainActivity : ComponentActivity() {
|
||||||
// create a helper for handling the WiFi-Direct
|
// create a helper for handling the WiFi-Direct
|
||||||
this.p2pHelper = WifiP2pHelper(p2pManager, p2pChannel)
|
this.p2pHelper = WifiP2pHelper(p2pManager, p2pChannel)
|
||||||
|
|
||||||
// try to display the different devices when available.
|
// open the room selection screen
|
||||||
this.p2pHelper!!.registerListener(
|
this.setContent {
|
||||||
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION,
|
RoomScreen(this.p2pHelper!!)
|
||||||
{
|
|
||||||
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") }
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.O)
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
@SuppressLint("UnspecifiedRegisterReceiverFlag")
|
@SuppressLint("UnspecifiedRegisterReceiverFlag")
|
||||||
|
|
|
@ -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 android.net.wifi.p2p.WifiP2pDevice
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WifiP2pWidgetDevice(device: WifiP2pDevice) {
|
fun WifiP2pDeviceWidget(device: WifiP2pDevice) {
|
||||||
Column {
|
Column {
|
||||||
Row {
|
Row {
|
||||||
Text(text = "Name: ")
|
Text(text = "Name: ")
|
Loading…
Reference in a new issue