diff --git a/app/src/main/java/com/faraphel/tasks_valider/MainActivity.kt b/app/src/main/java/com/faraphel/tasks_valider/MainActivity.kt index 3ecae51..9a773a0 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/MainActivity.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/MainActivity.kt @@ -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) diff --git a/app/src/main/java/com/faraphel/tasks_valider/ui/screen/RoomClientScreen.kt b/app/src/main/java/com/faraphel/tasks_valider/ui/screen/RoomClientScreen.kt new file mode 100644 index 0000000..f0ee7dd --- /dev/null +++ b/app/src/main/java/com/faraphel/tasks_valider/ui/screen/RoomClientScreen.kt @@ -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(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() +} \ No newline at end of file diff --git a/app/src/main/java/com/faraphel/tasks_valider/ui/screen/RoomScreen.kt b/app/src/main/java/com/faraphel/tasks_valider/ui/screen/RoomScreen.kt new file mode 100644 index 0000000..cef5f5e --- /dev/null +++ b/app/src/main/java/com/faraphel/tasks_valider/ui/screen/RoomScreen.kt @@ -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") + } + } +} diff --git a/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/connectivity/WifiP2pDeviceListWidget.kt b/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/connectivity/WifiP2pDeviceListWidget.kt new file mode 100644 index 0000000..f6e19f1 --- /dev/null +++ b/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/connectivity/WifiP2pDeviceListWidget.kt @@ -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) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/WifiP2pWidgetDevice.kt b/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/connectivity/WifiP2pDeviceWidget.kt similarity index 84% rename from app/src/main/java/com/faraphel/tasks_valider/ui/widgets/WifiP2pWidgetDevice.kt rename to app/src/main/java/com/faraphel/tasks_valider/ui/widgets/connectivity/WifiP2pDeviceWidget.kt index dfd009a..b0363e0 100644 --- a/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/WifiP2pWidgetDevice.kt +++ b/app/src/main/java/com/faraphel/tasks_valider/ui/widgets/connectivity/WifiP2pDeviceWidget.kt @@ -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: ")