diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..fd962216 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +root = true +[*] +# Most of the standard properties are supported +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +max_line_length = 100 +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.github/workflows/app-distribute.yml b/.github/workflows/app-distribute.yml index 19a50d5a..f51c7925 100644 --- a/.github/workflows/app-distribute.yml +++ b/.github/workflows/app-distribute.yml @@ -15,7 +15,7 @@ jobs: uses: actions/setup-java@v2 with: distribution: adopt - java-version: 11 + java-version: 17 - name: Prepare environment run: | git fetch --unshallow @@ -36,4 +36,4 @@ jobs: appId: ${{secrets.FIREBASE_UI_VIRTUAL_EVENT_SAMPLE_APP_ID}} token: ${{secrets.FIREBASE_TOKEN}} groups: stream-testers - file: virtual-event-sample/build/outputs/apk/release/virtual-event-sample-release.apk \ No newline at end of file + file: virtual-event-sample/build/outputs/apk/release/virtual-event-sample-release.apk diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index 67778dcc..33fa9e92 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -5,26 +5,28 @@ on: [pull_request] jobs: lint: name: Spotless check - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v2 - name: Set up JDK uses: actions/setup-java@v1 with: - java-version: 11 + distribution: adopt + java-version: 17 - name: spotless run: ./gradlew spotlessCheck debug_build: name: Debug build - runs-on: ubuntu-22.04 + runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v1 with: - java-version: 11 + distribution: adopt + java-version: 17 - name: Build run: ./gradlew assembleDebug diff --git a/compose-custom-attachments/build.gradle b/compose-custom-attachments/build.gradle index 1a1f6743..af502b43 100644 --- a/compose-custom-attachments/build.gradle +++ b/compose-custom-attachments/build.gradle @@ -1,49 +1,54 @@ plugins { - id 'com.android.application' - id 'kotlin-android' + id 'com.android.application' + id 'kotlin-android' } android { - compileSdk 33 + compileSdk 34 - defaultConfig { - applicationId "io.getstream.chat.android.compose.customattachments" - minSdk 21 - targetSdk 33 - versionCode 1 - versionName "1.0" - } + defaultConfig { + applicationId "io.getstream.chat.android.compose.customattachments" + namespace "io.getstream.chat.android.compose.customattachments" + minSdk 21 + targetSdk 34 + versionCode 1 + versionName "1.0" + } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - buildFeatures { - compose true - } - composeOptions { - kotlinCompilerExtensionVersion libs.versions.composeCompiler.get() + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } + } + buildFeatures { + compose true + } + composeOptions { + kotlinCompilerExtensionVersion libs.versions.composeCompiler.get() + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } } dependencies { - // Stream SDK - implementation "io.getstream:stream-chat-android-compose:6.0.0-beta2" - implementation "io.getstream:stream-chat-android-state:6.0.0-beta2" - implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2" + // Stream SDK + implementation "io.getstream:stream-chat-android-compose:6.1.1" + implementation "io.getstream:stream-chat-android-state:6.1.1" + implementation "io.getstream:stream-chat-android-offline:6.1.1" - implementation libs.androidxCoreKtx - implementation libs.androidxAppCompat - implementation libs.materialComponents + implementation libs.androidxCoreKtx + implementation libs.androidxAppCompat + implementation libs.materialComponents - // Compose - implementation libs.composeCompiler - implementation libs.composeUi - implementation libs.composeUiTooling - implementation libs.composeFoundation - implementation libs.composeMaterial - implementation libs.composeActivity - implementation libs.composeViewModel + // Compose + implementation libs.composeCompiler + implementation libs.composeUi + implementation libs.composeUiTooling + implementation libs.composeFoundation + implementation libs.composeMaterial + implementation libs.composeActivity + implementation libs.composeViewModel } diff --git a/compose-custom-attachments/src/main/AndroidManifest.xml b/compose-custom-attachments/src/main/AndroidManifest.xml index d8a3c058..3ebf36d7 100644 --- a/compose-custom-attachments/src/main/AndroidManifest.xml +++ b/compose-custom-attachments/src/main/AndroidManifest.xml @@ -22,8 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MainActivity.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MainActivity.kt new file mode 100644 index 00000000..ba7bb950 --- /dev/null +++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MainActivity.kt @@ -0,0 +1,49 @@ +/* + * The MIT License (MIT) + * + * Copyright 2022 Stream.IO, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package io.getstream.chat.android.customattachments.activity + +import android.content.Intent +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.lifecycle.lifecycleScope +import io.getstream.chat.android.client.ChatClient +import io.getstream.chat.android.models.InitializationState +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class MainActivity : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + lifecycleScope.launch { + ChatClient.instance().clientState.initializationState.collectLatest { + if (it == InitializationState.COMPLETE) { + startActivity(Intent(this@MainActivity, ChannelsActivity::class.java)) + } + } + } + } +} diff --git a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt index b6d8757a..1e5d44a6 100644 --- a/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt +++ b/custom-attachments-message-composer/src/main/java/io/getstream/chat/android/customattachments/activity/MessagesActivity.kt @@ -59,7 +59,7 @@ class MessagesActivity : AppCompatActivity() { private lateinit var binding: ActivityMessagesBinding private val factory: MessageListViewModelFactory by lazy { - MessageListViewModelFactory(requireNotNull(intent.getStringExtra(EXTRA_CID))) + MessageListViewModelFactory(this, requireNotNull(intent.getStringExtra(EXTRA_CID))) } private val messageListHeaderViewModel: MessageListHeaderViewModel by viewModels { factory } private val messageListViewModel: MessageListViewModel by viewModels { factory } diff --git a/custom-attachments-message-input/build.gradle b/custom-attachments-message-input/build.gradle index c0c35355..623c31f2 100644 --- a/custom-attachments-message-input/build.gradle +++ b/custom-attachments-message-input/build.gradle @@ -4,12 +4,13 @@ plugins { } android { - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "io.getstream.chat.android.customattachments" + namespace "io.getstream.chat.android.customattachments" minSdk 21 - targetSdk 33 + targetSdk 34 versionCode 1 versionName "1.0" } @@ -17,13 +18,18 @@ android { buildFeatures { viewBinding true } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } } dependencies { // Stream SDK dependency - implementation "io.getstream:stream-chat-android-ui-components:6.0.0-beta2" - implementation "io.getstream:stream-chat-android-state:6.0.0-beta2" - implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2" + implementation "io.getstream:stream-chat-android-ui-components:6.1.1" + implementation "io.getstream:stream-chat-android-state:6.1.1" + implementation "io.getstream:stream-chat-android-offline:6.1.1" implementation libs.androidxCoreKtx implementation libs.androidxActivityKtx diff --git a/custom-attachments-message-input/src/main/AndroidManifest.xml b/custom-attachments-message-input/src/main/AndroidManifest.xml index 2521bc47..d026b50d 100644 --- a/custom-attachments-message-input/src/main/AndroidManifest.xml +++ b/custom-attachments-message-input/src/main/AndroidManifest.xml @@ -22,33 +22,37 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MainActivity.kt b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MainActivity.kt new file mode 100644 index 00000000..ba7bb950 --- /dev/null +++ b/custom-attachments-message-input/src/main/java/io/getstream/chat/android/customattachments/activity/MainActivity.kt @@ -0,0 +1,49 @@ +/* + * The MIT License (MIT) + * + * Copyright 2022 Stream.IO, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package io.getstream.chat.android.customattachments.activity + +import android.content.Intent +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.lifecycle.lifecycleScope +import io.getstream.chat.android.client.ChatClient +import io.getstream.chat.android.models.InitializationState +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch + +class MainActivity : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + lifecycleScope.launch { + ChatClient.instance().clientState.initializationState.collectLatest { + if (it == InitializationState.COMPLETE) { + startActivity(Intent(this@MainActivity, ChannelsActivity::class.java)) + } + } + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8b8b2821..705a4521 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] -kotlin = "1.7.20" -androidGradlePlugin = "7.3.0" +kotlin = "1.9.23" +androidGradlePlugin = "8.2.2" androidxActivityKtx = "1.5.1" androidxAppCompat = "1.4.2" androidxCardView = "1.0.0" @@ -11,9 +11,9 @@ androidxLifecycleExtensions = "2.2.0" androidxLifecycle = "2.5.1" androidxRecyclerView = "1.2.1" androidxViewPager2 = "1.0.0" -coil = "2.1.0" -compose = "1.3.0" -composeCompiler = "1.3.2" +coil = "2.6.0" +compose = "1.6.4" +composeCompiler = "1.5.11" composeAccompanist = "0.25.0" composeAcitvity = "1.5.1" composeViewModel = "2.4.1" @@ -64,4 +64,4 @@ navigationFragmentKtx = { module = "androidx.navigation:navigation-fragment-ktx" navigationUiKtx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigation" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } youtubePlayer = { module = "com.pierfrancescosoffritti.androidyoutubeplayer:core", version.ref = "youtubePlayer" } -spotlessPlugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version.ref = "spotlessPlugin" } \ No newline at end of file +spotlessPlugin = { module = "com.diffplug.spotless:spotless-plugin-gradle", version.ref = "spotlessPlugin" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8fad3f5a..bb842ccc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Tue Mar 26 13:02:20 KST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/video-chat-sample/build.gradle b/video-chat-sample/build.gradle index f949a4e0..6bb10ae2 100644 --- a/video-chat-sample/build.gradle +++ b/video-chat-sample/build.gradle @@ -2,55 +2,56 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdk 33 - - defaultConfig { - applicationId "io.getstream.videochat" - minSdk 23 - targetSdk 33 - versionCode 1 - versionName "1.0" + compileSdk 34 + + defaultConfig { + applicationId "io.getstream.videochat" + namespace "io.getstream.videochat" + minSdk 23 + targetSdk 34 + versionCode 1 + versionName "1.0" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } + } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } + buildFeatures { + viewBinding true + } - buildFeatures { - viewBinding true - } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = "1.8" - } + kotlinOptions { + jvmTarget = "17" + } - sourceSets { - all { - it.java.srcDir "src/$it.name/kotlin" - } + sourceSets { + all { + it.java.srcDir "src/$it.name/kotlin" } + } } dependencies { - // Stream SDK dependency - implementation "io.getstream:stream-chat-android-client:6.0.0-beta2" - - implementation libs.materialComponents - implementation libs.kotlinStdLib - implementation libs.androidxAppCompat - implementation libs.androidxCoreKtx - implementation libs.androidxActivityKtx - implementation libs.androidxLifecycleExtensions - implementation libs.coil - implementation libs.androidxRecyclerview - implementation libs.androidxConstraintLayout - implementation libs.youtubePlayer + // Stream SDK dependency + implementation "io.getstream:stream-chat-android-client:6.1.1" + + implementation libs.materialComponents + implementation libs.kotlinStdLib + implementation libs.androidxAppCompat + implementation libs.androidxCoreKtx + implementation libs.androidxActivityKtx + implementation libs.androidxLifecycleExtensions + implementation libs.coil + implementation libs.androidxRecyclerview + implementation libs.androidxConstraintLayout + implementation libs.youtubePlayer } diff --git a/video-chat-sample/src/main/AndroidManifest.xml b/video-chat-sample/src/main/AndroidManifest.xml index e6bb2a45..fc674f4e 100644 --- a/video-chat-sample/src/main/AndroidManifest.xml +++ b/video-chat-sample/src/main/AndroidManifest.xml @@ -22,8 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - + - + = globalState.user.asLiveData() + val currentUser: LiveData = state.user.asLiveData() } diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt index 53cf7bdb..117f3c1a 100644 --- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt +++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/DirectChatActivity.kt @@ -51,7 +51,7 @@ class DirectChatActivity : AppCompatActivity() { intent.getStringExtra(KEY_EXTRA_CID)!! } - private val factory: MessageListViewModelFactory by lazy { MessageListViewModelFactory(cid) } + private val factory: MessageListViewModelFactory by lazy { MessageListViewModelFactory(this, cid) } private val messageListViewModel: MessageListViewModel by viewModels { factory } private val messageListHeaderViewModel: MessageListHeaderViewModel by viewModels { factory } private val messageInputViewModel: MessageComposerViewModel by viewModels { factory } diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt index f7427300..73d4a792 100644 --- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt +++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/dm/new/SelectParticipantViewModel.kt @@ -30,7 +30,6 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import io.getstream.chat.android.client.ChatClient import io.getstream.chat.android.client.api.models.QueryUsersRequest -import io.getstream.chat.android.client.errors.ChatError import io.getstream.chat.android.models.Filters import io.getstream.chat.android.models.User import io.getstream.chat.virtualevent.util.currentUserId @@ -85,7 +84,7 @@ class SelectParticipantViewModel( sealed class State { object Loading : State() data class Content(val participants: List) : State() - data class Error(val error: ChatError) : State() + data class Error(val error: io.getstream.result.Error) : State() } sealed class UiEvent { diff --git a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt index b8fb1985..9519a655 100644 --- a/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt +++ b/virtual-event-sample/src/main/java/io/getstream/chat/virtualevent/feature/event/detail/EventDetailsActivity.kt @@ -58,7 +58,7 @@ class EventDetailsActivity : AppCompatActivity() { setContentView(binding.root) val cid = intent.getStringExtra(KEY_EXTRA_CID)!! - val factory = MessageListViewModelFactory(cid = cid) + val factory = MessageListViewModelFactory(this, cid = cid) messageListViewModel = factory.create(MessageListViewModel::class.java) messageInputViewModel = factory.create(MessageComposerViewModel::class.java) diff --git a/whatsapp-clone-sample/build.gradle b/whatsapp-clone-sample/build.gradle index 7fea5ae9..619b700d 100644 --- a/whatsapp-clone-sample/build.gradle +++ b/whatsapp-clone-sample/build.gradle @@ -3,12 +3,13 @@ apply plugin: 'kotlin-android' apply plugin: "androidx.navigation.safeargs.kotlin" android { - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "io.getstream.whatsappclone" + namespace "io.getstream.whatsappclone" minSdkVersion 21 - targetSdkVersion 33 + targetSdkVersion 34 versionCode 1 versionName "1.0" } @@ -36,9 +37,9 @@ android { dependencies { // Stream SDK dependency - implementation "io.getstream:stream-chat-android-ui-components:6.0.0-beta2" - implementation "io.getstream:stream-chat-android-state:6.0.0-beta2" - implementation "io.getstream:stream-chat-android-offline:6.0.0-beta2" + implementation "io.getstream:stream-chat-android-ui-components:6.1.1" + implementation "io.getstream:stream-chat-android-state:6.1.1" + implementation "io.getstream:stream-chat-android-offline:6.1.1" implementation libs.kotlinStdLib implementation libs.androidxViewPager2 diff --git a/whatsapp-clone-sample/src/main/AndroidManifest.xml b/whatsapp-clone-sample/src/main/AndroidManifest.xml index edd345cb..9f04bca2 100644 --- a/whatsapp-clone-sample/src/main/AndroidManifest.xml +++ b/whatsapp-clone-sample/src/main/AndroidManifest.xml @@ -22,8 +22,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - + diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt index d2c758cd..0c915f7e 100644 --- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt +++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/WhatsApp.kt @@ -47,11 +47,11 @@ class WhatsApp : Application() { .withPlugins(offlinePluginFactory, statePluginFactory) .build() - val user = User().apply { - id = "jc" - name = "Jc Miñarro" - image = "https://ca.slack-edge.com/T02RM6X6B-U011KEXDPB2-891dbb8df64f-128" - } + val user = User( + id = "jc", + name = "Jc Miñarro", + image = "https://ca.slack-edge.com/T02RM6X6B-U011KEXDPB2-891dbb8df64f-128", + ) ChatClient.instance() .connectUser( user = user, diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt index 7f472ff4..88170bf7 100644 --- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt +++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/channels/ChannelListFragment.kt @@ -30,12 +30,17 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import io.getstream.chat.android.client.ChatClient +import io.getstream.chat.android.models.InitializationState import io.getstream.chat.android.ui.viewmodel.channels.ChannelListViewModel import io.getstream.chat.android.ui.viewmodel.channels.ChannelListViewModelFactory import io.getstream.chat.android.ui.viewmodel.channels.bindView import io.getstream.whatsappclone.databinding.FragmentChannelListBinding import io.getstream.whatsappclone.ui.home.HomeFragmentDirections +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch class ChannelListFragment : Fragment() { @@ -60,11 +65,17 @@ class ChannelListFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - viewModel.bindView(binding.channelList, viewLifecycleOwner) - binding.channelList.setChannelItemClickListener { channel -> - println("JcLog: cid -> ${channel.cid}") - findNavController().navigate(HomeFragmentDirections.navHomeToChannel(channel.cid)) + lifecycleScope.launch { + ChatClient.instance().clientState.initializationState.collectLatest { + if (it == InitializationState.COMPLETE) { + viewModel.bindView(binding.channelList, viewLifecycleOwner) + binding.channelList.setChannelItemClickListener { channel -> + println("JcLog: cid -> ${channel.cid}") + findNavController().navigate(HomeFragmentDirections.navHomeToChannel(channel.cid)) + } + } + } } } } diff --git a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt index 34f4a589..7a8c8882 100644 --- a/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt +++ b/whatsapp-clone-sample/src/main/kotlin/io/getstream/whatsappclone/ui/messages/MessageListFragment.kt @@ -37,7 +37,6 @@ import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import io.getstream.chat.android.client.ChatClient -import io.getstream.chat.android.state.extensions.globalState import io.getstream.chat.android.ui.ChatUI import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModel import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModel @@ -51,7 +50,7 @@ class MessageListFragment : Fragment() { private val args: MessageListFragmentArgs by navArgs() - private val factory: MessageListViewModelFactory by lazy { MessageListViewModelFactory(args.cid) } + private val factory: MessageListViewModelFactory by lazy { MessageListViewModelFactory(requireContext(), args.cid) } private val messageListHeaderViewModel: MessageListHeaderViewModel by viewModels { factory } private val messageListViewModel: MessageListViewModel by viewModels { factory } private val messageInputViewModel: MessageComposerViewModel by viewModels { factory } @@ -103,7 +102,7 @@ class MessageListFragment : Fragment() { } messageListHeaderViewModel.channel.observe(viewLifecycleOwner) { channel -> - val user = ChatClient.instance().globalState.user.value + val user = ChatClient.instance().clientState.user.value binding.channelNameTextView.text = ChatUI.channelNameFormatter.formatChannelName(channel, user) binding.avatarView.setChannel(channel)