From bd1addbd913d2d02ae304ef4aabf75095ff00235 Mon Sep 17 00:00:00 2001 From: Kamal Bramwell <kamal@elixxir.io> Date: Tue, 9 Aug 2022 01:44:13 +0000 Subject: [PATCH] FE-956: Components initializing screen --- .../xxlabs/messenger/ui/main/MainActivity.kt | 43 ++++++++++--- .../xxlabs/messenger/ui/main/MainViewModel.kt | 5 ++ app/src/main/res/layout/activity_main.xml | 61 ++++++++++++++++--- 3 files changed, 91 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/io/xxlabs/messenger/ui/main/MainActivity.kt b/app/src/main/java/io/xxlabs/messenger/ui/main/MainActivity.kt index 64a04e94..e6edbd54 100755 --- a/app/src/main/java/io/xxlabs/messenger/ui/main/MainActivity.kt +++ b/app/src/main/java/io/xxlabs/messenger/ui/main/MainActivity.kt @@ -11,6 +11,7 @@ import android.graphics.Color import android.os.Bundle import android.view.* import android.view.inputmethod.InputMethodManager +import android.widget.ProgressBar import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.core.os.bundleOf import androidx.core.view.WindowInsetsCompat @@ -50,11 +51,13 @@ import io.xxlabs.messenger.ui.base.BaseFragment import io.xxlabs.messenger.ui.global.BaseInstance import io.xxlabs.messenger.ui.global.ContactsViewModel import io.xxlabs.messenger.ui.global.NetworkViewModel +import io.xxlabs.messenger.ui.main.chat.setVisibility import io.xxlabs.messenger.ui.main.chats.ChatsFragment import io.xxlabs.messenger.ui.main.chats.ChatsViewModel import io.xxlabs.messenger.ui.main.contacts.PhotoSelectorFragment import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.component_menu.* +import kotlinx.android.synthetic.main.fragment_delete_account.* import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber @@ -84,6 +87,7 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv var isBackBtnAllowed = true var isMenuOpened = false + private val intentQueue: MutableList<Intent> = mutableListOf() override fun onStart() { super.onStart() @@ -163,17 +167,22 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv handleIntent(intent) } + private fun handleIntent(intent: Intent) { - intent.getBundleExtra(INTENT_NOTIFICATION_CLICK)?.let { - // PendingIntent from notifications - handleNotification(it) - return - } + if (mainViewModel.areComponentsInitialized.value == true) { + intent.getBundleExtra(INTENT_NOTIFICATION_CLICK)?.let { + // PendingIntent from notifications + handleNotification(it) + return + } - intent.getStringExtra(INTENT_INVITATION)?.let { username -> - // Implicit intent from an invitation link - invitationIntent(username) - return + intent.getStringExtra(INTENT_INVITATION)?.let { username -> + // Implicit intent from an invitation link + invitationIntent(username) + return + } + } else { + intentQueue.add(intent) } } @@ -417,6 +426,17 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv } private fun observeUI() { + mainViewModel.areComponentsInitialized.observe(this) { ready -> + enableUi(ready) + + if (ready) { + // LIFO ordering. + intentQueue.removeLastOrNull()?.run { + handleIntent(this) + } + } + } + contactsViewModel.showToast.onEach { toast -> toast?.let { showCustomToast(toast) @@ -446,6 +466,11 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv } } + private fun enableUi(enabled: Boolean) { + initializingBackground?.setVisibility(!enabled) + initializingProgressBar?.setVisibility(!enabled) + } + private fun dismissNetworkStatusMessage() { for (status in cachedNetworkStatus) { dismissIndefiniteToast(status) diff --git a/app/src/main/java/io/xxlabs/messenger/ui/main/MainViewModel.kt b/app/src/main/java/io/xxlabs/messenger/ui/main/MainViewModel.kt index 52cfd7bd..92ea8eaf 100644 --- a/app/src/main/java/io/xxlabs/messenger/ui/main/MainViewModel.kt +++ b/app/src/main/java/io/xxlabs/messenger/ui/main/MainViewModel.kt @@ -1,6 +1,7 @@ package io.xxlabs.messenger.ui.main import android.content.Context +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -54,6 +55,9 @@ class MainViewModel @Inject constructor( private var isLoggingIn: Boolean = false private var hasManagerStarted: Boolean = false + val areComponentsInitialized: LiveData<Boolean> by ::_areComponentsInitialized + private val _areComponentsInitialized = MutableLiveData(false) + @Volatile var wasLoggedIn = false @@ -331,6 +335,7 @@ class MainViewModel @Inject constructor( wasLoggedIn = true enableDummyTraffic(preferences.isCoverTrafficOn) loginProcess.postValue(DataRequestState.Success(true)) + _areComponentsInitialized.value = true } else { loginProcess.postValue(DataRequestState.Error(err)) } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 07c988ad..31c1f066 100755 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +<androidx.constraintlayout.widget.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" @@ -10,12 +11,21 @@ <include android:id="@+id/mainMenuView" layout="@layout/component_menu" - android:visibility="gone" /> + android:visibility="gone" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> <androidx.coordinatorlayout.widget.CoordinatorLayout - android:layout_width="match_parent" - android:layout_height="match_parent" + android:id="@+id/contentCoordinatorLayout" + android:layout_width="0dp" + android:layout_height="0dp" android:focusable="true" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" tools:context=".ui.main.MainActivity"> <com.google.android.material.card.MaterialCardView @@ -46,13 +56,44 @@ </com.google.android.material.card.MaterialCardView> </androidx.coordinatorlayout.widget.CoordinatorLayout> + <View + android:id="@+id/initializingBackground" + android:layout_width="0dp" + android:layout_height="0dp" + android:visibility="visible" + android:background="@drawable/bg_splash_screen" + android:clickable="true" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + tools:visibility="visible"/> + + <ProgressBar + android:id="@+id/initializingProgressBar" + style="@style/XxProgressBarCircularBlue" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:indeterminate="true" + android:indeterminateTint="@color/neutral_off_white" + android:visibility="visible" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintVertical_bias="0.80" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + <ImageView android:id="@+id/mainBlurryImg" - android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_width="0dp" + android:layout_height="0dp" android:src="@drawable/bg_white" android:translationZ="@dimen/spacing_10" - android:visibility="gone" /> + android:visibility="gone" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" /> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/mainReportBtn" @@ -64,5 +105,7 @@ android:layout_marginBottom="@dimen/spacing_30" android:src="@drawable/ic_bug_report" android:visibility="gone" - android:tint="@color/white" /> -</RelativeLayout> \ No newline at end of file + android:tint="@color/white" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toBottomOf="parent"/> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file -- GitLab