From 754fea538a3856d6884f5d7cacce33b9ab28d5d3 Mon Sep 17 00:00:00 2001 From: Sahil Yeole Date: Mon, 11 Sep 2023 21:48:36 +0530 Subject: [PATCH] add scam warning window Signed-off-by: Sahil Yeole --- flutter/lib/mobile/pages/server_page.dart | 191 +++++++++++++++++++++- 1 file changed, 190 insertions(+), 1 deletion(-) diff --git a/flutter/lib/mobile/pages/server_page.dart b/flutter/lib/mobile/pages/server_page.dart index a8255180b..f34fda733 100644 --- a/flutter/lib/mobile/pages/server_page.dart +++ b/flutter/lib/mobile/pages/server_page.dart @@ -210,11 +210,200 @@ class ServiceNotRunningNotification extends StatelessWidget { .marginOnly(bottom: 8), ElevatedButton.icon( icon: const Icon(Icons.play_arrow), - onPressed: serverModel.toggleService, + onPressed: () { + if (gFFI.userModel.userName.value.isEmpty && bind.mainGetLocalOption(key: "show-scam-warning") != "N") { + _showScamWarning(context, serverModel); + } else { + serverModel.toggleService(); + } + }, label: Text(translate("Start Service"))) ], )); } + + void _showScamWarning(BuildContext context, ServerModel serverModel) { + showDialog( + context: context, + builder: (BuildContext context) { + return ScamWarningDialog(serverModel: serverModel); + }, + ); + } + +} + +class ScamWarningDialog extends StatefulWidget { + final ServerModel serverModel; + + ScamWarningDialog({required this.serverModel}); + + @override + _ScamWarningDialogState createState() => _ScamWarningDialogState(); +} + +class _ScamWarningDialogState extends State { + int _countdown = 6; + bool show_warning = false; + late Timer _timer; + late ServerModel _serverModel; + + @override + void initState() { + super.initState(); + _serverModel = widget.serverModel; + startCountdown(); + } + + void startCountdown() { + const oneSecond = Duration(seconds: 1); + _timer = Timer.periodic(oneSecond, (timer) { + setState(() { + _countdown--; + if (_countdown <= 0) { + timer.cancel(); + } + }); + }); + } + + @override + void dispose() { + _timer.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final isButtonLocked = _countdown > 0; + + return AlertDialog( + content: Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [ + Color(0xffe242bc), + Color(0xfff4727c), + ], + ), + borderRadius: BorderRadius.circular(20.0), + ), + padding: EdgeInsets.all(25.0), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon( + Icons.warning_amber_sharp, + color: Colors.white, + ), + SizedBox(width: 10), + Text( + translate("Warning"), + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 20.0, + ), + ), + ], + ), + SizedBox(height: 20), + Center( + child: Image.asset('assets/scam.png', + width: 180, + ), + ), + SizedBox(height: 18), + Text( + translate("You May Be Being SCAMMED!"), + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 22.0, + ), + ), + SizedBox(height: 18), + Text( + translate("If you are on the phone with someone you DON'T know AND TRUST who has asked you to use RustDesk and start the service, do not proceed and hang up immediately.")+"\n\n" + +translate("They are likely a scammer trying to steal your money or other private information.")+"\n", + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 16.0, + ), + ), + Row( + children: [ + Checkbox( + value: show_warning, + onChanged: (value) { + setState((){ + show_warning = value!; + }); + }, + ), + Text( + translate("Don't show again"), + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 15.0, + ), + ), + ], + ), + SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ElevatedButton( + onPressed: isButtonLocked + ? null + : () { + Navigator.of(context).pop(); + _serverModel.toggleService(); + if (show_warning) { + bind.mainSetLocalOption(key: "show-scam-warning", value: "N"); + } + }, + style: ElevatedButton.styleFrom( + primary: Colors.blueAccent, + ), + child: Text( + isButtonLocked ? translate("I Agree")+" (${_countdown}s)" : translate("I Agree"), + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13.0, + ), + ), + ), + SizedBox(width: 15), + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + style: ElevatedButton.styleFrom( + primary: Colors.blueAccent, + ), + child: Text( + translate("Decline"), + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13.0, + ), + ), + ), + ], + )])), + contentPadding: EdgeInsets.all(0.0), + ); + } } class ServerInfo extends StatelessWidget {