Implemented Connection with Wi-Fi Direct and IP #9

Merged
faraphel merged 7 commits from connection into main 2024-06-30 18:01:26 +02:00
11 changed files with 76 additions and 54 deletions
Showing only changes of commit d74605bbb9 - Show all commits

View file

@ -43,13 +43,13 @@ class BwdManager(
*/
fun fromActivity(activity: Activity): BwdManager {
// check if the system support WiFi-Direct
if (this.isSupported(activity)) {
if (!this.isSupported(activity)) {
Log.e("wifi-p2p", "this device does not support the WiFi-Direct feature")
throw BwdNotSupportedException()
}
// TODO(Faraphel): more check on permissions
if (
/* if (
activity.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
activity.checkSelfPermission(Manifest.permission.NEARBY_WIFI_DEVICES) != PackageManager.PERMISSION_GRANTED
) {
@ -59,6 +59,7 @@ class BwdManager(
PERMISSION_ACCESS_FINE_LOCATION
)
}
*/
// get the WiFi-Direct manager
val manager = activity.getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager?

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.authentication
package com.faraphel.tasks_valider.ui.screen.communication.authentication
import android.app.Activity
import android.widget.Toast

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.authentication
package com.faraphel.tasks_valider.ui.screen.communication.authentication
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Button

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.communication.internet
package com.faraphel.tasks_valider.ui.screen.communication.connection.internet
import android.app.Activity
import androidx.compose.foundation.layout.*
@ -18,7 +18,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.faraphel.tasks_valider.connectivity.task.TaskClient
import com.faraphel.tasks_valider.connectivity.task.session.TaskSession
import com.faraphel.tasks_valider.ui.screen.authentication.AuthenticationClientScreen
import com.faraphel.tasks_valider.ui.screen.communication.authentication.AuthenticationClientScreen
import com.faraphel.tasks_valider.ui.screen.communication.DEFAULT_SERVER_ADDRESS
import com.faraphel.tasks_valider.ui.screen.communication.DEFAULT_SERVER_PORT
import com.faraphel.tasks_valider.ui.screen.communication.RANGE_SERVER_PORT

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.communication.internet
package com.faraphel.tasks_valider.ui.screen.communication.connection.internet
import android.app.Activity
import android.os.Build

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.communication.internet
package com.faraphel.tasks_valider.ui.screen.communication.connection.internet
import android.app.Activity
import android.os.Build
@ -27,7 +27,7 @@ import com.faraphel.tasks_valider.database.entities.ClassEntity
import com.faraphel.tasks_valider.database.entities.PersonEntity
import com.faraphel.tasks_valider.database.entities.SessionEntity
import com.faraphel.tasks_valider.database.populateSubjectSessionPersonTest
import com.faraphel.tasks_valider.ui.screen.authentication.AuthenticationServerScreen
import com.faraphel.tasks_valider.ui.screen.communication.authentication.AuthenticationServerScreen
import com.faraphel.tasks_valider.ui.screen.communication.DEFAULT_SERVER_PORT
import com.faraphel.tasks_valider.ui.screen.communication.RANGE_SERVER_PORT
import com.faraphel.tasks_valider.ui.screen.task.TaskSessionController

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.communication.wifiP2p.client
package com.faraphel.tasks_valider.ui.screen.communication.connection.wifiP2p
import android.app.Activity
import android.net.wifi.p2p.WifiP2pConfig

View file

@ -0,0 +1,61 @@
package com.faraphel.tasks_valider.ui.screen.communication.connection.wifiP2p
import android.app.Activity
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.faraphel.tasks_valider.connectivity.bwd.BwdManager
@Composable
fun CommunicationWifiP2pScreen(activity: Activity) {
val controller = rememberNavController()
var bwdManager: BwdManager? = null
LaunchedEffect(true) {
// start the BWD manager
bwdManager = BwdManager.fromActivity(activity)
}
NavHost(navController = controller, startDestination = "mode") {
composable("mode") { CommunicationWifiP2pSelectContent(controller) }
// composable("client") { CommunicationWifiP2pClientScreen(activity, bwdManager) }
composable("server") { CommunicationWifiP2pServerScreen(activity, bwdManager!!) }
}
}
@Composable
fun CommunicationWifiP2pSelectContent(controller: NavController) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
// title
Text(
text = "Role",
fontSize = 32.sp
)
// separator
Spacer(modifier = Modifier.height(24.dp))
// client mode
Button(onClick = { controller.navigate("client") }) { Text("Client") }
// server mode
Button(onClick = { controller.navigate("server") }) { Text("Server") }
}
}

View file

@ -1,4 +1,4 @@
package com.faraphel.tasks_valider.ui.screen.communication.wifiP2p.server
package com.faraphel.tasks_valider.ui.screen.communication.connection.wifiP2p
import android.app.Activity
import androidx.compose.runtime.Composable

View file

@ -1,9 +1,7 @@
package com.faraphel.tasks_valider.ui.screen.communication
import android.app.Activity
import android.os.Build
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
@ -21,8 +19,8 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.faraphel.tasks_valider.connectivity.bwd.BwdManager
import com.faraphel.tasks_valider.database.TaskDatabase
import com.faraphel.tasks_valider.ui.screen.communication.internet.CommunicationInternetSelectScreen
import com.faraphel.tasks_valider.ui.screen.communication.wifiP2p.CommunicationWifiP2pScreen
import com.faraphel.tasks_valider.ui.screen.communication.connection.internet.CommunicationInternetSelectScreen
import com.faraphel.tasks_valider.ui.screen.communication.connection.wifiP2p.CommunicationWifiP2pScreen
/**
@ -48,8 +46,7 @@ fun CommunicationModeSelectionScreen(activity: Activity, database: TaskDatabase)
CommunicationInternetSelectScreen(activity, database)
}
composable("wifi-p2p") {
val bwdManager = BwdManager.fromActivity(activity)
CommunicationWifiP2pScreen(activity, bwdManager)
CommunicationWifiP2pScreen(activity)
}
}
}

View file

@ -1,37 +0,0 @@
package com.faraphel.tasks_valider.ui.screen.communication.wifiP2p
import android.app.Activity
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.faraphel.tasks_valider.connectivity.bwd.BwdManager
import com.faraphel.tasks_valider.ui.screen.communication.wifiP2p.client.CommunicationWifiP2pClientScreen
import com.faraphel.tasks_valider.ui.screen.communication.wifiP2p.server.CommunicationWifiP2pServerScreen
@Composable
fun CommunicationWifiP2pScreen(activity: Activity, bwdManager: BwdManager) {
val controller = rememberNavController()
NavHost(navController = controller, startDestination = "mode") {
composable("mode") { CommunicationWifiP2pSelectContent(controller) }
composable("client") { CommunicationWifiP2pClientScreen(activity, bwdManager) }
composable("server") { CommunicationWifiP2pServerScreen(activity, bwdManager) }
}
}
@Composable
fun CommunicationWifiP2pSelectContent(controller: NavController) {
Column {
// client mode
Button(onClick = { controller.navigate("client") }) { Text("Client") }
// server mode
Button(onClick = { controller.navigate("server") }) { Text("Server") }
}
}