Skip to content

Commit f6ff2c1

Browse files
Add default values for the StreamClient factory method (#33)
1 parent 7a62c39 commit f6ff2c1

File tree

6 files changed

+175
-225
lines changed

6 files changed

+175
-225
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
xmlns:tools="http://schemas.android.com/tools">
1919

2020
<application
21+
android:name=".sample.SampleApp"
2122
android:allowBackup="true"
2223
android:dataExtractionRules="@xml/data_extraction_rules"
2324
android:fullBackupContent="@xml/backup_rules"

app/src/main/java/io/getstream/android/core/sample/SampleActivity.kt

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package io.getstream.android.core.sample
1818

19-
import android.os.Build
2019
import android.os.Bundle
2120
import android.util.Log
2221
import androidx.activity.ComponentActivity
@@ -40,27 +39,17 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
4039
import androidx.lifecycle.lifecycleScope
4140
import androidx.lifecycle.repeatOnLifecycle
4241
import io.getstream.android.core.api.StreamClient
43-
import io.getstream.android.core.api.authentication.StreamTokenProvider
4442
import io.getstream.android.core.api.model.connection.StreamConnectionState
4543
import io.getstream.android.core.api.model.connection.recovery.Recovery
46-
import io.getstream.android.core.api.model.value.StreamApiKey
47-
import io.getstream.android.core.api.model.value.StreamHttpClientInfoHeader
48-
import io.getstream.android.core.api.model.value.StreamToken
49-
import io.getstream.android.core.api.model.value.StreamUserId
50-
import io.getstream.android.core.api.model.value.StreamWsUrl
5144
import io.getstream.android.core.api.socket.listeners.StreamClientListener
5245
import io.getstream.android.core.api.subscribe.StreamSubscription
5346
import io.getstream.android.core.api.subscribe.StreamSubscriptionManager
54-
import io.getstream.android.core.sample.client.createStreamClient
5547
import io.getstream.android.core.sample.ui.ConnectionStateCard
5648
import io.getstream.android.core.sample.ui.theme.StreamandroidcoreTheme
5749
import kotlinx.coroutines.launch
5850

5951
class SampleActivity : ComponentActivity(), StreamClientListener {
6052

61-
val userId = StreamUserId.fromString("petar")
62-
var streamClient: StreamClient? = null
63-
6453
var handle: StreamSubscription? = null
6554

6655
override fun onRecovery(recovery: Recovery) {
@@ -75,43 +64,13 @@ class SampleActivity : ComponentActivity(), StreamClientListener {
7564

7665
override fun onCreate(savedInstanceState: Bundle?) {
7766
super.onCreate(savedInstanceState)
78-
val streamClient2 =
79-
createStreamClient(
80-
context = this.applicationContext,
81-
scope = lifecycleScope,
82-
apiKey = StreamApiKey.fromString("pd67s34fzpgw"),
83-
userId = userId,
84-
wsUrl =
85-
StreamWsUrl.fromString(
86-
"wss://chat-edge-frankfurt-ce1.stream-io-api.com/api/v2/connect"
87-
),
88-
clientInfoHeader =
89-
StreamHttpClientInfoHeader.create(
90-
product = "android-core",
91-
productVersion = "1.0.0",
92-
os = "Android",
93-
apiLevel = Build.VERSION.SDK_INT,
94-
deviceModel = "Pixel 7 Pro",
95-
app = "Stream Android Core Sample",
96-
appVersion = "1.0.0",
97-
),
98-
tokenProvider =
99-
object : StreamTokenProvider {
100-
override suspend fun loadToken(userId: StreamUserId): StreamToken {
101-
return StreamToken.fromString(
102-
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoicGV0YXIifQ.mZFi4iSblaIoyo9JDdcxIkGkwI-tuApeSBawxpz42rs"
103-
)
104-
}
105-
},
106-
)
107-
streamClient = streamClient2
67+
val streamClient = SampleApp.instance.streamClient
10868
lifecycleScope.launch {
109-
repeatOnLifecycle(Lifecycle.State.CREATED) { streamClient?.connect() }
69+
repeatOnLifecycle(Lifecycle.State.CREATED) { streamClient.connect() }
11070
}
111-
11271
if (handle == null) {
11372
handle =
114-
streamClient2
73+
streamClient
11574
.subscribe(
11675
this,
11776
options =
@@ -136,16 +95,16 @@ class SampleActivity : ComponentActivity(), StreamClientListener {
13695
verticalArrangement = Arrangement.spacedBy(16.dp),
13796
) {
13897
Greeting(name = "Android")
139-
ClientInfo(streamClient = streamClient2)
140-
val state = streamClient?.connectionState?.collectAsStateWithLifecycle()
98+
ClientInfo(streamClient = streamClient)
99+
val state = streamClient.connectionState?.collectAsStateWithLifecycle()
141100
val buttonState =
142101
when (state?.value) {
143102
is StreamConnectionState.Connected -> {
144103
Triple(
145104
"Disconnect",
146105
true,
147106
{
148-
lifecycleScope.launch { streamClient?.disconnect() }
107+
lifecycleScope.launch { streamClient.disconnect() }
149108
Unit
150109
},
151110
)
@@ -174,6 +133,11 @@ class SampleActivity : ComponentActivity(), StreamClientListener {
174133
}
175134
}
176135
}
136+
137+
override fun onDestroy() {
138+
super.onDestroy()
139+
handle?.cancel()
140+
}
177141
}
178142

179143
@Composable
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* Copyright (c) 2014-2025 Stream.io Inc. All rights reserved.
3+
*
4+
* Licensed under the Stream License;
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://github.com/GetStream/stream-core-android/blob/main/LICENSE
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package io.getstream.android.core.sample
18+
19+
import android.annotation.SuppressLint
20+
import android.app.Application
21+
import android.os.Build
22+
import io.getstream.android.core.api.StreamClient
23+
import io.getstream.android.core.api.authentication.StreamTokenProvider
24+
import io.getstream.android.core.api.model.config.StreamClientSerializationConfig
25+
import io.getstream.android.core.api.model.value.StreamApiKey
26+
import io.getstream.android.core.api.model.value.StreamHttpClientInfoHeader
27+
import io.getstream.android.core.api.model.value.StreamToken
28+
import io.getstream.android.core.api.model.value.StreamUserId
29+
import io.getstream.android.core.api.model.value.StreamWsUrl
30+
import io.getstream.android.core.api.serialization.StreamEventSerialization
31+
import kotlinx.coroutines.CoroutineScope
32+
import kotlinx.coroutines.Dispatchers
33+
import kotlinx.coroutines.SupervisorJob
34+
35+
class SampleApp : Application() {
36+
37+
lateinit var streamClient: StreamClient
38+
private val userId = StreamUserId.fromString("sample-user")
39+
private val token =
40+
StreamToken.fromString(
41+
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoicGV0YXIifQ.mZFi4iSblaIoyo9JDdcxIkGkwI-tuApeSBawxpz42rs"
42+
)
43+
private val coroutinesScope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
44+
45+
companion object {
46+
lateinit var instance: SampleApp
47+
}
48+
49+
@SuppressLint("NotKeepingInstance")
50+
override fun onCreate() {
51+
super.onCreate()
52+
instance = this
53+
streamClient =
54+
StreamClient(
55+
context = this.applicationContext,
56+
scope = coroutinesScope,
57+
apiKey = StreamApiKey.fromString("pd67s34fzpgw"),
58+
userId = userId,
59+
products = listOf("feeds", "chat", "video"),
60+
wsUrl =
61+
StreamWsUrl.fromString(
62+
"wss://chat-edge-frankfurt-ce1.stream-io-api.com/api/v2/connect"
63+
),
64+
clientInfoHeader =
65+
StreamHttpClientInfoHeader.create(
66+
product = "android-core",
67+
productVersion = "1.1.0",
68+
os = "Android",
69+
apiLevel = Build.VERSION.SDK_INT,
70+
deviceModel = "Pixel 7 Pro",
71+
app = "Stream Android Core Sample",
72+
appVersion = "1.0.0",
73+
),
74+
tokenProvider =
75+
object : StreamTokenProvider {
76+
override suspend fun loadToken(userId: StreamUserId): StreamToken {
77+
return token
78+
}
79+
},
80+
serializationConfig =
81+
StreamClientSerializationConfig.default(
82+
object : StreamEventSerialization<Unit> {
83+
override fun serialize(data: Unit): Result<String> = Result.success("")
84+
85+
override fun deserialize(raw: String): Result<Unit> =
86+
Result.success(Unit)
87+
}
88+
),
89+
)
90+
}
91+
}

app/src/main/java/io/getstream/android/core/sample/client/StreamClient.kt

Lines changed: 0 additions & 158 deletions
This file was deleted.

0 commit comments

Comments
 (0)