added welcome message to settings

This commit is contained in:
Kima 2023-09-24 20:12:10 +02:00
parent a11ebce6fb
commit b4ff2fa815
5 changed files with 166 additions and 1 deletions

View File

@ -33,6 +33,7 @@ const settingsDB = DatabaseStruct("settings", {
"renamed_subjects_italics": int, "renamed_teachers_enabled": int, "renamed_subjects_italics": int, "renamed_teachers_enabled": int,
"renamed_teachers_italics": int, "renamed_teachers_italics": int,
"live_activity_color": String, "live_activity_color": String,
"welcome_message": String,
}); });
// DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING // DON'T FORGET TO UPDATE DEFAULT VALUES IN `initDB` MIGRATION OR ELSE PARENTS WILL COMPLAIN ABOUT THEIR CHILDREN MISSING
// YOU'VE BEEN WARNED!!! // YOU'VE BEEN WARNED!!!

View File

@ -76,6 +76,7 @@ class SettingsProvider extends ChangeNotifier {
bool _renamedTeachersEnabled; bool _renamedTeachersEnabled;
bool _renamedTeachersItalics; bool _renamedTeachersItalics;
Color _liveActivityColor; Color _liveActivityColor;
String _welcomeMessage;
SettingsProvider({ SettingsProvider({
DatabaseProvider? database, DatabaseProvider? database,
@ -120,6 +121,7 @@ class SettingsProvider extends ChangeNotifier {
required bool renameTeachersEnabled, required bool renameTeachersEnabled,
required bool renameTeachersItalics, required bool renameTeachersItalics,
required Color liveActivityColor, required Color liveActivityColor,
required String welcomeMessage,
}) : _database = database, }) : _database = database,
_language = language, _language = language,
_startPage = startPage, _startPage = startPage,
@ -161,7 +163,8 @@ class SettingsProvider extends ChangeNotifier {
_renamedSubjectsItalics = renameSubjectsItalics, _renamedSubjectsItalics = renameSubjectsItalics,
_renamedTeachersEnabled = renameTeachersEnabled, _renamedTeachersEnabled = renameTeachersEnabled,
_renamedTeachersItalics = renameTeachersItalics, _renamedTeachersItalics = renameTeachersItalics,
_liveActivityColor = liveActivityColor; _liveActivityColor = liveActivityColor,
_welcomeMessage = welcomeMessage;
factory SettingsProvider.fromMap(Map map, factory SettingsProvider.fromMap(Map map,
{required DatabaseProvider database}) { {required DatabaseProvider database}) {
@ -223,6 +226,7 @@ class SettingsProvider extends ChangeNotifier {
renameTeachersEnabled: map["renamed_teachers_enabled"] == 1, renameTeachersEnabled: map["renamed_teachers_enabled"] == 1,
renameTeachersItalics: map["renamed_teachers_italics"] == 1, renameTeachersItalics: map["renamed_teachers_italics"] == 1,
liveActivityColor: Color(map["live_activity_color"]), liveActivityColor: Color(map["live_activity_color"]),
welcomeMessage: map["welcome_message"],
); );
} }
@ -272,6 +276,7 @@ class SettingsProvider extends ChangeNotifier {
"renamed_teachers_enabled": _renamedTeachersEnabled ? 1 : 0, "renamed_teachers_enabled": _renamedTeachersEnabled ? 1 : 0,
"renamed_teachers_italics": _renamedTeachersItalics ? 1 : 0, "renamed_teachers_italics": _renamedTeachersItalics ? 1 : 0,
"live_activity_color": _liveActivityColor.value, "live_activity_color": _liveActivityColor.value,
"welcome_message": _welcomeMessage,
}; };
} }
@ -325,6 +330,7 @@ class SettingsProvider extends ChangeNotifier {
renameTeachersEnabled: false, renameTeachersEnabled: false,
renameTeachersItalics: false, renameTeachersItalics: false,
liveActivityColor: const Color(0xFF676767), liveActivityColor: const Color(0xFF676767),
welcomeMessage: '',
); );
} }
@ -373,6 +379,7 @@ class SettingsProvider extends ChangeNotifier {
bool get renamedTeachersEnabled => _renamedTeachersEnabled; bool get renamedTeachersEnabled => _renamedTeachersEnabled;
bool get renamedTeachersItalics => _renamedTeachersItalics; bool get renamedTeachersItalics => _renamedTeachersItalics;
Color get liveActivityColor => _liveActivityColor; Color get liveActivityColor => _liveActivityColor;
String get welcomeMessage => _welcomeMessage;
Future<void> update({ Future<void> update({
bool store = true, bool store = true,
@ -417,6 +424,7 @@ class SettingsProvider extends ChangeNotifier {
bool? renamedTeachersEnabled, bool? renamedTeachersEnabled,
bool? renamedTeachersItalics, bool? renamedTeachersItalics,
Color? liveActivityColor, Color? liveActivityColor,
String? welcomeMessage,
}) async { }) async {
if (language != null && language != _language) _language = language; if (language != null && language != _language) _language = language;
if (startPage != null && startPage != _startPage) _startPage = startPage; if (startPage != null && startPage != _startPage) _startPage = startPage;
@ -535,6 +543,9 @@ class SettingsProvider extends ChangeNotifier {
if (liveActivityColor != null && liveActivityColor != _liveActivityColor) { if (liveActivityColor != null && liveActivityColor != _liveActivityColor) {
_liveActivityColor = liveActivityColor; _liveActivityColor = liveActivityColor;
} }
if (welcomeMessage != null && welcomeMessage != _welcomeMessage) {
_welcomeMessage = welcomeMessage;
}
if (store) await _database?.store.storeSettings(this); if (store) await _database?.store.storeSettings(this);
notifyListeners(); notifyListeners();
} }

View File

@ -43,6 +43,7 @@ import 'package:filcnaplo_premium/ui/mobile/settings/profile_pic.dart';
import 'package:filcnaplo_premium/ui/mobile/settings/icon_pack.dart'; import 'package:filcnaplo_premium/ui/mobile/settings/icon_pack.dart';
import 'package:filcnaplo_premium/ui/mobile/settings/modify_subject_names.dart'; import 'package:filcnaplo_premium/ui/mobile/settings/modify_subject_names.dart';
import 'package:filcnaplo_premium/ui/mobile/settings/modify_teacher_names.dart'; import 'package:filcnaplo_premium/ui/mobile/settings/modify_teacher_names.dart';
import 'package:filcnaplo_premium/ui/mobile/settings/welcome_message.dart';
class SettingsScreen extends StatefulWidget { class SettingsScreen extends StatefulWidget {
const SettingsScreen({Key? key}) : super(key: key); const SettingsScreen({Key? key}) : super(key: key);
@ -454,6 +455,7 @@ class _SettingsScreenState extends State<SettingsScreen>
Material( Material(
type: MaterialType.transparency, type: MaterialType.transparency,
child: MenuNotifications(settings: settings)), child: MenuNotifications(settings: settings)),
WelcomeMessagePanelButton(settings, user),
], ],
), ),
), ),

View File

@ -73,6 +73,9 @@ extension SettingsLocalization on String {
"devsettings": "Developer Settings", "devsettings": "Developer Settings",
"devmode": "Developer Mode", "devmode": "Developer Mode",
"copy_jwt": "Copy JWT", "copy_jwt": "Copy JWT",
"welcome_msg": "Welcome Message",
"default": "Default",
"edit_welcome_msg": "Edit welcome message",
}, },
"hu_hu": { "hu_hu": {
"personal_details": "Személyes információk", "personal_details": "Személyes információk",
@ -144,6 +147,9 @@ extension SettingsLocalization on String {
"devsettings": "Fejlesztői Beállítások", "devsettings": "Fejlesztői Beállítások",
"devmode": "Fejlesztői mód", "devmode": "Fejlesztői mód",
"copy_jwt": "JWT másolása", "copy_jwt": "JWT másolása",
"welcome_msg": "Üdvözlő üzenet",
"default": "Alapértelmezett",
"edit_welcome_msg": "Üdvözlő üzenet szerkesztése",
}, },
"de_de": { "de_de": {
"personal_details": "Persönliche Angaben", "personal_details": "Persönliche Angaben",
@ -214,6 +220,9 @@ extension SettingsLocalization on String {
"devsettings": "Entwickleroptionen", "devsettings": "Entwickleroptionen",
"devmode": "Entwicklermodus", "devmode": "Entwicklermodus",
"copy_jwt": "JWT kopieren", "copy_jwt": "JWT kopieren",
"welcome_msg": "Willkommensnachricht",
"default": "Standard",
"edit_welcome_msg": "Begrüßungsnachricht bearbeiten",
}, },
}; };

View File

@ -0,0 +1,142 @@
import 'package:filcnaplo/api/providers/user_provider.dart';
import 'package:filcnaplo/models/settings.dart';
import 'package:filcnaplo_mobile_ui/common/panel/panel_button.dart';
import 'package:filcnaplo_premium/models/premium_scopes.dart';
import 'package:filcnaplo_premium/providers/premium_provider.dart';
import 'package:filcnaplo_premium/ui/mobile/premium/upsell.dart';
import 'package:flutter/material.dart';
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
import 'package:filcnaplo_mobile_ui/screens/settings/settings_screen.i18n.dart';
import 'package:provider/provider.dart';
import 'package:i18n_extension/i18n_extension.dart';
// ignore: must_be_immutable
class WelcomeMessagePanelButton extends StatelessWidget {
late SettingsProvider settingsProvider;
late UserProvider user;
WelcomeMessagePanelButton(this.settingsProvider, this.user, {Key? key})
: super(key: key);
@override
Widget build(BuildContext context) {
String finalName = ((user.nickname ?? '') != ''
? user.nickname
: (user.displayName ?? '') != ''
? user.displayName
: 'János') ??
'János';
return PanelButton(
onPressed: () {
if (!Provider.of<PremiumProvider>(context, listen: false)
.hasScope(PremiumScopes.all)) {
PremiumLockedFeatureUpsell.show(
context: context, feature: PremiumFeature.profile);
return;
}
showDialog(
context: context,
builder: (context) => WelcomeMessageEditor(settingsProvider));
},
title: Text("welcome_msg".i18n),
leading: const Icon(FeatherIcons.smile),
trailing: SizedBox(
width: 100,
child: Expanded(
child: Text(
settingsProvider.welcomeMessage != ''
? localizeFill(
settingsProvider.welcomeMessage,
[finalName, finalName, finalName],
)
: 'default'.i18n,
style: const TextStyle(fontSize: 14.0),
textAlign: TextAlign.end,
softWrap: true,
overflow: TextOverflow.ellipsis,
),
),
),
);
}
}
// ignore: must_be_immutable
class WelcomeMessageEditor extends StatefulWidget {
late SettingsProvider settingsProvider;
WelcomeMessageEditor(this.settingsProvider, {Key? key}) : super(key: key);
@override
State<WelcomeMessageEditor> createState() => _WelcomeMessageEditorState();
}
class _WelcomeMessageEditorState extends State<WelcomeMessageEditor> {
final _welcomeMsg = TextEditingController();
@override
void initState() {
super.initState();
_welcomeMsg.text =
widget.settingsProvider.welcomeMessage.replaceAll('%s', '%name%');
}
@override
Widget build(BuildContext context) {
return AlertDialog(
title: Text("edit_welcome_msg".i18n),
content: TextField(
controller: _welcomeMsg,
autofocus: true,
decoration: InputDecoration(
border: const OutlineInputBorder(),
label: Text('welcome_msg'.i18n),
suffixIcon: IconButton(
icon: const Icon(FeatherIcons.x),
onPressed: () {
setState(() {
_welcomeMsg.text = "";
});
},
),
),
),
actions: [
TextButton(
child: Text(
"cancel".i18n,
style: const TextStyle(fontWeight: FontWeight.w500),
),
onPressed: () {
Navigator.of(context).maybePop();
},
),
TextButton(
child: Text(
"done".i18n,
style: const TextStyle(fontWeight: FontWeight.w500),
),
onPressed: () {
// var trimmed = _welcomeMsg.text.trim();
// var defLen = trimmed.length;
// var replacedLen = trimmed.replaceAll('%s', '').length;
// if (defLen - 2 > replacedLen) {
// print('fuck yourself rn');
// }
var finalText = _welcomeMsg.text
.trim()
.replaceAll('%s', '')
.replaceFirst('%name%', '%s');
widget.settingsProvider
.update(welcomeMessage: finalText, store: true);
Navigator.of(context).pop(true);
},
),
],
);
}
}