Archived
Refactored preference functions so that view models cannot access preferences directly, instead having to use get/set methods, which also solves a potential bug source of defining different default values for certain properties in different view models
This commit is contained in:
@@ -198,7 +198,7 @@ class StwParser(application: Application) {
|
||||
*
|
||||
* Hence, getIntPreference() + 2
|
||||
*/
|
||||
repo.getIntPreference(SettingsPreferences.PRICING) + 2
|
||||
repo.getPreferencePricing() + 2
|
||||
),
|
||||
dietaryPreferences = prefs.deconstruct(),
|
||||
allergens = filteredText.second,
|
||||
|
||||
@@ -46,8 +46,10 @@ class AppRepository(app: Application) {
|
||||
*/
|
||||
fun getRepositoryInstance(app: Application): AppRepository {
|
||||
if (!::repo.isInitialized) {
|
||||
synchronized(Object::class.java) {
|
||||
repo = AppRepository(app)
|
||||
}
|
||||
}
|
||||
return repo
|
||||
}
|
||||
}
|
||||
@@ -251,7 +253,144 @@ class AppRepository(app: Application) {
|
||||
*/
|
||||
fun insertItems(items: List<OfferItem>) { dao.insertItems(items) }
|
||||
|
||||
// --- settings preferences --- //
|
||||
// --- user-set preferences --- //
|
||||
|
||||
/**
|
||||
* This value determines which allergens the user wants to have displayed or hidden.
|
||||
*/
|
||||
fun getPreferenceAllergenConfig(): String = getStringPreference(
|
||||
SettingsPreferences.ALLERGEN_CONFIG,
|
||||
defaultValue = AllergenPreferences.TEMPLATE,
|
||||
)
|
||||
/**
|
||||
* This value determines how many allergens the user wants to have displayed or hidden.
|
||||
*/
|
||||
fun getPreferenceAllergenConfigCount(): Int = getPreferenceAllergenConfig().run {
|
||||
if (isBlank()) 0 else split(",").count()
|
||||
}
|
||||
fun setPreferenceAllergenConfig(newValue: String) {
|
||||
setPreference(SettingsPreferences.ALLERGEN_CONFIG, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines whether the user wants to have allergens marked.
|
||||
*/
|
||||
fun getPreferenceAllergen(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.ALLERGEN,
|
||||
defaultValue = true,
|
||||
)
|
||||
fun setPreferenceAllergen(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.ALLERGEN, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines which canteen the user has selected.
|
||||
*/
|
||||
fun getPreferenceColour(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.COLOUR_PREFS,
|
||||
defaultValue = true,
|
||||
)
|
||||
fun setPreferenceColour(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.COLOUR_PREFS, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines which canteen the user has selected.
|
||||
*/
|
||||
fun getPreferenceCanteen(): Int = getIntPreference(
|
||||
SettingsPreferences.CANTEEN,
|
||||
)
|
||||
fun setPreferenceCanteen(newValue: Int) {
|
||||
setPreference(SettingsPreferences.CANTEEN, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines whether the user has opened the canteen fragment before.
|
||||
*/
|
||||
fun getPreferenceHasOpenedCanteen(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.HAS_OPENED_CANTEEN,
|
||||
)
|
||||
fun setPreferenceHasOpenedCanteen(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.HAS_OPENED_CANTEEN, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines whether the user wants to have the next course in their schedule
|
||||
* highlighted.
|
||||
*/
|
||||
fun getPreferenceCourseHighlighting(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.COURSE_HIGHLIGHTING,
|
||||
defaultValue = true,
|
||||
)
|
||||
fun setPreferenceCourseHighlighting(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.COURSE_HIGHLIGHTING, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines whether the user wants their timetable to launch with the current day.
|
||||
*/
|
||||
fun getPreferenceCurrentDay(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.CURRENT_DAY,
|
||||
defaultValue = true,
|
||||
)
|
||||
fun setPreferenceCurrentDay(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.CURRENT_DAY, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the user is launching the app for the first time.
|
||||
*/
|
||||
fun getPreferenceFirstLaunch(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.FIRST_LAUNCH,
|
||||
defaultValue = true,
|
||||
)
|
||||
fun setPreferenceFirstLaunch(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.FIRST_LAUNCH, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines which fragment the user wants the app to start with. Order is equal to
|
||||
* the order that the items are arranged in in the bottom nav bar.
|
||||
*/
|
||||
fun getPreferenceLaunchFragment(): Int = getIntPreference(
|
||||
SettingsPreferences.LAUNCH_FRAGMENT_ON_START,
|
||||
)
|
||||
fun setPreferenceLaunchFragment(newValue: Int) {
|
||||
setPreference(SettingsPreferences.LAUNCH_FRAGMENT_ON_START, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines which fragment the user wants the app to start with. Order is equal to
|
||||
* the order that the items are arranged in in the bottom nav bar.
|
||||
*/
|
||||
fun getPreferencePricing(): Int = getIntPreference(
|
||||
SettingsPreferences.PRICING,
|
||||
)
|
||||
fun setPreferencePricing(newValue: Int) {
|
||||
setPreference(SettingsPreferences.PRICING, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines whether the user opts into submitting crash reports.
|
||||
*/
|
||||
fun getPreferenceDataHandling(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.DATA_HANDLING,
|
||||
)
|
||||
fun setPreferenceDataHandling(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.DATA_HANDLING, newValue)
|
||||
}
|
||||
|
||||
/**
|
||||
* This value determines whether the user has enabled experimental settings.
|
||||
*/
|
||||
fun getPreferenceExperimentalSettingsEnabled(): Boolean = getBooleanPreference(
|
||||
SettingsPreferences.EXPERIMENTAL_ENABLED,
|
||||
)
|
||||
fun setPreferenceExperimentalSettingsEnabled(newValue: Boolean) {
|
||||
setPreference(SettingsPreferences.EXPERIMENTAL_ENABLED, newValue)
|
||||
}
|
||||
|
||||
// --- private preference handlers preferences --- //
|
||||
|
||||
/**
|
||||
* Retrieves a user-set boolean preference.
|
||||
@@ -259,53 +398,53 @@ class AppRepository(app: Application) {
|
||||
* @param pref preference to retrieve
|
||||
* @return whether the user set this preference
|
||||
*/
|
||||
fun getBooleanPreference(pref: SettingsPreferences, defaultValue: Boolean = false): Boolean =
|
||||
private fun getBooleanPreference(pref: SettingsPreferences, defaultValue: Boolean = false): Boolean =
|
||||
prefs.getBoolean(pref.key, defaultValue)
|
||||
|
||||
/**
|
||||
* Retrieves a user-set string preference.
|
||||
*
|
||||
* @param pref preference to retrieve
|
||||
* @return string that was set
|
||||
*/
|
||||
fun getStringPreference(pref: SettingsPreferences, defaultValue: String = ""): String =
|
||||
prefs.getString(pref.key, defaultValue) ?: ""
|
||||
|
||||
/**
|
||||
* Retrieves a user-set integer preference.
|
||||
*
|
||||
* @param pref preference to retrieve
|
||||
* @return whether the user set this preference
|
||||
*/
|
||||
fun getIntPreference(pref: SettingsPreferences): Int = prefs.getInt(pref.key, 0)
|
||||
|
||||
/**
|
||||
* Updates a user-set boolean preference.
|
||||
*
|
||||
* @param pref preference to set
|
||||
* @param newValue new value to set the preference to
|
||||
*/
|
||||
fun setPreference(pref: SettingsPreferences, newValue: Boolean) {
|
||||
private fun setPreference(pref: SettingsPreferences, newValue: Boolean) {
|
||||
prefs.edit().putBoolean(pref.key, newValue).apply()
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a user-set string preference.
|
||||
*
|
||||
* @param pref preference to retrieve
|
||||
* @return string that was set
|
||||
*/
|
||||
private fun getStringPreference(pref: SettingsPreferences, defaultValue: String = ""): String =
|
||||
prefs.getString(pref.key, defaultValue) ?: ""
|
||||
|
||||
/**
|
||||
* Updates a user-set string preference.
|
||||
*
|
||||
* @param pref preference to set
|
||||
* @param newValue new value to set the preference to
|
||||
*/
|
||||
fun setPreference(pref: SettingsPreferences, newValue: String) {
|
||||
private fun setPreference(pref: SettingsPreferences, newValue: String) {
|
||||
prefs.edit().putString(pref.key, newValue).apply()
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a user-set integer preference.
|
||||
*
|
||||
* @param pref preference to retrieve
|
||||
* @return whether the user set this preference
|
||||
*/
|
||||
private fun getIntPreference(pref: SettingsPreferences): Int = prefs.getInt(pref.key, 0)
|
||||
|
||||
/**
|
||||
* Updates a user-set integer preference.
|
||||
*
|
||||
* @param pref preference to set
|
||||
* @param newValue new value to set the preference to
|
||||
*/
|
||||
fun setPreference(pref: SettingsPreferences, newValue: Int) {
|
||||
private fun setPreference(pref: SettingsPreferences, newValue: Int) {
|
||||
prefs.edit().putInt(pref.key, newValue).apply()
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.denizk0461.weserplaner.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import com.denizk0461.weserplaner.model.AllergenPreferences
|
||||
import com.denizk0461.weserplaner.model.SettingsPreferences
|
||||
|
||||
class AllergenConfigViewModel(application: Application) : AppViewModel(application) {
|
||||
|
||||
@@ -10,8 +8,6 @@ class AllergenConfigViewModel(application: Application) : AppViewModel(applicati
|
||||
* This value determines which allergens the user wants to have displayed or hidden.
|
||||
*/
|
||||
var preferenceAllergenConfig: String
|
||||
get() = repo.getStringPreference(
|
||||
SettingsPreferences.ALLERGEN_CONFIG, defaultValue = AllergenPreferences.TEMPLATE
|
||||
)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.ALLERGEN_CONFIG, newValue) }
|
||||
get() = repo.getPreferenceAllergenConfig()
|
||||
set(value) { repo.setPreferenceAllergenConfig(value) }
|
||||
}
|
||||
@@ -2,10 +2,8 @@ package com.denizk0461.weserplaner.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.denizk0461.weserplaner.model.AllergenPreferences
|
||||
import com.denizk0461.weserplaner.model.CanteenOffer
|
||||
import com.denizk0461.weserplaner.model.DietaryPreferences
|
||||
import com.denizk0461.weserplaner.model.SettingsPreferences
|
||||
|
||||
class CanteenPageViewModel(app: Application) : AppViewModel(app) {
|
||||
|
||||
@@ -33,19 +31,17 @@ class CanteenPageViewModel(app: Application) : AppViewModel(app) {
|
||||
* This value determines which allergens the user wants to have displayed or hidden.
|
||||
*/
|
||||
val preferenceAllergenConfig: String
|
||||
get() = repo.getStringPreference(
|
||||
SettingsPreferences.ALLERGEN_CONFIG, defaultValue = AllergenPreferences.TEMPLATE
|
||||
)
|
||||
get() = repo.getPreferenceAllergenConfig()
|
||||
|
||||
/**
|
||||
* This value determines whether the user wants to have allergens marked.
|
||||
*/
|
||||
val preferenceAllergen: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.ALLERGEN, defaultValue = true)
|
||||
get() = repo.getPreferenceAllergen()
|
||||
|
||||
/**
|
||||
* This value determines which canteen the user has selected.
|
||||
*/
|
||||
val preferenceColour: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.COLOUR_PREFS, defaultValue = true)
|
||||
get() = repo.getPreferenceColour()
|
||||
}
|
||||
@@ -78,13 +78,13 @@ class CanteenViewModel(app: Application) : AppViewModel(app) {
|
||||
* This value determines which canteen the user has selected.
|
||||
*/
|
||||
var preferenceCanteen: Int
|
||||
get() = repo.getIntPreference(SettingsPreferences.CANTEEN)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.CANTEEN, newValue) }
|
||||
get() = repo.getPreferenceCanteen()
|
||||
set(newValue) { repo.setPreferenceCanteen(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines whether the user has opened the canteen fragment before.
|
||||
*/
|
||||
var preferenceHasOpenedCanteen: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.HAS_OPENED_CANTEEN)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.HAS_OPENED_CANTEEN, newValue) }
|
||||
get() = repo.getPreferenceHasOpenedCanteen()
|
||||
set(newValue) { repo.setPreferenceHasOpenedCanteen(newValue) }
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package com.denizk0461.weserplaner.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.denizk0461.weserplaner.model.SettingsPreferences
|
||||
import com.denizk0461.weserplaner.model.StudIPEvent
|
||||
|
||||
/**
|
||||
@@ -24,8 +23,5 @@ class EventPageViewModel(app: Application) : AppViewModel(app) {
|
||||
* highlighted.
|
||||
*/
|
||||
val preferenceCourseHighlighting: Boolean
|
||||
get() = repo.getBooleanPreference(
|
||||
SettingsPreferences.COURSE_HIGHLIGHTING,
|
||||
defaultValue = true
|
||||
)
|
||||
get() = repo.getPreferenceCourseHighlighting()
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package com.denizk0461.weserplaner.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.LiveData
|
||||
import com.denizk0461.weserplaner.model.SettingsPreferences
|
||||
|
||||
/**
|
||||
* View model for [com.denizk0461.weserplaner.fragment.EventFragment]
|
||||
@@ -22,18 +21,12 @@ class EventViewModel(app: Application) : AppViewModel(app) {
|
||||
* This value determines whether the user wants their timetable to launch with the current day.
|
||||
*/
|
||||
val preferenceCurrentDay: Boolean
|
||||
get() = repo.getBooleanPreference(
|
||||
SettingsPreferences.CURRENT_DAY,
|
||||
defaultValue = true,
|
||||
)
|
||||
get() = repo.getPreferenceCurrentDay()
|
||||
|
||||
/**
|
||||
* Determines whether the user is launching the app for the first time.
|
||||
*/
|
||||
var preferenceFirstLaunch: Boolean
|
||||
get() = repo.getBooleanPreference(
|
||||
SettingsPreferences.FIRST_LAUNCH,
|
||||
defaultValue = true,
|
||||
)
|
||||
set(value) { repo.setPreference(SettingsPreferences.FIRST_LAUNCH, value) }
|
||||
get() = repo.getPreferenceFirstLaunch()
|
||||
set(value) { repo.setPreferenceFirstLaunch(value) }
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.denizk0461.weserplaner.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import com.denizk0461.weserplaner.model.SettingsPreferences
|
||||
|
||||
/**
|
||||
* View model for [com.denizk0461.weserplaner.activity.MainActivity]
|
||||
@@ -15,5 +14,5 @@ class MainViewModel(application: Application) : AppViewModel(application) {
|
||||
* the order that the items are arranged in in the bottom nav bar.
|
||||
*/
|
||||
val preferenceLaunchFragment: Int
|
||||
get() = repo.getIntPreference(SettingsPreferences.LAUNCH_FRAGMENT_ON_START)
|
||||
get() = repo.getPreferenceLaunchFragment()
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.denizk0461.weserplaner.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import com.denizk0461.weserplaner.model.AllergenPreferences
|
||||
import com.denizk0461.weserplaner.model.SettingsPreferences
|
||||
|
||||
/**
|
||||
* View model for [com.denizk0461.weserplaner.fragment.SettingsFragment]
|
||||
@@ -15,76 +13,66 @@ class SettingsViewModel(app: Application) : AppViewModel(app) {
|
||||
* This value determines whether the user wants their timetable to launch with the current day.
|
||||
*/
|
||||
var preferenceCurrentDay: Boolean
|
||||
get() = repo.getBooleanPreference(
|
||||
SettingsPreferences.CURRENT_DAY,
|
||||
defaultValue = true,
|
||||
)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.CURRENT_DAY, newValue) }
|
||||
get() = repo.getPreferenceCurrentDay()
|
||||
set(newValue) { repo.setPreferenceCurrentDay(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines whether the user wants to have the next course in their schedule
|
||||
* highlighted.
|
||||
*/
|
||||
var preferenceCourseHighlighting: Boolean
|
||||
get() = repo.getBooleanPreference(
|
||||
SettingsPreferences.COURSE_HIGHLIGHTING,
|
||||
defaultValue = true
|
||||
)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.COURSE_HIGHLIGHTING, newValue) }
|
||||
get() = repo.getPreferenceCourseHighlighting()
|
||||
set(newValue) { repo.setPreferenceCourseHighlighting(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines whether the user wants to have allergens marked.
|
||||
*/
|
||||
var preferenceAllergen: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.ALLERGEN, defaultValue = true)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.ALLERGEN, newValue) }
|
||||
get() = repo.getPreferenceAllergen()
|
||||
set(newValue) { repo.setPreferenceAllergen(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines how many allergens the user wants to have displayed or hidden.
|
||||
*/
|
||||
val preferenceAllergenConfigCount: Int
|
||||
get() = repo.getStringPreference(
|
||||
SettingsPreferences.ALLERGEN_CONFIG, defaultValue = AllergenPreferences.TEMPLATE
|
||||
).run {
|
||||
if (isBlank()) 0 else split(",").count()
|
||||
}
|
||||
get() = repo.getPreferenceAllergenConfigCount()
|
||||
|
||||
/**
|
||||
* This value determines which fragment the user wants the app to start with. Order is equal to
|
||||
* the order that the items are arranged in in the bottom nav bar.
|
||||
*/
|
||||
var preferencePricing: Int
|
||||
get() = repo.getIntPreference(SettingsPreferences.PRICING)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.PRICING, newValue) }
|
||||
get() = repo.getPreferencePricing()
|
||||
set(newValue) { repo.setPreferencePricing(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines which fragment the user wants the app to start with. Order is equal to
|
||||
* the order that the items are arranged in in the bottom nav bar.
|
||||
*/
|
||||
var preferenceLaunchFragment: Int
|
||||
get() = repo.getIntPreference(SettingsPreferences.LAUNCH_FRAGMENT_ON_START)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.LAUNCH_FRAGMENT_ON_START, newValue) }
|
||||
get() = repo.getPreferenceLaunchFragment()
|
||||
set(newValue) { repo.setPreferenceLaunchFragment(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines which canteen the user has selected.
|
||||
*/
|
||||
var preferenceColour: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.COLOUR_PREFS, defaultValue = true)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.COLOUR_PREFS, newValue) }
|
||||
get() = repo.getPreferenceColour()
|
||||
set(newValue) { repo.setPreferenceColour(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines whether the user opts into submitting crash reports.
|
||||
*/
|
||||
var preferenceDataHandling: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.DATA_HANDLING)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.DATA_HANDLING, newValue) }
|
||||
get() = repo.getPreferenceDataHandling()
|
||||
set(newValue) { repo.setPreferenceDataHandling(newValue) }
|
||||
|
||||
/**
|
||||
* This value determines whether the user has enabled experimental settings.
|
||||
*/
|
||||
var preferenceExperimentalSettingsEnabled: Boolean
|
||||
get() = repo.getBooleanPreference(SettingsPreferences.EXPERIMENTAL_ENABLED)
|
||||
set(newValue) { repo.setPreference(SettingsPreferences.EXPERIMENTAL_ENABLED, newValue) }
|
||||
get() = repo.getPreferenceExperimentalSettingsEnabled()
|
||||
set(newValue) { repo.setPreferenceExperimentalSettingsEnabled(newValue) }
|
||||
|
||||
// --- functions for dev codes --- //
|
||||
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="16dp">
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/app_title_bar"
|
||||
@@ -30,6 +31,7 @@
|
||||
android:textSize="28sp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:fontFamily="@font/lato_blackitalic"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="marquee"
|
||||
|
||||
@@ -269,14 +269,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@font/lato_bolditalic"
|
||||
android:text="@string/settings_allergens_title"
|
||||
android:textSize="16sp" />
|
||||
android:textSize="16sp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settings_allergens_subtitle_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/settings_allergens_subtitle"
|
||||
android:textSize="16sp" />
|
||||
android:textSize="16sp"/>
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user