Skip to content

Commit a3e1839

Browse files
authored
Merge pull request #1650 from Infomaniak/bars-color
Fix wrong SystemBars colors
2 parents 41123f0 + 4351f55 commit a3e1839

36 files changed

+204
-180
lines changed

.idea/navEditor.xml

+55-55
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/infomaniak/mail/ui/MainActivity.kt

+1-34
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ class MainActivity : BaseActivity() {
306306
)
307307
}
308308

309-
// Still display the snackbar even if it took three times 10 seconds of timeout to succeed
309+
// Still display the Snackbar even if it took three times 10 seconds of timeout to succeed
310310
private fun showSentDraftSnackbar() {
311311
showSendingSnackbarTimer.cancel()
312312
snackbarManager.setValue(getString(R.string.snackbarEmailSent))
@@ -433,45 +433,12 @@ class MainActivity : BaseActivity() {
433433
// This `SuppressLint` seems useless, but it's for the CI. Don't remove it.
434434
@SuppressLint("RestrictedApi")
435435
private fun onDestinationChanged(destination: NavDestination, arguments: Bundle?) {
436-
437436
SentryDebug.addNavigationBreadcrumb(destination.displayName, arguments)
438437
trackDestination(destination)
439-
440-
updateColorsWhenDestinationChanged(destination.id)
441438
setDrawerLockMode(isLocked = destination.id != R.id.threadListFragment)
442-
443439
previousDestinationId = destination.id
444440
}
445441

446-
private fun updateColorsWhenDestinationChanged(destinationId: Int) {
447-
448-
when (destinationId) {
449-
R.id.junkBottomSheetDialog,
450-
R.id.messageActionsBottomSheetDialog,
451-
R.id.replyBottomSheetDialog,
452-
R.id.detailedContactBottomSheetDialog,
453-
R.id.threadActionsBottomSheetDialog,
454-
R.id.attachmentActionsBottomSheetDialog,
455-
R.id.downloadAttachmentProgressDialog,
456-
R.id.attendeesBottomSheetDialog -> null
457-
R.id.searchFragment -> R.color.backgroundColor
458-
else -> R.color.backgroundHeaderColor
459-
}?.let { statusBarColor ->
460-
window.statusBarColor = getColor(statusBarColor)
461-
}
462-
463-
when (destinationId) {
464-
R.id.messageActionsBottomSheetDialog,
465-
R.id.replyBottomSheetDialog,
466-
R.id.detailedContactBottomSheetDialog,
467-
R.id.threadActionsBottomSheetDialog -> R.color.backgroundColorSecondary
468-
R.id.threadListFragment -> if (mainViewModel.isMultiSelectOn) R.color.elevatedBackground else R.color.backgroundColor
469-
else -> R.color.backgroundColor
470-
}.let { navigationBarColor ->
471-
window.updateNavigationBarColor(getColor(navigationBarColor))
472-
}
473-
}
474-
475442
fun setDrawerLockMode(isLocked: Boolean) {
476443
val drawerLockMode = if (isLocked) DrawerLayout.LOCK_MODE_LOCKED_CLOSED else DrawerLayout.LOCK_MODE_UNLOCKED
477444
binding.drawerLayout.setDrawerLockMode(drawerLockMode)

app/src/main/java/com/infomaniak/mail/ui/login/NewAccountFragment.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import androidx.core.content.res.ResourcesCompat
2828
import androidx.fragment.app.Fragment
2929
import androidx.fragment.app.activityViewModels
3030
import com.infomaniak.lib.core.utils.SnackbarUtils.showSnackbar
31-
import com.infomaniak.lib.core.utils.context
3231
import com.infomaniak.lib.core.utils.safeBinding
3332
import com.infomaniak.lib.login.InfomaniakLogin
3433
import com.infomaniak.mail.BuildConfig
@@ -39,6 +38,7 @@ import com.infomaniak.mail.databinding.FragmentNewAccountBinding
3938
import com.infomaniak.mail.di.IoDispatcher
4039
import com.infomaniak.mail.di.MainDispatcher
4140
import com.infomaniak.mail.utils.LoginUtils
41+
import com.infomaniak.mail.utils.setSystemBarsColors
4242
import dagger.hilt.android.AndroidEntryPoint
4343
import kotlinx.coroutines.CoroutineDispatcher
4444
import javax.inject.Inject
@@ -81,7 +81,7 @@ class NewAccountFragment : Fragment() {
8181

8282
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) {
8383
super.onViewCreated(view, savedInstanceState)
84-
requireActivity().window.statusBarColor = context.getColor(R.color.backgroundColor)
84+
setSystemBarsColors(statusBarColor = R.color.backgroundColor)
8585

8686
selectIllustrationAccordingToTheme()
8787

app/src/main/java/com/infomaniak/mail/ui/main/folder/ThreadListFragment.kt

+4-12
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
*/
1818
package com.infomaniak.mail.ui.main.folder
1919

20-
import android.content.res.Configuration
2120
import android.os.Bundle
2221
import android.os.CountDownTimer
2322
import android.text.format.DateUtils
@@ -133,6 +132,10 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen
133132
navigateFromNotificationToNewMessage()
134133

135134
super.onViewCreated(view, savedInstanceState)
135+
setSystemBarsColors(
136+
statusBarColor = R.color.backgroundHeaderColor,
137+
navigationBarColor = if (mainViewModel.isMultiSelectOn) R.color.elevatedBackground else R.color.backgroundColor,
138+
)
136139

137140
threadListViewModel.deleteSearchData()
138141
bindAlertToViewLifecycle(descriptionDialog)
@@ -225,17 +228,6 @@ class ThreadListFragment : TwoPaneFragment(), SwipeRefreshLayout.OnRefreshListen
225228
canRefreshThreads = true
226229
}
227230

228-
override fun onConfigurationChanged(newConfig: Configuration) {
229-
super.onConfigurationChanged(newConfig)
230-
231-
val statusBarColor = if (twoPaneViewModel.isThreadOpen && !canDisplayBothPanes()) {
232-
R.color.backgroundColor
233-
} else {
234-
R.color.backgroundHeaderColor
235-
}
236-
requireActivity().window.statusBarColor = requireContext().getColor(statusBarColor)
237-
}
238-
239231
private fun refreshThreadsIfNotificationsAreDisabled() = with(mainViewModel) {
240232
val areGoogleServicesDisabled = !playServicesUtils.areGooglePlayServicesAvailable()
241233
val areAppNotifsDisabled = !notificationManagerCompat.areNotificationsEnabled()

app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneFragment.kt

+11-9
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ import com.infomaniak.mail.utils.AttachmentIntentUtils
3838
import com.infomaniak.mail.utils.UiUtils.FULLY_SLID
3939
import com.infomaniak.mail.utils.UiUtils.progressivelyColorSystemBars
4040
import com.infomaniak.mail.utils.safeNavigateToNewMessageActivity
41-
import com.infomaniak.mail.utils.updateNavigationBarColor
41+
import com.infomaniak.mail.utils.setSystemBarsColors
4242
import javax.inject.Inject
4343

4444
abstract class TwoPaneFragment : Fragment() {
4545

4646
val mainViewModel: MainViewModel by activityViewModels()
47-
val twoPaneViewModel: TwoPaneViewModel by activityViewModels()
47+
protected val twoPaneViewModel: TwoPaneViewModel by activityViewModels()
4848

4949
protected abstract val slidingPaneLayout: NoAnimSlidingPaneLayout
5050

@@ -120,8 +120,8 @@ abstract class TwoPaneFragment : Fragment() {
120120
twoPaneViewModel.currentThreadUid.observe(viewLifecycleOwner) { threadUid ->
121121
val isOpeningThread = threadUid != null
122122
if (isOpeningThread) {
123-
val hasPaneOpened = slidingPaneLayout.openPaneNoAnimation()
124-
if (hasPaneOpened) requireActivity().window.statusBarColor = requireContext().getColor(R.color.backgroundColor)
123+
val hasOpened = slidingPaneLayout.openPaneNoAnimation()
124+
if (hasOpened) setSystemBarsColors(statusBarColor = R.color.backgroundColor, navigationBarColor = null)
125125
} else {
126126
resetPanes()
127127
}
@@ -157,13 +157,15 @@ abstract class TwoPaneFragment : Fragment() {
157157
}
158158
}
159159

160-
private fun resetPanes() = with(requireActivity()) {
160+
private fun resetPanes() {
161161

162-
val isClosing = slidingPaneLayout.closePaneNoAnimation()
162+
val hasClosed = slidingPaneLayout.closePaneNoAnimation()
163163

164-
if (isClosing) {
165-
if (this@TwoPaneFragment is ThreadListFragment) window.statusBarColor = getColor(R.color.backgroundHeaderColor)
166-
window.updateNavigationBarColor(getColor(R.color.backgroundColor))
164+
if (hasClosed) {
165+
setSystemBarsColors(
166+
statusBarColor = if (this@TwoPaneFragment is ThreadListFragment) R.color.backgroundHeaderColor else null,
167+
navigationBarColor = R.color.backgroundColor,
168+
)
167169
}
168170

169171
threadListAdapter.selectNewThread(newPosition = null, threadUid = null)

app/src/main/java/com/infomaniak/mail/ui/main/folder/TwoPaneViewModel.kt

+4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*/
1818
package com.infomaniak.mail.ui.main.folder
1919

20+
import android.content.Context
2021
import android.net.Uri
2122
import android.os.Bundle
2223
import androidx.annotation.IdRes
@@ -31,6 +32,7 @@ import com.infomaniak.mail.data.models.message.Message
3132
import com.infomaniak.mail.data.models.thread.Thread
3233
import com.infomaniak.mail.ui.newMessage.NewMessageActivityArgs
3334
import com.infomaniak.mail.utils.Utils.runCatchingRealm
35+
import com.infomaniak.mail.utils.canDisplayBothPanes
3436
import dagger.hilt.android.lifecycle.HiltViewModel
3537
import javax.inject.Inject
3638

@@ -92,6 +94,8 @@ class TwoPaneViewModel @Inject constructor(
9294
)
9395
}
9496

97+
fun isInThreadInPhoneMode(context: Context): Boolean = isThreadOpen && !context.canDisplayBothPanes()
98+
9599
data class NavData(
96100
@IdRes val resId: Int,
97101
val args: Bundle,

app/src/main/java/com/infomaniak/mail/ui/main/menu/MoveFragment.kt

+3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import com.infomaniak.mail.data.models.Folder.FolderRole
4040
import com.infomaniak.mail.databinding.FragmentMoveBinding
4141
import com.infomaniak.mail.utils.handleEditorSearchAction
4242
import com.infomaniak.mail.utils.setOnClearTextClickListener
43+
import com.infomaniak.mail.utils.setSystemBarsColors
4344
import dagger.hilt.android.AndroidEntryPoint
4445
import javax.inject.Inject
4546

@@ -72,6 +73,8 @@ class MoveFragment : MenuFoldersFragment() {
7273

7374
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
7475
super.onViewCreated(view, savedInstanceState)
76+
setSystemBarsColors()
77+
7578
setupListeners()
7679
setupFolderAdapters()
7780
setupCreateFolderDialog()

app/src/main/java/com/infomaniak/mail/ui/main/search/SearchFragment.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,8 @@ import com.infomaniak.mail.ui.main.NoAnimSlidingPaneLayout
5151
import com.infomaniak.mail.ui.main.folder.TwoPaneFragment
5252
import com.infomaniak.mail.ui.main.search.SearchFolderAdapter.SearchFolderElement
5353
import com.infomaniak.mail.ui.main.thread.ThreadFragment
54+
import com.infomaniak.mail.utils.*
5455
import com.infomaniak.mail.utils.RealmChangesBinding.Companion.bindResultsChangeToAdapter
55-
import com.infomaniak.mail.utils.addStickyDateDecoration
56-
import com.infomaniak.mail.utils.getLocalizedNameOrAllFolders
57-
import com.infomaniak.mail.utils.handleEditorSearchAction
58-
import com.infomaniak.mail.utils.setOnClearTextClickListener
5956
import dagger.hilt.android.AndroidEntryPoint
6057
import javax.inject.Inject
6158

@@ -102,6 +99,7 @@ class SearchFragment : TwoPaneFragment() {
10299

103100
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
104101
super.onViewCreated(view, savedInstanceState)
102+
setSystemBarsColors(statusBarColor = R.color.backgroundColor)
105103

106104
searchViewModel.executePendingSearch()
107105

app/src/main/java/com/infomaniak/mail/ui/main/settings/AccentColorSettingFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.infomaniak.mail.data.LocalSettings
3333
import com.infomaniak.mail.data.LocalSettings.AccentColor
3434
import com.infomaniak.mail.data.LocalSettings.AccentColor.*
3535
import com.infomaniak.mail.databinding.FragmentAccentColorSettingBinding
36+
import com.infomaniak.mail.utils.setSystemBarsColors
3637
import dagger.hilt.android.AndroidEntryPoint
3738
import javax.inject.Inject
3839

@@ -50,6 +51,7 @@ class AccentColorSettingFragment : Fragment() {
5051

5152
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding.radioGroup) {
5253
super.onViewCreated(view, savedInstanceState)
54+
setSystemBarsColors()
5355

5456
setSystemAccentUi()
5557

app/src/main/java/com/infomaniak/mail/ui/main/settings/ExternalContentSettingFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import com.infomaniak.mail.data.LocalSettings.ExternalContent
3030
import com.infomaniak.mail.data.LocalSettings.ExternalContent.ALWAYS
3131
import com.infomaniak.mail.data.LocalSettings.ExternalContent.ASK_ME
3232
import com.infomaniak.mail.databinding.FragmentExternalContentSettingBinding
33+
import com.infomaniak.mail.utils.setSystemBarsColors
3334
import dagger.hilt.android.AndroidEntryPoint
3435
import javax.inject.Inject
3536

@@ -47,6 +48,7 @@ class ExternalContentSettingFragment : Fragment() {
4748

4849
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding.radioGroup) {
4950
super.onViewCreated(view, savedInstanceState)
51+
setSystemBarsColors()
5052

5153
initBijectionTable(
5254
R.id.always to ALWAYS,

app/src/main/java/com/infomaniak/mail/ui/main/settings/SettingsFragment.kt

+3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import com.infomaniak.mail.ui.MainViewModel
4040
import com.infomaniak.mail.utils.animatedNavigation
4141
import com.infomaniak.mail.utils.launchSyncAutoConfigActivityForResult
4242
import com.infomaniak.mail.utils.observeNotNull
43+
import com.infomaniak.mail.utils.setSystemBarsColors
4344
import dagger.hilt.android.AndroidEntryPoint
4445
import javax.inject.Inject
4546

@@ -58,6 +59,8 @@ class SettingsFragment : Fragment() {
5859

5960
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
6061
super.onViewCreated(view, savedInstanceState)
62+
setSystemBarsColors()
63+
6164
setupMailboxesAdapter()
6265
setupListeners()
6366
setSubtitlesInitialState()

app/src/main/java/com/infomaniak/mail/ui/main/settings/ThemeSettingFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.infomaniak.mail.data.LocalSettings
3232
import com.infomaniak.mail.data.LocalSettings.Theme
3333
import com.infomaniak.mail.data.LocalSettings.Theme.*
3434
import com.infomaniak.mail.databinding.FragmentThemeSettingBinding
35+
import com.infomaniak.mail.utils.setSystemBarsColors
3536
import dagger.hilt.android.AndroidEntryPoint
3637
import javax.inject.Inject
3738

@@ -49,6 +50,7 @@ class ThemeSettingFragment : Fragment() {
4950

5051
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding.radioGroup) {
5152
super.onViewCreated(view, savedInstanceState)
53+
setSystemBarsColors()
5254

5355
setSystemThemeVisibility()
5456

app/src/main/java/com/infomaniak/mail/ui/main/settings/ThreadListDensitySettingFragment.kt

+3
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.infomaniak.mail.R
2828
import com.infomaniak.mail.data.LocalSettings
2929
import com.infomaniak.mail.data.LocalSettings.ThreadDensity.*
3030
import com.infomaniak.mail.databinding.FragmentThreadListDensitySettingBinding
31+
import com.infomaniak.mail.utils.setSystemBarsColors
3132
import dagger.hilt.android.AndroidEntryPoint
3233
import javax.inject.Inject
3334

@@ -45,6 +46,8 @@ class ThreadListDensitySettingFragment : Fragment() {
4546

4647
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4748
super.onViewCreated(view, savedInstanceState)
49+
setSystemBarsColors()
50+
4851
initUi()
4952
}
5053

app/src/main/java/com/infomaniak/mail/ui/main/settings/ThreadModeSettingFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.infomaniak.mail.data.LocalSettings.ThreadMode.MESSAGE
3333
import com.infomaniak.mail.databinding.FragmentThreadModeSettingBinding
3434
import com.infomaniak.mail.ui.alertDialogs.DescriptionAlertDialog
3535
import com.infomaniak.mail.utils.bindAlertToViewLifecycle
36+
import com.infomaniak.mail.utils.setSystemBarsColors
3637
import dagger.hilt.android.AndroidEntryPoint
3738
import javax.inject.Inject
3839

@@ -54,6 +55,7 @@ class ThreadModeSettingFragment : Fragment() {
5455

5556
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding.radioGroup) {
5657
super.onViewCreated(view, savedInstanceState)
58+
setSystemBarsColors()
5759

5860
initBijectionTable(
5961
R.id.conversationMode to CONVERSATION,

app/src/main/java/com/infomaniak/mail/ui/main/settings/mailbox/MailboxSettingsFragment.kt

+3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.infomaniak.mail.databinding.FragmentMailboxSettingsBinding
2929
import com.infomaniak.mail.ui.main.settings.ItemSettingView
3030
import com.infomaniak.mail.utils.animatedNavigation
3131
import com.infomaniak.mail.utils.notYetImplemented
32+
import com.infomaniak.mail.utils.setSystemBarsColors
3233

3334
class MailboxSettingsFragment : Fragment() {
3435

@@ -41,6 +42,8 @@ class MailboxSettingsFragment : Fragment() {
4142

4243
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4344
super.onViewCreated(view, savedInstanceState)
45+
setSystemBarsColors()
46+
4447
binding.root.setTitle(navigationArgs.mailboxEmail)
4548
setSubtitlesInitialState()
4649
setupListeners()

app/src/main/java/com/infomaniak/mail/ui/main/settings/mailbox/SignatureSettingFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.infomaniak.lib.core.utils.safeBinding
2828
import com.infomaniak.mail.data.models.mailbox.Mailbox
2929
import com.infomaniak.mail.data.models.signature.Signature
3030
import com.infomaniak.mail.databinding.FragmentSignatureSettingBinding
31+
import com.infomaniak.mail.utils.setSystemBarsColors
3132
import dagger.hilt.android.AndroidEntryPoint
3233
import io.realm.kotlin.ext.copyFromRealm
3334

@@ -45,6 +46,7 @@ class SignatureSettingFragment : Fragment() {
4546

4647
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(signatureSettingViewModel) {
4748
super.onViewCreated(view, savedInstanceState)
49+
setSystemBarsColors()
4850

4951
setupAdapter(mailbox)
5052

app/src/main/java/com/infomaniak/mail/ui/main/settings/swipe/AiEngineSettingFragment.kt

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import com.infomaniak.lib.core.utils.safeBinding
2626
import com.infomaniak.mail.databinding.FragmentAiEngineSettingBinding
2727
import com.infomaniak.mail.databinding.LayoutAiEngineChoiceBinding
2828
import com.infomaniak.mail.utils.SharedUtils
29+
import com.infomaniak.mail.utils.setSystemBarsColors
2930
import dagger.hilt.android.AndroidEntryPoint
3031
import javax.inject.Inject
3132

@@ -46,6 +47,8 @@ class AiEngineSettingFragment : Fragment() {
4647

4748
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4849
super.onViewCreated(view, savedInstanceState)
50+
setSystemBarsColors()
51+
4952
sharedUtils.manageAiEngineSettings(this, choiceBinding.radioGroup, "settingsAiEngine")
5053
}
5154
}

app/src/main/java/com/infomaniak/mail/ui/main/settings/swipe/SwipeActionsSelectionSettingFragment.kt

+2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import com.infomaniak.mail.data.LocalSettings
3232
import com.infomaniak.mail.data.LocalSettings.SwipeAction
3333
import com.infomaniak.mail.data.LocalSettings.SwipeAction.*
3434
import com.infomaniak.mail.databinding.FragmentSwipeActionsSelectionSettingBinding
35+
import com.infomaniak.mail.utils.setSystemBarsColors
3536
import dagger.hilt.android.AndroidEntryPoint
3637
import javax.inject.Inject
3738

@@ -50,6 +51,7 @@ class SwipeActionsSelectionSettingFragment : Fragment() {
5051

5152
override fun onViewCreated(view: View, savedInstanceState: Bundle?): Unit = with(binding) {
5253
super.onViewCreated(view, savedInstanceState)
54+
setSystemBarsColors()
5355

5456
val actionResId = navigationArgs.titleResId
5557
root.setTitle(actionResId)

0 commit comments

Comments
 (0)