From f7aedff418cbec3a3f66c71b561a2b6e36d37699 Mon Sep 17 00:00:00 2001
From: fedrunov <66663241+fedrunov@users.noreply.github.com>
Date: Fri, 21 Jan 2022 13:38:27 +0100
Subject: [PATCH] toolbar management  (#4887)

Toolbar management rework and toolbar style alignment
---
 changelog.d/4884.misc                         |  3 +
 .../src/main/res/values/styles_toolbar.xml    | 20 +++--
 .../core/platform/SimpleFragmentActivity.kt   |  3 +-
 .../app/core/platform/ToolbarConfigurable.kt  | 24 ------
 .../app/core/platform/VectorBaseActivity.kt   | 24 +++---
 .../app/core/platform/VectorBaseFragment.kt   | 20 +++--
 .../im/vector/app/core/utils/ToolbarConfig.kt | 82 +++++++++++++++++++
 .../preview/AttachmentsPreviewActivity.kt     |  8 +-
 .../app/features/call/VectorCallActivity.kt   | 18 ++--
 .../call/transfer/CallTransferActivity.kt     |  3 +-
 .../contactsbook/ContactsBookFragment.kt      |  9 +-
 .../CreateDirectRoomByQrCodeFragment.kt       |  7 +-
 .../vector/app/features/home/HomeActivity.kt  |  7 --
 .../app/features/home/HomeDetailFragment.kt   |  9 +-
 .../home/room/detail/RoomDetailActivity.kt    |  7 --
 .../home/room/detail/RoomDetailFragment.kt    |  3 +-
 .../home/room/detail/search/SearchActivity.kt |  3 +-
 .../room/filtered/FilteredRoomsActivity.kt    |  3 +-
 .../app/features/login/LoginActivity.kt       |  8 +-
 .../app/features/login/LoginWebFragment.kt    |  5 +-
 .../app/features/login2/LoginWebFragment2.kt  |  5 +-
 .../features/media/BigImageViewerActivity.kt  |  9 +-
 .../features/onboarding/OnboardingActivity.kt |  8 +-
 .../ftueauth/FtueAuthWebFragment.kt           |  3 +-
 .../im/vector/app/features/pin/PinActivity.kt |  8 +-
 .../poll/create/CreatePollFragment.kt         |  8 +-
 .../features/qrcode/QrCodeScannerFragment.kt  |  7 +-
 .../features/rageshake/BugReportActivity.kt   |  3 +-
 .../reactions/EmojiReactionPickerActivity.kt  |  3 +-
 .../roomdirectory/PublicRoomsFragment.kt      |  8 +-
 .../createroom/CreateRoomActivity.kt          |  8 +-
 .../createroom/CreateRoomFragment.kt          | 12 +--
 .../picker/RoomDirectoryPickerFragment.kt     | 15 +---
 .../roompreview/RoomPreviewActivity.kt        |  8 +-
 .../RoomPreviewNoPreviewFragment.kt           |  1 +
 .../RoomMemberProfileActivity.kt              | 10 +--
 .../RoomMemberProfileFragment.kt              |  1 +
 .../roomprofile/RoomProfileActivity.kt        |  9 +-
 .../roomprofile/RoomProfileFragment.kt        |  1 +
 .../roomprofile/alias/RoomAliasFragment.kt    |  1 +
 .../banned/RoomBannedMemberListFragment.kt    |  1 +
 .../members/RoomMemberListFragment.kt         |  1 +
 .../RoomNotificationSettingsFragment.kt       |  1 +
 .../permissions/RoomPermissionsFragment.kt    |  1 +
 .../settings/RoomSettingsFragment.kt          |  1 +
 .../uploads/RoomUploadsFragment.kt            |  1 +
 .../settings/VectorSettingsActivity.kt        |  3 +-
 .../features/share/IncomingShareActivity.kt   |  8 +-
 .../spaces/explore/SpaceDirectoryFragment.kt  | 13 +--
 .../leave/SpaceLeaveAdvancedActivity.kt       |  9 +-
 .../leave/SpaceLeaveAdvancedFragment.kt       |  1 +
 .../spaces/manage/SpaceAddRoomFragment.kt     | 13 +--
 .../spaces/manage/SpaceManageActivity.kt      |  9 +-
 .../spaces/manage/SpaceManageRoomsFragment.kt | 10 ++-
 .../spaces/manage/SpaceSettingsFragment.kt    |  1 +
 .../spaces/people/SpacePeopleFragment.kt      | 15 ++--
 .../features/usercode/ScanUserCodeFragment.kt |  8 +-
 .../features/usercode/ShowUserCodeFragment.kt |  6 +-
 .../userdirectory/UserListFragment.kt         | 12 +--
 .../features/webview/VectorWebViewActivity.kt |  3 +-
 .../app/features/widgets/WidgetActivity.kt    | 12 +--
 vector/src/main/res/layout/activity_call.xml  |  7 +-
 .../res/layout/fragment_contacts_book.xml     | 45 +---------
 ...ent_create_direct_room_directory_users.xml | 45 +---------
 .../main/res/layout/fragment_create_poll.xml  | 44 +---------
 .../main/res/layout/fragment_create_room.xml  | 42 +---------
 .../main/res/layout/fragment_home_detail.xml  |  4 +-
 .../res/layout/fragment_matrix_profile.xml    |  2 +-
 .../res/layout/fragment_qr_code_scanner.xml   | 48 +----------
 .../fragment_qr_code_scanner_with_button.xml  | 46 +----------
 .../fragment_recyclerview_with_search.xml     | 38 +--------
 .../main/res/layout/fragment_room_detail.xml  |  6 +-
 .../fragment_room_preview_no_preview.xml      |  2 +-
 .../layout/fragment_room_setting_generic.xml  |  2 +-
 .../main/res/layout/fragment_room_uploads.xml |  2 +-
 .../res/layout/fragment_space_add_rooms.xml   | 38 +--------
 .../layout/fragment_space_leave_advanced.xml  | 26 +-----
 .../res/layout/fragment_space_preview.xml     |  2 +-
 .../fragment_space_restricted_select.xml      |  8 +-
 .../res/layout/fragment_user_code_show.xml    | 42 +---------
 .../res/layout/fragment_user_directory.xml    |  2 +-
 .../main/res/layout/fragment_user_list.xml    | 45 +---------
 82 files changed, 275 insertions(+), 744 deletions(-)
 create mode 100644 changelog.d/4884.misc
 delete mode 100644 vector/src/main/java/im/vector/app/core/platform/ToolbarConfigurable.kt
 create mode 100644 vector/src/main/java/im/vector/app/core/utils/ToolbarConfig.kt

diff --git a/changelog.d/4884.misc b/changelog.d/4884.misc
new file mode 100644
index 0000000000..3315aeba0c
--- /dev/null
+++ b/changelog.d/4884.misc
@@ -0,0 +1,3 @@
+Toolbar management rework. Toolbar title's and subtitle's text appearance now controlled by theme without local overrides. Helper class introduced to
+help with toolbar configuration. Toolbar title, subtitle and navigation button widgets are removed where it is possible and replaced with built-in
+toolbar widgets.
\ No newline at end of file
diff --git a/library/ui-styles/src/main/res/values/styles_toolbar.xml b/library/ui-styles/src/main/res/values/styles_toolbar.xml
index 9f6ba102ed..505419c6fe 100644
--- a/library/ui-styles/src/main/res/values/styles_toolbar.xml
+++ b/library/ui-styles/src/main/res/values/styles_toolbar.xml
@@ -6,10 +6,12 @@
         <item name="elevation">0dp</item>
 
         <!-- main text -->
-        <item name="titleTextStyle">@style/Widget.Vector.TextView.ActionBarTitle</item>
+        <item name="titleTextAppearance">@style/TextAppearance.Vector.Widget.ActionBarTitle</item>
 
         <!-- sub text -->
-        <item name="subtitleTextStyle">@style/Widget.Vector.TextView.ActionBarSubTitle</item>
+        <item name="subtitleTextAppearance">@style/TextAppearance.Vector.Widget.ActionBarSubTitle</item>
+
+        <item name="navigationIconTint">?vctr_content_secondary</item>
     </style>
 
     <!-- Default toolbar style -->
@@ -22,16 +24,18 @@
 
     <!-- Toolbar text style -->
     <!-- main text -->
-    <style name="Widget.Vector.TextView.ActionBarTitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
+    <style name="TextAppearance.Vector.Widget.ActionBarTitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
         <item name="android:textColor">?vctr_content_primary</item>
-        <item name="android:fontFamily">"sans-serif-medium"</item>
-        <item name="android:textSize">20sp</item>
+        <item name="android:fontFamily">sans-serif-medium</item>
+        <item name="fontFamily">sans-serif-medium</item>
+        <item name="android:textSize">18sp</item>
     </style>
 
     <!-- sub text -->
-    <style name="Widget.Vector.TextView.ActionBarSubTitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
-        <item name="android:textColor">?vctr_content_primary</item>
-        <item name="android:fontFamily">"sans-serif-medium"</item>
+    <style name="TextAppearance.Vector.Widget.ActionBarSubTitle" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
+        <item name="android:textColor">?vctr_content_secondary</item>
+        <item name="android:fontFamily">sans-serif</item>
+        <item name="fontFamily">sans-serif</item>
         <item name="android:textSize">12sp</item>
     </style>
 
diff --git a/vector/src/main/java/im/vector/app/core/platform/SimpleFragmentActivity.kt b/vector/src/main/java/im/vector/app/core/platform/SimpleFragmentActivity.kt
index a70b2d66e6..4cd7da2a4f 100644
--- a/vector/src/main/java/im/vector/app/core/platform/SimpleFragmentActivity.kt
+++ b/vector/src/main/java/im/vector/app/core/platform/SimpleFragmentActivity.kt
@@ -30,7 +30,8 @@ abstract class SimpleFragmentActivity : VectorBaseActivity<ActivityBinding>() {
     final override fun getCoordinatorLayout() = views.coordinatorLayout
 
     override fun initUiAndData() {
-        configureToolbar(views.toolbar)
+        setupToolbar(views.toolbar)
+                .allowBack(true)
         waitingView = views.waitingView.waitingView
     }
 
diff --git a/vector/src/main/java/im/vector/app/core/platform/ToolbarConfigurable.kt b/vector/src/main/java/im/vector/app/core/platform/ToolbarConfigurable.kt
deleted file mode 100644
index 9aca8dd17f..0000000000
--- a/vector/src/main/java/im/vector/app/core/platform/ToolbarConfigurable.kt
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 2019 New Vector Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package im.vector.app.core.platform
-
-import com.google.android.material.appbar.MaterialToolbar
-
-interface ToolbarConfigurable {
-
-    fun configure(toolbar: MaterialToolbar)
-}
diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt
index 3dc17718c6..8164df9c55 100644
--- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt
+++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt
@@ -62,6 +62,7 @@ import im.vector.app.core.extensions.restart
 import im.vector.app.core.extensions.setTextOrHide
 import im.vector.app.core.extensions.singletonEntryPoint
 import im.vector.app.core.extensions.toMvRxBundle
+import im.vector.app.core.utils.ToolbarConfig
 import im.vector.app.core.utils.toast
 import im.vector.app.features.MainActivity
 import im.vector.app.features.MainActivityArgs
@@ -126,6 +127,8 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
                 .launchIn(lifecycleScope)
     }
 
+    var toolbar: ToolbarConfig? = null
+
     /* ==========================================================================================
      * Views
      * ========================================================================================== */
@@ -508,18 +511,6 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
      */
     protected fun isFirstCreation() = savedInstanceState == null
 
-    /**
-     * Configure the Toolbar, with default back button.
-     */
-    protected fun configureToolbar(toolbar: MaterialToolbar, displayBack: Boolean = true) {
-        setSupportActionBar(toolbar)
-        supportActionBar?.let {
-            it.setDisplayShowHomeEnabled(displayBack)
-            it.setDisplayHomeAsUpEnabled(displayBack)
-            it.title = null
-        }
-    }
-
     // ==============================================================================================
     // Handle loading view (also called waiting view or spinner view)
     // ==============================================================================================
@@ -629,4 +620,13 @@ abstract class VectorBaseActivity<VB : ViewBinding> : AppCompatActivity(), Maver
             toast(getString(R.string.not_implemented))
         }
     }
+
+    /**
+     * Sets toolbar as actionBar
+     *
+     * @return Instance of [ToolbarConfig] with set of helper methods to configure toolbar
+     * */
+    fun setupToolbar(toolbar: MaterialToolbar) = ToolbarConfig(this, toolbar).also {
+        this.toolbar = it.setup()
+    }
 }
diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt
index f73002ff8d..8a1b9051cc 100644
--- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt
+++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt
@@ -42,6 +42,7 @@ import im.vector.app.core.dialogs.UnrecognizedCertificateDialog
 import im.vector.app.core.error.ErrorFormatter
 import im.vector.app.core.extensions.singletonEntryPoint
 import im.vector.app.core.extensions.toMvRxBundle
+import im.vector.app.core.utils.ToolbarConfig
 import im.vector.app.features.analytics.AnalyticsTracker
 import im.vector.app.features.analytics.plan.Screen
 import im.vector.app.features.analytics.screen.ScreenEvent
@@ -80,6 +81,12 @@ abstract class VectorBaseFragment<VB : ViewBinding> : Fragment(), MavericksView
 
     private var progress: AlertDialog? = null
 
+    /**
+     * [ToolbarConfig] instance from host activity
+     * */
+    protected var toolbar: ToolbarConfig? = null
+            get() = (activity as? VectorBaseActivity<*>)?.toolbar
+            private set
     /* ==========================================================================================
      * View model
      * ========================================================================================== */
@@ -228,13 +235,12 @@ abstract class VectorBaseFragment<VB : ViewBinding> : Fragment(), MavericksView
      * ========================================================================================== */
 
     /**
-     * Configure the Toolbar.
-     */
-    protected fun setupToolbar(toolbar: MaterialToolbar) {
-        val parentActivity = vectorBaseActivity
-        if (parentActivity is ToolbarConfigurable) {
-            parentActivity.configure(toolbar)
-        }
+     * Sets toolbar as actionBar for current activity
+     *
+     * @return Instance of [ToolbarConfig] with set of helper methods to configure toolbar
+     * */
+    protected fun setupToolbar(toolbar: MaterialToolbar): ToolbarConfig {
+        return vectorBaseActivity.setupToolbar(toolbar)
     }
 
     /* ==========================================================================================
diff --git a/vector/src/main/java/im/vector/app/core/utils/ToolbarConfig.kt b/vector/src/main/java/im/vector/app/core/utils/ToolbarConfig.kt
new file mode 100644
index 0000000000..60b4686a32
--- /dev/null
+++ b/vector/src/main/java/im/vector/app/core/utils/ToolbarConfig.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.core.utils
+
+import androidx.annotation.StringRes
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.content.res.AppCompatResources
+import com.google.android.material.appbar.MaterialToolbar
+import im.vector.app.R
+
+/**
+ * Helper class to configure toolbar.
+ * Wraps [MaterialToolbar] providing set of methods to configure it
+ */
+class ToolbarConfig(val activity: AppCompatActivity, val toolbar: MaterialToolbar) {
+    private var customBackResId: Int? = null
+
+    fun setup() = apply {
+        activity.setSupportActionBar(toolbar)
+    }
+
+    /**
+     * Delegating property for [toolbar.title]
+     * */
+    var title: CharSequence? by toolbar::title
+
+    /**
+     * Delegating property for [toolbar.subtitle]
+     * */
+    var subtitle: CharSequence? by toolbar::subtitle
+
+    /**
+     * Sets toolbar's title text
+     * */
+    fun setTitle(title: CharSequence?) = apply { toolbar.title = title }
+
+    /**
+     * Sets toolbar's title text using provided string resource
+     * */
+    fun setTitle(@StringRes titleRes: Int) = apply { toolbar.setTitle(titleRes) }
+
+    /**
+     * Sets toolbar's subtitle text
+     * */
+    fun setSubtitle(subtitle: String?) = apply { toolbar.subtitle = subtitle }
+
+    /**
+     * Sets toolbar's title text using provided string resource
+     * */
+    fun setSubtitle(@StringRes subtitleRes: Int) = apply { toolbar.subtitle = activity.getString(subtitleRes) }
+
+    /**
+     * Enables/disables navigate back button
+     *
+     * @param isAllowed defines if back button is enabled. Default [true]
+     * @param useCross defines if cross icon should be used instead of arrow. Default [false]
+     * */
+    fun allowBack(isAllowed: Boolean = true, useCross: Boolean = false) = apply {
+        activity.supportActionBar?.let {
+            it.setDisplayShowHomeEnabled(isAllowed)
+            it.setDisplayHomeAsUpEnabled(isAllowed)
+            if (isAllowed && useCross) {
+                val navResId = customBackResId ?: R.drawable.ic_x_18dp
+                toolbar.navigationIcon = AppCompatResources.getDrawable(activity, navResId)
+            }
+        }
+    }
+}
diff --git a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt
index a52036011f..7ddba0d229 100644
--- a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt
@@ -19,17 +19,15 @@ package im.vector.app.features.attachments.preview
 
 import android.content.Context
 import android.content.Intent
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 import im.vector.app.features.themes.ActivityOtherThemes
 import org.matrix.android.sdk.api.session.content.ContentAttachmentData
 
 @AndroidEntryPoint
-class AttachmentsPreviewActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarConfigurable {
+class AttachmentsPreviewActivity : VectorBaseActivity<ActivitySimpleBinding>() {
 
     companion object {
         private const val EXTRA_FRAGMENT_ARGS = "EXTRA_FRAGMENT_ARGS"
@@ -72,8 +70,4 @@ class AttachmentsPreviewActivity : VectorBaseActivity<ActivitySimpleBinding>(),
         setResult(RESULT_OK, resultIntent)
         finish()
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
index 995dc3d5e8..22f1fc40a2 100644
--- a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt
@@ -126,7 +126,7 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
         if (savedInstanceState != null) {
             (supportFragmentManager.findFragmentByTag(FRAGMENT_DIAL_PAD_TAG) as? CallDialPadBottomSheet)?.callback = dialPadCallback
         }
-        setSupportActionBar(views.callToolbar)
+        setupToolbar(views.callToolbar)
         configureCallViews()
 
         callViewModel.onEach {
@@ -257,18 +257,18 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
                 views.fullscreenRenderer.isVisible = false
                 views.pipRendererWrapper.isVisible = false
                 views.callInfoGroup.isVisible = true
-                views.callToolbar.setSubtitle(R.string.call_ringing)
+                toolbar?.setSubtitle(R.string.call_ringing)
                 configureCallInfo(state)
             }
             is CallState.Answering -> {
                 views.fullscreenRenderer.isVisible = false
                 views.pipRendererWrapper.isVisible = false
                 views.callInfoGroup.isVisible = true
-                views.callToolbar.setSubtitle(R.string.call_connecting)
+                toolbar?.setSubtitle(R.string.call_connecting)
                 configureCallInfo(state)
             }
             is CallState.Connected -> {
-                views.callToolbar.subtitle = state.formattedDuration
+                toolbar?.subtitle = state.formattedDuration
                 if (callState.iceConnectionState == MxPeerConnectionState.CONNECTED) {
                     if (state.isLocalOnHold || state.isRemoteOnHold) {
                         views.smallIsHeldIcon.isVisible = true
@@ -280,11 +280,11 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
                             views.callActionText.setText(R.string.call_resume_action)
                             views.callActionText.isVisible = true
                             views.callActionText.setOnClickListener { callViewModel.handle(VectorCallViewActions.ToggleHoldResume) }
-                            views.callToolbar.setSubtitle(R.string.call_held_by_you)
+                            toolbar?.setSubtitle(R.string.call_held_by_you)
                         } else {
                             views.callActionText.isInvisible = true
                             state.callInfo?.opponentUserItem?.let {
-                                views.callToolbar.subtitle = getString(R.string.call_held_by_user, it.getBestName())
+                                toolbar?.subtitle = getString(R.string.call_held_by_user, it.getBestName())
                             }
                         }
                     } else if (state.transferee !is VectorCallViewState.TransfereeState.NoTransferee) {
@@ -316,14 +316,14 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
                     views.pipRendererWrapper.isVisible = false
                     views.callInfoGroup.isVisible = true
                     configureCallInfo(state)
-                    views.callToolbar.setSubtitle(R.string.call_connecting)
+                    toolbar?.setSubtitle(R.string.call_connecting)
                 }
             }
             is CallState.Ended     -> {
                 views.fullscreenRenderer.isVisible = false
                 views.pipRendererWrapper.isVisible = false
                 views.callInfoGroup.isVisible = true
-                views.callToolbar.setSubtitle(R.string.call_ended)
+                toolbar?.setSubtitle(R.string.call_ended)
                 configureCallInfo(state)
             }
             else                   -> {
@@ -410,7 +410,7 @@ class VectorCallActivity : VectorBaseActivity<ActivityCallBinding>(), CallContro
             avatarRenderer.renderBlur(it, views.bgCallView, sampling = 20, rounded = false, colorFilter = colorFilter, addPlaceholder = false)
             if (state.transferee is VectorCallViewState.TransfereeState.NoTransferee) {
                 views.participantNameText.setTextOrHide(null)
-                views.callToolbar.title = if (state.isVideoCall) {
+                toolbar?.title = if (state.isVideoCall) {
                     getString(R.string.video_call_with_participant, it.getBestName())
                 } else {
                     getString(R.string.audio_call_with_participant, it.getBestName())
diff --git a/vector/src/main/java/im/vector/app/features/call/transfer/CallTransferActivity.kt b/vector/src/main/java/im/vector/app/features/call/transfer/CallTransferActivity.kt
index c03b526f8c..959e96cc4c 100644
--- a/vector/src/main/java/im/vector/app/features/call/transfer/CallTransferActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/call/transfer/CallTransferActivity.kt
@@ -70,7 +70,8 @@ class CallTransferActivity : VectorBaseActivity<ActivityCallTransferBinding>() {
                 CallTransferPagerAdapter.DIAL_PAD_INDEX  -> tab.text = getString(R.string.call_dial_pad_title)
             }
         }.attach()
-        configureToolbar(views.callTransferToolbar)
+        setupToolbar(views.callTransferToolbar)
+                .allowBack()
         views.callTransferToolbar.title = getString(R.string.call_transfer_title)
         setupConnectAction()
     }
diff --git a/vector/src/main/java/im/vector/app/features/contactsbook/ContactsBookFragment.kt b/vector/src/main/java/im/vector/app/features/contactsbook/ContactsBookFragment.kt
index 5310fccb3a..ebd0089736 100644
--- a/vector/src/main/java/im/vector/app/features/contactsbook/ContactsBookFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/contactsbook/ContactsBookFragment.kt
@@ -67,7 +67,8 @@ class ContactsBookFragment @Inject constructor(
         setupFilterView()
         setupConsentView()
         setupOnlyBoundContactsView()
-        setupCloseView()
+        setupToolbar(views.phoneBookToolbar)
+                .allowBack(useCross = true)
         contactsBookViewModel.observeViewEvents {
             when (it) {
                 is ContactsBookViewEvents.Failure             -> showFailure(it.throwable)
@@ -119,12 +120,6 @@ class ContactsBookFragment @Inject constructor(
         views.phoneBookRecyclerView.configureWith(contactsBookController)
     }
 
-    private fun setupCloseView() {
-        views.phoneBookClose.debouncedClicks {
-            sharedActionViewModel.post(UserListSharedAction.GoBack)
-        }
-    }
-
     override fun invalidate() = withState(contactsBookViewModel) { state ->
         views.phoneBookSearchForMatrixContacts.isVisible = state.filteredMappedContacts.isNotEmpty() && state.identityServerUrl != null && !state.userConsent
         views.phoneBookOnlyBoundContacts.isVisible = state.isBoundRetrieved
diff --git a/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomByQrCodeFragment.kt b/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomByQrCodeFragment.kt
index 96401604f3..766a6f5156 100644
--- a/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomByQrCodeFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomByQrCodeFragment.kt
@@ -64,11 +64,8 @@ class CreateDirectRoomByQrCodeFragment @Inject constructor() : VectorBaseFragmen
         super.onViewCreated(view, savedInstanceState)
 
         setupToolbar(views.qrScannerToolbar)
-
-        views.qrScannerClose.debouncedClicks {
-            requireActivity().onBackPressed()
-        }
-        views.qrScannerTitle.text = getString(R.string.add_by_qr_code)
+                .setTitle(R.string.add_by_qr_code)
+                .allowBack(useCross = true)
     }
 
     override fun onResume() {
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt
index 59f20b8b0d..d9719cb28f 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt
@@ -33,7 +33,6 @@ import androidx.fragment.app.FragmentManager
 import androidx.lifecycle.lifecycleScope
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.viewModel
-import com.google.android.material.appbar.MaterialToolbar
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.AppStateHandler
@@ -43,7 +42,6 @@ import im.vector.app.core.extensions.exhaustive
 import im.vector.app.core.extensions.hideKeyboard
 import im.vector.app.core.extensions.registerStartForActivityResult
 import im.vector.app.core.extensions.replaceFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.core.pushers.PushersManager
 import im.vector.app.databinding.ActivityHomeBinding
@@ -99,7 +97,6 @@ data class HomeActivityArgs(
 @AndroidEntryPoint
 class HomeActivity :
         VectorBaseActivity<ActivityHomeBinding>(),
-        ToolbarConfigurable,
         NavigationInterceptor,
         SpaceInviteBottomSheet.InteractionListener,
         MatrixToBottomSheet.InteractionListener {
@@ -493,10 +490,6 @@ class HomeActivity :
         serverBackupStatusViewModel.refreshRemoteStateIfNeeded()
     }
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar, false)
-    }
-
     override fun getMenuRes() = R.menu.home
 
     override fun onPrepareOptionsMenu(menu: Menu): Boolean {
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
index 712055435f..a07409d063 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeDetailFragment.kt
@@ -33,7 +33,6 @@ import im.vector.app.R
 import im.vector.app.RoomGroupingMethod
 import im.vector.app.core.extensions.commitTransaction
 import im.vector.app.core.extensions.toMvRxBundle
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.core.platform.VectorBaseFragment
 import im.vector.app.core.resources.ColorProvider
@@ -314,11 +313,9 @@ class HomeDetailFragment @Inject constructor(
     }
 
     private fun setupToolbar() {
-        val parentActivity = vectorBaseActivity
-        if (parentActivity is ToolbarConfigurable) {
-            parentActivity.configure(views.groupToolbar)
-        }
-        views.groupToolbar.title = ""
+        setupToolbar(views.groupToolbar)
+                .setTitle(null)
+
         views.groupToolbarAvatarImageView.debouncedClicks {
             sharedActionViewModel.post(HomeActivitySharedAction.OpenDrawer)
         }
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt
index 9565f9ca62..9a7b8e64f7 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailActivity.kt
@@ -28,13 +28,11 @@ import androidx.fragment.app.FragmentManager
 import androidx.lifecycle.lifecycleScope
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.viewModel
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.endKeepScreenOn
 import im.vector.app.core.extensions.hideKeyboard
 import im.vector.app.core.extensions.keepScreenOn
 import im.vector.app.core.extensions.replaceFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivityRoomDetailBinding
 import im.vector.app.features.analytics.plan.Screen
@@ -53,7 +51,6 @@ import javax.inject.Inject
 @AndroidEntryPoint
 class RoomDetailActivity :
         VectorBaseActivity<ActivityRoomDetailBinding>(),
-        ToolbarConfigurable,
         MatrixToBottomSheet.InteractionListener {
 
     override fun getBinding(): ActivityRoomDetailBinding {
@@ -159,10 +156,6 @@ class RoomDetailActivity :
         super.onDestroy()
     }
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
-
     private val drawerListener = object : DrawerLayout.SimpleDrawerListener() {
         private var drawerScreenEvent: ScreenEvent? = null
         override fun onDrawerOpened(drawerView: View) {
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
index 3d38847c83..4e478e4269 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt
@@ -365,6 +365,7 @@ class RoomDetailFragment @Inject constructor(
         keyboardStateUtils = KeyboardStateUtils(requireActivity())
         lazyLoadedViews.bind(views)
         setupToolbar(views.roomToolbar)
+                .allowBack()
         setupRecyclerView()
         setupComposer()
         setupNotificationView()
@@ -1514,7 +1515,7 @@ class RoomDetailFragment @Inject constructor(
         views.roomToolbarSubtitleView.apply {
             setTextOrHide(subtitle)
             if (typingMessage.isNullOrBlank()) {
-                setTextColor(colorProvider.getColorFromAttribute(R.attr.vctr_content_primary))
+                setTextColor(colorProvider.getColorFromAttribute(R.attr.vctr_content_secondary))
                 setTypeface(null, Typeface.NORMAL)
             } else {
                 setTextColor(colorProvider.getColorFromAttribute(R.attr.colorPrimary))
diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt
index bc1dc088df..eed596cda0 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt
@@ -40,7 +40,8 @@ class SearchActivity : VectorBaseActivity<ActivitySearchBinding>() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        configureToolbar(views.searchToolbar)
+        setupToolbar(views.searchToolbar)
+                .allowBack()
     }
 
     override fun initUiAndData() {
diff --git a/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomsActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomsActivity.kt
index dbfa319b86..0e16b4b0df 100644
--- a/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomsActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/home/room/filtered/FilteredRoomsActivity.kt
@@ -44,7 +44,8 @@ class FilteredRoomsActivity : VectorBaseActivity<ActivityFilteredRoomsBinding>()
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         analyticsScreenName = Screen.ScreenName.RoomFilter
-        configureToolbar(views.filteredRoomsToolbar)
+        setupToolbar(views.filteredRoomsToolbar)
+                .allowBack()
         if (isFirstCreation()) {
             val params = RoomListParams(RoomListDisplayMode.FILTERED)
             replaceFragment(views.filteredRoomsFragmentContainer, RoomListFragment::class.java, params, FRAGMENT_TAG)
diff --git a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt
index f1bf8ab4a9..edc77d73f6 100644
--- a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt
@@ -29,7 +29,6 @@ import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.FragmentTransaction
 import com.airbnb.mvrx.viewModel
 import com.airbnb.mvrx.withState
-import com.google.android.material.appbar.MaterialToolbar
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.R
@@ -37,7 +36,6 @@ import im.vector.app.core.extensions.POP_BACK_STACK_EXCLUSIVE
 import im.vector.app.core.extensions.addFragment
 import im.vector.app.core.extensions.addFragmentToBackstack
 import im.vector.app.core.extensions.exhaustive
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivityLoginBinding
 import im.vector.app.features.analytics.plan.Screen
@@ -54,7 +52,7 @@ import org.matrix.android.sdk.api.extensions.tryOrNull
  * The LoginActivity manages the fragment navigation and also display the loading View
  */
 @AndroidEntryPoint
-open class LoginActivity : VectorBaseActivity<ActivityLoginBinding>(), ToolbarConfigurable, UnlockedActivity {
+open class LoginActivity : VectorBaseActivity<ActivityLoginBinding>(), UnlockedActivity {
 
     private val loginViewModel: LoginViewModel by viewModel()
 
@@ -353,10 +351,6 @@ open class LoginActivity : VectorBaseActivity<ActivityLoginBinding>(), ToolbarCo
         }
     }
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
-
     companion object {
         private const val FRAGMENT_REGISTRATION_STAGE_TAG = "FRAGMENT_REGISTRATION_STAGE_TAG"
         private const val FRAGMENT_LOGIN_TAG = "FRAGMENT_LOGIN_TAG"
diff --git a/vector/src/main/java/im/vector/app/features/login/LoginWebFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginWebFragment.kt
index daa97d732f..ca21e96d20 100644
--- a/vector/src/main/java/im/vector/app/features/login/LoginWebFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/login/LoginWebFragment.kt
@@ -64,6 +64,7 @@ class LoginWebFragment @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
 
         setupToolbar(views.loginWebToolbar)
+                .allowBack()
     }
 
     override fun updateWithState(state: LoginViewState) {
@@ -78,7 +79,7 @@ class LoginWebFragment @Inject constructor(
     }
 
     private fun setupTitle(state: LoginViewState) {
-        views.loginWebToolbar.title = when (state.signMode) {
+        toolbar?.title = when (state.signMode) {
             SignMode.SignIn -> getString(R.string.login_signin)
             else            -> getString(R.string.login_signup)
         }
@@ -149,7 +150,7 @@ class LoginWebFragment @Inject constructor(
             override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                 super.onPageStarted(view, url, favicon)
 
-                views.loginWebToolbar.subtitle = url
+                toolbar?.subtitle = url
             }
 
             override fun onPageFinished(view: WebView, url: String) {
diff --git a/vector/src/main/java/im/vector/app/features/login2/LoginWebFragment2.kt b/vector/src/main/java/im/vector/app/features/login2/LoginWebFragment2.kt
index 080cce4958..ebe59ee1b9 100644
--- a/vector/src/main/java/im/vector/app/features/login2/LoginWebFragment2.kt
+++ b/vector/src/main/java/im/vector/app/features/login2/LoginWebFragment2.kt
@@ -65,6 +65,7 @@ class LoginWebFragment2 @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
 
         setupToolbar(views.loginWebToolbar)
+                .allowBack()
     }
 
     override fun updateWithState(state: LoginViewState2) {
@@ -79,7 +80,7 @@ class LoginWebFragment2 @Inject constructor(
     }
 
     private fun setupTitle(state: LoginViewState2) {
-        views.loginWebToolbar.title = when (state.signMode) {
+        toolbar?.title = when (state.signMode) {
             SignMode2.SignIn -> getString(R.string.login_signin)
             else            -> getString(R.string.login_signup)
         }
@@ -150,7 +151,7 @@ class LoginWebFragment2 @Inject constructor(
             override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                 super.onPageStarted(view, url, favicon)
 
-                views.loginWebToolbar.subtitle = url
+                toolbar?.subtitle = url
             }
 
             override fun onPageFinished(view: WebView, url: String) {
diff --git a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt
index 84454ee509..a6b166815c 100644
--- a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt
@@ -38,12 +38,9 @@ class BigImageViewerActivity : VectorBaseActivity<ActivityBigImageViewerBinding>
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
-        setSupportActionBar(views.bigImageViewerToolbar)
-        supportActionBar?.apply {
-            title = intent.getStringExtra(EXTRA_TITLE)
-            setHomeButtonEnabled(true)
-            setDisplayHomeAsUpEnabled(true)
-        }
+        setupToolbar(views.bigImageViewerToolbar)
+                .setTitle(intent.getStringExtra(EXTRA_TITLE))
+                .allowBack()
 
         val uri = sessionHolder.getSafeActiveSession()
                 ?.contentUrlResolver()
diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingActivity.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingActivity.kt
index f0cf9464a6..4165d4cb65 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingActivity.kt
@@ -19,10 +19,8 @@ package im.vector.app.features.onboarding
 import android.content.Context
 import android.content.Intent
 import android.net.Uri
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.lazyViewModel
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.core.platform.lifecycleAwareLazy
 import im.vector.app.databinding.ActivityLoginBinding
@@ -31,7 +29,7 @@ import im.vector.app.features.pin.UnlockedActivity
 import javax.inject.Inject
 
 @AndroidEntryPoint
-class OnboardingActivity : VectorBaseActivity<ActivityLoginBinding>(), ToolbarConfigurable, UnlockedActivity {
+class OnboardingActivity : VectorBaseActivity<ActivityLoginBinding>(), UnlockedActivity {
 
     private val onboardingVariant by lifecycleAwareLazy {
         onboardingVariantFactory.create(this, views = views, onboardingViewModel = lazyViewModel(), loginViewModel2 = lazyViewModel())
@@ -43,10 +41,6 @@ class OnboardingActivity : VectorBaseActivity<ActivityLoginBinding>(), ToolbarCo
 
     override fun getCoordinatorLayout() = views.coordinatorLayout
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
-
     override fun onNewIntent(intent: Intent?) {
         super.onNewIntent(intent)
         onboardingVariant.onNewIntent(intent)
diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthWebFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthWebFragment.kt
index d479439a0f..879830a1c0 100644
--- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthWebFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthWebFragment.kt
@@ -69,6 +69,7 @@ class FtueAuthWebFragment @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
 
         setupToolbar(views.loginWebToolbar)
+                .allowBack()
     }
 
     override fun updateWithState(state: OnboardingViewState) {
@@ -83,7 +84,7 @@ class FtueAuthWebFragment @Inject constructor(
     }
 
     private fun setupTitle(state: OnboardingViewState) {
-        views.loginWebToolbar.title = when (state.signMode) {
+        toolbar?.title = when (state.signMode) {
             SignMode.SignIn -> getString(R.string.login_signin)
             else            -> getString(R.string.login_signup)
         }
diff --git a/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt b/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt
index ef79799074..faf15d8006 100644
--- a/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt
@@ -19,15 +19,13 @@ package im.vector.app.features.pin
 import android.content.Context
 import android.content.Intent
 import com.airbnb.mvrx.Mavericks
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 
 @AndroidEntryPoint
-class PinActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarConfigurable, UnlockedActivity {
+class PinActivity : VectorBaseActivity<ActivitySimpleBinding>(), UnlockedActivity {
 
     companion object {
         fun newIntent(context: Context, args: PinArgs): Intent {
@@ -47,8 +45,4 @@ class PinActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarConfigur
             addFragment(views.simpleFragmentContainer, PinFragment::class.java, fragmentArgs)
         }
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
index 1d807654e8..62c7ec848f 100644
--- a/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/poll/create/CreatePollFragment.kt
@@ -49,17 +49,15 @@ class CreatePollFragment @Inject constructor(
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        vectorBaseActivity.setSupportActionBar(views.createPollToolbar)
+
+        setupToolbar(views.createPollToolbar)
+                .allowBack(useCross = true)
 
         views.createPollRecyclerView.configureWith(controller, disableItemAnimation = true)
         // workaround for https://github.com/vector-im/element-android/issues/4735
         views.createPollRecyclerView.setItemViewCacheSize(MAX_OPTIONS_COUNT + 4)
         controller.callback = this
 
-        views.createPollClose.debouncedClicks {
-            requireActivity().finish()
-        }
-
         views.createPollButton.debouncedClicks {
             viewModel.handle(CreatePollAction.OnCreatePoll)
         }
diff --git a/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerFragment.kt b/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerFragment.kt
index 95d3ce4a07..a7231a0c5b 100644
--- a/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerFragment.kt
@@ -38,10 +38,9 @@ class QrCodeScannerFragment @Inject constructor() :
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
-        views.qrScannerClose.debouncedClicks {
-            requireActivity().onBackPressed()
-        }
-        views.qrScannerTitle.text = getString(R.string.verification_scan_their_code)
+        setupToolbar(views.qrScannerToolbar)
+                .setTitle(R.string.verification_scan_their_code)
+                .allowBack(useCross = true)
     }
 
     override fun onResume() {
diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt
index 02df86e14b..0aec24f4ac 100755
--- a/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReportActivity.kt
@@ -45,7 +45,8 @@ class BugReportActivity : VectorBaseActivity<ActivityBugReportBinding>() {
     private var reportType: ReportType = ReportType.BUG_REPORT
 
     override fun initUiAndData() {
-        configureToolbar(views.bugReportToolbar)
+        setupToolbar(views.bugReportToolbar)
+                .allowBack()
         setupViews()
 
         if (bugReporter.screenshot != null) {
diff --git a/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt b/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt
index dc10c89967..7062a5d02d 100644
--- a/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt
@@ -79,7 +79,8 @@ class EmojiReactionPickerActivity : VectorBaseActivity<ActivityEmojiReactionPick
     }
 
     override fun initUiAndData() {
-        configureToolbar(views.emojiPickerToolbar)
+        setupToolbar(views.emojiPickerToolbar)
+                .allowBack()
         emojiCompatFontProvider.let {
             EmojiDrawView.configureTextPaint(this, it.typeface)
             it.addListener(this)
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsFragment.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsFragment.kt
index aa29495b94..b6b8aa9653 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/PublicRoomsFragment.kt
@@ -69,12 +69,8 @@ class PublicRoomsFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
-        vectorBaseActivity.setSupportActionBar(views.publicRoomsToolbar)
-
-        vectorBaseActivity.supportActionBar?.let {
-            it.setDisplayShowHomeEnabled(true)
-            it.setDisplayHomeAsUpEnabled(true)
-        }
+        setupToolbar(views.publicRoomsToolbar)
+                .allowBack()
 
         sharedActionViewModel = activityViewModelProvider.get(RoomDirectorySharedActionViewModel::class.java)
         setupRecyclerView()
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomActivity.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomActivity.kt
index a98d1c2aa6..339c819a65 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomActivity.kt
@@ -22,10 +22,8 @@ import android.content.Intent
 import android.os.Bundle
 import androidx.lifecycle.lifecycleScope
 import com.airbnb.mvrx.Mavericks
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 import im.vector.app.features.analytics.plan.Screen
@@ -38,7 +36,7 @@ import kotlinx.coroutines.flow.onEach
  * Simple container for [CreateRoomFragment]
  */
 @AndroidEntryPoint
-class CreateRoomActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarConfigurable {
+class CreateRoomActivity : VectorBaseActivity<ActivitySimpleBinding>() {
 
     private lateinit var sharedActionViewModel: RoomDirectorySharedActionViewModel
 
@@ -46,10 +44,6 @@ class CreateRoomActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarC
 
     override fun getCoordinatorLayout() = views.coordinatorLayout
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
-
     override fun initUiAndData() {
         if (isFirstCreation()) {
             val fragmentArgs: CreateRoomArgs = intent?.extras?.getParcelable(Mavericks.KEY_ARG) ?: return
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomFragment.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomFragment.kt
index c14c6be2e0..2bd41ae3af 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/createroom/CreateRoomFragment.kt
@@ -83,14 +83,13 @@ class CreateRoomFragment @Inject constructor(
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        vectorBaseActivity.setSupportActionBar(views.createRoomToolbar)
         sharedActionViewModel = activityViewModelProvider.get(RoomDirectorySharedActionViewModel::class.java)
         setupRoomJoinRuleSharedActionViewModel()
         setupWaitingView()
         setupRecyclerView()
-        views.createRoomClose.debouncedClicks {
-            sharedActionViewModel.post(RoomDirectorySharedAction.Back)
-        }
+        setupToolbar(views.createRoomToolbar)
+                .setTitle(if (args.isSpace) R.string.create_new_space else R.string.create_new_room)
+                .allowBack(useCross = true)
         viewModel.observeViewEvents {
             when (it) {
                 CreateRoomViewEvents.Quit       -> vectorBaseActivity.onBackPressed()
@@ -99,11 +98,6 @@ class CreateRoomFragment @Inject constructor(
         }
     }
 
-    override fun onResume() {
-        super.onResume()
-        views.createRoomTitle.text = getString(if (args.isSpace) R.string.create_new_space else R.string.create_new_room)
-    }
-
     private fun setupRoomJoinRuleSharedActionViewModel() {
         roomJoinRuleSharedActionViewModel = activityViewModelProvider.get(RoomJoinRuleSharedActionViewModel::class.java)
         roomJoinRuleSharedActionViewModel
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryPickerFragment.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryPickerFragment.kt
index 9eb08bf492..48610dda7b 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryPickerFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/picker/RoomDirectoryPickerFragment.kt
@@ -20,7 +20,6 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.appcompat.app.AppCompatActivity
 import com.airbnb.mvrx.activityViewModel
 import com.airbnb.mvrx.fragmentViewModel
 import com.airbnb.mvrx.withState
@@ -61,12 +60,9 @@ class RoomDirectoryPickerFragment @Inject constructor(private val roomDirectoryP
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
-        vectorBaseActivity.setSupportActionBar(views.toolbar)
-
-        vectorBaseActivity.supportActionBar?.let {
-            it.setDisplayShowHomeEnabled(true)
-            it.setDisplayHomeAsUpEnabled(true)
-        }
+        setupToolbar(views.toolbar)
+                .setTitle(R.string.select_room_directory)
+                .allowBack()
 
         sharedActionViewModel = activityViewModelProvider.get(RoomDirectorySharedActionViewModel::class.java)
         setupRecyclerView()
@@ -115,11 +111,6 @@ class RoomDirectoryPickerFragment @Inject constructor(private val roomDirectoryP
         pickerViewModel.handle(RoomDirectoryPickerAction.RemoveServer(roomDirectoryServer))
     }
 
-    override fun onResume() {
-        super.onResume()
-        (activity as? AppCompatActivity)?.supportActionBar?.setTitle(R.string.select_room_directory)
-    }
-
     override fun retry() {
         Timber.v("Retry")
         pickerViewModel.handle(RoomDirectoryPickerAction.Retry)
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt
index a317019d49..b69788b1ed 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewActivity.kt
@@ -19,10 +19,8 @@ package im.vector.app.features.roomdirectory.roompreview
 import android.content.Context
 import android.content.Intent
 import android.os.Parcelable
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 import im.vector.app.features.roomdirectory.RoomDirectoryData
@@ -53,7 +51,7 @@ data class RoomPreviewData(
 }
 
 @AndroidEntryPoint
-class RoomPreviewActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarConfigurable {
+class RoomPreviewActivity : VectorBaseActivity<ActivitySimpleBinding>() {
 
     companion object {
         private const val ARG = "ARG"
@@ -83,10 +81,6 @@ class RoomPreviewActivity : VectorBaseActivity<ActivitySimpleBinding>(), Toolbar
 
     override fun getCoordinatorLayout() = views.coordinatorLayout
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
-
     override fun initUiAndData() {
         if (isFirstCreation()) {
             val args = intent.getParcelableExtra<RoomPreviewData>(ARG)
diff --git a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt
index 52617e2f1d..6d0195fae3 100644
--- a/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt
@@ -64,6 +64,7 @@ class RoomPreviewNoPreviewFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupToolbar(views.roomPreviewNoPreviewToolbar)
+                .allowBack()
 
         views.roomPreviewNoPreviewJoin.commonClicked = { roomPreviewViewModel.handle(RoomPreviewAction.Join) }
     }
diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileActivity.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileActivity.kt
index 2d925270b3..1b55207743 100644
--- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileActivity.kt
@@ -22,19 +22,15 @@ import android.content.Intent
 import android.widget.Toast
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.viewModel
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 import im.vector.app.features.room.RequireActiveMembershipViewEvents
 import im.vector.app.features.room.RequireActiveMembershipViewModel
 
 @AndroidEntryPoint
-class RoomMemberProfileActivity :
-        VectorBaseActivity<ActivitySimpleBinding>(),
-        ToolbarConfigurable {
+class RoomMemberProfileActivity : VectorBaseActivity<ActivitySimpleBinding>() {
 
     companion object {
         fun newIntent(context: Context, args: RoomMemberProfileArgs): Intent {
@@ -63,10 +59,6 @@ class RoomMemberProfileActivity :
         }
     }
 
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
-
     private fun handleRoomLeft(roomLeft: RequireActiveMembershipViewEvents.RoomLeft) {
         if (roomLeft.leftMessage != null) {
             Toast.makeText(this, roomLeft.leftMessage, Toast.LENGTH_LONG).show()
diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt
index 91d13b39ed..872f86d44b 100644
--- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt
@@ -97,6 +97,7 @@ class RoomMemberProfileFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupToolbar(views.matrixProfileToolbar)
+                .allowBack()
         val headerView = views.matrixProfileHeaderView.let {
             it.layoutResource = R.layout.view_stub_room_member_profile_header
             it.inflate()
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt
index 7b92007692..4c6d2ed2e3 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt
@@ -23,12 +23,10 @@ import android.widget.Toast
 import androidx.lifecycle.lifecycleScope
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.viewModel
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
 import im.vector.app.core.extensions.addFragmentToBackstack
 import im.vector.app.core.extensions.exhaustive
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 import im.vector.app.features.home.room.detail.RoomDetailPendingActionStore
@@ -47,8 +45,7 @@ import javax.inject.Inject
 
 @AndroidEntryPoint
 class RoomProfileActivity :
-        VectorBaseActivity<ActivitySimpleBinding>(),
-        ToolbarConfigurable {
+        VectorBaseActivity<ActivitySimpleBinding>() {
 
     companion object {
 
@@ -157,8 +154,4 @@ class RoomProfileActivity :
     private fun openRoomNotificationSettings() {
         addFragmentToBackstack(views.simpleFragmentContainer, RoomNotificationSettingsFragment::class.java, roomProfileArgs)
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt
index eb27811f40..8acf53088d 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt
@@ -109,6 +109,7 @@ class RoomProfileFragment @Inject constructor(
         headerViews = ViewStubRoomProfileHeaderBinding.bind(headerView)
         setupWaitingView()
         setupToolbar(views.matrixProfileToolbar)
+                .allowBack()
         setupRecyclerView()
         appBarStateChangeListener = MatrixItemAppBarStateChangeListener(
                 headerView,
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt
index 3128a590ce..e48ce54e6c 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt
@@ -68,6 +68,7 @@ class RoomAliasFragment @Inject constructor(
 
         controller.callback = this
         setupToolbar(views.roomSettingsToolbar)
+                .allowBack()
         views.roomSettingsRecyclerView.configureWith(controller, hasFixedSize = true)
         views.waitingView.waitingStatusText.setText(R.string.please_wait)
         views.waitingView.waitingStatusText.isVisible = true
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt
index c9fc889242..5cd4da009a 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt
@@ -59,6 +59,7 @@ class RoomBannedMemberListFragment @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
         roomMemberListController.callback = this
         setupToolbar(views.roomSettingsToolbar)
+                .allowBack()
         setupSearchView()
         views.roomSettingsRecyclerView.configureWith(roomMemberListController, hasFixedSize = true)
 
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt
index ba7e020ebe..d7a9ecf39b 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt
@@ -58,6 +58,7 @@ class RoomMemberListFragment @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
         roomMemberListController.callback = this
         setupToolbar(views.roomSettingGeneric.roomSettingsToolbar)
+                .allowBack()
         setupSearchView()
         setupInviteUsersButton()
         views.roomSettingGeneric.roomSettingsRecyclerView.configureWith(roomMemberListController, hasFixedSize = true)
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/notifications/RoomNotificationSettingsFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/notifications/RoomNotificationSettingsFragment.kt
index ce0fde32c6..320fdfd833 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/notifications/RoomNotificationSettingsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/notifications/RoomNotificationSettingsFragment.kt
@@ -50,6 +50,7 @@ class RoomNotificationSettingsFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupToolbar(views.roomSettingsToolbar)
+                .allowBack()
         roomNotificationSettingsController.callback = this
         views.roomSettingsRecyclerView.configureWith(roomNotificationSettingsController, hasFixedSize = true)
         setupWaitingView()
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsFragment.kt
index acf01321c9..0d5ac7dea8 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/permissions/RoomPermissionsFragment.kt
@@ -58,6 +58,7 @@ class RoomPermissionsFragment @Inject constructor(
 
         controller.callback = this
         setupToolbar(views.roomSettingsToolbar)
+                .allowBack()
         views.roomSettingsRecyclerView.configureWith(controller, hasFixedSize = true)
         views.waitingView.waitingStatusText.setText(R.string.please_wait)
         views.waitingView.waitingStatusText.isVisible = true
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsFragment.kt
index 3fa0bbaa5b..51f6b247d4 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/settings/RoomSettingsFragment.kt
@@ -85,6 +85,7 @@ class RoomSettingsFragment @Inject constructor(
         setupRoomJoinRuleSharedActionViewModel()
         controller.callback = this
         setupToolbar(views.roomSettingsToolbar)
+                .allowBack()
         views.roomSettingsRecyclerView.configureWith(controller, hasFixedSize = true)
         views.waitingView.waitingStatusText.setText(R.string.please_wait)
         views.waitingView.waitingStatusText.isVisible = true
diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt
index 52368594df..3c1a763072 100644
--- a/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt
@@ -74,6 +74,7 @@ class RoomUploadsFragment @Inject constructor(
         }.attach()
 
         setupToolbar(views.roomUploadsToolbar)
+                .allowBack()
 
         viewModel.observeViewEvents {
             when (it) {
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt
index f502da24ff..725c4ceabc 100755
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt
@@ -63,7 +63,8 @@ class VectorSettingsActivity : VectorBaseActivity<ActivityVectorSettingsBinding>
     @Inject lateinit var session: Session
 
     override fun initUiAndData() {
-        configureToolbar(views.settingsToolbar)
+        setupToolbar(views.settingsToolbar)
+                .allowBack()
 
         if (isFirstCreation()) {
             // display the fragment
diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareActivity.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareActivity.kt
index 294f1d4d91..439d9b64fa 100644
--- a/vector/src/main/java/im/vector/app/features/share/IncomingShareActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareActivity.kt
@@ -16,15 +16,13 @@
 
 package im.vector.app.features.share
 
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleBinding
 
 @AndroidEntryPoint
-class IncomingShareActivity : VectorBaseActivity<ActivitySimpleBinding>(), ToolbarConfigurable {
+class IncomingShareActivity : VectorBaseActivity<ActivitySimpleBinding>() {
 
     override fun getBinding() = ActivitySimpleBinding.inflate(layoutInflater)
 
@@ -35,8 +33,4 @@ class IncomingShareActivity : VectorBaseActivity<ActivitySimpleBinding>(), Toolb
             addFragment(views.simpleFragmentContainer, IncomingShareFragment::class.java)
         }
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar, displayBack = false)
-    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/spaces/explore/SpaceDirectoryFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/explore/SpaceDirectoryFragment.kt
index 2c7da43988..bbf6ac79ca 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/explore/SpaceDirectoryFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/explore/SpaceDirectoryFragment.kt
@@ -104,12 +104,9 @@ class SpaceDirectoryFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
-        vectorBaseActivity.setSupportActionBar(views.toolbar)
+        setupToolbar(views.toolbar)
+                .allowBack()
 
-        vectorBaseActivity.supportActionBar?.let {
-            it.setDisplayShowHomeEnabled(true)
-            it.setDisplayHomeAsUpEnabled(true)
-        }
         epoxyController.listener = this
         views.spaceDirectoryList.configureWith(epoxyController)
         epoxyVisibilityTracker.attach(views.spaceDirectoryList)
@@ -166,13 +163,11 @@ class SpaceDirectoryFragment @Inject constructor(
 
         if (currentParentId == null) {
             // it's the root
-            val title = getString(R.string.space_explore_activity_title)
-            views.toolbar.title = title
+            toolbar?.setTitle(R.string.space_explore_activity_title)
         } else {
-            val title = state.currentRootSummary?.name
+            toolbar?.title = state.currentRootSummary?.name
                     ?: state.currentRootSummary?.canonicalAlias
                     ?: getString(R.string.space_explore_activity_title)
-            views.toolbar.title = title
         }
 
         spaceCardRenderer.render(state.currentRootSummary, emptyList(), this, views.spaceCard)
diff --git a/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedActivity.kt b/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedActivity.kt
index 6076388289..a3ce8cea31 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedActivity.kt
@@ -26,7 +26,6 @@ import com.airbnb.mvrx.Loading
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.Success
 import com.airbnb.mvrx.viewModel
-import com.google.android.material.appbar.MaterialToolbar
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.R
@@ -34,15 +33,13 @@ import im.vector.app.core.error.ErrorFormatter
 import im.vector.app.core.extensions.hideKeyboard
 import im.vector.app.core.extensions.replaceFragment
 import im.vector.app.core.extensions.setTextOrHide
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleLoadingBinding
 import im.vector.app.features.spaces.SpaceBottomSheetSettingsArgs
 import javax.inject.Inject
 
 @AndroidEntryPoint
-class SpaceLeaveAdvancedActivity : VectorBaseActivity<ActivitySimpleLoadingBinding>(),
-        ToolbarConfigurable {
+class SpaceLeaveAdvancedActivity : VectorBaseActivity<ActivitySimpleLoadingBinding>() {
 
     override fun getBinding(): ActivitySimpleLoadingBinding = ActivitySimpleLoadingBinding.inflate(layoutInflater)
 
@@ -113,8 +110,4 @@ class SpaceLeaveAdvancedActivity : VectorBaseActivity<ActivitySimpleLoadingBindi
             }
         }
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedFragment.kt
index b84f870f34..53c7481acb 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/leave/SpaceLeaveAdvancedFragment.kt
@@ -47,6 +47,7 @@ class SpaceLeaveAdvancedFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupToolbar(views.toolbar)
+                .allowBack()
         controller.listener = this
         views.roomList.configureWith(controller)
         views.spaceLeaveCancel.debouncedClicks { requireActivity().finish() }
diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt
index 44de356521..bcf0a8a949 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceAddRoomFragment.kt
@@ -63,12 +63,8 @@ class SpaceAddRoomFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
-        vectorBaseActivity.setSupportActionBar(views.addRoomToSpaceToolbar)
-
-        vectorBaseActivity.supportActionBar?.let {
-            it.setDisplayShowHomeEnabled(true)
-            it.setDisplayHomeAsUpEnabled(true)
-        }
+        setupToolbar(views.addRoomToSpaceToolbar)
+                .allowBack()
 
 //        sharedActionViewModel = activityViewModelProvider.get(RoomDirectorySharedActionViewModel::class.java)
         setupRecyclerView()
@@ -90,7 +86,7 @@ class SpaceAddRoomFragment @Inject constructor(
         }
 
         viewModel.onEach(SpaceAddRoomsState::spaceName) {
-            views.appBarSpaceInfo.text = it
+            toolbar?.subtitle = it
         }
 
         viewModel.onEach(SpaceAddRoomsState::ignoreRooms) {
@@ -115,8 +111,7 @@ class SpaceAddRoomFragment @Inject constructor(
             spaceEpoxyController.disabled = !it
             roomEpoxyController.disabled = it
             views.createNewRoom.text = if (it) getString(R.string.create_space) else getString(R.string.create_new_room)
-            val title = if (it) getString(R.string.space_add_existing_spaces) else getString(R.string.space_add_existing_rooms_only)
-            views.appBarTitle.text = title
+            toolbar?.setTitle(if (it) R.string.space_add_existing_spaces else R.string.space_add_existing_rooms_only)
         }
 
         views.createNewRoom.debouncedClicks {
diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageActivity.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageActivity.kt
index bf1b88c6bf..85f80960b0 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageActivity.kt
@@ -26,13 +26,11 @@ import androidx.lifecycle.lifecycleScope
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.viewModel
 import com.airbnb.mvrx.withState
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.R
 import im.vector.app.core.extensions.addFragmentToBackstack
 import im.vector.app.core.extensions.hideKeyboard
 import im.vector.app.core.extensions.replaceFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivitySimpleLoadingBinding
 import im.vector.app.features.roomdirectory.RoomDirectorySharedAction
@@ -53,8 +51,7 @@ data class SpaceManageArgs(
 ) : Parcelable
 
 @AndroidEntryPoint
-class SpaceManageActivity : VectorBaseActivity<ActivitySimpleLoadingBinding>(),
-        ToolbarConfigurable {
+class SpaceManageActivity : VectorBaseActivity<ActivitySimpleLoadingBinding>() {
 
     private lateinit var sharedDirectoryActionViewModel: RoomDirectorySharedActionViewModel
 
@@ -188,8 +185,4 @@ class SpaceManageActivity : VectorBaseActivity<ActivitySimpleLoadingBinding>(),
             }
         }
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
 }
diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageRoomsFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageRoomsFragment.kt
index 125686d200..43657b6eb8 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageRoomsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceManageRoomsFragment.kt
@@ -66,8 +66,11 @@ class SpaceManageRoomsFragment @Inject constructor(
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
+
         setupToolbar(views.addRoomToSpaceToolbar)
-        views.appBarTitle.text = getString(R.string.space_manage_rooms_and_spaces)
+                .setTitle(R.string.space_manage_rooms_and_spaces)
+                .allowBack()
+
         views.createNewRoom.isVisible = false
         epoxyController.listener = this
         views.roomList.configureWith(epoxyController, hasFixedSize = true, dividerDrawable = R.drawable.divider_horizontal)
@@ -111,14 +114,15 @@ class SpaceManageRoomsFragment @Inject constructor(
         epoxyController.setData(state)
 
         state.spaceSummary.invoke()?.let {
-            views.appBarSpaceInfo.text = it.displayName
+            toolbar?.subtitle = it.displayName
         }
+
         if (state.selectedRooms.isNotEmpty()) {
             if (currentActionMode == null) {
                 views.addRoomToSpaceToolbar.isVisible = true
                 vectorBaseActivity.startSupportActionMode(this)
             } else {
-                currentActionMode?.title = "${state.selectedRooms.size} selected"
+                toolbar?.title = "${state.selectedRooms.size} selected"
             }
 //            views.addRoomToSpaceToolbar.isVisible = false
 //            views.addRoomToSpaceToolbar.startActionMode(this)
diff --git a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceSettingsFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceSettingsFragment.kt
index a3d0252c19..266d08fd12 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceSettingsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/manage/SpaceSettingsFragment.kt
@@ -85,6 +85,7 @@ class SpaceSettingsFragment @Inject constructor(
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         setupToolbar(views.roomSettingsToolbar)
+                .allowBack()
         // roomProfileSharedActionViewModel = activityViewModelProvider.get(RoomProfileSharedActionViewModel::class.java)
 //        setupRoomHistoryVisibilitySharedActionViewModel()
         setupRoomJoinRuleSharedActionViewModel()
diff --git a/vector/src/main/java/im/vector/app/features/spaces/people/SpacePeopleFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/people/SpacePeopleFragment.kt
index c5cfed6974..5b2d6bed7b 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/people/SpacePeopleFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/people/SpacePeopleFragment.kt
@@ -64,9 +64,9 @@ class SpacePeopleFragment @Inject constructor(
     }
 
     override fun invalidate() = withState(membersViewModel) { memberListState ->
-        views.appBarTitle.text = getString(R.string.bottom_action_people)
         val memberCount = (memberListState.roomSummary.invoke()?.otherMemberIds?.size ?: 0) + 1
-        views.appBarSpaceInfo.text = resources.getQuantityString(R.plurals.room_title_members, memberCount, memberCount)
+
+        toolbar?.subtitle = resources.getQuantityString(R.plurals.room_title_members, memberCount, memberCount)
 //        views.listBuildingProgress.isVisible = true
         epoxyController.setData(memberListState)
     }
@@ -78,17 +78,12 @@ class SpacePeopleFragment @Inject constructor(
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
+
+        setupToolbar(views.addRoomToSpaceToolbar)
+                .allowBack()
         setupRecyclerView()
         setupSearchView()
 
-        views.addRoomToSpaceToolbar.navigationIcon = drawableProvider.getDrawable(
-                R.drawable.ic_close_24dp,
-                colorProvider.getColorFromAttribute(R.attr.vctr_content_primary)
-        )
-        views.addRoomToSpaceToolbar.setNavigationOnClickListener {
-            sharedActionViewModel.post(SpacePeopleSharedAction.Dismiss)
-        }
-
         viewModel.observeViewEvents {
             handleViewEvents(it)
         }
diff --git a/vector/src/main/java/im/vector/app/features/usercode/ScanUserCodeFragment.kt b/vector/src/main/java/im/vector/app/features/usercode/ScanUserCodeFragment.kt
index 389256871e..a7d632bd7b 100644
--- a/vector/src/main/java/im/vector/app/features/usercode/ScanUserCodeFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/usercode/ScanUserCodeFragment.kt
@@ -55,6 +55,10 @@ class ScanUserCodeFragment @Inject constructor() :
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
+
+        setupToolbar(views.qrScannerToolbar)
+                .allowBack(useCross = true)
+
         views.userCodeMyCodeButton.debouncedClicks {
             sharedViewModel.handle(UserCodeActions.SwitchMode(UserCodeState.Mode.SHOW))
         }
@@ -62,10 +66,6 @@ class ScanUserCodeFragment @Inject constructor() :
         views.userCodeOpenGalleryButton.debouncedClicks {
             MultiPicker.get(MultiPicker.IMAGE).single().startWith(pickImageActivityResultLauncher)
         }
-
-        views.userCodeClose.debouncedClicks {
-            requireActivity().onBackPressed()
-        }
     }
 
     private val openCameraActivityResultLauncher = registerForPermissionsResult { allGranted, _ ->
diff --git a/vector/src/main/java/im/vector/app/features/usercode/ShowUserCodeFragment.kt b/vector/src/main/java/im/vector/app/features/usercode/ShowUserCodeFragment.kt
index b794b23d0e..a31b0d3a25 100644
--- a/vector/src/main/java/im/vector/app/features/usercode/ShowUserCodeFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/usercode/ShowUserCodeFragment.kt
@@ -52,9 +52,9 @@ class ShowUserCodeFragment @Inject constructor(
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-        views.showUserCodeClose.debouncedClicks {
-            sharedViewModel.handle(UserCodeActions.DismissAction)
-        }
+        setupToolbar(views.showUserCodeToolBar)
+                .allowBack(useCross = true)
+
         views.showUserCodeScanButton.debouncedClicks {
             if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), openCameraActivityResultLauncher)) {
                 doOpenQRCodeScanner()
diff --git a/vector/src/main/java/im/vector/app/features/userdirectory/UserListFragment.kt b/vector/src/main/java/im/vector/app/features/userdirectory/UserListFragment.kt
index 721bce4af9..6ac6270fc7 100644
--- a/vector/src/main/java/im/vector/app/features/userdirectory/UserListFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/userdirectory/UserListFragment.kt
@@ -72,9 +72,9 @@ class UserListFragment @Inject constructor(
         super.onViewCreated(view, savedInstanceState)
         sharedActionViewModel = activityViewModelProvider.get(UserListSharedActionViewModel::class.java)
         if (args.showToolbar) {
-            views.userListTitle.text = args.title
-            vectorBaseActivity.setSupportActionBar(views.userListToolbar)
-            setupCloseView()
+            setupToolbar(views.userListToolbar)
+                    .setTitle(args.title)
+                    .allowBack(useCross = true)
             views.userListToolbar.isVisible = true
         } else {
             views.userListToolbar.isVisible = false
@@ -153,12 +153,6 @@ class UserListFragment @Inject constructor(
         views.userListSearch.requestFocus()
     }
 
-    private fun setupCloseView() {
-        views.userListClose.debouncedClicks {
-            requireActivity().finish()
-        }
-    }
-
     override fun invalidate() = withState(viewModel) {
         userListController.setData(it)
     }
diff --git a/vector/src/main/java/im/vector/app/features/webview/VectorWebViewActivity.kt b/vector/src/main/java/im/vector/app/features/webview/VectorWebViewActivity.kt
index ab7913a99c..fd26fff017 100644
--- a/vector/src/main/java/im/vector/app/features/webview/VectorWebViewActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/webview/VectorWebViewActivity.kt
@@ -44,7 +44,8 @@ class VectorWebViewActivity : VectorBaseActivity<ActivityVectorWebViewBinding>()
     }
 
     override fun initUiAndData() {
-        configureToolbar(views.webviewToolbar)
+        setupToolbar(views.webviewToolbar)
+                .allowBack()
         waitingView = views.simpleWebviewLoader
 
         views.simpleWebview.settings.apply {
diff --git a/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt b/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt
index 1e6d130c67..963bd9521c 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt
@@ -22,11 +22,9 @@ import android.content.Intent
 import androidx.core.view.isVisible
 import com.airbnb.mvrx.Mavericks
 import com.airbnb.mvrx.viewModel
-import com.google.android.material.appbar.MaterialToolbar
 import dagger.hilt.android.AndroidEntryPoint
 import im.vector.app.R
 import im.vector.app.core.extensions.addFragment
-import im.vector.app.core.platform.ToolbarConfigurable
 import im.vector.app.core.platform.VectorBaseActivity
 import im.vector.app.databinding.ActivityWidgetBinding
 import im.vector.app.features.widgets.permissions.RoomWidgetPermissionBottomSheet
@@ -36,8 +34,7 @@ import org.matrix.android.sdk.api.session.events.model.Content
 import java.io.Serializable
 
 @AndroidEntryPoint
-class WidgetActivity : VectorBaseActivity<ActivityWidgetBinding>(),
-        ToolbarConfigurable {
+class WidgetActivity : VectorBaseActivity<ActivityWidgetBinding>() {
 
     companion object {
         private const val WIDGET_FRAGMENT_TAG = "WIDGET_FRAGMENT_TAG"
@@ -77,7 +74,8 @@ class WidgetActivity : VectorBaseActivity<ActivityWidgetBinding>(),
             finish()
             return
         }
-        configure(views.toolbar)
+        setupToolbar(views.toolbar)
+                .allowBack()
         views.toolbar.isVisible = widgetArgs.kind.nameRes != 0
         viewModel.observeViewEvents {
             when (it) {
@@ -129,8 +127,4 @@ class WidgetActivity : VectorBaseActivity<ActivityWidgetBinding>(),
         }
         finish()
     }
-
-    override fun configure(toolbar: MaterialToolbar) {
-        configureToolbar(toolbar)
-    }
 }
diff --git a/vector/src/main/res/layout/activity_call.xml b/vector/src/main/res/layout/activity_call.xml
index 2238f96c9f..5734e5f92a 100644
--- a/vector/src/main/res/layout/activity_call.xml
+++ b/vector/src/main/res/layout/activity_call.xml
@@ -41,10 +41,10 @@
             android:layout_width="@dimen/call_pip_width"
             android:layout_height="@dimen/call_pip_height"
             android:layout_marginEnd="16dp"
-            app:layout_goneMarginEnd="0dp"
             app:cardCornerRadius="@dimen/call_pip_radius"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent">
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_goneMarginEnd="0dp">
 
             <org.webrtc.SurfaceViewRenderer
                 android:id="@+id/pipRenderer"
@@ -104,11 +104,8 @@
         app:navigationIcon="@drawable/ic_back_24dp"
         app:navigationIconTint="@color/element_background_light"
         app:subtitle="3:10"
-        app:subtitleTextAppearance="@style/TextAppearance.Vector.Caption"
         app:subtitleTextColor="@color/element_background_light"
         app:title="Video call"
-        app:titleMarginTop="16dp"
-        app:titleTextAppearance="@style/TextAppearance.Vector.Body.Medium"
         app:titleTextColor="@color/element_background_light" />
 
     <ImageView
diff --git a/vector/src/main/res/layout/fragment_contacts_book.xml b/vector/src/main/res/layout/fragment_contacts_book.xml
index ad23fc9f8f..ac983f9c6f 100644
--- a/vector/src/main/res/layout/fragment_contacts_book.xml
+++ b/vector/src/main/res/layout/fragment_contacts_book.xml
@@ -19,49 +19,8 @@
             <com.google.android.material.appbar.MaterialToolbar
                 android:id="@+id/phoneBookToolbar"
                 android:layout_width="match_parent"
-                android:layout_height="?actionBarSize">
-
-                <androidx.constraintlayout.widget.ConstraintLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent">
-
-                    <ImageView
-                        android:id="@+id/phoneBookClose"
-                        android:layout_width="@dimen/layout_touch_size"
-                        android:layout_height="@dimen/layout_touch_size"
-                        android:clickable="true"
-                        android:contentDescription="@string/action_close"
-                        android:focusable="true"
-                        android:foreground="?attr/selectableItemBackground"
-                        android:scaleType="center"
-                        android:src="@drawable/ic_x_18dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintStart_toStartOf="parent"
-                        app:layout_constraintTop_toTopOf="parent"
-                        app:tint="?vctr_content_secondary"
-                        tools:ignore="MissingPrefix" />
-
-                    <TextView
-                        android:id="@+id/phoneBookTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
-                        android:layout_width="0dp"
-                        android:layout_height="wrap_content"
-                        android:layout_marginStart="8dp"
-                        android:layout_marginEnd="8dp"
-                        android:ellipsize="end"
-                        android:maxLines="1"
-                        android:text="@string/contacts_book_title"
-                        android:textColor="?vctr_content_primary"
-                        android:textStyle="bold"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintEnd_toEndOf="parent"
-                        app:layout_constraintHorizontal_bias="0.0"
-                        app:layout_constraintStart_toEndOf="@id/phoneBookClose"
-                        app:layout_constraintTop_toTopOf="parent" />
-
-                </androidx.constraintlayout.widget.ConstraintLayout>
-
-            </com.google.android.material.appbar.MaterialToolbar>
+                android:layout_height="?actionBarSize"
+                app:title="@string/contacts_book_title"/>
 
             <com.google.android.material.textfield.TextInputLayout
                 android:id="@+id/phoneBookFilterContainer"
diff --git a/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml b/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml
index 85c92c5225..ae0c743952 100644
--- a/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml
+++ b/vector/src/main/res/layout/fragment_create_direct_room_directory_users.xml
@@ -19,49 +19,8 @@
             <com.google.android.material.appbar.MaterialToolbar
                 android:id="@+id/createRoomToolbar"
                 android:layout_width="match_parent"
-                android:layout_height="?actionBarSize">
-
-                <androidx.constraintlayout.widget.ConstraintLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent">
-
-                    <ImageView
-                        android:id="@+id/createDirectRoomClose"
-                        android:layout_width="@dimen/layout_touch_size"
-                        android:layout_height="@dimen/layout_touch_size"
-                        android:clickable="true"
-                        android:contentDescription="@string/action_close"
-                        android:focusable="true"
-                        android:foreground="?attr/selectableItemBackground"
-                        android:scaleType="center"
-                        android:src="@drawable/ic_x_18dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintStart_toStartOf="parent"
-                        app:layout_constraintTop_toTopOf="parent"
-                        app:tint="?vctr_content_secondary"
-                        tools:ignore="MissingPrefix" />
-
-                    <TextView
-                        android:id="@+id/createDirectRoomTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
-                        android:layout_width="0dp"
-                        android:layout_height="wrap_content"
-                        android:layout_marginStart="8dp"
-                        android:layout_marginEnd="8dp"
-                        android:ellipsize="end"
-                        android:maxLines="1"
-                        android:text="@string/direct_chats_header"
-                        android:textColor="?vctr_content_primary"
-                        android:textStyle="bold"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintEnd_toEndOf="parent"
-                        app:layout_constraintHorizontal_bias="0.0"
-                        app:layout_constraintStart_toEndOf="@id/createDirectRoomClose"
-                        app:layout_constraintTop_toTopOf="parent" />
-
-                </androidx.constraintlayout.widget.ConstraintLayout>
-
-            </com.google.android.material.appbar.MaterialToolbar>
+                android:layout_height="?actionBarSize"
+                app:title="@string/direct_chats_header" />
 
             <com.google.android.material.textfield.TextInputLayout
                 android:id="@+id/createDirectRoomSearchByIdContainer"
diff --git a/vector/src/main/res/layout/fragment_create_poll.xml b/vector/src/main/res/layout/fragment_create_poll.xml
index 3a9baef270..a9e45649f4 100644
--- a/vector/src/main/res/layout/fragment_create_poll.xml
+++ b/vector/src/main/res/layout/fragment_create_poll.xml
@@ -15,49 +15,7 @@
             android:id="@+id/createPollToolbar"
             android:layout_width="match_parent"
             android:layout_height="?actionBarSize"
-            app:contentInsetStart="0dp">
-
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent">
-
-                <ImageView
-                    android:id="@+id/createPollClose"
-                    android:layout_width="@dimen/layout_touch_size"
-                    android:layout_height="@dimen/layout_touch_size"
-                    android:clickable="true"
-                    android:contentDescription="@string/action_close"
-                    android:focusable="true"
-                    android:foreground="?attr/selectableItemBackground"
-                    android:scaleType="center"
-                    android:src="@drawable/ic_x_18dp"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent"
-                    app:tint="?vctr_content_secondary"
-                    tools:ignore="MissingPrefix" />
-
-                <TextView
-                    android:id="@+id/createPollTitle"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:maxLines="1"
-                    android:text="@string/create_poll_title"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintHorizontal_bias="0.0"
-                    app:layout_constraintStart_toEndOf="@id/createPollClose"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
+            app:title="@string/create_poll_title" />
 
     </com.google.android.material.appbar.AppBarLayout>
 
diff --git a/vector/src/main/res/layout/fragment_create_room.xml b/vector/src/main/res/layout/fragment_create_room.xml
index 5607f2be69..7deb1786e1 100644
--- a/vector/src/main/res/layout/fragment_create_room.xml
+++ b/vector/src/main/res/layout/fragment_create_room.xml
@@ -19,46 +19,8 @@
             <com.google.android.material.appbar.MaterialToolbar
                 android:id="@+id/createRoomToolbar"
                 android:layout_width="match_parent"
-                android:layout_height="?actionBarSize">
-
-                <androidx.constraintlayout.widget.ConstraintLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent">
-
-                    <ImageView
-                        android:id="@+id/createRoomClose"
-                        android:layout_width="@dimen/layout_touch_size"
-                        android:layout_height="@dimen/layout_touch_size"
-                        android:contentDescription="@string/action_close"
-                        android:scaleType="center"
-                        android:src="@drawable/ic_x_18dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintStart_toStartOf="parent"
-                        app:layout_constraintTop_toTopOf="parent"
-                        app:tint="?vctr_content_secondary"
-                        tools:ignore="MissingPrefix" />
-
-                    <TextView
-                        android:id="@+id/createRoomTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
-                        android:layout_width="0dp"
-                        android:layout_height="wrap_content"
-                        android:layout_marginStart="8dp"
-                        android:layout_marginEnd="8dp"
-                        android:ellipsize="end"
-                        android:maxLines="1"
-                        android:text="@string/create_room_title"
-                        android:textColor="?vctr_content_primary"
-                        android:textStyle="bold"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintEnd_toEndOf="parent"
-                        app:layout_constraintHorizontal_bias="0.0"
-                        app:layout_constraintStart_toEndOf="@id/createRoomClose"
-                        app:layout_constraintTop_toTopOf="parent" />
-
-                </androidx.constraintlayout.widget.ConstraintLayout>
-
-            </com.google.android.material.appbar.MaterialToolbar>
+                android:layout_height="?actionBarSize"
+                app:title="@string/direct_chats_header" />
 
         </com.google.android.material.appbar.AppBarLayout>
 
diff --git a/vector/src/main/res/layout/fragment_home_detail.xml b/vector/src/main/res/layout/fragment_home_detail.xml
index 7bdcbca5d5..a53f001125 100644
--- a/vector/src/main/res/layout/fragment_home_detail.xml
+++ b/vector/src/main/res/layout/fragment_home_detail.xml
@@ -86,19 +86,19 @@
 
                     <TextView
                         android:id="@+id/groupToolbarTitleView"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:ellipsize="end"
                         android:gravity="start"
                         android:maxLines="1"
+                        android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                         android:textColor="?vctr_content_primary"
                         android:textStyle="bold"
                         tools:text="@tools:sample/lorem/random" />
 
                     <TextView
                         android:id="@+id/groupToolbarSpaceTitleView"
-                        style="@style/Widget.Vector.TextView.Subtitle"
+                        style="@style/TextAppearance.Vector.Widget.ActionBarSubTitle"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:ellipsize="end"
diff --git a/vector/src/main/res/layout/fragment_matrix_profile.xml b/vector/src/main/res/layout/fragment_matrix_profile.xml
index f6f6af96ea..9d09e78eb3 100644
--- a/vector/src/main/res/layout/fragment_matrix_profile.xml
+++ b/vector/src/main/res/layout/fragment_matrix_profile.xml
@@ -71,7 +71,6 @@
 
                     <TextView
                         android:id="@+id/matrixProfileToolbarTitleView"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_marginStart="8dp"
@@ -79,6 +78,7 @@
                         android:alpha="0"
                         android:ellipsize="end"
                         android:maxLines="1"
+                        android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                         android:textColor="?vctr_content_primary"
                         app:layout_constraintBottom_toBottomOf="parent"
                         app:layout_constraintEnd_toEndOf="parent"
diff --git a/vector/src/main/res/layout/fragment_qr_code_scanner.xml b/vector/src/main/res/layout/fragment_qr_code_scanner.xml
index 59e732d0b8..c17c0d90da 100644
--- a/vector/src/main/res/layout/fragment_qr_code_scanner.xml
+++ b/vector/src/main/res/layout/fragment_qr_code_scanner.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <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:layout_width="match_parent"
     android:layout_height="match_parent">
 
@@ -11,54 +10,13 @@
         android:layout_height="wrap_content"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
+        app:layout_constraintTop_toBottomOf="@id/appBarLayout">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/qrScannerToolbar"
             android:layout_width="match_parent"
-            android:layout_height="?actionBarSize">
-
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent">
-
-                <ImageView
-                    android:id="@+id/qrScannerClose"
-                    android:layout_width="@dimen/layout_touch_size"
-                    android:layout_height="@dimen/layout_touch_size"
-                    android:clickable="true"
-                    android:contentDescription="@string/action_close"
-                    android:focusable="true"
-                    android:foreground="?attr/selectableItemBackground"
-                    android:scaleType="center"
-                    android:src="@drawable/ic_x_18dp"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent"
-                    app:tint="?vctr_content_secondary"
-                    tools:ignore="MissingPrefix" />
-
-                <TextView
-                    android:id="@+id/qrScannerTitle"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:maxLines="1"
-                    android:text="@string/add_by_qr_code"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintHorizontal_bias="0.0"
-                    app:layout_constraintStart_toEndOf="@id/qrScannerClose"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
+            android:layout_height="?actionBarSize"
+            app:title="@string/add_by_qr_code" />
 
     </com.google.android.material.appbar.AppBarLayout>
 
diff --git a/vector/src/main/res/layout/fragment_qr_code_scanner_with_button.xml b/vector/src/main/res/layout/fragment_qr_code_scanner_with_button.xml
index 68e8187f5d..88b07a7655 100644
--- a/vector/src/main/res/layout/fragment_qr_code_scanner_with_button.xml
+++ b/vector/src/main/res/layout/fragment_qr_code_scanner_with_button.xml
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <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:layout_width="match_parent"
     android:layout_height="match_parent">
 
@@ -16,49 +15,8 @@
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/qrScannerToolbar"
             android:layout_width="match_parent"
-            android:layout_height="?actionBarSize">
-
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent">
-
-                <ImageView
-                    android:id="@+id/userCodeClose"
-                    android:layout_width="@dimen/layout_touch_size"
-                    android:layout_height="@dimen/layout_touch_size"
-                    android:clickable="true"
-                    android:contentDescription="@string/action_close"
-                    android:focusable="true"
-                    android:foreground="?attr/selectableItemBackground"
-                    android:scaleType="center"
-                    android:src="@drawable/ic_x_18dp"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent"
-                    app:tint="?vctr_content_secondary"
-                    tools:ignore="MissingPrefix" />
-
-                <TextView
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:maxLines="1"
-                    android:text="@string/user_code_scan"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintHorizontal_bias="0.0"
-                    app:layout_constraintStart_toEndOf="@id/userCodeClose"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
-
+            android:layout_height="?actionBarSize"
+            app:title="@string/user_code_scan" />
     </com.google.android.material.appbar.AppBarLayout>
 
     <me.dm7.barcodescanner.zxing.ZXingScannerView
diff --git a/vector/src/main/res/layout/fragment_recyclerview_with_search.xml b/vector/src/main/res/layout/fragment_recyclerview_with_search.xml
index 1ea9c0cbf4..4f7e78971c 100644
--- a/vector/src/main/res/layout/fragment_recyclerview_with_search.xml
+++ b/vector/src/main/res/layout/fragment_recyclerview_with_search.xml
@@ -27,42 +27,8 @@
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
             android:minHeight="0dp"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlways">
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical|start"
-                android:orientation="vertical">
-
-                <TextView
-                    android:id="@+id/appBarTitle"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:gravity="start|center"
-                    android:maxLines="1"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold"
-                    tools:text="@tools:sample/lorem/random" />
-
-                <TextView
-                    android:id="@+id/appBarSpaceInfo"
-                    style="@style/Widget.Vector.TextView.Subtitle"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:gravity="start|center"
-                    android:maxLines="1"
-                    android:textColor="?vctr_content_secondary"
-                    tools:text="@tools:sample/lorem/random" />
-
-            </LinearLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
+            app:title="@string/bottom_action_people"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlways"/>
 
         <androidx.appcompat.widget.SearchView
             android:id="@+id/memberNameFilter"
diff --git a/vector/src/main/res/layout/fragment_room_detail.xml b/vector/src/main/res/layout/fragment_room_detail.xml
index 81d515f28c..65c106d6f3 100644
--- a/vector/src/main/res/layout/fragment_room_detail.xml
+++ b/vector/src/main/res/layout/fragment_room_detail.xml
@@ -85,14 +85,13 @@
 
                 <TextView
                     android:id="@+id/roomToolbarTitleView"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="4dp"
                     android:layout_marginEnd="8dp"
                     android:ellipsize="end"
                     android:maxLines="1"
-                    android:textColor="?vctr_content_primary"
+                    android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                     app:layout_constraintBottom_toTopOf="@id/roomToolbarSubtitleView"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintHorizontal_bias="0.0"
@@ -104,14 +103,13 @@
 
                 <TextView
                     android:id="@+id/roomToolbarSubtitleView"
-                    style="@style/Widget.Vector.TextView.Body"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="7dp"
                     android:layout_marginEnd="8dp"
                     android:ellipsize="end"
                     android:maxLines="1"
-                    android:textColor="?vctr_content_primary"
+                    android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarSubTitle"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintHorizontal_bias="0.0"
diff --git a/vector/src/main/res/layout/fragment_room_preview_no_preview.xml b/vector/src/main/res/layout/fragment_room_preview_no_preview.xml
index a3210907b8..b21ee5aa69 100644
--- a/vector/src/main/res/layout/fragment_room_preview_no_preview.xml
+++ b/vector/src/main/res/layout/fragment_room_preview_no_preview.xml
@@ -39,13 +39,13 @@
 
                     <TextView
                         android:id="@+id/roomPreviewNoPreviewToolbarTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_marginStart="8dp"
                         android:layout_marginEnd="8dp"
                         android:ellipsize="end"
                         android:maxLines="1"
+                        android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                         android:textColor="?vctr_content_primary"
                         app:layout_constraintBottom_toBottomOf="parent"
                         app:layout_constraintEnd_toEndOf="parent"
diff --git a/vector/src/main/res/layout/fragment_room_setting_generic.xml b/vector/src/main/res/layout/fragment_room_setting_generic.xml
index b342a2cbbb..887145faf5 100644
--- a/vector/src/main/res/layout/fragment_room_setting_generic.xml
+++ b/vector/src/main/res/layout/fragment_room_setting_generic.xml
@@ -48,13 +48,13 @@
 
                 <TextView
                     android:id="@+id/roomSettingsToolbarTitleView"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="8dp"
                     android:layout_marginEnd="8dp"
                     android:ellipsize="end"
                     android:maxLines="1"
+                    android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                     android:textColor="?vctr_content_primary"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
diff --git a/vector/src/main/res/layout/fragment_room_uploads.xml b/vector/src/main/res/layout/fragment_room_uploads.xml
index a38201d79e..4de5391ee3 100644
--- a/vector/src/main/res/layout/fragment_room_uploads.xml
+++ b/vector/src/main/res/layout/fragment_room_uploads.xml
@@ -46,13 +46,13 @@
 
                 <TextView
                     android:id="@+id/roomUploadsToolbarTitleView"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="8dp"
                     android:layout_marginEnd="8dp"
                     android:ellipsize="end"
                     android:maxLines="1"
+                    android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                     android:textColor="?vctr_content_primary"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
diff --git a/vector/src/main/res/layout/fragment_space_add_rooms.xml b/vector/src/main/res/layout/fragment_space_add_rooms.xml
index e622a7b4d9..c8ec4a78d1 100644
--- a/vector/src/main/res/layout/fragment_space_add_rooms.xml
+++ b/vector/src/main/res/layout/fragment_space_add_rooms.xml
@@ -24,42 +24,8 @@
             android:id="@+id/addRoomToSpaceToolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
-            android:minHeight="0dp">
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical|start"
-                android:orientation="vertical">
-
-                <TextView
-                    android:id="@+id/appBarTitle"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:gravity="start|center"
-                    android:maxLines="1"
-                    android:text="@string/space_add_existing_rooms"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold" />
-
-                <TextView
-                    android:id="@+id/appBarSpaceInfo"
-                    style="@style/Widget.Vector.TextView.Subtitle"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:gravity="start|center"
-                    android:maxLines="1"
-                    android:textColor="?vctr_content_secondary"
-                    tools:text="@sample/spaces.json/data/name" />
-
-            </LinearLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
+            android:minHeight="0dp"
+            app:title="@string/space_add_existing_rooms"/>
 
         <androidx.appcompat.widget.SearchView
             android:id="@+id/publicRoomsFilter"
diff --git a/vector/src/main/res/layout/fragment_space_leave_advanced.xml b/vector/src/main/res/layout/fragment_space_leave_advanced.xml
index 2c50ebe001..6216636458 100644
--- a/vector/src/main/res/layout/fragment_space_leave_advanced.xml
+++ b/vector/src/main/res/layout/fragment_space_leave_advanced.xml
@@ -25,30 +25,8 @@
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
             android:minHeight="0dp"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlways">
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_vertical|start"
-                android:orientation="vertical">
-
-                <TextView
-                    android:id="@+id/appBarTitle"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:gravity="start|center"
-                    android:maxLines="1"
-                    android:text="@string/pick_tings_to_leave"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold" />
-
-            </LinearLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
+            app:title="@string/pick_tings_to_leave"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlways"/>
 
         <androidx.appcompat.widget.SearchView
             android:id="@+id/publicRoomsFilter"
diff --git a/vector/src/main/res/layout/fragment_space_preview.xml b/vector/src/main/res/layout/fragment_space_preview.xml
index f361bb7363..789c387db6 100644
--- a/vector/src/main/res/layout/fragment_space_preview.xml
+++ b/vector/src/main/res/layout/fragment_space_preview.xml
@@ -41,13 +41,13 @@
 
                     <TextView
                         android:id="@+id/roomPreviewNoPreviewToolbarTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_marginStart="8dp"
                         android:layout_marginEnd="8dp"
                         android:ellipsize="end"
                         android:maxLines="1"
+                        android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                         android:textColor="?vctr_content_primary"
                         app:layout_constraintBottom_toBottomOf="parent"
                         app:layout_constraintEnd_toEndOf="parent"
diff --git a/vector/src/main/res/layout/fragment_space_restricted_select.xml b/vector/src/main/res/layout/fragment_space_restricted_select.xml
index 1f60e6851d..202df7c56c 100644
--- a/vector/src/main/res/layout/fragment_space_restricted_select.xml
+++ b/vector/src/main/res/layout/fragment_space_restricted_select.xml
@@ -33,17 +33,17 @@
                     android:padding="8dp">
 
                     <TextView
-                        style="@style/Widget.Vector.TextView.ActionBarTitle"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
-                        android:text="@string/select_spaces" />
+                        android:text="@string/select_spaces"
+                        android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle" />
 
                     <TextView
-                        style="@style/Widget.Vector.TextView.Body"
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
                         android:paddingTop="8dp"
                         android:text="@string/decide_which_spaces_can_access"
+                        android:textAppearance="@style/Widget.Vector.TextView.Subtitle"
                         android:textColor="?vctr_content_secondary" />
                 </LinearLayout>
 
@@ -92,8 +92,8 @@
         android:paddingEnd="16dp">
 
         <Button
-            style="@style/Widget.Vector.Button.Positive"
             android:id="@+id/okButton"
+            style="@style/Widget.Vector.Button.Positive"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="@string/ok" />
diff --git a/vector/src/main/res/layout/fragment_user_code_show.xml b/vector/src/main/res/layout/fragment_user_code_show.xml
index a19f426abd..59b60d1c3b 100644
--- a/vector/src/main/res/layout/fragment_user_code_show.xml
+++ b/vector/src/main/res/layout/fragment_user_code_show.xml
@@ -19,46 +19,8 @@
             <com.google.android.material.appbar.MaterialToolbar
                 android:id="@+id/showUserCodeToolBar"
                 android:layout_width="match_parent"
-                android:layout_height="?actionBarSize">
-
-                <androidx.constraintlayout.widget.ConstraintLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent">
-
-                    <ImageView
-                        android:id="@+id/showUserCodeClose"
-                        android:layout_width="@dimen/layout_touch_size"
-                        android:layout_height="@dimen/layout_touch_size"
-                        android:contentDescription="@string/action_close"
-                        android:scaleType="center"
-                        android:src="@drawable/ic_x_18dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintStart_toStartOf="parent"
-                        app:layout_constraintTop_toTopOf="parent"
-                        app:tint="?vctr_content_secondary"
-                        tools:ignore="MissingPrefix" />
-
-                    <TextView
-                        android:id="@+id/showUserCodeTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
-                        android:layout_width="0dp"
-                        android:layout_height="wrap_content"
-                        android:layout_marginStart="8dp"
-                        android:layout_marginEnd="8dp"
-                        android:ellipsize="end"
-                        android:maxLines="1"
-                        android:text="@string/add_by_qr_code"
-                        android:textColor="?vctr_content_primary"
-                        android:textStyle="bold"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:layout_constraintEnd_toEndOf="parent"
-                        app:layout_constraintHorizontal_bias="0.0"
-                        app:layout_constraintStart_toEndOf="@id/showUserCodeClose"
-                        app:layout_constraintTop_toTopOf="parent" />
-
-                </androidx.constraintlayout.widget.ConstraintLayout>
-
-            </com.google.android.material.appbar.MaterialToolbar>
+                android:layout_height="?actionBarSize"
+                app:title="@string/add_by_qr_code"/>
 
         </com.google.android.material.appbar.AppBarLayout>
 
diff --git a/vector/src/main/res/layout/fragment_user_directory.xml b/vector/src/main/res/layout/fragment_user_directory.xml
index 039f04f8e4..a75517c728 100644
--- a/vector/src/main/res/layout/fragment_user_directory.xml
+++ b/vector/src/main/res/layout/fragment_user_directory.xml
@@ -43,7 +43,6 @@
 
                     <TextView
                         android:id="@+id/userDirectoryTitle"
-                        style="@style/Widget.Vector.TextView.HeadlineMedium"
                         android:layout_width="0dp"
                         android:layout_height="wrap_content"
                         android:layout_marginStart="8dp"
@@ -51,6 +50,7 @@
                         android:ellipsize="end"
                         android:maxLines="1"
                         android:text="@string/direct_chats_header"
+                        android:textAppearance="@style/TextAppearance.Vector.Widget.ActionBarTitle"
                         android:textColor="?vctr_content_primary"
                         android:textStyle="bold"
                         app:layout_constraintBottom_toBottomOf="parent"
diff --git a/vector/src/main/res/layout/fragment_user_list.xml b/vector/src/main/res/layout/fragment_user_list.xml
index ef5c6a7e6a..b3149f05c5 100644
--- a/vector/src/main/res/layout/fragment_user_list.xml
+++ b/vector/src/main/res/layout/fragment_user_list.xml
@@ -14,49 +14,8 @@
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/userListToolbar"
             android:layout_width="match_parent"
-            android:layout_height="?actionBarSize">
-
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent">
-
-                <ImageView
-                    android:id="@+id/userListClose"
-                    android:layout_width="@dimen/layout_touch_size"
-                    android:layout_height="@dimen/layout_touch_size"
-                    android:clickable="true"
-                    android:contentDescription="@string/action_close"
-                    android:focusable="true"
-                    android:foreground="?attr/selectableItemBackground"
-                    android:scaleType="center"
-                    android:src="@drawable/ic_x_18dp"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent"
-                    app:tint="?vctr_content_secondary"
-                    tools:ignore="MissingPrefix" />
-
-                <TextView
-                    android:id="@+id/userListTitle"
-                    style="@style/Widget.Vector.TextView.HeadlineMedium"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:layout_marginEnd="8dp"
-                    android:ellipsize="end"
-                    android:maxLines="1"
-                    android:text="@string/fab_menu_create_chat"
-                    android:textColor="?vctr_content_primary"
-                    android:textStyle="bold"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintHorizontal_bias="0.0"
-                    app:layout_constraintStart_toEndOf="@id/userListClose"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-        </com.google.android.material.appbar.MaterialToolbar>
+            android:layout_height="?actionBarSize"
+            app:title="@string/fab_menu_create_chat"/>
 
     </com.google.android.material.appbar.AppBarLayout>