diff --git a/changelog.d/7889.feature b/changelog.d/7889.feature
new file mode 100644
index 00000000000..5cb6313e6a5
--- /dev/null
+++ b/changelog.d/7889.feature
@@ -0,0 +1 @@
+New settings "Appearance"
diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml
index 38aecaf2152..9bf4fe0236f 100644
--- a/library/ui-strings/src/main/res/values/strings.xml
+++ b/library/ui-strings/src/main/res/values/strings.xml
@@ -1724,6 +1724,7 @@
General
+ Appearance
Preferences
Security & Privacy
Push Rules
diff --git a/vector-config/src/main/res/values/config-settings.xml b/vector-config/src/main/res/values/config-settings.xml
index a8695eed44d..caf6a3f784c 100755
--- a/vector-config/src/main/res/values/config-settings.xml
+++ b/vector-config/src/main/res/values/config-settings.xml
@@ -10,6 +10,7 @@
true
+ true
true
true
true
diff --git a/vector/src/main/java/im/vector/app/features/analytics/plan/MobileScreen.kt b/vector/src/main/java/im/vector/app/features/analytics/plan/MobileScreen.kt
index 7ea41e2d782..474b1560b48 100644
--- a/vector/src/main/java/im/vector/app/features/analytics/plan/MobileScreen.kt
+++ b/vector/src/main/java/im/vector/app/features/analytics/plan/MobileScreen.kt
@@ -205,6 +205,11 @@ data class MobileScreen(
*/
Settings,
+ /**
+ * The appearance settings screen.
+ */
+ SettingsAppearance,
+
/**
* The advanced settings screen (developer mode, rageshake, push
* notification rules).
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAppearanceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAppearanceFragment.kt
new file mode 100644
index 00000000000..dd0871741aa
--- /dev/null
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsAppearanceFragment.kt
@@ -0,0 +1,94 @@
+/*
+ * 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.
+ */
+
+@file:Suppress("UNUSED_VARIABLE", "UNUSED_ANONYMOUS_PARAMETER", "UNUSED_PARAMETER")
+
+package im.vector.app.features.settings
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.preference.Preference
+import dagger.hilt.android.AndroidEntryPoint
+import im.vector.app.R
+import im.vector.app.core.extensions.restart
+import im.vector.app.core.preference.VectorListPreference
+import im.vector.app.core.preference.VectorPreference
+import im.vector.app.features.VectorFeatures
+import im.vector.app.features.analytics.plan.MobileScreen
+import im.vector.app.features.settings.font.FontScaleSettingActivity
+import im.vector.app.features.themes.ThemeUtils
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class VectorSettingsAppearanceFragment :
+ VectorSettingsBaseFragment() {
+
+ @Inject lateinit var vectorPreferences: VectorPreferences
+ @Inject lateinit var vectorFeatures: VectorFeatures
+ @Inject lateinit var fontScalePreferences: FontScalePreferences
+
+ override var titleRes = R.string.settings_appearance_title
+ override val preferenceXmlRes = R.xml.vector_settings_appearance
+
+ private val textSizePreference by lazy {
+ findPreference(VectorPreferences.SETTINGS_INTERFACE_TEXT_SIZE_KEY)!!
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ analyticsScreenName = MobileScreen.ScreenName.SettingsAppearance
+ }
+
+ override fun bindPref() {
+ // user interface preferences
+ setUserInterfacePreferences()
+
+ // Themes
+ findPreference(ThemeUtils.APPLICATION_THEME_KEY)!!
+ .onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
+ if (newValue is String) {
+ ThemeUtils.setApplicationTheme(requireContext().applicationContext, newValue)
+ // Restart the Activity
+ activity?.restart()
+ true
+ } else {
+ false
+ }
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ }
+
+ // ==============================================================================================================
+ // user interface management
+ // ==============================================================================================================
+
+ private fun setUserInterfacePreferences() {
+ // Text size
+ textSizePreference.summary = getString(fontScalePreferences.getResolvedFontScaleValue().nameResId)
+
+ textSizePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
+ startActivity(Intent(activity, FontScaleSettingActivity::class.java))
+ true
+ }
+ }
+}
diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt
index 548a7be1804..585f87b26f4 100644
--- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt
+++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt
@@ -85,6 +85,7 @@ class VectorSettingsGeneralFragment :
override val preferenceXmlRes = R.xml.vector_settings_general
private lateinit var galleryOrCameraDialogHelper: GalleryOrCameraDialogHelper
+ @Inject lateinit var vectorLocale: VectorLocale
private val mUserSettingsCategory by lazy {
findPreference(VectorPreferences.SETTINGS_USER_SETTINGS_PREFERENCE_KEY)!!
@@ -98,6 +99,9 @@ class VectorSettingsGeneralFragment :
private val mPasswordPreference by lazy {
findPreference(VectorPreferences.SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY)!!
}
+ private val selectedLanguagePreference by lazy {
+ findPreference(VectorPreferences.SETTINGS_INTERFACE_LANGUAGE_PREFERENCE_KEY)!!
+ }
private val mIdentityServerPreference by lazy {
findPreference(VectorPreferences.SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY)!!
}
@@ -161,6 +165,9 @@ class VectorSettingsGeneralFragment :
}
override fun bindPref() {
+ // user interface preferences
+ setUserInterfacePreferences()
+
// Avatar
mUserAvatarPreference.let {
it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
@@ -498,4 +505,9 @@ class VectorSettingsGeneralFragment :
}
}
}
+
+ private fun setUserInterfacePreferences() {
+ // Selected language
+ selectedLanguagePreference.summary = vectorLocale.localeToLocalisedString(vectorLocale.applicationLocale)
+ }
}
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 073d5f74688..8435c72701f 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
@@ -17,7 +17,6 @@
package im.vector.app.features.settings
import android.content.Context
-import android.content.Intent
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
@@ -25,16 +24,12 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.hilt.android.AndroidEntryPoint
import im.vector.app.R
import im.vector.app.core.dialogs.PhotoOrVideoDialog
-import im.vector.app.core.extensions.restart
-import im.vector.app.core.preference.VectorListPreference
import im.vector.app.core.preference.VectorPreference
import im.vector.app.core.preference.VectorSwitchPreference
import im.vector.app.features.MainActivity
import im.vector.app.features.MainActivityArgs
import im.vector.app.features.VectorFeatures
import im.vector.app.features.analytics.plan.MobileScreen
-import im.vector.app.features.settings.font.FontScaleSettingActivity
-import im.vector.app.features.themes.ThemeUtils
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.session.presence.model.PresenceEnum
import javax.inject.Inject
@@ -44,19 +39,12 @@ class VectorSettingsPreferencesFragment :
VectorSettingsBaseFragment() {
@Inject lateinit var vectorPreferences: VectorPreferences
- @Inject lateinit var fontScalePreferences: FontScalePreferences
@Inject lateinit var vectorFeatures: VectorFeatures
@Inject lateinit var vectorLocale: VectorLocale
override var titleRes = R.string.settings_preferences
override val preferenceXmlRes = R.xml.vector_settings_preferences
- private val selectedLanguagePreference by lazy {
- findPreference(VectorPreferences.SETTINGS_INTERFACE_LANGUAGE_PREFERENCE_KEY)!!
- }
- private val textSizePreference by lazy {
- findPreference(VectorPreferences.SETTINGS_INTERFACE_TEXT_SIZE_KEY)!!
- }
private val takePhotoOrVideoPreference by lazy {
findPreference("SETTINGS_INTERFACE_TAKE_PHOTO_VIDEO")!!
}
@@ -67,22 +55,6 @@ class VectorSettingsPreferencesFragment :
}
override fun bindPref() {
- // user interface preferences
- setUserInterfacePreferences()
-
- // Themes
- findPreference(ThemeUtils.APPLICATION_THEME_KEY)!!
- .onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
- if (newValue is String) {
- ThemeUtils.setApplicationTheme(requireContext().applicationContext, newValue)
- // Restart the Activity
- activity?.restart()
- true
- } else {
- false
- }
- }
-
findPreference(VectorPreferences.SETTINGS_PRESENCE_USER_ALWAYS_APPEARS_OFFLINE)!!.let { pref ->
pref.isChecked = vectorPreferences.userAlwaysAppearsOffline()
pref.setOnPreferenceChangeListener { _, newValue ->
@@ -192,21 +164,4 @@ class VectorSettingsPreferencesFragment :
}
)
}
-
- // ==============================================================================================================
- // user interface management
- // ==============================================================================================================
-
- private fun setUserInterfacePreferences() {
- // Selected language
- selectedLanguagePreference.summary = vectorLocale.localeToLocalisedString(vectorLocale.applicationLocale)
-
- // Text size
- textSizePreference.summary = getString(fontScalePreferences.getResolvedFontScaleValue().nameResId)
-
- textSizePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
- startActivity(Intent(activity, FontScaleSettingActivity::class.java))
- true
- }
- }
}
diff --git a/vector/src/main/res/drawable/ic_settings_root_appearance.xml b/vector/src/main/res/drawable/ic_settings_root_appearance.xml
new file mode 100644
index 00000000000..a0c5f6f3358
--- /dev/null
+++ b/vector/src/main/res/drawable/ic_settings_root_appearance.xml
@@ -0,0 +1,4 @@
+
+
+
diff --git a/vector/src/main/res/xml/vector_settings_appearance.xml b/vector/src/main/res/xml/vector_settings_appearance.xml
new file mode 100644
index 00000000000..8424c0ffcae
--- /dev/null
+++ b/vector/src/main/res/xml/vector_settings_appearance.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vector/src/main/res/xml/vector_settings_general.xml b/vector/src/main/res/xml/vector_settings_general.xml
index 30ef4337dc8..4bd98059bd4 100644
--- a/vector/src/main/res/xml/vector_settings_general.xml
+++ b/vector/src/main/res/xml/vector_settings_general.xml
@@ -27,6 +27,12 @@
android:title="@string/settings_emails_and_phone_numbers_title"
app:fragment="im.vector.app.features.settings.threepids.ThreePidsSettingsFragment" />
+
+
-
-
-
-
-
-
-
-
-
-
@@ -78,12 +51,6 @@
-
-
+
+