inital work for usability test updates

pull/1091/head
Gabby Gurdin 2 years ago
parent 9acd4875db
commit 55bb8191e6

@ -2123,9 +2123,13 @@
"placeholders": {} "placeholders": {}
}, },
"writeAMessage": "Write a message…", "writeAMessage": "Write a message…",
"@writeAMessage": { "writeAMessageFlag": "Write a message in {l1flag} or {l2flag}…",
"@writeAMessageFlag": {
"type": "text", "type": "text",
"placeholders": {} "placeholders": {
"l1flag": {},
"l2flag": {}
}
}, },
"yes": "Yes", "yes": "Yes",
"@yes": { "@yes": {
@ -3989,5 +3993,6 @@
"unread": {} "unread": {}
} }
}, },
"messageAnalytics": "Message Analytics" "messageAnalytics": "Message Analytics",
"noPaymentInfo": "No payment info necessary!"
} }

@ -27,6 +27,11 @@ class ChatInputRow extends StatelessWidget {
const height = 48.0; const height = 48.0;
// #Pangea // #Pangea
final activel1 =
controller.pangeaController.languageController.activeL1Model();
final activel2 =
controller.pangeaController.languageController.activeL2Model();
return Column( return Column(
children: [ children: [
ITBar( ITBar(
@ -325,7 +330,16 @@ class ChatInputRow extends StatelessWidget {
bottom: 6.0, bottom: 6.0,
top: 3.0, top: 3.0,
), ),
hintText: L10n.of(context)!.writeAMessage, hintText: activel1 != null && activel2 != null
? L10n.of(context)!.writeAMessageFlag(
activel1.languageEmoji ??
activel1.getDisplayName(context) ??
activel1.langCode,
activel2.languageEmoji ??
activel2.getDisplayName(context) ??
activel2.langCode,
)
: L10n.of(context)!.writeAMessage,
hintMaxLines: 1, hintMaxLines: 1,
border: InputBorder.none, border: InputBorder.none,
enabledBorder: InputBorder.none, enabledBorder: InputBorder.none,

@ -946,6 +946,15 @@ class ChatListController extends State<ChatList>
} }
Future<void> dehydrate() => Matrix.of(context).dehydrateAction(); Future<void> dehydrate() => Matrix.of(context).dehydrateAction();
// #Pangea
bool hovered = false;
void setHovered(bool value) {
setState(() {
hovered = value;
});
}
// Pangea#
} }
enum EditBundleAction { addToBundle, removeFromBundle } enum EditBundleAction { addToBundle, removeFromBundle }

@ -47,6 +47,14 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget {
) )
// #Pangea // #Pangea
: ClientChooserButton(controller), : ClientChooserButton(controller),
// :
// Expanded(
// Container(
// width: double.infinity,
// height: 5,
// color: Colors.blue,
// ),
// ),
// : TextField( // : TextField(
// controller: controller.searchController, // controller: controller.searchController,
// focusNode: controller.searchFocusNode, // focusNode: controller.searchFocusNode,

@ -298,36 +298,19 @@ class ClientChooserButton extends StatelessWidget {
// child: const SizedBox.shrink(), // child: const SizedBox.shrink(),
// ), // ),
// Pangea# // Pangea#
PopupMenuButton<Object>( SizedBox(
width: double.infinity,
child: PopupMenuButton<Object>(
onSelected: (o) => _clientSelected(o, context), onSelected: (o) => _clientSelected(o, context),
itemBuilder: _bundleMenuItems, itemBuilder: _bundleMenuItems,
// #Pangea // #Pangea
child: Material(
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(12),
bottomRight: Radius.circular(12),
),
clipBehavior: Clip.hardEdge,
child: ListTile( child: ListTile(
tileColor: Theme.of(context).scaffoldBackgroundColor,
hoverColor: Theme.of(context).colorScheme.onSurfaceVariant,
leading: const Icon(Icons.settings_outlined),
title: Text(L10n.of(context)!.mainMenu), title: Text(L10n.of(context)!.mainMenu),
leading: const Icon(Icons.settings_outlined),
), ),
),
// child: Material(
// color: Colors.transparent,
// borderRadius: BorderRadius.circular(99),
// child: Avatar(
// mxContent: snapshot.data?.avatarUrl,
// name: snapshot.data?.displayName ??
// matrix.client.userID!.localpart,
// size: 32,
// fontSize: 12,
// ),
// ),
// Pangea# // Pangea#
), ),
),
], ],
), ),
); );

@ -75,7 +75,7 @@ class Choreographer {
OverlayUtil.showPositionedCard( OverlayUtil.showPositionedCard(
context: context, context: context,
cardToShow: const PaywallCard(), cardToShow: const PaywallCard(),
cardSize: const Size(325, 375), cardSize: const Size(325, 325),
transformTargetId: inputTransformTargetKey, transformTargetId: inputTransformTargetKey,
); );
return; return;

@ -1,17 +1,16 @@
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:fluffychat/pangea/constants/language_keys.dart'; import 'package:fluffychat/pangea/constants/language_keys.dart';
import 'package:fluffychat/pangea/controllers/language_list_controller.dart'; import 'package:fluffychat/pangea/controllers/language_list_controller.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart';
import 'package:fluffychat/pangea/models/class_model.dart'; import 'package:fluffychat/pangea/models/class_model.dart';
import 'package:fluffychat/pangea/models/language_model.dart'; import 'package:fluffychat/pangea/models/language_model.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import '../widgets/user_settings/p_language_dialog.dart'; import '../widgets/user_settings/p_language_dialog.dart';
class LanguageController { class LanguageController {
@ -31,16 +30,19 @@ class LanguageController {
); );
return; return;
} }
if (_userL1Code == null || if (!languagesSet) {
_userL2Code == null ||
_userL1Code!.isEmpty ||
_userL2Code!.isEmpty ||
_userL1Code == LanguageKeys.unknownLanguage ||
_userL2Code == LanguageKeys.unknownLanguage) {
pLanguageDialog(dialogContext, callback); pLanguageDialog(dialogContext, callback);
} }
} }
bool get languagesSet =>
_userL1Code != null &&
_userL2Code != null &&
_userL1Code!.isNotEmpty &&
_userL2Code!.isNotEmpty &&
_userL1Code != LanguageKeys.unknownLanguage &&
_userL2Code != LanguageKeys.unknownLanguage;
String? get _userL1Code { String? get _userL1Code {
final source = final source =
_pangeaController.userController.userModel?.profile?.sourceLanguage; _pangeaController.userController.userModel?.profile?.sourceLanguage;

@ -11,6 +11,7 @@ class LanguageModel {
final String langCode; final String langCode;
final String languageFlag; final String languageFlag;
final String displayName; final String displayName;
final String? languageEmoji;
final bool l2; final bool l2;
final bool l1; final bool l1;
@ -20,6 +21,7 @@ class LanguageModel {
required this.displayName, required this.displayName,
required this.l2, required this.l2,
required this.l1, required this.l1,
this.languageEmoji,
}); });
factory LanguageModel.fromJson(json) { factory LanguageModel.fromJson(json) {
@ -37,6 +39,7 @@ class LanguageModel {
), ),
l2: json["l2"] ?? code.contains("es") || code.contains("en"), l2: json["l2"] ?? code.contains("es") || code.contains("en"),
l1: json["l1"] ?? !code.contains("es") && !code.contains("en"), l1: json["l1"] ?? !code.contains("es") && !code.contains("en"),
languageEmoji: json['language_emoji'],
); );
} }
@ -46,6 +49,7 @@ class LanguageModel {
'language_flag': languageFlag, 'language_flag': languageFlag,
'l2': l2, 'l2': l2,
'l1': l1, 'l1': l1,
'language_emoji': languageEmoji,
}; };
// Discuss with Jordan - adding langCode field to language objects as separate from displayName // Discuss with Jordan - adding langCode field to language objects as separate from displayName
@ -81,6 +85,7 @@ class LanguageModel {
l1: false, l1: false,
langCode: LanguageKeys.multiLanguage, langCode: LanguageKeys.multiLanguage,
languageFlag: 'assets/colors.png', languageFlag: 'assets/colors.png',
languageEmoji: "🌎",
); );
// Discuss with Jordan // Discuss with Jordan

@ -37,7 +37,10 @@ class PangeaRichText extends StatefulWidget {
class PangeaRichTextState extends State<PangeaRichText> { class PangeaRichTextState extends State<PangeaRichText> {
final PangeaController pangeaController = MatrixState.pangeaController; final PangeaController pangeaController = MatrixState.pangeaController;
bool _fetchingRepresentation = false; bool _fetchingRepresentation = false;
double get blur => _fetchingRepresentation && widget.immersionMode ? 5 : 0; double get blur => (_fetchingRepresentation && widget.immersionMode) ||
!pangeaController.languageController.languagesSet
? 5
: 0;
String textSpan = ""; String textSpan = "";
PangeaRepresentation? repEvent; PangeaRepresentation? repEvent;

@ -51,7 +51,7 @@ class PangeaTextController extends TextEditingController {
OverlayUtil.showPositionedCard( OverlayUtil.showPositionedCard(
context: context, context: context,
cardToShow: const PaywallCard(), cardToShow: const PaywallCard(),
cardSize: const Size(325, 375), cardSize: const Size(325, 325),
transformTargetId: choreographer.inputTransformTargetKey, transformTargetId: choreographer.inputTransformTargetKey,
); );
} }

@ -5,7 +5,6 @@ import 'package:fluffychat/pangea/widgets/igc/card_header.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:shimmer/shimmer.dart';
class PaywallCard extends StatelessWidget { class PaywallCard extends StatelessWidget {
const PaywallCard({ const PaywallCard({
@ -31,13 +30,16 @@ class PaywallCard extends StatelessWidget {
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
const OptionsShimmer(),
const SizedBox(height: 15.0),
Text( Text(
L10n.of(context)!.subscriptionPopupDesc, L10n.of(context)!.subscriptionPopupDesc,
style: BotStyle.text(context), style: BotStyle.text(context),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
Text(
L10n.of(context)!.noPaymentInfo,
style: BotStyle.text(context),
textAlign: TextAlign.center,
),
const SizedBox(height: 15.0), const SizedBox(height: 15.0),
SizedBox( SizedBox(
width: double.infinity, width: double.infinity,
@ -88,46 +90,3 @@ class PaywallCard extends StatelessWidget {
); );
} }
} }
class OptionsShimmer extends StatelessWidget {
const OptionsShimmer({super.key});
@override
Widget build(BuildContext context) {
return Shimmer.fromColors(
baseColor: Theme.of(context).colorScheme.primary.withOpacity(0.5),
highlightColor: Theme.of(context).colorScheme.primary.withOpacity(0.1),
direction: ShimmerDirection.ltr,
child: Wrap(
alignment: WrapAlignment.center,
children: List.generate(
3,
(_) => Container(
margin: const EdgeInsets.all(2),
padding: EdgeInsets.zero,
child: TextButton(
style: ButtonStyle(
padding: MaterialStateProperty.all(
const EdgeInsets.symmetric(horizontal: 7),
),
backgroundColor: MaterialStateProperty.all<Color>(
Theme.of(context).colorScheme.primary.withOpacity(0.1),
),
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
),
),
onPressed: () {},
child: Text(
"",
style: BotStyle.text(context),
),
),
),
),
),
);
}
}

Loading…
Cancel
Save