diff --git a/changelog.d/7038.feature b/changelog.d/7038.feature
new file mode 100644
index 00000000000..b7a0fbce6e5
--- /dev/null
+++ b/changelog.d/7038.feature
@@ -0,0 +1 @@
+Adds New App Layout into Labs
diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml
index cbd56dc7eaf..6b702e25726 100644
--- a/library/ui-strings/src/main/res/values/strings.xml
+++ b/library/ui-strings/src/main/res/values/strings.xml
@@ -439,6 +439,9 @@
Activity
A - Z
+ Enable new layout
+ A simplified Element with optional tabs
+
Invites
Low priority
diff --git a/vector-app/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt b/vector-app/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt
index ad11d953d4b..d4878b8dcc4 100644
--- a/vector-app/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt
+++ b/vector-app/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt
@@ -21,6 +21,7 @@ import androidx.test.espresso.IdlingPolicies
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.GrantPermissionRule
import im.vector.app.R
import im.vector.app.espresso.tools.ScreenshotFailureRule
@@ -28,6 +29,7 @@ import im.vector.app.features.MainActivity
import im.vector.app.getString
import im.vector.app.ui.robot.ElementRobot
import im.vector.app.ui.robot.settings.labs.LabFeature
+import im.vector.app.ui.robot.settings.labs.LabFeaturesPreferences
import im.vector.app.ui.robot.withDeveloperMode
import org.junit.Rule
import org.junit.Test
@@ -49,7 +51,14 @@ class UiAllScreensSanityTest {
.around(GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE))
.around(ScreenshotFailureRule())
- private val elementRobot = ElementRobot()
+ private val elementRobot = ElementRobot(
+ LabFeaturesPreferences(
+ InstrumentationRegistry.getInstrumentation()
+ .targetContext
+ .resources
+ .getBoolean(R.bool.settings_labs_new_app_layout_default)
+ )
+ )
// Last passing:
// 2020-11-09
diff --git a/vector-app/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt b/vector-app/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt
index e2f7ea33737..b70fcfec251 100644
--- a/vector-app/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt
+++ b/vector-app/src/androidTest/java/im/vector/app/ui/robot/ElementRobot.kt
@@ -37,8 +37,6 @@ import im.vector.app.espresso.tools.clickOnPreference
import im.vector.app.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilDialogVisible
import im.vector.app.espresso.tools.waitUntilViewVisible
-import im.vector.app.features.DefaultVectorFeatures
-import im.vector.app.features.VectorFeatures
import im.vector.app.features.createdirect.CreateDirectRoomActivity
import im.vector.app.features.home.HomeActivity
import im.vector.app.features.onboarding.OnboardingActivity
@@ -46,13 +44,14 @@ import im.vector.app.features.settings.VectorSettingsActivity
import im.vector.app.initialSyncIdlingResource
import im.vector.app.ui.robot.settings.SettingsRobot
import im.vector.app.ui.robot.settings.labs.LabFeature
+import im.vector.app.ui.robot.settings.labs.LabFeaturesPreferences
import im.vector.app.ui.robot.space.SpaceRobot
import im.vector.app.withIdlingResource
import timber.log.Timber
-class ElementRobot {
- private val features: VectorFeatures = DefaultVectorFeatures()
-
+class ElementRobot(
+ private val labsPreferences: LabFeaturesPreferences = LabFeaturesPreferences(false)
+) {
fun onboarding(block: OnboardingRobot.() -> Unit) {
block(OnboardingRobot())
}
@@ -83,7 +82,7 @@ class ElementRobot {
}
fun settings(shouldGoBack: Boolean = true, block: SettingsRobot.() -> Unit) {
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
onView(withId((R.id.avatar))).perform(click())
} else {
openDrawer()
@@ -96,7 +95,7 @@ class ElementRobot {
}
fun newDirectMessage(block: NewDirectMessageRobot.() -> Unit) {
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
clickOn(R.id.newLayoutCreateChatButton)
waitUntilDialogVisible(withId(R.id.start_chat))
clickOn(R.id.start_chat)
@@ -111,29 +110,29 @@ class ElementRobot {
closeSoftKeyboard()
block(NewDirectMessageRobot())
pressBack()
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
pressBack() // close create dialog
}
waitUntilViewVisible(withId(R.id.roomListContainer))
}
fun newRoom(block: NewRoomRobot.() -> Unit) {
- if (!features.isNewAppLayoutEnabled()) {
+ if (!labsPreferences.isNewAppLayoutEnabled) {
clickOn(R.id.bottom_action_rooms)
}
- RoomListRobot().newRoom { block() }
- if (features.isNewAppLayoutEnabled()) {
+ RoomListRobot(labsPreferences).newRoom { block() }
+ if (labsPreferences.isNewAppLayoutEnabled) {
pressBack() // close create dialog
}
waitUntilViewVisible(withId(R.id.roomListContainer))
}
fun roomList(block: RoomListRobot.() -> Unit) {
- if (!features.isNewAppLayoutEnabled()) {
+ if (!labsPreferences.isNewAppLayoutEnabled) {
clickOn(R.id.bottom_action_rooms)
}
- block(RoomListRobot())
+ block(RoomListRobot(labsPreferences))
waitUntilViewVisible(withId(R.id.roomListContainer))
}
@@ -174,7 +173,7 @@ class ElementRobot {
}
fun signout(expectSignOutWarning: Boolean) {
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
onView(withId((R.id.avatar)))
.perform(click())
waitUntilActivityVisible {
@@ -224,7 +223,7 @@ class ElementRobot {
}
fun space(block: SpaceRobot.() -> Unit) {
- block(SpaceRobot())
+ block(SpaceRobot(labsPreferences))
}
}
diff --git a/vector-app/src/androidTest/java/im/vector/app/ui/robot/NewRoomRobot.kt b/vector-app/src/androidTest/java/im/vector/app/ui/robot/NewRoomRobot.kt
index 3d82fa4a65e..0cea26d5cca 100644
--- a/vector-app/src/androidTest/java/im/vector/app/ui/robot/NewRoomRobot.kt
+++ b/vector-app/src/androidTest/java/im/vector/app/ui/robot/NewRoomRobot.kt
@@ -23,16 +23,16 @@ import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.DefaultVectorFeatures
import im.vector.app.features.VectorFeatures
+import im.vector.app.ui.robot.settings.labs.LabFeaturesPreferences
class NewRoomRobot(
- var createdRoom: Boolean = false
+ var createdRoom: Boolean = false,
+ private val labsPreferences: LabFeaturesPreferences
) {
private val features: VectorFeatures = DefaultVectorFeatures()
fun createNewRoom(block: CreateNewRoomRobot.() -> Unit) {
- if (features.isNewAppLayoutEnabled()) {
- clickOn(R.string.create_new_room)
- }
+ clickOn(R.string.create_new_room)
waitUntilViewVisible(withId(R.id.createRoomForm))
val createNewRoomRobot = CreateNewRoomRobot()
block(createNewRoomRobot)
diff --git a/vector-app/src/androidTest/java/im/vector/app/ui/robot/RoomListRobot.kt b/vector-app/src/androidTest/java/im/vector/app/ui/robot/RoomListRobot.kt
index 71ccad0870b..e4984aeed02 100644
--- a/vector-app/src/androidTest/java/im/vector/app/ui/robot/RoomListRobot.kt
+++ b/vector-app/src/androidTest/java/im/vector/app/ui/robot/RoomListRobot.kt
@@ -28,12 +28,10 @@ import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilDialogVisible
-import im.vector.app.features.DefaultVectorFeatures
-import im.vector.app.features.VectorFeatures
import im.vector.app.features.roomdirectory.RoomDirectoryActivity
+import im.vector.app.ui.robot.settings.labs.LabFeaturesPreferences
-class RoomListRobot {
- private val features: VectorFeatures = DefaultVectorFeatures()
+class RoomListRobot(private val labsPreferences: LabFeaturesPreferences) {
fun openRoom(roomName: String, block: RoomDetailRobot.() -> Unit) {
clickOn(roomName)
@@ -53,7 +51,7 @@ class RoomListRobot {
}
fun newRoom(block: NewRoomRobot.() -> Unit) {
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
clickOn(R.id.newLayoutCreateChatButton)
waitUntilDialogVisible(ViewMatchers.withId(R.id.create_room))
clickOn(R.id.create_room)
@@ -63,7 +61,7 @@ class RoomListRobot {
BaristaVisibilityAssertions.assertDisplayed(R.id.publicRoomsList)
}
}
- val newRoomRobot = NewRoomRobot()
+ val newRoomRobot = NewRoomRobot(false, labsPreferences)
block(newRoomRobot)
if (!newRoomRobot.createdRoom) {
pressBack()
diff --git a/vector-app/src/androidTest/java/im/vector/app/ui/robot/settings/labs/LabFeaturesPreferences.kt b/vector-app/src/androidTest/java/im/vector/app/ui/robot/settings/labs/LabFeaturesPreferences.kt
new file mode 100644
index 00000000000..8f36e7ae23c
--- /dev/null
+++ b/vector-app/src/androidTest/java/im/vector/app/ui/robot/settings/labs/LabFeaturesPreferences.kt
@@ -0,0 +1,19 @@
+/*
+ * 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.ui.robot.settings.labs
+
+data class LabFeaturesPreferences(val isNewAppLayoutEnabled: Boolean)
diff --git a/vector-app/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt b/vector-app/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt
index 8b69b431079..e8ff58ba6a7 100644
--- a/vector-app/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt
+++ b/vector-app/src/androidTest/java/im/vector/app/ui/robot/space/SpaceRobot.kt
@@ -30,13 +30,14 @@ import im.vector.app.espresso.tools.waitUntilDialogVisible
import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.DefaultVectorFeatures
import im.vector.app.features.VectorFeatures
+import im.vector.app.ui.robot.settings.labs.LabFeaturesPreferences
import org.hamcrest.Matchers
-class SpaceRobot {
+class SpaceRobot(private val labsPreferences: LabFeaturesPreferences) {
private val features: VectorFeatures = DefaultVectorFeatures()
fun createSpace(isFirstSpace: Boolean, block: SpaceCreateRobot.() -> Unit) {
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
clickOn(R.id.newLayoutOpenSpacesButton)
if (isFirstSpace) {
waitUntilDialogVisible(ViewMatchers.withId(R.id.spaces_empty_group))
@@ -59,7 +60,7 @@ class SpaceRobot {
}
fun spaceMenu(spaceName: String, block: SpaceMenuRobot.() -> Unit) {
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
clickOn(R.id.newLayoutOpenSpacesButton)
waitUntilDialogVisible(ViewMatchers.withId(R.id.groupListView))
} else {
@@ -73,7 +74,7 @@ class SpaceRobot {
fun openMenu(spaceName: String) {
waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView))
- if (features.isNewAppLayoutEnabled()) {
+ if (labsPreferences.isNewAppLayoutEnabled) {
Espresso.onView(ViewMatchers.withId(R.id.groupListView))
.perform(
RecyclerViewActions.actionOnItem(
@@ -95,7 +96,7 @@ class SpaceRobot {
}
fun selectSpace(spaceName: String) {
- if (!features.isNewAppLayoutEnabled()) {
+ if (!labsPreferences.isNewAppLayoutEnabled) {
openDrawer()
waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView))
}
diff --git a/vector-config/src/main/res/values/config-settings.xml b/vector-config/src/main/res/values/config-settings.xml
index b2cd21c3dec..1701fd45b03 100755
--- a/vector-config/src/main/res/values/config-settings.xml
+++ b/vector-config/src/main/res/values/config-settings.xml
@@ -38,6 +38,7 @@
false
+ false
true
false
diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
index c127e3aed63..9b2711a8c3d 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
@@ -88,7 +88,7 @@ class DebugFeaturesStateFactory @Inject constructor(
createBooleanFeature(
label = "Enable New App Layout",
key = DebugFeatureKeys.newAppLayoutEnabled,
- factory = VectorFeatures::isNewAppLayoutEnabled
+ factory = VectorFeatures::isNewAppLayoutFeatureEnabled
),
createBooleanFeature(
label = "Enable New Device Management",
diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
index 003b9b8084f..bb4cae3201e 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
@@ -76,8 +76,8 @@ class DebugVectorFeatures(
override fun shouldStartDmOnFirstMessage(): Boolean = read(DebugFeatureKeys.startDmOnFirstMsg)
?: vectorFeatures.shouldStartDmOnFirstMessage()
- override fun isNewAppLayoutEnabled(): Boolean = read(DebugFeatureKeys.newAppLayoutEnabled)
- ?: vectorFeatures.isNewAppLayoutEnabled()
+ override fun isNewAppLayoutFeatureEnabled(): Boolean = read(DebugFeatureKeys.newAppLayoutEnabled)
+ ?: vectorFeatures.isNewAppLayoutFeatureEnabled()
override fun isNewDeviceManagementEnabled(): Boolean = read(DebugFeatureKeys.newDeviceManagementEnabled)
?: vectorFeatures.isNewDeviceManagementEnabled()
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 4e7b174772b..c2c66ae69ee 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
@@ -249,7 +249,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), Maver
initUiAndData()
- if (vectorFeatures.isNewAppLayoutEnabled()) {
+ if (vectorPreferences.isNewAppLayoutEnabled()) {
tryOrNull { // Add to XML theme when feature flag is removed
val toolbarBackground = MaterialColors.getColor(views.root, R.attr.vctr_toolbar_background)
window.statusBarColor = toolbarBackground
diff --git a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt
index 951cca67354..dbdb0ba1c7c 100644
--- a/vector/src/main/java/im/vector/app/features/VectorFeatures.kt
+++ b/vector/src/main/java/im/vector/app/features/VectorFeatures.kt
@@ -18,6 +18,7 @@ package im.vector.app.features
import im.vector.app.config.Config
import im.vector.app.config.OnboardingVariant
+import im.vector.app.features.settings.VectorPreferences
interface VectorFeatures {
@@ -33,7 +34,13 @@ interface VectorFeatures {
fun isLocationSharingEnabled(): Boolean
fun forceUsageOfOpusEncoder(): Boolean
fun shouldStartDmOnFirstMessage(): Boolean
- fun isNewAppLayoutEnabled(): Boolean
+
+ /**
+ * This is only to enable if the labs flag should be visible and effective.
+ * If on the client-side you want functionality that should be enabled with the new layout,
+ * use [VectorPreferences.isNewAppLayoutEnabled] instead.
+ */
+ fun isNewAppLayoutFeatureEnabled(): Boolean
fun isNewDeviceManagementEnabled(): Boolean
}
@@ -50,6 +57,6 @@ class DefaultVectorFeatures : VectorFeatures {
override fun isLocationSharingEnabled() = Config.ENABLE_LOCATION_SHARING
override fun forceUsageOfOpusEncoder(): Boolean = false
override fun shouldStartDmOnFirstMessage(): Boolean = false
- override fun isNewAppLayoutEnabled(): Boolean = true
+ override fun isNewAppLayoutFeatureEnabled(): Boolean = true
override fun isNewDeviceManagementEnabled(): Boolean = false
}
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 ca6f65d77e6..8a624b23d9a 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
@@ -201,7 +201,7 @@ class HomeActivity :
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- isNewAppLayoutEnabled = vectorFeatures.isNewAppLayoutEnabled()
+ isNewAppLayoutEnabled = vectorPreferences.isNewAppLayoutEnabled()
analyticsScreenName = MobileScreen.ScreenName.Home
supportFragmentManager.registerFragmentLifecycleCallbacks(fragmentLifecycleCallbacks, false)
unifiedPushHelper.register(this) {
@@ -217,12 +217,13 @@ class HomeActivity :
roomListSharedActionViewModel = viewModelProvider[RoomListSharedActionViewModel::class.java]
views.drawerLayout.addDrawerListener(drawerListener)
if (isFirstCreation()) {
- if (vectorFeatures.isNewAppLayoutEnabled()) {
+ if (vectorPreferences.isNewAppLayoutEnabled()) {
views.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
replaceFragment(views.homeDetailFragmentContainer, NewHomeDetailFragment::class.java)
} else {
replaceFragment(views.homeDetailFragmentContainer, HomeDetailFragment::class.java)
replaceFragment(views.homeDrawerFragmentContainer, HomeDrawerFragment::class.java)
+ views.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
}
}
@@ -581,12 +582,12 @@ class HomeActivity :
}
private fun checkNewAppLayoutFlagChange() {
- if (buildMeta.isDebug && vectorFeatures.isNewAppLayoutEnabled() != isNewAppLayoutEnabled) {
+ if (buildMeta.isDebug && vectorPreferences.isNewAppLayoutEnabled() != isNewAppLayoutEnabled) {
restart()
}
}
- override fun getMenuRes() = if (vectorFeatures.isNewAppLayoutEnabled()) R.menu.menu_new_home else R.menu.menu_home
+ override fun getMenuRes() = if (vectorPreferences.isNewAppLayoutEnabled()) R.menu.menu_new_home else R.menu.menu_home
override fun handlePrepareMenu(menu: Menu) {
menu.findItem(R.id.menu_home_init_sync_legacy).isVisible = vectorPreferences.developerMode()
diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt
index 123ad2d83ed..6aba9eefcf3 100644
--- a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt
+++ b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt
@@ -120,7 +120,7 @@ class HomeActivityViewModel @AssistedInject constructor(
private fun observeReleaseNotes() = withState { state ->
// we don't want to show release notes for new users or after relogin
- if (state.authenticationDescription == null && vectorFeatures.isNewAppLayoutEnabled()) {
+ if (state.authenticationDescription == null && vectorPreferences.isNewAppLayoutEnabled()) {
releaseNotesPreferencesStore.appLayoutOnboardingShown.onEach { isAppLayoutOnboardingShown ->
if (!isAppLayoutOnboardingShown) {
_viewEvents.post(HomeActivityViewEvents.ShowReleaseNotes)
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
index 5e0cdf3baf2..fca931eaef3 100755
--- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt
@@ -27,6 +27,7 @@ import im.vector.app.R
import im.vector.app.core.di.DefaultSharedPreferences
import im.vector.app.core.resources.BuildMeta
import im.vector.app.core.time.Clock
+import im.vector.app.features.VectorFeatures
import im.vector.app.features.disclaimer.SHARED_PREF_KEY
import im.vector.app.features.home.ShortcutsHandler
import im.vector.app.features.homeserver.ServerUrlsRepository
@@ -39,6 +40,7 @@ class VectorPreferences @Inject constructor(
private val context: Context,
private val clock: Clock,
private val buildMeta: BuildMeta,
+ private val vectorFeatures: VectorFeatures,
) {
companion object {
@@ -63,6 +65,7 @@ class VectorPreferences @Inject constructor(
const val SETTINGS_BACKGROUND_SYNC_PREFERENCE_KEY = "SETTINGS_BACKGROUND_SYNC_PREFERENCE_KEY"
const val SETTINGS_BACKGROUND_SYNC_DIVIDER_PREFERENCE_KEY = "SETTINGS_BACKGROUND_SYNC_DIVIDER_PREFERENCE_KEY"
const val SETTINGS_LABS_PREFERENCE_KEY = "SETTINGS_LABS_PREFERENCE_KEY"
+ const val SETTINGS_LABS_NEW_APP_LAYOUT_KEY = "SETTINGS_LABS_NEW_APP_LAYOUT_KEY"
const val SETTINGS_CRYPTOGRAPHY_PREFERENCE_KEY = "SETTINGS_CRYPTOGRAPHY_PREFERENCE_KEY"
const val SETTINGS_CRYPTOGRAPHY_DIVIDER_PREFERENCE_KEY = "SETTINGS_CRYPTOGRAPHY_DIVIDER_PREFERENCE_KEY"
const val SETTINGS_CRYPTOGRAPHY_MANAGE_PREFERENCE_KEY = "SETTINGS_CRYPTOGRAPHY_MANAGE_PREFERENCE_KEY"
@@ -1151,6 +1154,14 @@ class VectorPreferences @Inject constructor(
return spaceIdsJoined?.takeIf { it.isNotEmpty() }?.split(",").orEmpty()
}
+ /**
+ * Indicates whether or not new app layout is enabled.
+ */
+ fun isNewAppLayoutEnabled(): Boolean {
+ return vectorFeatures.isNewAppLayoutFeatureEnabled() &&
+ defaultPrefs.getBoolean(SETTINGS_LABS_NEW_APP_LAYOUT_KEY, getDefault(R.bool.settings_labs_new_app_layout_default))
+ }
+
fun showLiveSenderInfo(): Boolean {
return defaultPrefs.getBoolean(SETTINGS_TIMELINE_SHOW_LIVE_SENDER_INFO, getDefault(R.bool.settings_timeline_show_live_sender_info_default))
}
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt
index c1253f4ab4d..18bc35f72a3 100644
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsLabsFragment.kt
@@ -75,8 +75,22 @@ class VectorSettingsLabsFragment :
}
}
- findPreference(VectorPreferences.SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB)!!.let {
- it.isVisible = !vectorFeatures.isNewAppLayoutEnabled()
+ findPreference(VectorPreferences.SETTINGS_LABS_NEW_APP_LAYOUT_KEY)?.let { pref ->
+ pref.isVisible = vectorFeatures.isNewAppLayoutFeatureEnabled()
+
+ pref.onPreferenceClickListener = Preference.OnPreferenceClickListener {
+ onNewLayoutPreferenceClicked()
+ true
+ }
+ }
+
+ configureUnreadNotificationsAsTabPreference()
+ }
+
+ private fun configureUnreadNotificationsAsTabPreference() {
+ findPreference(VectorPreferences.SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB)?.let { pref ->
+ pref.isVisible = !vectorFeatures.isNewAppLayoutFeatureEnabled()
+ pref.isEnabled = !vectorPreferences.isNewAppLayoutEnabled()
}
}
@@ -119,4 +133,11 @@ class VectorSettingsLabsFragment :
displayLoadingView()
MainActivity.restartApp(requireActivity(), MainActivityArgs(clearCache = true))
}
+
+ /**
+ * Action when new layout preference switch is actually clicked.
+ */
+ private fun onNewLayoutPreferenceClicked() {
+ configureUnreadNotificationsAsTabPreference()
+ }
}
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt
index 135c25cd8d4..3c8ec56713a 100644
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt
@@ -102,7 +102,8 @@ class VectorSettingsPreferencesFragment :
}
findPreference(VectorPreferences.SETTINGS_PREF_SPACE_CATEGORY)!!.let { pref ->
- pref.isVisible = !vectorFeatures.isNewAppLayoutEnabled()
+ pref.isVisible = !vectorFeatures.isNewAppLayoutFeatureEnabled()
+ pref.isEnabled = !vectorPreferences.isNewAppLayoutEnabled()
}
// Url preview
diff --git a/vector/src/main/java/im/vector/app/features/spaces/SpaceListFragment.kt b/vector/src/main/java/im/vector/app/features/spaces/SpaceListFragment.kt
index 0153d64df72..27a118e4dcf 100644
--- a/vector/src/main/java/im/vector/app/features/spaces/SpaceListFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/spaces/SpaceListFragment.kt
@@ -35,11 +35,11 @@ import im.vector.app.core.extensions.configureWith
import im.vector.app.core.platform.StateView
import im.vector.app.core.platform.VectorBaseFragment
import im.vector.app.databinding.FragmentSpaceListBinding
-import im.vector.app.features.VectorFeatures
import im.vector.app.features.home.HomeActivitySharedAction
import im.vector.app.features.home.HomeSharedActionViewModel
import im.vector.app.features.home.room.list.actions.RoomListSharedAction
import im.vector.app.features.home.room.list.actions.RoomListSharedActionViewModel
+import im.vector.app.features.settings.VectorPreferences
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import javax.inject.Inject
@@ -58,7 +58,7 @@ class SpaceListFragment :
@Inject lateinit var spaceController: SpaceSummaryController
@Inject lateinit var newSpaceController: NewSpaceSummaryController
- @Inject lateinit var vectorFeatures: VectorFeatures
+ @Inject lateinit var vectorPreferences: VectorPreferences
private lateinit var homeActivitySharedActionViewModel: HomeSharedActionViewModel
private lateinit var roomListSharedActionViewModel: RoomListSharedActionViewModel
@@ -79,7 +79,7 @@ class SpaceListFragment :
}
private fun setupSpaceController() {
- if (vectorFeatures.isNewAppLayoutEnabled()) {
+ if (vectorPreferences.isNewAppLayoutEnabled()) {
newSpaceController.callback = this
views.groupListView.configureWith(newSpaceController)
} else {
@@ -169,7 +169,7 @@ class SpaceListFragment :
else -> Unit
}
- if (vectorFeatures.isNewAppLayoutEnabled()) {
+ if (vectorPreferences.isNewAppLayoutEnabled()) {
newSpaceController.update(state)
} else {
spaceController.update(state)
diff --git a/vector/src/main/res/xml/vector_settings_labs.xml b/vector/src/main/res/xml/vector_settings_labs.xml
index 80b71a1f753..f61d5fe7bc3 100644
--- a/vector/src/main/res/xml/vector_settings_labs.xml
+++ b/vector/src/main/res/xml/vector_settings_labs.xml
@@ -83,4 +83,10 @@
android:summary="@string/labs_enable_element_call_permission_shortcuts_summary"
android:title="@string/labs_enable_element_call_permission_shortcuts" />
+
+