allow sharing proifile via qrcode
continuous-integration/drone/pr Build was killed Details

This commit is contained in:
Dan Ballard 2022-09-09 13:53:04 -07:00
parent 2defc7ea2c
commit cfa4b4f95b
17 changed files with 112 additions and 23 deletions

View File

@ -1,6 +1,8 @@
{
"@@locale": "cy",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "da",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "de",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"localeIt": "Italienisch \/ Italiano",

View File

@ -1,6 +1,8 @@
{
"@@locale": "el",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "en",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "es",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"tooltipPinConversation": "Fija la conversación en la parte superior de \"Conversaciones\"",
"errorDownloadDirectoryDoesNotExist": "No se puede habilitar el uso compartido de archivos porque la carpeta de descarga no se ha configurado o se configuró en una carpeta que no existe.",
"acquiringTicketsFromServer": "Realizando Desafío Antispam",

View File

@ -1,6 +1,8 @@
{
"@@locale": "fr",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Le partage de fichiers ne peut pas être activé car le dossier de téléchargement n'a pas été défini ou est défini sur un dossier qui n'existe pas.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "it",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "lb",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "no",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "pl",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "pt",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "ro",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -1,6 +1,8 @@
{
"@@locale": "ru",
"@@last_modified": "2022-09-09T21:46:36+02:00",
"@@last_modified": "2022-09-09T22:56:43+02:00",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",

View File

@ -19,9 +19,12 @@ import '../main.dart';
import '../settings.dart';
import 'addcontactview.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:qr_flutter/qr_flutter.dart';
import 'messageview.dart';
enum ShareMenu { copyCode, qrcode }
class ContactsView extends StatefulWidget {
const ContactsView({Key? key}) : super(key: key);
@ -163,16 +166,38 @@ class _ContactsViewState extends State<ContactsView> {
actions.add(Tooltip(message: AppLocalizations.of(context)!.blockUnknownConnectionsEnabledDescription, child: Icon(CwtchIcons.block_unknown)));
}
// Copy profile onion
actions.add(IconButton(
actions.add(PopupMenuButton<ShareMenu>(
icon: Icon(CwtchIcons.address_copy_2),
tooltip: AppLocalizations.of(context)!.copyAddress,
tooltip: AppLocalizations.of(context)!.shareProfileMenuTooltop,
splashRadius: Material.defaultSplashRadius / 2,
onPressed: () {
Clipboard.setData(new ClipboardData(text: Provider.of<ProfileInfoState>(context, listen: false).onion));
final snackBar = SnackBar(content: Text(AppLocalizations.of(context)!.copiedToClipboardNotification));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}));
onSelected: (ShareMenu item) {
switch(item) {
case ShareMenu.copyCode:
{
Clipboard.setData(new ClipboardData(text: Provider
.of<ProfileInfoState>(context, listen: false)
.onion));
final snackBar = SnackBar(content: Text(AppLocalizations.of(context)!.copiedToClipboardNotification));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
break;
case ShareMenu.qrcode: {
_showQRCode("cwtch:" + Provider.of<ProfileInfoState>(context, listen: false).onion);
}
break;
}
},
itemBuilder: (BuildContext context) => <PopupMenuEntry<ShareMenu>>[
PopupMenuItem<ShareMenu>(
value: ShareMenu.copyCode,
child: Text(AppLocalizations.of(context)!.copyAddress),
),
PopupMenuItem<ShareMenu>(
value: ShareMenu.qrcode,
child: Text(AppLocalizations.of(context)!.shareMenuQRCode),
),
],
));
// Manage known Servers
if (Provider.of<Settings>(context, listen: false).isExperimentEnabled(TapirGroupsExperiment) || Provider.of<Settings>(context, listen: false).isExperimentEnabled(ServerManagementExperiment)) {
@ -381,4 +406,25 @@ class _ContactsViewState extends State<ContactsView> {
)));
});
}
void _showQRCode(String profile_code) {
showModalBottomSheet<dynamic>(
context: context,
builder: (BuildContext context) {
return Wrap( children: <Widget>[
Center( child:
QrImage(
data: profile_code,
version: QrVersions.auto,
size: 400.0,
backgroundColor: Provider.of<Settings>(context).theme.backgroundPaneColor,
foregroundColor: Provider.of<Settings>(context).theme.mainTextColor,
gapless: false,
),
)]);
},
);
}
}

View File

@ -617,6 +617,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
qr:
dependency: transitive
description:
name: qr
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
qr_flutter:
dependency: "direct main"
description:
name: qr_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0"
screen_retriever:
dependency: transitive
description:

View File

@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.8.0+34
version: 1.9.0+35
environment:
sdk: ">=2.15.0 <3.0.0"
@ -46,6 +46,7 @@ dependencies:
win_toast: ^0.0.2
flutter_local_notifications: ^9.6.1
desktop_notifications: ^0.6.3
qr_flutter: ^4.0.0
dev_dependencies:
msix: ^3.6.2