diff --git a/lib/settings.dart b/lib/settings.dart index ee75f6b5..786171ac 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -404,9 +404,12 @@ class Settings extends ChangeNotifier { // checks experiment settings and file extension for image previews // (ignores file size; if the user manually accepts the file, assume it's okay to preview) bool shouldPreview(String path) { + return isExperimentEnabled(ImagePreviewsExperiment) && isImage(path); + } + + bool isImage(String path) { var lpath = path.toLowerCase(); - return isExperimentEnabled(ImagePreviewsExperiment) && - (lpath.endsWith(".jpg") || lpath.endsWith(".jpeg") || lpath.endsWith(".png") || lpath.endsWith(".gif") || lpath.endsWith(".webp") || lpath.endsWith(".bmp")); + return (lpath.endsWith(".jpg") || lpath.endsWith(".jpeg") || lpath.endsWith(".png") || lpath.endsWith(".gif") || lpath.endsWith(".webp") || lpath.endsWith(".bmp")); } String get downloadPath => _downloadPath; diff --git a/lib/views/globalsettingsexperimentsview.dart b/lib/views/globalsettingsexperimentsview.dart index 2cd1bf34..9aa69275 100644 --- a/lib/views/globalsettingsexperimentsview.dart +++ b/lib/views/globalsettingsexperimentsview.dart @@ -163,28 +163,28 @@ class _GlobalSettingsExperimentsViewState extends State(context, listen: false).cwtch.IsBlodeuweddSupported(), - child: SwitchListTile( - title: Text(AppLocalizations.of(context)!.blodeuweddExperimentEnable), - subtitle: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() - ? Text(AppLocalizations.of(context)!.blodeuweddDescription) - : Text(AppLocalizations.of(context)!.blodeuweddNotSupported), - value: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), - onChanged: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() - ? (bool value) { - if (value) { - settings.enableExperiment(BlodeuweddExperiment); - } else { - settings.disableExperiment(BlodeuweddExperiment); + visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported(), + child: SwitchListTile( + title: Text(AppLocalizations.of(context)!.blodeuweddExperimentEnable), + subtitle: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() + ? Text(AppLocalizations.of(context)!.blodeuweddDescription) + : Text(AppLocalizations.of(context)!.blodeuweddNotSupported), + value: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), + onChanged: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() + ? (bool value) { + if (value) { + settings.enableExperiment(BlodeuweddExperiment); + } else { + settings.disableExperiment(BlodeuweddExperiment); + } + saveSettings(context); } - saveSettings(context); - } - : null, - activeTrackColor: settings.theme.defaultButtonColor, - inactiveTrackColor: settings.theme.defaultButtonDisabledColor, - inactiveThumbColor: settings.theme.defaultButtonDisabledColor, - secondary: Icon(Icons.assistant, color: settings.current().mainTextColor), - )), + : null, + activeTrackColor: settings.theme.defaultButtonColor, + inactiveTrackColor: settings.theme.defaultButtonDisabledColor, + inactiveThumbColor: settings.theme.defaultButtonDisabledColor, + secondary: Icon(Icons.assistant, color: settings.current().mainTextColor), + )), Visibility( visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && settings.isExperimentEnabled(BlodeuweddExperiment), child: CwtchFolderPicker( diff --git a/lib/widgets/contactrow.dart b/lib/widgets/contactrow.dart index c50ece85..1f4b85da 100644 --- a/lib/widgets/contactrow.dart +++ b/lib/widgets/contactrow.dart @@ -120,7 +120,7 @@ class _ContactRowState extends State { )), Container( padding: EdgeInsets.all(0), - height: Provider.of(context).fontScaling * 14.0 + 5.0, + height: contact.isInvitation ? Provider.of(context).fontScaling * 14.0 + 35.0 : Provider.of(context).fontScaling * 14.0 + 5.0, child: contact.isInvitation == true ? Wrap(alignment: WrapAlignment.start, direction: Axis.vertical, children: [ Padding( diff --git a/lib/widgets/filebubble.dart b/lib/widgets/filebubble.dart index 2e790cab..df27041d 100644 --- a/lib/widgets/filebubble.dart +++ b/lib/widgets/filebubble.dart @@ -75,6 +75,7 @@ class FileBubbleState extends State { var flagStarted = Provider.of(context).attributes["file-downloaded"] == "true"; var borderRadius = 15.0; var showFileSharing = Provider.of(context).isExperimentEnabled(FileSharingExperiment); + var showImages = Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment); DateTime messageDate = Provider.of(context).timestamp; var metadata = Provider.of(context); @@ -91,13 +92,16 @@ class FileBubbleState extends State { var downloadComplete = (fromMe && path != null) || Provider.of(context).downloadComplete(widget.fileKey()); var downloadInterrupted = Provider.of(context).downloadInterrupted(widget.fileKey()); + var isImagePreview = false; + if (path != null) { + isImagePreview = Provider.of(context).isImage(path); + } + if (downloadComplete && path != null) { - var lpath = path.toLowerCase(); - if (lpath.endsWith(".jpg") || lpath.endsWith(".jpeg") || lpath.endsWith(".png") || lpath.endsWith(".gif") || lpath.endsWith(".webp") || lpath.endsWith(".bmp")) { + if (isImagePreview) { if (myFile == null || myFile?.path != path) { setState(() { myFile = new File(path!); - // reset if (myFile?.existsSync() == false) { myFile = null; @@ -135,10 +139,13 @@ class FileBubbleState extends State { } } - // we don't preview a non downloaded file... - if (widget.isPreview && myFile != null) { + // if we should show a preview i.e. we are in a quote bubble + // then do that here... + if (showImages && isImagePreview && widget.isPreview && myFile != null) { + // if the image exists then just show the image as a preview return getPreview(context); - } else if (widget.isPreview && myFile == null) { + } else if (showFileSharing && widget.isPreview) { + // otherwise just show a summary... return Row( children: [ Icon(CwtchIcons.attached_file_3, size: 32, color: Provider.of(context).theme.messageFromMeTextColor), @@ -162,9 +169,7 @@ class FileBubbleState extends State { if (!showFileSharing) { wdgDecorations = Text('\u202F'); - } else if (fromMe) { - wdgDecorations = Text('\u202F'); - } else if (downloadComplete && path != null) { + } else if ((fromMe || downloadComplete) && path != null) { // in this case, whatever marked download.complete would have also set the path if (myFile != null && Provider.of(context).shouldPreview(path)) { isPreview = true; @@ -178,6 +183,8 @@ class FileBubbleState extends State { pop(context, myFile!, widget.nameSuggestion); }, ))); + } else if (fromMe) { + wdgDecorations = Text('\u202F'); } else { wdgDecorations = Visibility( visible: widget.interactive, child: SelectableText(AppLocalizations.of(context)!.fileSavedTo + ': ' + path + '\u202F', style: Provider.of(context).scaleFonts(defaultTextStyle)));