Skip to content

Commit cfc5bf4

Browse files
committed
misc refactor
1 parent 87786aa commit cfc5bf4

File tree

18 files changed

+63
-66
lines changed

18 files changed

+63
-66
lines changed

app/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
1212
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
1313
<uses-permission android:name="android.permission.INTERNET" />
14+
<uses-permission android:name="android.permission.PROJECT_MEDIA"/>
1415

1516
<uses-permission android:name="android.permission.RECEIVE_SENSITIVE_NOTIFICATIONS"
1617
tools:ignore="ProtectedPermissions" />

app/src/main/java/com/castle/sefirah/di/AppModule.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import sefirah.domain.repository.NetworkManager
2020
import sefirah.domain.repository.PlaybackRepository
2121
import sefirah.domain.repository.PreferencesRepository
2222
import sefirah.domain.repository.SocketFactory
23-
import sefirah.media.MediaHandler
24-
import sefirah.media.MediaService
23+
import sefirah.projection.media.MediaHandler
24+
import sefirah.projection.media.MediaService
2525
import sefirah.network.NetworkManagerImpl
2626
import sefirah.network.NsdService
2727
import sefirah.network.sftp.SftpServer

app/src/main/java/com/castle/sefirah/presentation/main/ConnectionViewModel.kt

+7-7
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ class ConnectionViewModel @Inject constructor(
131131
}
132132
is ConnectionState.Error -> {
133133
_isRefreshing.value = false
134-
withContext(Dispatchers.Main.immediate) {
135-
Toast.makeText(
136-
getApplication(),
137-
"Error: ${state.message}",
138-
Toast.LENGTH_LONG
139-
).show()
140-
}
134+
// withContext(Dispatchers.Main.immediate) {
135+
// Toast.makeText(
136+
// getApplication(),
137+
// "Error: ${state.message}",
138+
// Toast.LENGTH_LONG
139+
// ).show()
140+
// }
141141
connectionStateJob?.cancel()
142142
}
143143
}

app/src/main/java/com/castle/sefirah/presentation/sync/SyncViewModel.kt

+5-17
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.castle.sefirah.presentation.sync
33
import android.app.Application
44
import android.content.Context
55
import android.content.Intent
6-
import android.util.Log
76
import android.widget.Toast
87
import androidx.lifecycle.ViewModel
98
import androidx.lifecycle.viewModelScope
@@ -97,35 +96,24 @@ class SyncViewModel @Inject constructor(
9796
}
9897
is ConnectionState.Disconnected -> {
9998
_isRefreshing.value = false
100-
Toast.makeText(
101-
context,
102-
"Connection failed: Device declined pairing or is unavailable",
103-
Toast.LENGTH_LONG
104-
).show()
10599
connectionStateJob?.cancel() // Stop collecting after failure
106100
}
107101
ConnectionState.Connecting -> {
108102
_isRefreshing.value = true
109103
}
110104
is ConnectionState.Error -> {
111105
_isRefreshing.value = false
112-
Toast.makeText(
113-
context,
114-
"Connection error occurred",
115-
Toast.LENGTH_LONG
116-
).show()
106+
// Toast.makeText(
107+
// context,
108+
// state.message,
109+
// Toast.LENGTH_LONG
110+
// ).show()
117111
connectionStateJob?.cancel()
118112
}
119113
}
120114
}
121115
} catch (e: Exception) {
122-
Log.e(TAG, "Error saving to service: ${e.message}", e)
123116
_isRefreshing.value = false
124-
Toast.makeText(
125-
context,
126-
"Failed to initiate connection",
127-
Toast.LENGTH_LONG
128-
).show()
129117
}
130118
}
131119
}

core/common/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,5 @@
143143
<string name="manual_connect">Manual Connect</string>
144144
<string name="auto_connect">Auto Connect</string>
145145
<string name="restricted_settings_title">Restricted settings</string>
146+
<string name="connection_error">Connection failed: Device declined pairing or is unavailable</string>
146147
</resources>

core/network/build.gradle.kts

+1-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ dependencies {
3535

3636
api(projects.feature.notification)
3737
api(projects.feature.clipboard)
38-
api(projects.feature.media)
39-
api(projects.feature.screen)
38+
api(projects.feature.projection)
4039

4140
implementation(libs.core.ktx)
4241
implementation(libs.kotlinx.serialization.json)

core/network/src/main/java/sefirah/network/NetworkService.kt

+29-16
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import kotlinx.coroutines.sync.withLock
3939
import kotlinx.coroutines.withContext
4040
import kotlinx.coroutines.withTimeoutOrNull
4141
import sefirah.clipboard.ClipboardHandler
42+
import sefirah.common.R
4243
import sefirah.common.notifications.NotificationCenter
4344
import sefirah.data.repository.AppRepository
4445
import sefirah.domain.model.ConnectionState
@@ -50,7 +51,6 @@ import sefirah.domain.model.SocketType
5051
import sefirah.domain.repository.PlaybackRepository
5152
import sefirah.domain.repository.PreferencesRepository
5253
import sefirah.domain.repository.SocketFactory
53-
import sefirah.media.MediaHandler
5454
import sefirah.network.NetworkDiscovery.NetworkAction
5555
import sefirah.network.extensions.handleDeviceInfo
5656
import sefirah.network.extensions.handleMessage
@@ -60,6 +60,7 @@ import sefirah.network.util.ECDHHelper
6060
import sefirah.network.util.MessageSerializer
6161
import sefirah.network.util.getInstalledApps
6262
import sefirah.notification.NotificationHandler
63+
import sefirah.projection.media.MediaHandler
6364
import javax.inject.Inject
6465

6566
@AndroidEntryPoint
@@ -148,31 +149,43 @@ class NetworkService : Service() {
148149
sendDeviceInfo(remoteInfo)
149150

150151
// Wait for device info
151-
withTimeoutOrNull(60000) { // 30 seconds timeout
152+
val state = withTimeoutOrNull(30000) { // 30 seconds timeout
152153
readChannel?.readUTF8Line()?.let { jsonMessage ->
153-
// Log.d(TAG, "Raw received data: $jsonMessage")
154-
val deviceInfo = messageSerializer.deserialize(jsonMessage) as? DeviceInfo
155-
if (deviceInfo == null) {
154+
val message = messageSerializer.deserialize(jsonMessage)
155+
if (message == null) {
156156
Log.e(TAG, "Invalid device info received")
157-
return@withTimeoutOrNull null
157+
return@withTimeoutOrNull ConnectionState.Error(getString(R.string.connection_error))
158+
}
159+
when (message) {
160+
is DeviceInfo -> {
161+
connectedDevice = remoteInfo
162+
handleDeviceInfo(message, remoteInfo, connectedIpAddress!!)
163+
return@withTimeoutOrNull ConnectionState.Connected
164+
}
165+
else -> {
166+
Log.w(TAG, "Authentication rejected")
167+
return@withTimeoutOrNull ConnectionState.Error(getString(R.string.connection_error))
168+
}
158169
}
159-
connectedDevice = remoteInfo
160-
handleDeviceInfo(deviceInfo, remoteInfo, connectedIpAddress!!)
161-
return@withTimeoutOrNull Unit
162170
}
171+
null
163172
} ?: run {
164173
Log.e(TAG, "Timeout waiting for device info")
165-
_connectionState.value = ConnectionState.Disconnected()
174+
_connectionState.value = ConnectionState.Error(getString(R.string.connection_error))
166175
stop(false)
167176
return@launch
168177
}
169-
_connectionState.value = ConnectionState.Connected
170-
startListening()
171-
if (remoteInfo.avatar == null) {
172-
sendInstalledApps()
178+
_connectionState.value = state
179+
if (state == ConnectionState.Connected) {
180+
startListening()
181+
if (remoteInfo.avatar == null) {
182+
sendInstalledApps()
183+
}
184+
// Setup complete
185+
finalizeConnection()
186+
} else {
187+
stop(true)
173188
}
174-
// Setup complete
175-
finalizeConnection()
176189
} catch (e: Exception) {
177190
Log.e(TAG, "Error in connecting", e)
178191
_connectionState.value = ConnectionState.Disconnected()

core/network/src/main/java/sefirah/network/extensions/MessageHandler.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package sefirah.network.extensions
22

3+
import android.bluetooth.BluetoothClass.Device
34
import android.content.Context
45
import android.content.Intent
56
import android.media.AudioManager
@@ -30,7 +31,7 @@ import sefirah.network.NetworkService
3031
import sefirah.network.NetworkService.Companion.TAG
3132
import sefirah.network.util.ECDHHelper
3233

33-
suspend fun NetworkService.handleMessage(message: SocketMessage) {
34+
fun NetworkService.handleMessage(message: SocketMessage) {
3435
when (message) {
3536
is Misc -> handleMisc(message)
3637
is NotificationMessage -> notificationHandler.removeNotification(message.notificationKey)
File renamed without changes.

feature/media/build.gradle.kts renamed to feature/projection/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
}
44

55
android {
6-
namespace = "sefirah.media"
6+
namespace = "sefirah.projection"
77
}
88

99
dependencies {

feature/media/src/main/java/sefirah/media/MediaHandler.kt renamed to feature/projection/src/main/java/sefirah/projection/media/MediaHandler.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package sefirah.media
1+
package sefirah.projection.media
22

33
import sefirah.domain.model.PlaybackData
44

feature/media/src/main/java/sefirah/media/MediaService.kt renamed to feature/projection/src/main/java/sefirah/projection/media/MediaService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package sefirah.media
1+
package sefirah.projection.media
22

33
import android.content.Context
44
import android.media.AudioManager
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package sefirah.projection.screen
2+
3+
import android.app.Service
4+
import android.content.Intent
5+
import android.os.IBinder
6+
7+
class ScreenControllerService: Service() {
8+
override fun onBind(p0: Intent?): IBinder? {
9+
return null
10+
}
11+
}

feature/screen/.gitignore

-1
This file was deleted.

feature/screen/build.gradle.kts

-11
This file was deleted.

feature/screen/src/main/AndroidManifest.xml

-4
This file was deleted.

settings.gradle.kts

+1-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,5 @@ include(":data")
3434
include(":data")
3535

3636
include(":feature:clipboard")
37-
include(":feature:media")
37+
include(":feature:projection")
3838
include(":feature:notification")
39-
include(":feature:screen")

0 commit comments

Comments
 (0)