diff --git a/app/src/main/java/com/example/tvcontroller/Settings.kt b/app/src/main/java/com/example/tvcontroller/Settings.kt
new file mode 100644
index 0000000..f7bfb19
--- /dev/null
+++ b/app/src/main/java/com/example/tvcontroller/Settings.kt
@@ -0,0 +1,8 @@
+package com.example.tvcontroller
+
+object Settings {
+ enum class ConnectionState {
+ Unregistered,
+ Registered,
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/tvcontroller/SettingsScreen.kt b/app/src/main/java/com/example/tvcontroller/SettingsScreen.kt
index 11b031e..6a956ad 100644
--- a/app/src/main/java/com/example/tvcontroller/SettingsScreen.kt
+++ b/app/src/main/java/com/example/tvcontroller/SettingsScreen.kt
@@ -40,7 +40,9 @@ fun SettingsScreen(deviceService: DeviceService, appViewModel: AppViewModel) {
style = MaterialTheme.typography.headlineSmall
)
Text(
- text = stringResource(id = R.string.server_connection_label) + ": " + stringResource(id = R.string.connection_state_disconnected),
+ text = stringResource(id = R.string.server_connection_label) + ": " + getConnectionStateString(
+ viewModel.connectionState
+ ),
style = MaterialTheme.typography.bodyMedium
)
OutlinedTextField(
@@ -84,3 +86,11 @@ fun SettingsScreen(deviceService: DeviceService, appViewModel: AppViewModel) {
}
}
}
+
+@Composable
+fun getConnectionStateString(state: Settings.ConnectionState): String {
+ return when (state) {
+ Settings.ConnectionState.Unregistered -> stringResource(id = R.string.connection_state_unregistered)
+ Settings.ConnectionState.Registered -> stringResource(id = R.string.connection_state_registered)
+ }
+}
diff --git a/app/src/main/java/com/example/tvcontroller/SettingsViewModel.kt b/app/src/main/java/com/example/tvcontroller/SettingsViewModel.kt
index 1135dd0..069f923 100644
--- a/app/src/main/java/com/example/tvcontroller/SettingsViewModel.kt
+++ b/app/src/main/java/com/example/tvcontroller/SettingsViewModel.kt
@@ -16,12 +16,28 @@ class SettingsViewModel(private val deviceService: DeviceService) : ViewModel()
private set
var registrationCode by mutableStateOf("")
private set
+ var connectionState by mutableStateOf(Settings.ConnectionState.Unregistered)
+ private set
+
+ init {
+ checkConnectionState()
+ }
fun connect() {
//Log.i("SettingsScreen", "Save settings: $serverUrl, $deviceName, $registrationCode")
viewModelScope.launch {
deviceService.setServerAddress(serverAddress)
deviceService.createIntegration(deviceName, registrationCode)
+ checkConnectionState()
+ }
+ }
+
+ private fun checkConnectionState() {
+ connectionState = if (deviceService.getToken().isEmpty()) {
+ Settings.ConnectionState.Unregistered
+ return
+ } else {
+ Settings.ConnectionState.Registered
}
}
diff --git a/app/src/main/java/com/example/tvcontroller/services/DeviceService.kt b/app/src/main/java/com/example/tvcontroller/services/DeviceService.kt
index dfeebd6..74ddc1f 100644
--- a/app/src/main/java/com/example/tvcontroller/services/DeviceService.kt
+++ b/app/src/main/java/com/example/tvcontroller/services/DeviceService.kt
@@ -18,6 +18,7 @@ private const val SHARED_PREFERENCES_NAME = "devices";
class DeviceService(private val context: Context) {
private var client = HttpClient(CIO)
private var serverAddress: String = ""
+ private var token: String = ""
init {
loadPreferences()
@@ -25,20 +26,23 @@ class DeviceService(private val context: Context) {
suspend fun createIntegration(name: String, code: String) {
Log.i("DeviceService", "Creating integration for $name with code $code at $serverAddress")
- val json = JSONObject()
- json.put("name", name)
- json.put("code", code)
+ val requestJson = JSONObject()
+ requestJson.put("name", name)
+ requestJson.put("code", code)
try {
val response: HttpResponse = client.request("http://$serverAddress/api/integrations") {
method = HttpMethod.Post
- setBody(json.toString())
+ setBody(requestJson.toString())
headers {
append("Content-Type", "application/json")
}
}
- savePreferences()
val body: String = response.body()
+ val responseJson = JSONObject(body)
+ token = responseJson.getString("token")
+ savePreferences()
+
Log.i("DeviceService", "Response: ${response.status.value} $body")
} catch (e: Exception) {
Log.e("DeviceService", "Error creating integration", e)
@@ -48,6 +52,8 @@ class DeviceService(private val context: Context) {
private fun loadPreferences() {
val sharedPreferences = context.getSharedPreferences(SHARED_PREFERENCES_NAME, MODE_PRIVATE)
serverAddress = sharedPreferences.getString("server_address", "")!!
+ token = sharedPreferences.getString("token", "")!!
+ Log.i("DeviceService", "Loaded preferences: $serverAddress $token")
}
private fun savePreferences() {
@@ -55,6 +61,7 @@ class DeviceService(private val context: Context) {
val editor = sharedPreferences.edit()
editor.apply {
putString("server_address", serverAddress)
+ putString("token", token)
apply()
}
}
@@ -66,4 +73,8 @@ class DeviceService(private val context: Context) {
fun getServerAddress(): String {
return serverAddress
}
+
+ fun getToken(): String {
+ return token
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 942f1aa..8c4600f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,4 +11,6 @@
Save
Connect
Server address
+ unregistered
+ registered
\ No newline at end of file