Skip to content

Commit fcb3746

Browse files
[Feature] Transfer Link between multiple device (#234)
* bug fix for url copy button not visible * transfer server wip * scan to get data flow wip * conflict resolved * task done and dusted 🎉🥳 * enabled haze for all android versions * ui and duplication issue fixed * ui issues fixed * fixed as per comments * changes done as per review, api call flow broken need to fix * conflict resolve --------- Co-authored-by: anas shikoh <[email protected]>
1 parent 50ced00 commit fcb3746

File tree

14 files changed

+735
-49
lines changed

14 files changed

+735
-49
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ dependencies {
146146
implementation(libs.ktor.server.cio)
147147
implementation(libs.ktor.server.content.negotiation)
148148
implementation(libs.ktor.serialization.kotlinx.json)
149+
implementation(libs.ktor.client.content.negotiation)
149150
implementation(libs.coil.compose)
150151
implementation(libs.coil.network.ktor3)
151152
implementation(libs.ktor.client.android)

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,6 @@
99
</intent>
1010
</queries>
1111

12-
<queries>
13-
<intent>
14-
<action android:name="android.intent.action.VIEW" />
15-
<data android:scheme="*" />
16-
</intent>
17-
</queries>
18-
19-
2012
<uses-permission android:name="android.permission.INTERNET" />
2113
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2214
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
@@ -67,6 +59,7 @@
6759
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
6860
android:value="Local network server for managing deeplinks" />
6961
</service>
62+
7063
</application>
7164

7265
</manifest>

app/src/main/java/com/yogeshpaliyal/deepr/DeeprApplication.kt

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ import com.yogeshpaliyal.deepr.sync.SyncRepository
2121
import com.yogeshpaliyal.deepr.sync.SyncRepositoryImpl
2222
import com.yogeshpaliyal.deepr.viewmodel.AccountViewModel
2323
import com.yogeshpaliyal.deepr.viewmodel.LocalServerViewModel
24+
import com.yogeshpaliyal.deepr.viewmodel.TransferLinkLocalServerViewModel
2425
import io.ktor.client.HttpClient
2526
import io.ktor.client.engine.cio.CIO
27+
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
28+
import io.ktor.serialization.kotlinx.json.json
29+
import kotlinx.serialization.json.Json
2630
import org.koin.android.ext.koin.androidContext
2731
import org.koin.core.context.startKoin
2832
import org.koin.core.module.dsl.viewModel
@@ -70,7 +74,18 @@ class DeeprApplication : Application() {
7074
single<AutoBackupWorker> { AutoBackupWorker(androidContext(), get(), get()) }
7175

7276
single {
73-
HttpClient(CIO)
77+
HttpClient(CIO) {
78+
install(ContentNegotiation) {
79+
// FIX: Explicitly call the Json function from kotlinx.serialization.json
80+
json(
81+
Json {
82+
prettyPrint = true
83+
isLenient = true
84+
ignoreUnknownKeys = true
85+
},
86+
)
87+
}
88+
}
7489
}
7590

7691
viewModel { AccountViewModel(get(), get(), get(), get(), get(), get()) }
@@ -84,7 +99,7 @@ class DeeprApplication : Application() {
8499
}
85100

86101
single<LocalServerRepository> {
87-
LocalServerRepositoryImpl(androidContext(), get(), get(), get(), get())
102+
LocalServerRepositoryImpl(androidContext(), get(), get(), get(), get(), get())
88103
}
89104

90105
viewModel {
@@ -94,6 +109,10 @@ class DeeprApplication : Application() {
94109
single<ReviewManager> {
95110
ReviewManagerFactory.create()
96111
}
112+
113+
viewModel {
114+
TransferLinkLocalServerViewModel(get())
115+
}
97116
}
98117

99118
startKoin {

app/src/main/java/com/yogeshpaliyal/deepr/MainActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import com.yogeshpaliyal.deepr.ui.screens.LocalNetworkServer
2828
import com.yogeshpaliyal.deepr.ui.screens.LocalNetworkServerScreen
2929
import com.yogeshpaliyal.deepr.ui.screens.Settings
3030
import com.yogeshpaliyal.deepr.ui.screens.SettingsScreen
31+
import com.yogeshpaliyal.deepr.ui.screens.TransferLinkLocalNetworkServer
32+
import com.yogeshpaliyal.deepr.ui.screens.TransferLinkLocalServerScreen
3133
import com.yogeshpaliyal.deepr.ui.screens.home.Home
3234
import com.yogeshpaliyal.deepr.ui.screens.home.HomeScreen
3335
import com.yogeshpaliyal.deepr.ui.theme.DeeprTheme
@@ -160,6 +162,11 @@ fun Dashboard(
160162
LocalNetworkServerScreen(backStack)
161163
}
162164

165+
is TransferLinkLocalNetworkServer ->
166+
NavEntry(key) {
167+
TransferLinkLocalServerScreen(backStack)
168+
}
169+
163170
else -> NavEntry(Unit) { Text("Unknown route") }
164171
}
165172
},

app/src/main/java/com/yogeshpaliyal/deepr/server/LocalServerRepository.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@ interface LocalServerRepository {
66
val isRunning: StateFlow<Boolean>
77
val serverUrl: StateFlow<String?>
88
val serverPort: StateFlow<Int>
9+
val isTransferLinkServerRunning: StateFlow<Boolean>
10+
val transferLinkServerUrl: StateFlow<String?>
11+
val qrCodeData: StateFlow<String?>
912

10-
suspend fun startServer()
13+
suspend fun startServer(port: Int)
1114

1215
suspend fun stopServer()
1316

1417
suspend fun setServerPort(port: Int)
18+
19+
suspend fun fetchAndImportFromSender(qrTransferInfo: QRTransferInfo): Result<Unit>
1520
}

0 commit comments

Comments
 (0)