Implemented Connection with Wi-Fi Direct and IP #9
11 changed files with 76 additions and 54 deletions
|
@ -43,13 +43,13 @@ class BwdManager(
|
||||||
*/
|
*/
|
||||||
fun fromActivity(activity: Activity): BwdManager {
|
fun fromActivity(activity: Activity): BwdManager {
|
||||||
// check if the system support WiFi-Direct
|
// 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")
|
Log.e("wifi-p2p", "this device does not support the WiFi-Direct feature")
|
||||||
throw BwdNotSupportedException()
|
throw BwdNotSupportedException()
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(Faraphel): more check on permissions
|
// TODO(Faraphel): more check on permissions
|
||||||
if (
|
/* if (
|
||||||
activity.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
|
activity.checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
|
||||||
activity.checkSelfPermission(Manifest.permission.NEARBY_WIFI_DEVICES) != PackageManager.PERMISSION_GRANTED
|
activity.checkSelfPermission(Manifest.permission.NEARBY_WIFI_DEVICES) != PackageManager.PERMISSION_GRANTED
|
||||||
) {
|
) {
|
||||||
|
@ -59,6 +59,7 @@ class BwdManager(
|
||||||
PERMISSION_ACCESS_FINE_LOCATION
|
PERMISSION_ACCESS_FINE_LOCATION
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// get the WiFi-Direct manager
|
// get the WiFi-Direct manager
|
||||||
val manager = activity.getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager?
|
val manager = activity.getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager?
|
||||||
|
|
|
@ -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.app.Activity
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
|
@ -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.foundation.layout.*
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
|
@ -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.app.Activity
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
|
@ -18,7 +18,7 @@ import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import com.faraphel.tasks_valider.connectivity.task.TaskClient
|
import com.faraphel.tasks_valider.connectivity.task.TaskClient
|
||||||
import com.faraphel.tasks_valider.connectivity.task.session.TaskSession
|
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_ADDRESS
|
||||||
import com.faraphel.tasks_valider.ui.screen.communication.DEFAULT_SERVER_PORT
|
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.communication.RANGE_SERVER_PORT
|
|
@ -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.app.Activity
|
||||||
import android.os.Build
|
import android.os.Build
|
|
@ -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.app.Activity
|
||||||
import android.os.Build
|
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.PersonEntity
|
||||||
import com.faraphel.tasks_valider.database.entities.SessionEntity
|
import com.faraphel.tasks_valider.database.entities.SessionEntity
|
||||||
import com.faraphel.tasks_valider.database.populateSubjectSessionPersonTest
|
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.DEFAULT_SERVER_PORT
|
||||||
import com.faraphel.tasks_valider.ui.screen.communication.RANGE_SERVER_PORT
|
import com.faraphel.tasks_valider.ui.screen.communication.RANGE_SERVER_PORT
|
||||||
import com.faraphel.tasks_valider.ui.screen.task.TaskSessionController
|
import com.faraphel.tasks_valider.ui.screen.task.TaskSessionController
|
|
@ -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.app.Activity
|
||||||
import android.net.wifi.p2p.WifiP2pConfig
|
import android.net.wifi.p2p.WifiP2pConfig
|
|
@ -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") }
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 android.app.Activity
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
|
@ -1,9 +1,7 @@
|
||||||
package com.faraphel.tasks_valider.ui.screen.communication
|
package com.faraphel.tasks_valider.ui.screen.communication
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.os.Build
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.annotation.RequiresApi
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ButtonDefaults
|
import androidx.compose.material3.ButtonDefaults
|
||||||
|
@ -21,8 +19,8 @@ import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import com.faraphel.tasks_valider.connectivity.bwd.BwdManager
|
import com.faraphel.tasks_valider.connectivity.bwd.BwdManager
|
||||||
import com.faraphel.tasks_valider.database.TaskDatabase
|
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.connection.internet.CommunicationInternetSelectScreen
|
||||||
import com.faraphel.tasks_valider.ui.screen.communication.wifiP2p.CommunicationWifiP2pScreen
|
import com.faraphel.tasks_valider.ui.screen.communication.connection.wifiP2p.CommunicationWifiP2pScreen
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,8 +46,7 @@ fun CommunicationModeSelectionScreen(activity: Activity, database: TaskDatabase)
|
||||||
CommunicationInternetSelectScreen(activity, database)
|
CommunicationInternetSelectScreen(activity, database)
|
||||||
}
|
}
|
||||||
composable("wifi-p2p") {
|
composable("wifi-p2p") {
|
||||||
val bwdManager = BwdManager.fromActivity(activity)
|
CommunicationWifiP2pScreen(activity)
|
||||||
CommunicationWifiP2pScreen(activity, bwdManager)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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") }
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue