Skip to content
Snippets Groups Projects
Commit 113aecc0 authored by Kamal Bramwell's avatar Kamal Bramwell
Browse files

Merge branch 'FE-956_loading_screen' into 'development'

FE-956: Components initializing screen

See merge request elixxir/client-android!73
parents 444f8eec bd1addbd
No related branches found
No related tags found
3 merge requests!84Version 2.92 build 629,!77v2.9 b627,!73FE-956: Components initializing screen
...@@ -11,6 +11,7 @@ import android.graphics.Color ...@@ -11,6 +11,7 @@ import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import android.widget.ProgressBar
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
...@@ -50,11 +51,13 @@ import io.xxlabs.messenger.ui.base.BaseFragment ...@@ -50,11 +51,13 @@ import io.xxlabs.messenger.ui.base.BaseFragment
import io.xxlabs.messenger.ui.global.BaseInstance import io.xxlabs.messenger.ui.global.BaseInstance
import io.xxlabs.messenger.ui.global.ContactsViewModel import io.xxlabs.messenger.ui.global.ContactsViewModel
import io.xxlabs.messenger.ui.global.NetworkViewModel 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.ChatsFragment
import io.xxlabs.messenger.ui.main.chats.ChatsViewModel import io.xxlabs.messenger.ui.main.chats.ChatsViewModel
import io.xxlabs.messenger.ui.main.contacts.PhotoSelectorFragment import io.xxlabs.messenger.ui.main.contacts.PhotoSelectorFragment
import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.component_menu.* import kotlinx.android.synthetic.main.component_menu.*
import kotlinx.android.synthetic.main.fragment_delete_account.*
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
import timber.log.Timber import timber.log.Timber
...@@ -84,6 +87,7 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv ...@@ -84,6 +87,7 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv
var isBackBtnAllowed = true var isBackBtnAllowed = true
var isMenuOpened = false var isMenuOpened = false
private val intentQueue: MutableList<Intent> = mutableListOf()
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
...@@ -163,7 +167,9 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv ...@@ -163,7 +167,9 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv
handleIntent(intent) handleIntent(intent)
} }
private fun handleIntent(intent: Intent) { private fun handleIntent(intent: Intent) {
if (mainViewModel.areComponentsInitialized.value == true) {
intent.getBundleExtra(INTENT_NOTIFICATION_CLICK)?.let { intent.getBundleExtra(INTENT_NOTIFICATION_CLICK)?.let {
// PendingIntent from notifications // PendingIntent from notifications
handleNotification(it) handleNotification(it)
...@@ -175,6 +181,9 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv ...@@ -175,6 +181,9 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv
invitationIntent(username) invitationIntent(username)
return return
} }
} else {
intentQueue.add(intent)
}
} }
private fun invitationIntent(username: String) { private fun invitationIntent(username: String) {
...@@ -417,6 +426,17 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv ...@@ -417,6 +426,17 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv
} }
private fun observeUI() { private fun observeUI() {
mainViewModel.areComponentsInitialized.observe(this) { ready ->
enableUi(ready)
if (ready) {
// LIFO ordering.
intentQueue.removeLastOrNull()?.run {
handleIntent(this)
}
}
}
contactsViewModel.showToast.onEach { toast -> contactsViewModel.showToast.onEach { toast ->
toast?.let { toast?.let {
showCustomToast(toast) showCustomToast(toast)
...@@ -446,6 +466,11 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv ...@@ -446,6 +466,11 @@ class MainActivity : MediaProviderActivity(), SnackBarActivity, CustomToastActiv
} }
} }
private fun enableUi(enabled: Boolean) {
initializingBackground?.setVisibility(!enabled)
initializingProgressBar?.setVisibility(!enabled)
}
private fun dismissNetworkStatusMessage() { private fun dismissNetworkStatusMessage() {
for (status in cachedNetworkStatus) { for (status in cachedNetworkStatus) {
dismissIndefiniteToast(status) dismissIndefiniteToast(status)
......
package io.xxlabs.messenger.ui.main package io.xxlabs.messenger.ui.main
import android.content.Context import android.content.Context
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
...@@ -54,6 +55,9 @@ class MainViewModel @Inject constructor( ...@@ -54,6 +55,9 @@ class MainViewModel @Inject constructor(
private var isLoggingIn: Boolean = false private var isLoggingIn: Boolean = false
private var hasManagerStarted: Boolean = false private var hasManagerStarted: Boolean = false
val areComponentsInitialized: LiveData<Boolean> by ::_areComponentsInitialized
private val _areComponentsInitialized = MutableLiveData(false)
@Volatile @Volatile
var wasLoggedIn = false var wasLoggedIn = false
...@@ -331,6 +335,7 @@ class MainViewModel @Inject constructor( ...@@ -331,6 +335,7 @@ class MainViewModel @Inject constructor(
wasLoggedIn = true wasLoggedIn = true
enableDummyTraffic(preferences.isCoverTrafficOn) enableDummyTraffic(preferences.isCoverTrafficOn)
loginProcess.postValue(DataRequestState.Success(true)) loginProcess.postValue(DataRequestState.Success(true))
_areComponentsInitialized.value = true
} else { } else {
loginProcess.postValue(DataRequestState.Error(err)) loginProcess.postValue(DataRequestState.Error(err))
} }
......
<?xml version="1.0" encoding="utf-8"?> <?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:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mainLayout" android:id="@+id/mainLayout"
...@@ -10,12 +11,21 @@ ...@@ -10,12 +11,21 @@
<include <include
android:id="@+id/mainMenuView" android:id="@+id/mainMenuView"
layout="@layout/component_menu" 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 <androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent" android:id="@+id/contentCoordinatorLayout"
android:layout_height="match_parent" android:layout_width="0dp"
android:layout_height="0dp"
android:focusable="true" 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"> tools:context=".ui.main.MainActivity">
<com.google.android.material.card.MaterialCardView <com.google.android.material.card.MaterialCardView
...@@ -46,13 +56,44 @@ ...@@ -46,13 +56,44 @@
</com.google.android.material.card.MaterialCardView> </com.google.android.material.card.MaterialCardView>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </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 <ImageView
android:id="@+id/mainBlurryImg" android:id="@+id/mainBlurryImg"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="0dp"
android:src="@drawable/bg_white" android:src="@drawable/bg_white"
android:translationZ="@dimen/spacing_10" 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 <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/mainReportBtn" android:id="@+id/mainReportBtn"
...@@ -64,5 +105,7 @@ ...@@ -64,5 +105,7 @@
android:layout_marginBottom="@dimen/spacing_30" android:layout_marginBottom="@dimen/spacing_30"
android:src="@drawable/ic_bug_report" android:src="@drawable/ic_bug_report"
android:visibility="gone" android:visibility="gone"
android:tint="@color/white" /> android:tint="@color/white"
</RelativeLayout> app:layout_constraintEnd_toEndOf="parent"
\ No newline at end of file app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment