From 1007d18ad2da345e5be2d7ec9bb1af901f92aeb1 Mon Sep 17 00:00:00 2001 From: Christoph Klassen Date: Fri, 20 Jan 2023 16:47:18 +0100 Subject: [PATCH] New settings menu 'Appearance' --- .../src/main/res/values/strings.xml | 1 + .../src/main/res/values/config-settings.xml | 1 + .../features/analytics/plan/MobileScreen.kt | 5 + .../VectorSettingsAppearanceFragment.kt | 94 +++++++++++++++++++ .../settings/VectorSettingsGeneralFragment.kt | 12 +++ .../VectorSettingsPreferencesFragment.kt | 45 --------- .../drawable/ic_settings_root_appearance.xml | 4 + .../res/xml/vector_settings_appearance.xml | 37 ++++++++ .../main/res/xml/vector_settings_general.xml | 6 ++ .../res/xml/vector_settings_preferences.xml | 33 ------- .../src/main/res/xml/vector_settings_root.xml | 6 ++ 11 files changed, 166 insertions(+), 78 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/settings/VectorSettingsAppearanceFragment.kt create mode 100644 vector/src/main/res/drawable/ic_settings_root_appearance.xml create mode 100644 vector/src/main/res/xml/vector_settings_appearance.xml 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 @@ - - + +