Skip to content

Commit 66007c3

Browse files
authored
Merge pull request #80 from sameerasw/develop
refactor: Code reformat and optimizations
2 parents d1fbcaf + 98e5824 commit 66007c3

79 files changed

Lines changed: 3359 additions & 1622 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/src/main/java/com/sameerasw/airsync/MainActivity.kt

Lines changed: 141 additions & 57 deletions
Large diffs are not rendered by default.

app/src/main/java/com/sameerasw/airsync/data/local/DataStoreManager.kt

Lines changed: 128 additions & 59 deletions
Large diffs are not rendered by default.

app/src/main/java/com/sameerasw/airsync/data/repository/AirSyncRepositoryImpl.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,26 @@ class AirSyncRepositoryImpl(
7676
}
7777

7878
// Network-aware device connections
79-
override suspend fun saveNetworkDeviceConnection(deviceName: String, ourIp: String, clientIp: String, port: String, isPlus: Boolean, symmetricKey: String?, model: String?, deviceType: String?) {
80-
dataStoreManager.saveNetworkDeviceConnection(deviceName, ourIp, clientIp, port, isPlus, symmetricKey, model, deviceType)
79+
override suspend fun saveNetworkDeviceConnection(
80+
deviceName: String,
81+
ourIp: String,
82+
clientIp: String,
83+
port: String,
84+
isPlus: Boolean,
85+
symmetricKey: String?,
86+
model: String?,
87+
deviceType: String?
88+
) {
89+
dataStoreManager.saveNetworkDeviceConnection(
90+
deviceName,
91+
ourIp,
92+
clientIp,
93+
port,
94+
isPlus,
95+
symmetricKey,
96+
model,
97+
deviceType
98+
)
8199
}
82100

83101
override fun getNetworkDeviceConnection(deviceName: String): Flow<NetworkDeviceConnection?> {
@@ -115,7 +133,7 @@ class AirSyncRepositoryImpl(
115133
override fun getClipboardSyncEnabled(): Flow<Boolean> {
116134
return dataStoreManager.getClipboardSyncEnabled()
117135
}
118-
136+
119137
override suspend fun setClipboardHistoryEnabled(enabled: Boolean) {
120138
dataStoreManager.setClipboardHistoryEnabled(enabled)
121139
}

app/src/main/java/com/sameerasw/airsync/domain/repository/AirSyncRepository.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.sameerasw.airsync.domain.repository
22

33
import com.sameerasw.airsync.domain.model.ConnectedDevice
4-
import com.sameerasw.airsync.domain.model.NotificationApp
54
import com.sameerasw.airsync.domain.model.NetworkDeviceConnection
5+
import com.sameerasw.airsync.domain.model.NotificationApp
66
import kotlinx.coroutines.flow.Flow
77

88
interface AirSyncRepository {
@@ -31,7 +31,17 @@ interface AirSyncRepository {
3131
fun getLastConnectedDevice(): Flow<ConnectedDevice?>
3232

3333
// Network-aware device connections
34-
suspend fun saveNetworkDeviceConnection(deviceName: String, ourIp: String, clientIp: String, port: String, isPlus: Boolean, symmetricKey: String?, model: String? = null, deviceType: String? = null)
34+
suspend fun saveNetworkDeviceConnection(
35+
deviceName: String,
36+
ourIp: String,
37+
clientIp: String,
38+
port: String,
39+
isPlus: Boolean,
40+
symmetricKey: String?,
41+
model: String? = null,
42+
deviceType: String? = null
43+
)
44+
3545
fun getNetworkDeviceConnection(deviceName: String): Flow<NetworkDeviceConnection?>
3646
fun getAllNetworkDeviceConnections(): Flow<List<NetworkDeviceConnection>>
3747
suspend fun updateNetworkDeviceLastConnected(deviceName: String, timestamp: Long)

app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/ClipboardActionActivity.kt

Lines changed: 46 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,16 @@ import android.graphics.Color
44
import android.graphics.drawable.ColorDrawable
55
import android.os.Bundle
66
import androidx.activity.ComponentActivity
7+
import androidx.activity.SystemBarStyle
78
import androidx.activity.compose.setContent
89
import androidx.activity.enableEdgeToEdge
9-
import androidx.activity.SystemBarStyle
1010
import androidx.compose.animation.AnimatedContent
1111
import androidx.compose.animation.ExperimentalAnimationApi
1212
import androidx.compose.animation.fadeIn
1313
import androidx.compose.animation.fadeOut
1414
import androidx.compose.animation.togetherWith
1515
import androidx.compose.foundation.Image
1616
import androidx.compose.foundation.background
17-
import androidx.compose.foundation.border
1817
import androidx.compose.foundation.clickable
1918
import androidx.compose.foundation.layout.Box
2019
import androidx.compose.foundation.layout.Column
@@ -45,11 +44,9 @@ import androidx.compose.runtime.remember
4544
import androidx.compose.runtime.setValue
4645
import androidx.compose.ui.Alignment
4746
import androidx.compose.ui.Modifier
48-
import androidx.compose.ui.draw.clip
4947
import androidx.compose.ui.layout.ContentScale
5048
import androidx.compose.ui.res.painterResource
5149
import androidx.compose.ui.res.stringResource
52-
import androidx.compose.ui.text.font.FontWeight
5350
import androidx.compose.ui.tooling.preview.Preview
5451
import androidx.compose.ui.unit.dp
5552
import com.sameerasw.airsync.R
@@ -63,7 +60,7 @@ import kotlinx.coroutines.delay
6360

6461
class ClipboardActionActivity : ComponentActivity() {
6562

66-
private val _windowFocus = mutableStateOf(false)
63+
private val _windowFocus = mutableStateOf(false)
6764

6865
override fun onCreate(savedInstanceState: Bundle?) {
6966
super.onCreate(savedInstanceState)
@@ -196,44 +193,50 @@ fun ClipboardActionScreenContent(
196193
Box(
197194
modifier = Modifier
198195
.size(56.dp)
199-
.background(MaterialTheme.colorScheme.surfaceContainerHigh, shape = CircleShape)
200-
) {
201-
// Overlay icon/indicator
202-
when (state) {
203-
is ClipboardUiState.Loading -> {
204-
LoadingIndicator(
205-
modifier = Modifier.size(56.dp),
206-
color = MaterialTheme.colorScheme.primary
196+
.background(
197+
MaterialTheme.colorScheme.surfaceContainerHigh,
198+
shape = CircleShape
207199
)
208-
}
200+
) {
201+
// Overlay icon/indicator
202+
when (state) {
203+
is ClipboardUiState.Loading -> {
204+
LoadingIndicator(
205+
modifier = Modifier.size(56.dp),
206+
color = MaterialTheme.colorScheme.primary
207+
)
208+
}
209209

210-
is ClipboardUiState.Success -> {
211-
Icon(
212-
imageVector = Icons.Rounded.CheckCircle,
213-
contentDescription = "Success",
214-
modifier = Modifier.size(56.dp),
215-
tint = MaterialTheme.colorScheme.primary
216-
)
217-
}
210+
is ClipboardUiState.Success -> {
211+
Icon(
212+
imageVector = Icons.Rounded.CheckCircle,
213+
contentDescription = "Success",
214+
modifier = Modifier.size(56.dp),
215+
tint = MaterialTheme.colorScheme.primary
216+
)
217+
}
218218

219-
is ClipboardUiState.Error -> {
220-
Icon(
221-
imageVector = Icons.Rounded.Error,
222-
contentDescription = "Error",
223-
tint = MaterialTheme.colorScheme.error,
224-
modifier = Modifier.size(56.dp)
225-
)
219+
is ClipboardUiState.Error -> {
220+
Icon(
221+
imageVector = Icons.Rounded.Error,
222+
contentDescription = "Error",
223+
tint = MaterialTheme.colorScheme.error,
224+
modifier = Modifier.size(56.dp)
225+
)
226+
}
226227
}
227228
}
228229
}
229-
}
230230

231231
Text(
232232
text = connectedDevice?.name ?: stringResource(R.string.your_mac),
233233
style = MaterialTheme.typography.titleMedium,
234234
color = MaterialTheme.colorScheme.onPrimary,
235235
modifier = Modifier
236-
.background(MaterialTheme.colorScheme.primary, shape = RoundedCornerShape(32.dp))
236+
.background(
237+
MaterialTheme.colorScheme.primary,
238+
shape = RoundedCornerShape(32.dp)
239+
)
237240
.padding(horizontal = 16.dp, vertical = 4.dp),
238241
)
239242

@@ -266,22 +269,31 @@ sealed class ClipboardUiState {
266269
@Composable
267270
private fun ClipboardActionScreenPreviewLoading() {
268271
AirSyncTheme {
269-
ClipboardActionScreenContent(uiState = ClipboardUiState.Loading, connectedDevice = null, onFinished = {})
272+
ClipboardActionScreenContent(
273+
uiState = ClipboardUiState.Loading,
274+
connectedDevice = null,
275+
onFinished = {})
270276
}
271277
}
272278

273279
@Preview(name = "Success State", showBackground = true)
274280
@Composable
275281
private fun ClipboardActionScreenPreviewSuccess() {
276282
AirSyncTheme {
277-
ClipboardActionScreenContent(uiState = ClipboardUiState.Success, connectedDevice = null, onFinished = {})
283+
ClipboardActionScreenContent(
284+
uiState = ClipboardUiState.Success,
285+
connectedDevice = null,
286+
onFinished = {})
278287
}
279288
}
280289

281290
@Preview(name = "Error State", showBackground = true)
282291
@Composable
283292
private fun ClipboardActionScreenPreviewError() {
284293
AirSyncTheme {
285-
ClipboardActionScreenContent(uiState = ClipboardUiState.Error("Failed to sync"), connectedDevice = null, onFinished = {})
294+
ClipboardActionScreenContent(
295+
uiState = ClipboardUiState.Error("Failed to sync"),
296+
connectedDevice = null,
297+
onFinished = {})
286298
}
287299
}

app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/PermissionsActivity.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,26 @@ import android.Manifest
44
import android.os.Build
55
import android.os.Bundle
66
import androidx.activity.ComponentActivity
7+
import androidx.activity.SystemBarStyle
78
import androidx.activity.compose.setContent
89
import androidx.activity.enableEdgeToEdge
910
import androidx.activity.result.contract.ActivityResultContracts
10-
import androidx.activity.SystemBarStyle
11-
import androidx.compose.foundation.layout.*
11+
import androidx.compose.foundation.layout.WindowInsets
12+
import androidx.compose.foundation.layout.fillMaxSize
13+
import androidx.compose.foundation.layout.padding
1214
import androidx.compose.material.icons.Icons
1315
import androidx.compose.material.icons.automirrored.filled.ArrowBack
14-
import androidx.compose.material3.*
15-
import androidx.compose.runtime.*
16+
import androidx.compose.material3.ExperimentalMaterial3Api
17+
import androidx.compose.material3.Icon
18+
import androidx.compose.material3.IconButton
19+
import androidx.compose.material3.Scaffold
20+
import androidx.compose.material3.Text
21+
import androidx.compose.material3.TopAppBar
22+
import androidx.compose.material3.TopAppBarDefaults
23+
import androidx.compose.material3.rememberTopAppBarState
24+
import androidx.compose.runtime.getValue
25+
import androidx.compose.runtime.mutableStateOf
26+
import androidx.compose.runtime.setValue
1627
import androidx.compose.ui.Modifier
1728
import androidx.compose.ui.input.nestedscroll.nestedScroll
1829
import com.sameerasw.airsync.presentation.ui.screens.PermissionsScreen
@@ -63,7 +74,8 @@ class PermissionsActivity : ComponentActivity() {
6374

6475
setContent {
6576
AirSyncTheme {
66-
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
77+
val scrollBehavior =
78+
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
6779

6880
Scaffold(
6981
modifier = Modifier

app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/QRScannerActivity.kt

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,40 @@ import android.Manifest
44
import android.annotation.SuppressLint
55
import android.content.Intent
66
import android.content.pm.PackageManager
7+
import android.os.Build
78
import android.os.Bundle
89
import android.util.Log
910
import androidx.activity.ComponentActivity
1011
import androidx.activity.SystemBarStyle
1112
import androidx.activity.compose.setContent
1213
import androidx.activity.enableEdgeToEdge
1314
import androidx.activity.result.contract.ActivityResultContracts
14-
import android.os.Build
1515
import androidx.camera.core.CameraSelector
1616
import androidx.camera.core.ImageAnalysis
1717
import androidx.camera.core.ImageProxy
1818
import androidx.camera.lifecycle.ProcessCameraProvider
1919
import androidx.camera.view.PreviewView
2020
import androidx.compose.foundation.background
21-
import androidx.compose.foundation.layout.*
21+
import androidx.compose.foundation.layout.Arrangement
22+
import androidx.compose.foundation.layout.Box
23+
import androidx.compose.foundation.layout.Column
24+
import androidx.compose.foundation.layout.fillMaxSize
25+
import androidx.compose.foundation.layout.padding
26+
import androidx.compose.foundation.layout.systemBarsPadding
2227
import androidx.compose.material.icons.Icons
2328
import androidx.compose.material.icons.automirrored.filled.ArrowBack
24-
import androidx.compose.material3.*
25-
import androidx.compose.runtime.*
29+
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
30+
import androidx.compose.material3.Icon
31+
import androidx.compose.material3.IconButton
32+
import androidx.compose.material3.LoadingIndicator
33+
import androidx.compose.material3.MaterialTheme
34+
import androidx.compose.material3.Text
35+
import androidx.compose.runtime.Composable
36+
import androidx.compose.runtime.LaunchedEffect
37+
import androidx.compose.runtime.getValue
38+
import androidx.compose.runtime.mutableStateOf
39+
import androidx.compose.runtime.remember
40+
import androidx.compose.runtime.setValue
2641
import androidx.compose.ui.Alignment
2742
import androidx.compose.ui.Modifier
2843
import androidx.compose.ui.draw.scale
@@ -32,7 +47,6 @@ import androidx.compose.ui.text.style.TextAlign
3247
import androidx.compose.ui.unit.dp
3348
import androidx.compose.ui.viewinterop.AndroidView
3449
import androidx.core.content.ContextCompat
35-
import androidx.core.view.WindowCompat
3650
import com.google.mlkit.vision.barcode.BarcodeScannerOptions
3751
import com.google.mlkit.vision.barcode.BarcodeScanning
3852
import com.google.mlkit.vision.common.InputImage
@@ -233,7 +247,7 @@ fun QrCodeScannerView(
233247
val preview = androidx.camera.core.Preview.Builder()
234248
.setTargetResolution(android.util.Size(1280, 720))
235249
.build()
236-
preview.setSurfaceProvider(previewView.surfaceProvider)
250+
preview.surfaceProvider = previewView.surfaceProvider
237251

238252
// Configure barcode scanner options for QR codes only
239253
val options = BarcodeScannerOptions.Builder()

app/src/main/java/com/sameerasw/airsync/presentation/ui/activities/ShareActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import androidx.activity.enableEdgeToEdge
1010
import androidx.lifecycle.lifecycleScope
1111
import com.sameerasw.airsync.data.local.DataStoreManager
1212
import com.sameerasw.airsync.utils.ClipboardSyncManager
13-
import com.sameerasw.airsync.utils.WebSocketUtil
1413
import com.sameerasw.airsync.utils.FileSender
14+
import com.sameerasw.airsync.utils.WebSocketUtil
1515
import kotlinx.coroutines.flow.first
1616
import kotlinx.coroutines.launch
1717

0 commit comments

Comments
 (0)