Skip to content

Commit e031bdc

Browse files
authored
chore: Remove statusBar and navigationBar color (#2656)
2 parents 253fac7 + 17abd2c commit e031bdc

File tree

58 files changed

+66
-407
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+66
-407
lines changed

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

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import androidx.activity.addCallback
2828
import androidx.activity.enableEdgeToEdge
2929
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
3030
import androidx.activity.viewModels
31-
import androidx.annotation.FloatRange
3231
import androidx.core.app.NotificationManagerCompat
3332
import androidx.core.view.isVisible
3433
import androidx.core.view.updatePadding
@@ -83,8 +82,6 @@ import com.infomaniak.mail.utils.NotificationUtils.Companion.GENERIC_NEW_MAILS_N
8382
import com.infomaniak.mail.utils.PermissionUtils
8483
import com.infomaniak.mail.utils.PlayServicesUtils
8584
import com.infomaniak.mail.utils.SentryDebug
86-
import com.infomaniak.mail.utils.UiUtils
87-
import com.infomaniak.mail.utils.UiUtils.progressivelyColorSystemBars
8885
import com.infomaniak.mail.utils.Utils.Shortcuts
8986
import com.infomaniak.mail.utils.Utils.openShortcutHelp
9087
import com.infomaniak.mail.utils.WorkerUtils
@@ -114,9 +111,6 @@ class MainActivity : BaseActivity() {
114111
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
115112
private val mainViewModel: MainViewModel by viewModels()
116113

117-
private val backgroundColor: Int by lazy { getColor(R.color.backgroundColor) }
118-
private val backgroundHeaderColor: Int by lazy { getColor(R.color.backgroundHeaderColor) }
119-
private val menuDrawerBackgroundColor: Int by lazy { getColor(R.color.menuDrawerBackgroundColor) }
120114
private val navigationArgs: MainActivityArgs? by lazy { intent?.extras?.let(MainActivityArgs::fromBundle) }
121115

122116
private var previousDestinationId: Int? = null
@@ -183,13 +177,10 @@ class MainActivity : BaseActivity() {
183177

184178
var hasDragged = false
185179

186-
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
187-
colorSystemBarsWithMenuDrawer(slideOffset)
188-
}
180+
override fun onDrawerSlide(drawerView: View, slideOffset: Float) = Unit
189181

190182
override fun onDrawerOpened(drawerView: View) {
191183
if (hasDragged) trackMenuDrawerEvent(MatomoName.OpenByGesture, TrackerAction.DRAG)
192-
colorSystemBarsWithMenuDrawer(UiUtils.FULLY_SLID)
193184
binding.menuDrawerFragmentContainer.getFragment<MenuDrawerFragment?>()?.onDrawerOpened()
194185
}
195186

@@ -457,7 +448,6 @@ class MainActivity : BaseActivity() {
457448
super.onResume()
458449
playServicesUtils.checkPlayServices(this)
459450
notificationManagerCompat.cancel(GENERIC_NEW_MAILS_NOTIFICATION_ID)
460-
if (binding.drawerLayout.isOpen) colorSystemBarsWithMenuDrawer(UiUtils.FULLY_SLID)
461451
}
462452

463453
private fun handleOnBackPressed() = with(binding) {
@@ -545,16 +535,6 @@ class MainActivity : BaseActivity() {
545535
binding.drawerLayout.setDrawerLockMode(drawerLockMode)
546536
}
547537

548-
private fun colorSystemBarsWithMenuDrawer(@FloatRange(0.0, 1.0) slideOffset: Float) {
549-
window.progressivelyColorSystemBars(
550-
slideOffset = slideOffset,
551-
statusBarColorFrom = backgroundHeaderColor,
552-
statusBarColorTo = menuDrawerBackgroundColor,
553-
navBarColorFrom = backgroundColor,
554-
navBarColorTo = menuDrawerBackgroundColor,
555-
)
556-
}
557-
558538
private fun managePermissionsRequesting() {
559539
if (hasPermissions(PermissionUtils.getMainPermissions(mustRequireNotification = true))) return
560540

app/src/main/java/com/infomaniak/mail/ui/bottomSheetDialogs/AccountBottomSheetDialog.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import android.view.LayoutInflater
2222
import android.view.View
2323
import android.view.ViewGroup
2424
import androidx.fragment.app.activityViewModels
25-
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
2625
import com.infomaniak.core.legacy.utils.context
2726
import com.infomaniak.core.legacy.utils.safeBinding
2827
import com.infomaniak.core.legacy.utils.safeNavigate
@@ -53,7 +52,7 @@ import java.util.Date
5352
import javax.inject.Inject
5453

5554
@AndroidEntryPoint
56-
class AccountBottomSheetDialog : BottomSheetDialogFragment() {
55+
class AccountBottomSheetDialog : EdgeToEdgeBottomSheetDialog() {
5756

5857
private var binding: BottomSheetAccountBinding by safeBinding()
5958

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Infomaniak Mail - Android
3+
* Copyright (C) 2025 Infomaniak Network SA
4+
*
5+
* This program is free software: you can redistribute it and/or modify
6+
* it under the terms of the GNU General Public License as published by
7+
* the Free Software Foundation, either version 3 of the License, or
8+
* (at your option) any later version.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17+
*/
18+
package com.infomaniak.mail.ui.bottomSheetDialogs
19+
20+
import android.os.Build.VERSION.SDK_INT
21+
import android.os.Bundle
22+
import android.view.View
23+
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
24+
25+
abstract class EdgeToEdgeBottomSheetDialog : BottomSheetDialogFragment() {
26+
27+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
28+
super.onViewCreated(view, savedInstanceState)
29+
30+
if (SDK_INT >= 29) dialog?.window?.isNavigationBarContrastEnforced = false
31+
}
32+
}

app/src/main/java/com/infomaniak/mail/ui/bottomSheetDialogs/InformationBottomSheetDialog.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@ import android.os.Bundle
2121
import android.view.LayoutInflater
2222
import android.view.View
2323
import android.view.ViewGroup
24-
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
2524
import com.infomaniak.core.legacy.utils.safeBinding
2625
import com.infomaniak.mail.databinding.BottomSheetInformationBinding
2726

28-
open class InformationBottomSheetDialog : BottomSheetDialogFragment() {
27+
open class InformationBottomSheetDialog : EdgeToEdgeBottomSheetDialog() {
2928

3029
protected var binding: BottomSheetInformationBinding by safeBinding()
3130

app/src/main/java/com/infomaniak/mail/ui/bottomSheetDialogs/SelectScheduleOptionBottomSheet.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import androidx.annotation.IntRange
2626
import androidx.annotation.StringRes
2727
import androidx.core.view.children
2828
import androidx.core.view.isVisible
29-
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
3029
import com.infomaniak.core.ksuite.data.KSuite
3130
import com.infomaniak.core.legacy.utils.context
3231
import com.infomaniak.core.legacy.utils.safeBinding
@@ -59,7 +58,7 @@ import java.util.Calendar
5958
import java.util.Date
6059
import kotlin.time.Duration.Companion.minutes
6160

62-
abstract class SelectScheduleOptionBottomSheet : BottomSheetDialogFragment() {
61+
abstract class SelectScheduleOptionBottomSheet : EdgeToEdgeBottomSheetDialog() {
6362

6463
private var binding: BottomSheetScheduleOptionsBinding by safeBinding()
6564

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import androidx.fragment.app.activityViewModels
3030
import com.infomaniak.core.legacy.utils.SnackbarUtils.showSnackbar
3131
import com.infomaniak.core.legacy.utils.safeBinding
3232
import com.infomaniak.lib.login.InfomaniakLogin
33-
import com.infomaniak.mail.BuildConfig
3433
import com.infomaniak.mail.CREATE_ACCOUNT_CANCEL_HOST
3534
import com.infomaniak.mail.CREATE_ACCOUNT_SUCCESS_HOST
3635
import com.infomaniak.mail.CREATE_ACCOUNT_URL
@@ -42,7 +41,6 @@ import com.infomaniak.mail.databinding.FragmentNewAccountBinding
4241
import com.infomaniak.mail.di.IoDispatcher
4342
import com.infomaniak.mail.di.MainDispatcher
4443
import com.infomaniak.mail.utils.LoginUtils
45-
import com.infomaniak.mail.utils.extensions.setSystemBarsColors
4644
import dagger.hilt.android.AndroidEntryPoint
4745
import kotlinx.coroutines.CoroutineDispatcher
4846
import javax.inject.Inject
@@ -85,7 +83,6 @@ class NewAccountFragment : Fragment() {
8583

8684
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) {
8785
super.onViewCreated(view, savedInstanceState)
88-
setSystemBarsColors(statusBarColor = R.color.backgroundColor)
8986

9087
selectIllustrationAccordingToTheme()
9188

app/src/main/java/com/infomaniak/mail/ui/main/emojiPicker/EmojiPickerBottomSheetDialog.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ import android.view.LayoutInflater
2222
import android.view.View
2323
import android.view.ViewGroup
2424
import androidx.navigation.fragment.navArgs
25-
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
2625
import com.infomaniak.core.legacy.utils.safeBinding
2726
import com.infomaniak.core.legacy.utils.setBackNavigationResult
2827
import com.infomaniak.mail.databinding.FragmentEmojiPickerBinding
28+
import com.infomaniak.mail.ui.bottomSheetDialogs.EdgeToEdgeBottomSheetDialog
2929

30-
class EmojiPickerBottomSheetDialog : BottomSheetDialogFragment() {
30+
class EmojiPickerBottomSheetDialog : EdgeToEdgeBottomSheetDialog() {
3131

3232
private var binding: FragmentEmojiPickerBinding by safeBinding()
3333
private val navigationArgs: EmojiPickerBottomSheetDialogArgs by navArgs()

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

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import android.transition.TransitionManager
2424
import android.view.LayoutInflater
2525
import android.view.View
2626
import android.view.ViewGroup
27-
import androidx.annotation.ColorRes
2827
import androidx.annotation.DrawableRes
2928
import androidx.annotation.StringRes
3029
import androidx.appcompat.content.res.AppCompatResources.getDrawable
@@ -97,7 +96,6 @@ import com.infomaniak.mail.utils.extensions.bindAlertToViewLifecycle
9796
import com.infomaniak.mail.utils.extensions.observeNotNull
9897
import com.infomaniak.mail.utils.extensions.safeArea
9998
import com.infomaniak.mail.utils.extensions.safeNavigateToNewMessageActivity
100-
import com.infomaniak.mail.utils.extensions.setSystemBarsColors
10199
import com.infomaniak.mail.utils.extensions.shareString
102100
import com.infomaniak.mail.utils.extensions.toDate
103101
import dagger.hilt.android.AndroidEntryPoint
@@ -155,10 +153,6 @@ class ThreadListFragment : TwoPaneFragment() {
155153
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = runCatchingRealm {
156154
navigateFromNotificationToNewMessage()
157155
super.onViewCreated(view, savedInstanceState)
158-
setSystemBarsColors(
159-
statusBarColor = R.color.backgroundHeaderColor,
160-
navigationBarColor = if (mainViewModel.isMultiSelectOn) R.color.elevatedBackground else R.color.backgroundColor,
161-
)
162156

163157
handleEdgeToEdge()
164158

@@ -196,9 +190,6 @@ class ThreadListFragment : TwoPaneFragment() {
196190
observeShareUrlResult()
197191
}.getOrDefault(Unit)
198192

199-
@ColorRes
200-
override fun getStatusBarColor(): Int = R.color.backgroundHeaderColor
201-
202193
override fun getLeftPane(): View? = _binding?.threadsConstraintLayout
203194

204195
override fun getRightPane(): FragmentContainerView? = _binding?.threadHostFragment

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import android.transition.TransitionManager
2222
import androidx.core.view.isGone
2323
import androidx.core.view.isVisible
2424
import androidx.lifecycle.lifecycleScope
25-
import com.infomaniak.core.legacy.utils.context
2625
import com.infomaniak.core.legacy.utils.safeNavigate
2726
import com.infomaniak.dragdropswiperecyclerview.DragDropSwipeRecyclerView.ListOrientation.DirectionFlag
2827
import com.infomaniak.mail.MatomoMail.MatomoName
@@ -37,7 +36,6 @@ import com.infomaniak.mail.ui.MainViewModel
3736
import com.infomaniak.mail.utils.Utils.runCatchingRealm
3837
import com.infomaniak.mail.utils.extensions.archiveWithConfirmationPopup
3938
import com.infomaniak.mail.utils.extensions.deleteWithConfirmationPopup
40-
import com.infomaniak.mail.utils.extensions.updateNavigationBarColor
4139
import kotlinx.coroutines.launch
4240

4341
class ThreadListMultiSelection {
@@ -171,8 +169,6 @@ class ThreadListMultiSelection {
171169
private fun displayMultiSelectActions(isMultiSelectOn: Boolean) = with(threadListFragment.binding) {
172170
newMessageFab.isGone = isMultiSelectOn
173171
quickActionBar.isVisible = isMultiSelectOn
174-
val navBarColor = context.getColor(if (isMultiSelectOn) R.color.elevatedBackground else R.color.backgroundColor)
175-
threadListFragment.requireActivity().window.updateNavigationBarColor(navBarColor)
176172
}
177173

178174
private fun updateSelectedCount(selectedThreads: Set<Thread>) {

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

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
package com.infomaniak.mail.ui.main.folder
1919

2020
import android.content.res.Configuration
21+
import android.os.Build.VERSION.SDK_INT
2122
import android.os.Bundle
2223
import android.view.View
2324
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
24-
import androidx.annotation.ColorRes
2525
import androidx.core.content.res.ResourcesCompat
2626
import androidx.core.view.isGone
2727
import androidx.core.view.isVisible
@@ -51,7 +51,6 @@ import com.infomaniak.mail.utils.extensions.isPhone
5151
import com.infomaniak.mail.utils.extensions.isTabletInLandscape
5252
import com.infomaniak.mail.utils.extensions.isTabletInPortrait
5353
import com.infomaniak.mail.utils.extensions.safeNavigateToNewMessageActivity
54-
import com.infomaniak.mail.utils.extensions.setSystemBarsColors
5554
import io.realm.kotlin.types.RealmInstant
5655
import javax.inject.Inject
5756

@@ -70,9 +69,6 @@ abstract class TwoPaneFragment : Fragment() {
7069
lateinit var localSettings: LocalSettings
7170

7271
abstract val substituteClassName: String
73-
74-
@ColorRes
75-
abstract fun getStatusBarColor(): Int
7672
abstract fun getLeftPane(): View?
7773
abstract fun getRightPane(): FragmentContainerView?
7874
abstract fun getAnchor(): View?
@@ -94,7 +90,6 @@ abstract class TwoPaneFragment : Fragment() {
9490
super.onConfigurationChanged(newConfig)
9591
updateTwoPaneVisibilities()
9692
updateDrawerLockMode()
97-
updateStatusBarColor()
9893
}
9994

10095
private fun observeCurrentFolder() = with(twoPaneViewModel) {
@@ -122,12 +117,7 @@ abstract class TwoPaneFragment : Fragment() {
122117
twoPaneViewModel.currentThreadUid.observe(viewLifecycleOwner) { threadUid ->
123118
updateTwoPaneVisibilities()
124119
updateDrawerLockMode()
125-
val isOpeningThread = threadUid != null
126-
if (isOpeningThread) {
127-
if (isOnlyRightShown()) setSystemBarsColors(statusBarColor = R.color.backgroundColor, navigationBarColor = null)
128-
} else {
129-
resetPanes()
130-
}
120+
if (threadUid == null) resetPanes()
131121
}
132122
}
133123

@@ -150,7 +140,10 @@ abstract class TwoPaneFragment : Fragment() {
150140

151141
fun handleOnBackPressed() {
152142
when {
153-
isOnlyRightShown() -> twoPaneViewModel.closeThread()
143+
isOnlyRightShown() -> {
144+
if (SDK_INT >= 29) requireActivity().window.isNavigationBarContrastEnforced = true
145+
twoPaneViewModel.closeThread()
146+
}
154147
this is ThreadListFragment -> requireActivity().finish()
155148
else -> findNavController().popBackStack()
156149
}
@@ -166,16 +159,12 @@ abstract class TwoPaneFragment : Fragment() {
166159
}
167160

168161
fun openThreadAndResetItsState(threadUid: String) {
162+
if (SDK_INT >= 29) requireActivity().window.isNavigationBarContrastEnforced = false
169163
getRightPane()?.getFragment<ThreadFragment?>()?.resetThreadState()
170164
twoPaneViewModel.openThread(threadUid)
171165
}
172166

173167
private fun resetPanes() {
174-
175-
if (isOnlyLeftShown()) {
176-
setSystemBarsColors(statusBarColor = getStatusBarColor(), navigationBarColor = R.color.backgroundColor)
177-
}
178-
179168
threadListAdapter.selectNewThread(newPosition = null, threadUid = null)
180169

181170
childFragmentManager.beginTransaction().replace(R.id.threadHostFragment, ThreadFragment()).commit()
@@ -225,21 +214,6 @@ abstract class TwoPaneFragment : Fragment() {
225214
}
226215
}
227216

228-
private fun updateStatusBarColor() {
229-
230-
val statusBarColor = if (isOnlyRightShown()) { // Thread (in Phone mode)
231-
if (getRightPane()?.getFragment<ThreadFragment?>()?.isScrolledToTheTop() == true) {
232-
R.color.toolbarLoweredColor
233-
} else {
234-
R.color.toolbarElevatedColor
235-
}
236-
} else { // ThreadList or Search
237-
getStatusBarColor()
238-
}
239-
240-
setSystemBarsColors(statusBarColor = statusBarColor, navigationBarColor = null)
241-
}
242-
243217
protected fun updateAutoAdvanceNaturalThread(currentPosition: Int, previousPosition: Int) {
244218
localSettings.autoAdvanceNaturalThread = if (currentPosition > previousPosition) {
245219
AutoAdvanceMode.FOLLOWING_THREAD

0 commit comments

Comments
 (0)