Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ import io.getstream.chat.android.client.api2.mapping.toFilterDomainWithFields
import io.getstream.chat.android.client.api2.model.dto.PartialUpdateUserDto
import io.getstream.chat.android.client.api2.model.dto.UpstreamPushPreferenceInputDto
import io.getstream.chat.android.client.api2.model.requests.AcceptInviteRequest
import io.getstream.chat.android.client.api2.model.requests.AddDeviceRequest
import io.getstream.chat.android.client.api2.model.requests.AddMembersRequest
import io.getstream.chat.android.client.api2.model.requests.AddUserGroupMembersRequest
import io.getstream.chat.android.client.api2.model.requests.BanUserRequest
Expand Down Expand Up @@ -168,6 +167,7 @@ import io.getstream.chat.android.models.Vote
import io.getstream.chat.android.models.VotingVisibility
import io.getstream.chat.android.models.querysort.QuerySorter
import io.getstream.chat.android.network.models.BlockUsersRequest
import io.getstream.chat.android.network.models.CreateDeviceRequest
import io.getstream.chat.android.network.models.UnblockUsersRequest
import io.getstream.log.taggedLogger
import io.getstream.result.Error
Expand Down Expand Up @@ -468,10 +468,10 @@ constructor(

override fun addDevice(device: Device): Call<Unit> {
return deviceApi.addDevices(
request = AddDeviceRequest(
device.token,
device.pushProvider.key,
device.providerName,
request = CreateDeviceRequest(
id = device.token,
pushProvider = CreateDeviceRequest.PushProvider.fromString(device.pushProvider.key),
pushProviderName = device.providerName,
),
).toUnitCall()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
package io.getstream.chat.android.client.api2.endpoint

import io.getstream.chat.android.client.api.AuthenticatedApi
import io.getstream.chat.android.client.api2.model.requests.AddDeviceRequest
import io.getstream.chat.android.client.api2.model.response.DevicesResponse
import io.getstream.chat.android.client.call.RetrofitCall
import io.getstream.chat.android.network.models.CreateDeviceRequest
import io.getstream.chat.android.network.models.ListDevicesResponse
import io.getstream.chat.android.network.models.Response
import retrofit2.http.Body
import retrofit2.http.DELETE
Expand All @@ -31,10 +31,10 @@ import retrofit2.http.Query
internal interface DeviceApi {

@GET("/devices")
fun getDevices(): RetrofitCall<DevicesResponse>
fun getDevices(): RetrofitCall<ListDevicesResponse>

@POST("/devices")
fun addDevices(@Body request: AddDeviceRequest): RetrofitCall<Response>
fun addDevices(@Body request: CreateDeviceRequest): RetrofitCall<Response>

@DELETE("/devices")
fun deleteDevice(@Query("id") id: String): RetrofitCall<Response>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ import io.getstream.chat.android.models.querysort.QuerySortByField
import io.getstream.chat.android.models.querysort.QuerySorter
import io.getstream.chat.android.models.querysort.SortDirection
import io.getstream.chat.android.network.models.BlockUsersResponse
import io.getstream.chat.android.network.models.DeviceResponse
import java.util.Date

@Suppress("TooManyFunctions", "LargeClass")
Expand Down Expand Up @@ -689,8 +690,14 @@ internal class DomainMapping(
)

/**
* Transforms [DeviceDto] to [Device].
* Transforms [DeviceResponse] to [Device].
*/
internal fun DeviceResponse.toDomain(): Device = Device(
token = id,
pushProvider = PushProvider.fromKey(pushProvider),
providerName = pushProviderName,
)

internal fun DeviceDto.toDomain(): Device = Device(
token = id,
pushProvider = PushProvider.fromKey(push_provider),
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.squareup.moshi.Moshi
internal object Serializer {
@JvmStatic
internal val moshiBuilder: Moshi.Builder = Moshi.Builder()
.add(io.getstream.chat.android.network.models.CreateDeviceRequest.PushProvider.PushProviderAdapter())
.add(io.getstream.chat.android.network.infrastructure.IsoDateAdapter())
.addLast(com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory())

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* Copyright (c) 2014-2026 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

@file:Suppress(
"ArrayInDataClass",
"EnumEntryName",
"RemoveRedundantQualifierName",
"UnusedImport",
)

package io.getstream.chat.android.network.models

import com.squareup.moshi.FromJson
import com.squareup.moshi.Json
import com.squareup.moshi.JsonAdapter
import com.squareup.moshi.JsonReader
import com.squareup.moshi.JsonWriter
import com.squareup.moshi.ToJson

/**
* Create device request
*/

@com.squareup.moshi.JsonClass(generateAdapter = true)
internal data class CreateDeviceRequest(
@Json(name = "id")
val id: kotlin.String,

@Json(name = "push_provider")
val pushProvider: PushProvider,

@Json(name = "hardware_id")
val hardwareId: kotlin.String? = null,

@Json(name = "push_provider_name")
val pushProviderName: kotlin.String? = null,

@Json(name = "voip_token")
val voipToken: kotlin.Boolean? = null,
) {

/**
* PushProvider Enum
*/
sealed class PushProvider(val value: kotlin.String) {
override fun toString(): String = value

companion object {
fun fromString(s: kotlin.String): PushProvider = when (s) {
"apn" -> Apn
"firebase" -> Firebase
"huawei" -> Huawei
"xiaomi" -> Xiaomi
else -> Unknown(s)
}
}
object Apn : PushProvider("apn")
object Firebase : PushProvider("firebase")
object Huawei : PushProvider("huawei")
object Xiaomi : PushProvider("xiaomi")
data class Unknown(val unknownValue: kotlin.String) : PushProvider(unknownValue)

class PushProviderAdapter : JsonAdapter<PushProvider>() {
@FromJson
override fun fromJson(reader: JsonReader): PushProvider? {
val s = reader.nextString() ?: return null
return PushProvider.fromString(s)
}

@ToJson
override fun toJson(writer: JsonWriter, value: PushProvider?) {
writer.value(value?.value)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright (c) 2014-2026 Stream.io Inc. All rights reserved.
*
* Licensed under the Stream License;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://github.com/GetStream/stream-chat-android/blob/main/LICENSE
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

@file:Suppress(
"ArrayInDataClass",
"EnumEntryName",
"RemoveRedundantQualifierName",
"UnusedImport",
)

package io.getstream.chat.android.network.models

import com.squareup.moshi.Json

/**
* Response for Device
*/

@com.squareup.moshi.JsonClass(generateAdapter = true)
internal data class DeviceResponse(
@Json(name = "created_at")
val createdAt: java.util.Date,

@Json(name = "id")
val id: kotlin.String,

@Json(name = "push_provider")
val pushProvider: kotlin.String,

@Json(name = "user_id")
val userId: kotlin.String,

@Json(name = "disabled")
val disabled: kotlin.Boolean? = null,

@Json(name = "disabled_reason")
val disabledReason: kotlin.String? = null,

@Json(name = "hardware_id")
val hardwareId: kotlin.String? = null,

@Json(name = "push_provider_name")
val pushProviderName: kotlin.String? = null,

@Json(name = "voip")
val voip: kotlin.Boolean? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,27 @@
* limitations under the License.
*/

package io.getstream.chat.android.client.api2.model.response
@file:Suppress(
"ArrayInDataClass",
"EnumEntryName",
"RemoveRedundantQualifierName",
"UnusedImport",
)

package io.getstream.chat.android.network.models

import com.squareup.moshi.Json
import kotlin.collections.List

/**
* List devices response
*/

import com.squareup.moshi.JsonClass
import io.getstream.chat.android.client.api2.model.dto.DeviceDto
@com.squareup.moshi.JsonClass(generateAdapter = true)
internal data class ListDevicesResponse(
@Json(name = "duration")
val duration: kotlin.String,

@JsonClass(generateAdapter = true)
internal data class DevicesResponse(
val devices: List<DeviceDto>,
@Json(name = "devices")
val devices: kotlin.collections.List<io.getstream.chat.android.network.models.DeviceResponse> = emptyList(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ import io.getstream.chat.android.models.VotingVisibility
import io.getstream.chat.android.models.querysort.QuerySortByField
import io.getstream.chat.android.models.querysort.QuerySorter
import io.getstream.chat.android.network.models.BlockUsersResponse
import io.getstream.chat.android.network.models.DeviceResponse
import io.getstream.chat.android.network.models.UnblockUsersResponse
import io.getstream.chat.android.positiveRandomInt
import io.getstream.chat.android.positiveRandomLong
Expand Down Expand Up @@ -834,6 +835,20 @@ internal object Mother {
set = set,
)

fun randomDeviceResponse(
id: String = randomString(),
pushProvider: String = randomString(),
pushProviderName: String = randomString(),
createdAt: Date = randomDate(),
userId: String = randomString(),
): DeviceResponse = DeviceResponse(
createdAt = createdAt,
id = id,
pushProvider = pushProvider,
userId = userId,
pushProviderName = pushProviderName,
)

fun randomDeviceDto(
id: String = randomString(),
pushProvider: String = randomString(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ import io.getstream.chat.android.client.api2.model.dto.UnreadDto
import io.getstream.chat.android.client.api2.model.dto.UpstreamChatPreferencesDto
import io.getstream.chat.android.client.api2.model.dto.UpstreamPushPreferenceInputDto
import io.getstream.chat.android.client.api2.model.requests.AcceptInviteRequest
import io.getstream.chat.android.client.api2.model.requests.AddDeviceRequest
import io.getstream.chat.android.client.api2.model.requests.AddUserGroupMembersRequest
import io.getstream.chat.android.client.api2.model.requests.BanUserRequest
import io.getstream.chat.android.client.api2.model.requests.CreatePollRequest
Expand Down Expand Up @@ -91,7 +90,6 @@ import io.getstream.chat.android.client.api2.model.requests.UpstreamOptionDto
import io.getstream.chat.android.client.api2.model.requests.UpstreamVoteDto
import io.getstream.chat.android.client.api2.model.response.AppSettingsResponse
import io.getstream.chat.android.client.api2.model.response.ChannelResponse
import io.getstream.chat.android.client.api2.model.response.DevicesResponse
import io.getstream.chat.android.client.api2.model.response.DraftMessageResponse
import io.getstream.chat.android.client.api2.model.response.EventResponse
import io.getstream.chat.android.client.api2.model.response.FlagResponse
Expand Down Expand Up @@ -166,6 +164,8 @@ import io.getstream.chat.android.models.querysort.QuerySortByField.Companion.asc
import io.getstream.chat.android.models.querysort.QuerySortByField.Companion.descByName
import io.getstream.chat.android.network.models.BlockUsersRequest
import io.getstream.chat.android.network.models.BlockUsersResponse
import io.getstream.chat.android.network.models.CreateDeviceRequest
import io.getstream.chat.android.network.models.ListDevicesResponse
import io.getstream.chat.android.network.models.Response
import io.getstream.chat.android.network.models.UnblockUsersRequest
import io.getstream.chat.android.network.models.UnblockUsersResponse
Expand Down Expand Up @@ -517,10 +517,10 @@ internal class MoshiChatApiTest {
val device = randomDevice()
val result = sut.addDevice(device).await()
// then
val expectedRequest = AddDeviceRequest(
val expectedRequest = CreateDeviceRequest(
id = device.token,
push_provider = device.pushProvider.key,
push_provider_name = device.providerName,
pushProvider = CreateDeviceRequest.PushProvider.fromString(device.pushProvider.key),
pushProviderName = device.providerName,
)
result `should be instance of` expected
verify(api, times(1)).addDevices(expectedRequest)
Expand All @@ -545,7 +545,7 @@ internal class MoshiChatApiTest {

@ParameterizedTest
@MethodSource("io.getstream.chat.android.client.api2.MoshiChatApiTestArguments#getDevicesInput")
fun testGetDevices(call: RetrofitCall<DevicesResponse>, expected: KClass<*>) = runTest {
fun testGetDevices(call: RetrofitCall<ListDevicesResponse>, expected: KClass<*>) = runTest {
// given
val api = mock<DeviceApi>()
whenever(api.getDevices()).doReturn(call)
Expand Down
Loading
Loading