Skip to content

Commit fdc0210

Browse files
committed
New settings menu 'Appearance'
1 parent 99eb443 commit fdc0210

File tree

12 files changed

+167
-78
lines changed

12 files changed

+167
-78
lines changed

changelog.d/7889.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
New settings "Appearance"

library/ui-strings/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,6 +1724,7 @@
17241724

17251725
<!-- Settings -->
17261726
<string name="settings_general_title">General</string>
1727+
<string name="settings_appearance_title">Appearance</string>
17271728
<string name="settings_preferences">Preferences</string>
17281729
<string name="settings_security_and_privacy">Security &amp; Privacy</string>
17291730
<string name="settings_push_rules">Push Rules</string>

vector-config/src/main/res/values/config-settings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
<!-- Level 0: Root -->
1111

1212
<bool name="settings_root_general_visible">true</bool>
13+
<bool name="settings_root_appearance_visible">true</bool>
1314
<bool name="settings_root_notification_visible">true</bool>
1415
<bool name="settings_root_preferences_visible">true</bool>
1516
<bool name="settings_root_voice_video_visible">true</bool>

vector/src/main/java/im/vector/app/features/analytics/plan/MobileScreen.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,11 @@ data class MobileScreen(
205205
*/
206206
Settings,
207207

208+
/**
209+
* The appearance settings screen.
210+
*/
211+
SettingsAppearance,
212+
208213
/**
209214
* The advanced settings screen (developer mode, rageshake, push
210215
* notification rules).
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
/*
2+
* Copyright 2019 New Vector Ltd
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
@file:Suppress("UNUSED_VARIABLE", "UNUSED_ANONYMOUS_PARAMETER", "UNUSED_PARAMETER")
18+
19+
package im.vector.app.features.settings
20+
21+
import android.content.Intent
22+
import android.os.Bundle
23+
import androidx.preference.Preference
24+
import dagger.hilt.android.AndroidEntryPoint
25+
import im.vector.app.R
26+
import im.vector.app.core.extensions.restart
27+
import im.vector.app.core.preference.VectorListPreference
28+
import im.vector.app.core.preference.VectorPreference
29+
import im.vector.app.features.VectorFeatures
30+
import im.vector.app.features.analytics.plan.MobileScreen
31+
import im.vector.app.features.settings.font.FontScaleSettingActivity
32+
import im.vector.app.features.themes.ThemeUtils
33+
import javax.inject.Inject
34+
35+
@AndroidEntryPoint
36+
class VectorSettingsAppearanceFragment :
37+
VectorSettingsBaseFragment() {
38+
39+
@Inject lateinit var vectorPreferences: VectorPreferences
40+
@Inject lateinit var vectorFeatures: VectorFeatures
41+
@Inject lateinit var fontScalePreferences: FontScalePreferences
42+
43+
override var titleRes = R.string.settings_appearance_title
44+
override val preferenceXmlRes = R.xml.vector_settings_appearance
45+
46+
private val textSizePreference by lazy {
47+
findPreference<VectorPreference>(VectorPreferences.SETTINGS_INTERFACE_TEXT_SIZE_KEY)!!
48+
}
49+
50+
override fun onCreate(savedInstanceState: Bundle?) {
51+
super.onCreate(savedInstanceState)
52+
analyticsScreenName = MobileScreen.ScreenName.SettingsAppearance
53+
}
54+
55+
override fun bindPref() {
56+
// user interface preferences
57+
setUserInterfacePreferences()
58+
59+
// Themes
60+
findPreference<VectorListPreference>(ThemeUtils.APPLICATION_THEME_KEY)!!
61+
.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
62+
if (newValue is String) {
63+
ThemeUtils.setApplicationTheme(requireContext().applicationContext, newValue)
64+
// Restart the Activity
65+
activity?.restart()
66+
true
67+
} else {
68+
false
69+
}
70+
}
71+
}
72+
73+
override fun onResume() {
74+
super.onResume()
75+
}
76+
77+
override fun onPause() {
78+
super.onPause()
79+
}
80+
81+
// ==============================================================================================================
82+
// user interface management
83+
// ==============================================================================================================
84+
85+
private fun setUserInterfacePreferences() {
86+
// Text size
87+
textSizePreference.summary = getString(fontScalePreferences.getResolvedFontScaleValue().nameResId)
88+
89+
textSizePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
90+
startActivity(Intent(activity, FontScaleSettingActivity::class.java))
91+
true
92+
}
93+
}
94+
}

vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class VectorSettingsGeneralFragment :
8585
override val preferenceXmlRes = R.xml.vector_settings_general
8686

8787
private lateinit var galleryOrCameraDialogHelper: GalleryOrCameraDialogHelper
88+
@Inject lateinit var vectorLocale: VectorLocale
8889

8990
private val mUserSettingsCategory by lazy {
9091
findPreference<PreferenceCategory>(VectorPreferences.SETTINGS_USER_SETTINGS_PREFERENCE_KEY)!!
@@ -98,6 +99,9 @@ class VectorSettingsGeneralFragment :
9899
private val mPasswordPreference by lazy {
99100
findPreference<VectorPreference>(VectorPreferences.SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY)!!
100101
}
102+
private val selectedLanguagePreference by lazy {
103+
findPreference<VectorPreference>(VectorPreferences.SETTINGS_INTERFACE_LANGUAGE_PREFERENCE_KEY)!!
104+
}
101105
private val mIdentityServerPreference by lazy {
102106
findPreference<VectorPreference>(VectorPreferences.SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY)!!
103107
}
@@ -161,6 +165,9 @@ class VectorSettingsGeneralFragment :
161165
}
162166

163167
override fun bindPref() {
168+
// user interface preferences
169+
setUserInterfacePreferences()
170+
164171
// Avatar
165172
mUserAvatarPreference.let {
166173
it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
@@ -498,4 +505,9 @@ class VectorSettingsGeneralFragment :
498505
}
499506
}
500507
}
508+
509+
private fun setUserInterfacePreferences() {
510+
// Selected language
511+
selectedLanguagePreference.summary = vectorLocale.localeToLocalisedString(vectorLocale.applicationLocale)
512+
}
501513
}

vector/src/main/java/im/vector/app/features/settings/VectorSettingsPreferencesFragment.kt

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,19 @@
1717
package im.vector.app.features.settings
1818

1919
import android.content.Context
20-
import android.content.Intent
2120
import android.os.Bundle
2221
import androidx.lifecycle.lifecycleScope
2322
import androidx.preference.Preference
2423
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2524
import dagger.hilt.android.AndroidEntryPoint
2625
import im.vector.app.R
2726
import im.vector.app.core.dialogs.PhotoOrVideoDialog
28-
import im.vector.app.core.extensions.restart
29-
import im.vector.app.core.preference.VectorListPreference
3027
import im.vector.app.core.preference.VectorPreference
3128
import im.vector.app.core.preference.VectorSwitchPreference
3229
import im.vector.app.features.MainActivity
3330
import im.vector.app.features.MainActivityArgs
3431
import im.vector.app.features.VectorFeatures
3532
import im.vector.app.features.analytics.plan.MobileScreen
36-
import im.vector.app.features.settings.font.FontScaleSettingActivity
37-
import im.vector.app.features.themes.ThemeUtils
3833
import kotlinx.coroutines.launch
3934
import org.matrix.android.sdk.api.session.presence.model.PresenceEnum
4035
import javax.inject.Inject
@@ -44,19 +39,12 @@ class VectorSettingsPreferencesFragment :
4439
VectorSettingsBaseFragment() {
4540

4641
@Inject lateinit var vectorPreferences: VectorPreferences
47-
@Inject lateinit var fontScalePreferences: FontScalePreferences
4842
@Inject lateinit var vectorFeatures: VectorFeatures
4943
@Inject lateinit var vectorLocale: VectorLocale
5044

5145
override var titleRes = R.string.settings_preferences
5246
override val preferenceXmlRes = R.xml.vector_settings_preferences
5347

54-
private val selectedLanguagePreference by lazy {
55-
findPreference<VectorPreference>(VectorPreferences.SETTINGS_INTERFACE_LANGUAGE_PREFERENCE_KEY)!!
56-
}
57-
private val textSizePreference by lazy {
58-
findPreference<VectorPreference>(VectorPreferences.SETTINGS_INTERFACE_TEXT_SIZE_KEY)!!
59-
}
6048
private val takePhotoOrVideoPreference by lazy {
6149
findPreference<VectorPreference>("SETTINGS_INTERFACE_TAKE_PHOTO_VIDEO")!!
6250
}
@@ -67,22 +55,6 @@ class VectorSettingsPreferencesFragment :
6755
}
6856

6957
override fun bindPref() {
70-
// user interface preferences
71-
setUserInterfacePreferences()
72-
73-
// Themes
74-
findPreference<VectorListPreference>(ThemeUtils.APPLICATION_THEME_KEY)!!
75-
.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
76-
if (newValue is String) {
77-
ThemeUtils.setApplicationTheme(requireContext().applicationContext, newValue)
78-
// Restart the Activity
79-
activity?.restart()
80-
true
81-
} else {
82-
false
83-
}
84-
}
85-
8658
findPreference<VectorSwitchPreference>(VectorPreferences.SETTINGS_PRESENCE_USER_ALWAYS_APPEARS_OFFLINE)!!.let { pref ->
8759
pref.isChecked = vectorPreferences.userAlwaysAppearsOffline()
8860
pref.setOnPreferenceChangeListener { _, newValue ->
@@ -192,21 +164,4 @@ class VectorSettingsPreferencesFragment :
192164
}
193165
)
194166
}
195-
196-
// ==============================================================================================================
197-
// user interface management
198-
// ==============================================================================================================
199-
200-
private fun setUserInterfacePreferences() {
201-
// Selected language
202-
selectedLanguagePreference.summary = vectorLocale.localeToLocalisedString(vectorLocale.applicationLocale)
203-
204-
// Text size
205-
textSizePreference.summary = getString(fontScalePreferences.getResolvedFontScaleValue().nameResId)
206-
207-
textSizePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
208-
startActivity(Intent(activity, FontScaleSettingActivity::class.java))
209-
true
210-
}
211-
}
212167
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<vector android:height="25dp" android:viewportHeight="18"
2+
android:viewportWidth="18" android:width="25dp" xmlns:android="http://schemas.android.com/apk/res/android">
3+
<path android:fillColor="#000000" android:fillType="evenOdd" android:pathData="M16.296,6.95C17.281,8.163 17.302,9.849 16.33,11.071C14.95,12.806 12.514,15 9.024,15C5.533,15 3.098,12.806 1.718,11.071C0.745,9.849 0.766,8.163 1.751,6.95C3.163,5.212 5.628,3 9.024,3C12.42,3 14.884,5.212 16.296,6.95ZM13,9C13,11.209 11.209,13 9,13C6.791,13 5,11.209 5,9C5,6.791 6.791,5 9,5C11.209,5 13,6.791 13,9ZM9,11C10.105,11 11,10.105 11,9C11,7.895 10.105,7 9,7C7.895,7 7,7.895 7,9C7,10.105 7.895,11 9,11Z"/>
4+
</vector>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools">
5+
6+
<im.vector.app.core.preference.VectorPreferenceCategory
7+
android:key="SETTINGS_USER_INTERFACE_KEY"
8+
android:title="@string/settings_user_interface">
9+
10+
<im.vector.app.core.preference.VectorListPreference
11+
android:defaultValue="system"
12+
android:entries="@array/theme_entries"
13+
android:entryValues="@array/theme_values"
14+
android:key="APPLICATION_THEME_KEY"
15+
android:summary="%s"
16+
android:title="@string/settings_theme"
17+
app:iconSpaceReserved="false" />
18+
19+
<im.vector.app.core.preference.VectorPreference
20+
android:dialogTitle="@string/font_size"
21+
android:key="SETTINGS_INTERFACE_TEXT_SIZE_KEY"
22+
android:persistent="false"
23+
android:title="@string/font_size" />
24+
25+
</im.vector.app.core.preference.VectorPreferenceCategory>
26+
27+
<im.vector.app.core.preference.VectorPreferenceCategory android:title="@string/settings_category_timeline">
28+
29+
<im.vector.app.core.preference.VectorSwitchPreference
30+
android:defaultValue="@bool/settings_interface_bubble_default"
31+
android:key="SETTINGS_INTERFACE_BUBBLE_KEY"
32+
android:title="@string/message_bubbles"
33+
app:isPreferenceVisible="@bool/settings_interface_bubble_visible" />
34+
35+
</im.vector.app.core.preference.VectorPreferenceCategory>
36+
37+
</androidx.preference.PreferenceScreen>

vector/src/main/res/xml/vector_settings_general.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@
2727
android:title="@string/settings_emails_and_phone_numbers_title"
2828
app:fragment="im.vector.app.features.settings.threepids.ThreePidsSettingsFragment" />
2929

30+
<im.vector.app.core.preference.VectorPreference
31+
android:key="SETTINGS_INTERFACE_LANGUAGE_PREFERENCE_KEY"
32+
android:persistent="false"
33+
android:title="@string/settings_interface_language"
34+
app:fragment="im.vector.app.features.settings.locale.LocalePickerFragment" />
35+
3036
<im.vector.app.core.preference.VectorPreference
3137
android:key="SETTINGS_DISCOVERY_PREFERENCE_KEY"
3238
android:persistent="false"

0 commit comments

Comments
 (0)