From cc1b24584a39bdb32fc99e4115a3b008cd33e192 Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Tue, 8 Mar 2022 12:24:32 +0200 Subject: [PATCH 01/69] Added MainActivity. Added splashscreen API. Refactored code.| #1274 --- FlowCrypt/build.gradle | 1 + FlowCrypt/src/main/AndroidManifest.xml | 8 ++-- .../jetpack/viewmodel/LauncherViewModel.kt | 33 ++++++++++---- .../email/ui/activity/LauncherActivity.kt | 44 +++++-------------- .../email/ui/activity/MainActivity.kt | 42 ++++++++++++++++++ .../email/ui/activity/base/BaseActivity.kt | 8 ++-- .../res/drawable/splash_screen_background.xml | 16 ------- .../src/main/res/layout/activity_main.xml | 30 +++++++++++++ FlowCrypt/src/main/res/values/themes.xml | 9 +++- 9 files changed, 122 insertions(+), 69 deletions(-) create mode 100644 FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MainActivity.kt delete mode 100644 FlowCrypt/src/main/res/drawable/splash_screen_background.xml create mode 100644 FlowCrypt/src/main/res/layout/activity_main.xml diff --git a/FlowCrypt/build.gradle b/FlowCrypt/build.gradle index da941361b3..51aaaf308e 100644 --- a/FlowCrypt/build.gradle +++ b/FlowCrypt/build.gradle @@ -382,6 +382,7 @@ dependencies { implementation "androidx.paging:paging-runtime-ktx:$pagingVersion" implementation 'androidx.preference:preference-ktx:1.2.0' implementation 'androidx.core:core-ktx:1.7.0' + implementation 'androidx.core:core-splashscreen:1.0.0-beta01' implementation 'androidx.activity:activity-ktx:1.4.0' implementation 'androidx.fragment:fragment-ktx:1.4.1' implementation 'androidx.work:work-runtime-ktx:2.7.1' diff --git a/FlowCrypt/src/main/AndroidManifest.xml b/FlowCrypt/src/main/AndroidManifest.xml index 8f9b9bd5c2..72557b8b96 100644 --- a/FlowCrypt/src/main/AndroidManifest.xml +++ b/FlowCrypt/src/main/AndroidManifest.xml @@ -34,22 +34,22 @@ android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" - android:theme="@style/AppTheme.NoActionBar" + android:theme="@style/AppTheme.Starting" tools:replace="android:allowBackup"> - + android:theme="@style/AppTheme.Starting"> + = MutableLiveData() - val mediatorLiveData = MediatorLiveData() +class LauncherViewModel(application: Application) : AccountViewModel(application) { + private val isLoadingMutableStateFlow = MutableStateFlow(true) + val isLoadingStateFlow = isLoadingMutableStateFlow.asStateFlow() init { - mediatorLiveData.addSource(isAccountInfoReceivedLiveData) { value -> - mediatorLiveData.setValue( - value + viewModelScope.launch { + PreferenceManager.setDefaultValues( + application, + R.xml.preferences_notifications_settings, + false ) + ForwardedAttachmentsDownloaderWorker.enqueue(application) + MessagesSenderWorker.enqueue(application) + FeedbackJobIntentService.enqueueWork(application) + FileAndDirectoryUtils.cleanDir(CacheManager.getCurrentMsgTempDir()) + + isLoadingMutableStateFlow.value = false } } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/LauncherActivity.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/LauncherActivity.kt index 80f033af30..4b201200a7 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/LauncherActivity.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/LauncherActivity.kt @@ -9,12 +9,10 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import android.view.View -import androidx.activity.viewModels import androidx.preference.PreferenceManager import com.flowcrypt.email.Constants import com.flowcrypt.email.R import com.flowcrypt.email.database.entity.AccountEntity -import com.flowcrypt.email.jetpack.viewmodel.LauncherViewModel import com.flowcrypt.email.jetpack.workmanager.ForwardedAttachmentsDownloaderWorker import com.flowcrypt.email.jetpack.workmanager.MessagesSenderWorker import com.flowcrypt.email.service.FeedbackJobIntentService @@ -34,8 +32,6 @@ import com.flowcrypt.email.util.SharedPreferencesHelper * E-mail: DenBond7@gmail.com */ class LauncherActivity : BaseActivity() { - private val launcherViewModel: LauncherViewModel by viewModels() - override val isDisplayHomeAsUpEnabled: Boolean get() = false @@ -46,7 +42,6 @@ class LauncherActivity : BaseActivity() { get() = R.layout.activity_launcher override fun onCreate(savedInstanceState: Bundle?) { - setupLauncherViewModel() super.onCreate(savedInstanceState) PreferenceManager.setDefaultValues(this, R.xml.preferences_notifications_settings, false) ForwardedAttachmentsDownloaderWorker.enqueue(applicationContext) @@ -57,29 +52,18 @@ class LauncherActivity : BaseActivity() { override fun onAccountInfoRefreshed(accountEntity: AccountEntity?) { super.onAccountInfoRefreshed(accountEntity) - launcherViewModel.isAccountInfoReceivedLiveData.value = true - } - - private fun setupLauncherViewModel() { - launcherViewModel.mediatorLiveData.observe(this, { - if (launcherViewModel.isAccountInfoReceivedLiveData.value == true) { - if (isAccountInfoReceived) { - if (activeAccount != null) { - showEmailManagerActivity() - } else { - showSignInActivity() - } - } - } - }) - } - - private fun showSignInActivity() { - startActivity(Intent(this, SignInActivity::class.java)) + if (accountEntity != null) { + checkKeysIfNeeded(accountEntity) + IdleService.start(this) + EmailManagerActivity.runEmailManagerActivity(this) + } else { + startActivity(Intent(this, SignInActivity::class.java)) + } + startActivity(Intent(this, MainActivity::class.java)) finish() } - private fun showEmailManagerActivity() { + private fun checkKeysIfNeeded(accountEntity: AccountEntity) { val isCheckKeysNeeded = SharedPreferencesHelper.getBoolean( PreferenceManager .getDefaultSharedPreferences(this), Constants.PREF_KEY_IS_CHECK_KEYS_NEEDED, true @@ -87,16 +71,8 @@ class LauncherActivity : BaseActivity() { if (isCheckKeysNeeded) { roomBasicViewModel.addActionToQueue( - EncryptPrivateKeysIfNeededAction( - 0, - activeAccount!!.email, - 0 - ) + EncryptPrivateKeysIfNeededAction(0, accountEntity.email, 0) ) } - - IdleService.start(this) - EmailManagerActivity.runEmailManagerActivity(this) - finish() } } diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MainActivity.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MainActivity.kt new file mode 100644 index 0000000000..d6d88af696 --- /dev/null +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/MainActivity.kt @@ -0,0 +1,42 @@ +/* + * © 2016-present FlowCrypt a.s. Limitations apply. Contact human@flowcrypt.com + * Contributors: DenBond7 + */ +package com.flowcrypt.email.ui.activity + +import android.os.Bundle +import android.view.View +import androidx.activity.viewModels +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import com.flowcrypt.email.R +import com.flowcrypt.email.jetpack.viewmodel.LauncherViewModel +import com.flowcrypt.email.ui.activity.base.BaseActivity + +/** + * @author Denis Bondarenko + * Date: 3/8/22 + * Time: 11:13 AM + * E-mail: DenBond7@gmail.com + */ +class MainActivity : BaseActivity() { + private val launcherViewModel: LauncherViewModel by viewModels() + + override val rootView: View + get() = findViewById(R.id.fragmentContainerView) + + override val isDisplayHomeAsUpEnabled: Boolean + get() = false + + override val contentViewResourceId: Int + get() = R.layout.activity_main + + override fun onCreate(savedInstanceState: Bundle?) { + installSplashScreen().apply { + setKeepOnScreenCondition { + launcherViewModel.isLoadingStateFlow.value + } + } + + super.onCreate(savedInstanceState) + } +} diff --git a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/base/BaseActivity.kt b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/base/BaseActivity.kt index 6fdc0eb5c9..8e7c0eba7a 100644 --- a/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/base/BaseActivity.kt +++ b/FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/base/BaseActivity.kt @@ -52,7 +52,6 @@ abstract class BaseActivity : AppCompatActivity() { protected val accountViewModel: AccountViewModel by viewModels() protected val tag: String = javaClass.simpleName protected var activeAccount: AccountEntity? = null - protected var isAccountInfoReceived = false protected lateinit var connectionLifecycleObserver: ConnectionLifecycleObserver val countingIdlingResource: CountingIdlingResource = CountingIdlingResource( @@ -257,11 +256,10 @@ abstract class BaseActivity : AppCompatActivity() { } private fun initAccountViewModel() { - accountViewModel.activeAccountLiveData.observe(this, { + accountViewModel.activeAccountLiveData.observe(this) { activeAccount = it - isAccountInfoReceived = true onAccountInfoRefreshed(activeAccount) - }) + } } private fun initScreenViews() { @@ -271,7 +269,7 @@ abstract class BaseActivity : AppCompatActivity() { private fun setupToolbar() { toolbar = findViewById(R.id.toolbar) - toolbar?.let { setSupportActionBar(it) } + //toolbar?.let { setSupportActionBar(it) } supportActionBar?.setDisplayHomeAsUpEnabled(isDisplayHomeAsUpEnabled) } } diff --git a/FlowCrypt/src/main/res/drawable/splash_screen_background.xml b/FlowCrypt/src/main/res/drawable/splash_screen_background.xml deleted file mode 100644 index 79eff794b2..0000000000 --- a/FlowCrypt/src/main/res/drawable/splash_screen_background.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - diff --git a/FlowCrypt/src/main/res/layout/activity_main.xml b/FlowCrypt/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000000..fce8cd1d5b --- /dev/null +++ b/FlowCrypt/src/main/res/layout/activity_main.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/FlowCrypt/src/main/res/values/themes.xml b/FlowCrypt/src/main/res/values/themes.xml index d23b2f251e..3e162a96f0 100644 --- a/FlowCrypt/src/main/res/values/themes.xml +++ b/FlowCrypt/src/main/res/values/themes.xml @@ -21,7 +21,12 @@ true - From 8cce35d7582ca83648f5ff6f16ae9ea51645d75d Mon Sep 17 00:00:00 2001 From: DenBond7 Date: Tue, 8 Mar 2022 17:45:12 +0200 Subject: [PATCH 02/69] Added UiUxSettings.| #1193 --- FlowCrypt/src/main/AndroidManifest.xml | 8 --- .../email/ui/activity/base/BaseActivity.kt | 4 +- .../ui/activity/fragment/base/BaseFragment.kt | 4 +- .../fragment/base/BaseSingInFragment.kt | 3 ++ .../ui/activity/fragment/base/UiUxSettings.kt | 17 ++++++ .../src/main/res/navigation/nav_graph.xml | 53 ++++++++++++++++++- FlowCrypt/src/main/res/values/themes.xml | 2 + 7 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 FlowCrypt/src/main/java/com/flowcrypt/email/ui/activity/fragment/base/UiUxSettings.kt diff --git a/FlowCrypt/src/main/AndroidManifest.xml b/FlowCrypt/src/main/AndroidManifest.xml index 72557b8b96..86d9ccd716 100644 --- a/FlowCrypt/src/main/AndroidManifest.xml +++ b/FlowCrypt/src/main/AndroidManifest.xml @@ -52,14 +52,6 @@ - - - - + app:startDestination="@id/mainSignInFragment"> + + + + + + + + + + + + + + + + + + + @style/PreferenceThemeOverlay.v14.Material true @style/AppWidget.ActionMode + false + true