Merge pull request #740 from pangeachat/more-l2s

More-l2s
pull/1423/head
ggurdin 1 year ago committed by GitHub
commit f6248b73f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -4233,5 +4233,9 @@
"reportContentIssueTitle": "Report content issue",
"feedback": "Optional feedback",
"reportContentIssueDescription": "Uh oh! AI can faciliate personalized learning experiences but... also hallucinates. Please provide any feedback you have and we'll try again.",
"clickTheWordAgainToDeselect": "Click the selected word to deselect it."
"clickTheWordAgainToDeselect": "Click the selected word to deselect it.",
"l2SupportNa": "Not Available",
"l2SupportAlpha": "Alpha",
"l2SupportBeta": "Beta",
"l2SupportFull": "Full"
}

@ -27,7 +27,9 @@ class PangeaLanguage {
static Future<void> initialize() async {
try {
_langList = await _getCachedFlags();
if (await _shouldFetch || _langList.isEmpty) {
if (await _shouldFetch ||
_langList.isEmpty ||
_langList.every((lang) => !lang.l2)) {
_langList = await LanguageRepo.fetchLanguages();
await _saveFlags(_langList);

@ -0,0 +1,98 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
enum L2SupportEnum {
na,
alpha,
beta,
full,
}
extension L2SupportEnumExtension on L2SupportEnum {
String get storageString {
switch (this) {
case L2SupportEnum.na:
return 'na';
case L2SupportEnum.alpha:
return 'alpha';
case L2SupportEnum.beta:
return 'beta';
case L2SupportEnum.full:
return 'full';
}
}
L2SupportEnum fromStorageString(String storageString) {
switch (storageString) {
case 'na':
case 'L2SupportEnum.na':
return L2SupportEnum.na;
case 'alpha':
case 'L2SupportEnum.alpha':
return L2SupportEnum.alpha;
case 'beta':
case 'L2SupportEnum.beta':
return L2SupportEnum.beta;
case 'full':
case 'L2SupportEnum.full':
return L2SupportEnum.full;
default:
throw Exception('Unknown L2SupportEnum storage string: $storageString');
}
}
String toLocalizedString(BuildContext context) {
final l10n = L10n.of(context)!;
switch (this) {
case L2SupportEnum.na:
return l10n.l2SupportNa;
case L2SupportEnum.alpha:
return l10n.l2SupportAlpha;
case L2SupportEnum.beta:
return l10n.l2SupportBeta;
case L2SupportEnum.full:
return l10n.l2SupportFull;
}
}
Badge toBadge(BuildContext context) {
final theme = Theme.of(context);
Color color;
String label;
switch (this) {
case L2SupportEnum.na:
color = theme.colorScheme.onSurface.withOpacity(0.4); // Muted grey
label = toLocalizedString(context);
break;
case L2SupportEnum.alpha:
color = theme.colorScheme.primary.withOpacity(0.4); // Subtle primary
label = toLocalizedString(context);
break;
case L2SupportEnum.beta:
color =
theme.colorScheme.secondary.withOpacity(0.4); // Subtle secondary
label = toLocalizedString(context);
break;
case L2SupportEnum.full:
color = theme.colorScheme.tertiary.withOpacity(0.4); // Subtle tertiary
label = toLocalizedString(context);
break;
}
return Badge(
label: Text(
label,
style: theme.textTheme.bodySmall?.copyWith(
color: theme.colorScheme.onSurface.withOpacity(0.8), // Dimmed text
fontWeight: FontWeight.w500,
),
),
backgroundColor: color,
alignment: Alignment.center,
padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2),
smallSize: 20, // A smaller badge for subtlety
);
}
}

@ -1,6 +1,7 @@
import 'dart:developer';
import 'package:fluffychat/pangea/constants/language_constants.dart';
import 'package:fluffychat/pangea/enum/l2_support_enum.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
@ -12,15 +13,15 @@ class LanguageModel {
final String languageFlag;
final String displayName;
final String? languageEmoji;
final bool l2;
final bool l1;
final L2SupportEnum l2Support;
LanguageModel({
required this.langCode,
required this.languageFlag,
required this.displayName,
required this.l2,
required this.l1,
this.l2Support = L2SupportEnum.na,
this.languageEmoji,
});
@ -37,9 +38,11 @@ class LanguageModel {
displayName: _LanguageLocal.getDisplayName(
code != LanguageKeys.unknownLanguage ? code : json['language_name'],
),
l2: json["l2"] ?? code.contains("es") || code.contains("en"),
l1: json["l1"] ?? !code.contains("es") && !code.contains("en"),
languageEmoji: json['language_emoji'],
l2Support: json['l2_support'] != null
? L2SupportEnum.na.fromStorageString(json['l2_support'])
: L2SupportEnum.na,
);
}
@ -47,11 +50,13 @@ class LanguageModel {
'language_code': langCode,
'language_name': displayName,
'language_flag': languageFlag,
'l2': l2,
'l1': l1,
'language_emoji': languageEmoji,
'l2_support': l2Support.storageString,
};
bool get l2 => l2Support != L2SupportEnum.na;
// Discuss with Jordan - adding langCode field to language objects as separate from displayName
static String codeFromNameOrCode(String codeOrName, [String? url]) {
if (codeOrName.isEmpty) return LanguageKeys.unknownLanguage;
@ -73,7 +78,6 @@ class LanguageModel {
langCode: LanguageKeys.unknownLanguage,
languageFlag: "",
displayName: "Unknown",
l2: false,
l1: false,
);
@ -81,16 +85,12 @@ class LanguageModel {
displayName: context != null
? L10n.of(context)!.multiLingualSpace
: "Multilingual Space",
l2: false,
l1: false,
langCode: LanguageKeys.multiLanguage,
languageFlag: 'assets/colors.png',
languageEmoji: "🌎",
);
// Discuss with Jordan
bool get hasContextualDefinitionSupport => l2;
String? getDisplayName(BuildContext context) {
switch (langCode) {
case 'ab':

@ -234,6 +234,7 @@ class LanguageSelectionRow extends StatelessWidget {
targetLanguage: isSource ? null : language,
);
},
isL2List: !isSource,
initialLanguage: isSource
? controller.sourceLanguageSearch
: controller.targetLanguageSearch,

@ -231,6 +231,10 @@ class MessagePracticeActivityCardState extends State<PracticeActivityCard> {
return;
}
// clear the current activity and record
currentActivity = null;
currentCompletionRecord = null;
_fetchNewActivity(
ActivityQualityFeedback(
feedbackText: feedback,

@ -63,6 +63,7 @@ Future<void> pLanguageDialog(
setState(() => selectedSourceLanguage = p0),
initialLanguage: selectedSourceLanguage,
languages: pangeaController.pLanguageStore.baseOptions,
isL2List: false,
),
PQuestionContainer(
title: L10n.of(parentContext)!.whatLanguageYouWantToLearn,
@ -72,6 +73,7 @@ Future<void> pLanguageDialog(
setState(() => selectedTargetLanguage = p0),
initialLanguage: selectedTargetLanguage,
languages: pangeaController.pLanguageStore.targetOptions,
isL2List: true,
),
],
),

@ -1,5 +1,6 @@
// Flutter imports:
import 'package:fluffychat/pangea/enum/l2_support_enum.dart';
import 'package:fluffychat/pangea/models/language_model.dart';
import 'package:flutter/material.dart';
@ -10,6 +11,7 @@ class PLanguageDropdown extends StatefulWidget {
final LanguageModel initialLanguage;
final Function(LanguageModel) onChange;
final bool showMultilingual;
final bool isL2List;
const PLanguageDropdown({
super.key,
@ -17,6 +19,7 @@ class PLanguageDropdown extends StatefulWidget {
required this.onChange,
required this.initialLanguage,
this.showMultilingual = false,
required this.isL2List,
});
@override
@ -98,6 +101,7 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
value: LanguageModel.multiLingual(context),
child: LanguageDropDownEntry(
languageModel: LanguageModel.multiLingual(context),
isL2List: widget.isL2List,
),
),
...sortedLanguages.map(
@ -105,6 +109,7 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
value: languageModel,
child: LanguageDropDownEntry(
languageModel: languageModel,
isL2List: widget.isL2List,
),
),
),
@ -118,9 +123,11 @@ class _PLanguageDropdownState extends State<PLanguageDropdown> {
class LanguageDropDownEntry extends StatelessWidget {
final LanguageModel languageModel;
final bool isL2List;
const LanguageDropDownEntry({
super.key,
required this.languageModel,
required this.isL2List,
});
@override
@ -144,6 +151,9 @@ class LanguageDropDownEntry extends StatelessWidget {
overflow: TextOverflow.clip,
textAlign: TextAlign.center,
),
const SizedBox(width: 10),
if (isL2List && languageModel.l2Support != L2SupportEnum.full)
languageModel.l2Support.toBadge(context),
],
),
);

@ -6,7 +6,7 @@ description: Learn a language while texting your friends.
# Pangea#
publish_to: none
# On version bump also increase the build number for F-Droid
version: 1.21.4+3539
version: 1.21.4+3540
environment:
sdk: ">=3.0.0 <4.0.0"

Loading…
Cancel
Save