diff --git a/app/src/main/kotlin/com/meloda/app/fast/presentation/MainActivity.kt b/app/src/main/kotlin/com/meloda/app/fast/presentation/MainActivity.kt
index 7aee864d..e1f28a38 100644
--- a/app/src/main/kotlin/com/meloda/app/fast/presentation/MainActivity.kt
+++ b/app/src/main/kotlin/com/meloda/app/fast/presentation/MainActivity.kt
@@ -8,6 +8,7 @@ import android.content.Intent
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
+import android.provider.Settings
import android.util.Log
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
@@ -21,6 +22,7 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
+import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.LifecycleResumeEffect
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -43,7 +45,6 @@ import com.meloda.app.fast.service.longpolling.LongPollingService
import org.koin.androidx.compose.koinViewModel
import org.koin.compose.KoinContext
import org.koin.compose.koinInject
-
import com.meloda.app.fast.designsystem.R as UiR
class MainActivity : AppCompatActivity() {
@@ -52,6 +53,11 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ SettingsController.deviceId = Settings.Secure.getString(
+ contentResolver,
+ Settings.Secure.ANDROID_ID
+ )
+
val currentNightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
val systemBarStyle = when (currentNightMode) {
Configuration.UI_MODE_NIGHT_NO -> SystemBarStyle.light(
@@ -175,25 +181,40 @@ class MainActivity : AppCompatActivity() {
private fun createNotificationChannels() {
isSdkAtLeast(Build.VERSION_CODES.O) {
val noCategoryName = getString(UiR.string.notification_channel_no_category_name)
- val noCategoryDescriptionText = getString(UiR.string.notification_channel_no_category_description)
- val noCategoryImportance = NotificationManager.IMPORTANCE_HIGH
+ val noCategoryDescriptionText =
+ getString(UiR.string.notification_channel_no_category_description)
+ val noCategoryImportance = NotificationManagerCompat.IMPORTANCE_HIGH
val noCategoryChannel =
- NotificationChannel(AppConstants.NOTIFICATION_CHANNEL_UNCATEGORIZED, noCategoryName, noCategoryImportance).apply {
+ NotificationChannel(
+ AppConstants.NOTIFICATION_CHANNEL_UNCATEGORIZED,
+ noCategoryName,
+ noCategoryImportance
+ ).apply {
description = noCategoryDescriptionText
}
val longPollName = getString(UiR.string.notification_channel_long_polling_service_name)
- val longPollDescriptionText = getString(UiR.string.notification_channel_long_polling_service_description)
- val longPollImportance = NotificationManager.IMPORTANCE_NONE
+ val longPollDescriptionText =
+ getString(UiR.string.notification_channel_long_polling_service_description)
+ val longPollImportance = NotificationManagerCompat.IMPORTANCE_NONE
val longPollChannel =
- NotificationChannel(AppConstants.NOTIFICATION_CHANNEL_LONG_POLLING, longPollName, longPollImportance).apply {
+ NotificationChannel(
+ AppConstants.NOTIFICATION_CHANNEL_LONG_POLLING,
+ longPollName,
+ longPollImportance
+ ).apply {
description = longPollDescriptionText
}
val notificationManager: NotificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
- notificationManager.createNotificationChannels(listOf(noCategoryChannel, longPollChannel))
+ notificationManager.createNotificationChannels(
+ listOf(
+ noCategoryChannel,
+ longPollChannel
+ )
+ )
}
}
diff --git a/core/data/src/main/AndroidManifest.xml b/core/data/src/main/AndroidManifest.xml
deleted file mode 100644
index 8bdb7e14..00000000
--- a/core/data/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepository.kt b/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepository.kt
index 4c0d052c..a3430777 100644
--- a/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepository.kt
+++ b/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepository.kt
@@ -1,15 +1,21 @@
package com.meloda.app.fast.data.api.account
-import com.meloda.app.fast.model.api.requests.AccountSetOfflineRequest
-import com.meloda.app.fast.model.api.requests.AccountSetOnlineRequest
+import com.meloda.app.fast.network.RestApiErrorDomain
+import com.slack.eithernet.ApiResult
interface AccountRepository {
suspend fun setOnline(
- params: AccountSetOnlineRequest
- ): Boolean
+ accessToken: String? = null,
+ voip: Boolean = false
+ ): ApiResult
suspend fun setOffline(
- params: AccountSetOfflineRequest
- ): Boolean
+ accessToken: String? = null
+ ): ApiResult
+
+ suspend fun registerDevice(
+ token: String,
+ deviceId: String
+ ): ApiResult
}
diff --git a/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepositoryImpl.kt b/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepositoryImpl.kt
index 2d6a53cd..41daf90c 100644
--- a/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepositoryImpl.kt
+++ b/core/data/src/main/kotlin/com/meloda/app/fast/data/api/account/AccountRepositoryImpl.kt
@@ -1,19 +1,54 @@
package com.meloda.app.fast.data.api.account
-import com.meloda.app.fast.model.api.requests.AccountSetOfflineRequest
-import com.meloda.app.fast.model.api.requests.AccountSetOnlineRequest
+import android.os.Build
+import com.meloda.app.fast.model.api.asInt
+import com.meloda.app.fast.network.RestApiErrorDomain
+import com.meloda.app.fast.network.mapApiDefault
import com.meloda.app.fast.network.service.account.AccountService
+import com.slack.eithernet.ApiResult
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
-// TODO: 05/05/2024, Danil Nikolaev: implement
class AccountRepositoryImpl(
- private val accountService: AccountService
-) : com.meloda.app.fast.data.api.account.AccountRepository {
+ private val service: AccountService
+) : AccountRepository {
- override suspend fun setOnline(params: AccountSetOnlineRequest): Boolean {
- return false
+ override suspend fun setOnline(
+ accessToken: String?,
+ voip: Boolean
+ ): ApiResult = withContext(Dispatchers.IO) {
+ service.setOnline(
+ mutableMapOf(
+ "voip" to voip.asInt().toString()
+ ).apply {
+ accessToken?.let { this["access_token"] = it }
+ }
+ ).mapApiDefault()
}
- override suspend fun setOffline(params: AccountSetOfflineRequest): Boolean {
- return false
+ override suspend fun setOffline(
+ accessToken: String?
+ ): ApiResult = withContext(Dispatchers.IO) {
+ service.setOffline(
+ accessToken?.let { mapOf("access_token" to it) } ?: emptyMap()
+ ).mapApiDefault()
+ }
+
+ override suspend fun registerDevice(
+ token: String,
+ deviceId: String
+ ): ApiResult = withContext(Dispatchers.IO) {
+ service.registerDevice(
+ mapOf(
+ "token" to token,
+ "pushes_granted" to "1",
+ "app_version" to "15271",
+ "push_provider" to "fcm",
+ "companion_apps" to "vk_client",
+ "type" to "4",
+ "device_id" to deviceId,
+ "system_version" to Build.VERSION.RELEASE
+ )
+ ).mapApiDefault()
}
}
diff --git a/core/datastore/src/main/kotlin/com/meloda/app/fast/datastore/SettingsController.kt b/core/datastore/src/main/kotlin/com/meloda/app/fast/datastore/SettingsController.kt
index 5ba9744a..5f00ed8c 100644
--- a/core/datastore/src/main/kotlin/com/meloda/app/fast/datastore/SettingsController.kt
+++ b/core/datastore/src/main/kotlin/com/meloda/app/fast/datastore/SettingsController.kt
@@ -51,14 +51,14 @@ object SettingsController {
}
}
- var isLongPollInBackgroundEnabled: Boolean =
- SettingsKeys.DEFAULT_VALUE_FEATURES_LONG_POLL_IN_BACKGROUND
+ var isLongPollInBackgroundEnabled: Boolean
get() = getBoolean(
SettingsKeys.KEY_FEATURES_LONG_POLL_IN_BACKGROUND,
SettingsKeys.DEFAULT_VALUE_FEATURES_LONG_POLL_IN_BACKGROUND
)
- set(value) {
- field = value
- put(SettingsKeys.KEY_FEATURES_LONG_POLL_IN_BACKGROUND, value)
- }
+ set(value) = put(SettingsKeys.KEY_FEATURES_LONG_POLL_IN_BACKGROUND, value)
+
+ var deviceId: String
+ get() = getString("device_id", "").orEmpty()
+ set(value) = put("device_id", value)
}
diff --git a/core/model/src/main/kotlin/com/meloda/app/fast/model/api/requests/AccountRequests.kt b/core/model/src/main/kotlin/com/meloda/app/fast/model/api/requests/AccountRequests.kt
deleted file mode 100644
index 4fe7d251..00000000
--- a/core/model/src/main/kotlin/com/meloda/app/fast/model/api/requests/AccountRequests.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.meloda.app.fast.model.api.requests
-
-import com.meloda.app.fast.model.api.asInt
-
-data class AccountSetOnlineRequest(
- val voip: Boolean,
- val accessToken: String
-) {
-
- val map
- get() = mutableMapOf(
- "voip" to voip.asInt().toString(),
- "access_token" to accessToken
- )
-
-}
-
-data class AccountSetOfflineRequest(val accessToken: String) {
- val map get() = mutableMapOf("access_token" to accessToken)
-}
diff --git a/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountService.kt b/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountService.kt
index 85d3fb85..bf26805c 100644
--- a/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountService.kt
+++ b/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountService.kt
@@ -3,6 +3,8 @@ package com.meloda.app.fast.network.service.account
import com.meloda.app.fast.network.ApiResponse
import com.meloda.app.fast.network.RestApiError
import com.slack.eithernet.ApiResult
+import retrofit2.http.FieldMap
+import retrofit2.http.FormUrlEncoded
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.QueryMap
@@ -12,10 +14,16 @@ interface AccountService {
@GET(AccountUrls.SET_ONLINE)
suspend fun setOnline(
@QueryMap params: Map
- ): ApiResult, RestApiError>
+ ): ApiResult, RestApiError>
- @POST(AccountUrls.SET_OFFLINE)
+ @GET(AccountUrls.SET_OFFLINE)
suspend fun setOffline(
@QueryMap params: Map
- ): ApiResult, RestApiError>
+ ): ApiResult, RestApiError>
+
+ @FormUrlEncoded
+ @POST(AccountUrls.REGISTER_DEVICE)
+ suspend fun registerDevice(
+ @FieldMap params: Map
+ ): ApiResult, RestApiError>
}
diff --git a/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountUrls.kt b/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountUrls.kt
index 100a5d6e..3849db17 100644
--- a/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountUrls.kt
+++ b/core/network/src/main/kotlin/com/meloda/app/fast/network/service/account/AccountUrls.kt
@@ -3,6 +3,9 @@ package com.meloda.app.fast.network.service.account
import com.meloda.app.fast.common.AppConstants
object AccountUrls {
- const val SET_ONLINE = "${AppConstants.URL_API}/account.setOnline"
- const val SET_OFFLINE = "${AppConstants.URL_API}/account.setOffline"
+ private const val URL = AppConstants.URL_API
+
+ const val SET_ONLINE = "$URL/account.setOnline"
+ const val SET_OFFLINE = "$URL/account.setOffline"
+ const val REGISTER_DEVICE = "$URL/account.registerDevice"
}