fix: Unable to use file picker with applock

pull/605/head
krille-chan 2 years ago
parent bed7e34a36
commit 9c1c5a4aec
No known key found for this signature in database

@ -17,6 +17,7 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dar
import 'package:fluffychat/utils/resize_image.dart'; import 'package:fluffychat/utils/resize_image.dart';
import 'package:fluffychat/utils/story_theme_data.dart'; import 'package:fluffychat/utils/story_theme_data.dart';
import 'package:fluffychat/utils/string_color.dart'; import 'package:fluffychat/utils/string_color.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/matrix_sdk_extensions/client_stories_extension.dart'; import '../../utils/matrix_sdk_extensions/client_stories_extension.dart';
@ -69,9 +70,11 @@ class AddStoryController extends State<AddStoryPage> {
} }
void importMedia() async { void importMedia() async {
final picked = await FilePicker.platform.pickFiles( final picked = await AppLock.of(context).pauseWhile(
type: FileType.image, FilePicker.platform.pickFiles(
withData: true, type: FileType.image,
withData: true,
),
); );
final file = picked?.files.firstOrNull; final file = picked?.files.firstOrNull;
if (file == null) return; if (file == null) return;

@ -30,6 +30,7 @@ import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/account_bundles.dart'; import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart'; import '../../utils/localized_exception_extension.dart';
@ -469,9 +470,11 @@ class ChatController extends State<ChatPageWithRoom> {
} }
void sendFileAction() async { void sendFileAction() async {
final result = await FilePicker.platform.pickFiles( final result = await AppLock.of(context).pauseWhile(
allowMultiple: true, FilePicker.platform.pickFiles(
withData: true, allowMultiple: true,
withData: true,
),
); );
if (result == null || result.files.isEmpty) return; if (result == null || result.files.isEmpty) return;
await showDialog( await showDialog(
@ -508,10 +511,13 @@ class ChatController extends State<ChatPageWithRoom> {
} }
void sendImageAction() async { void sendImageAction() async {
final result = await FilePicker.platform.pickFiles( //AppLock.of(context).pauseWhile();
type: FileType.image, final result = await AppLock.of(context).pauseWhile(
withData: true, FilePicker.platform.pickFiles(
allowMultiple: true, type: FileType.image,
withData: true,
allowMultiple: true,
),
); );
if (result == null || result.files.isEmpty) return; if (result == null || result.files.isEmpty) return;

@ -15,6 +15,7 @@ import 'package:fluffychat/pages/chat_details/chat_details_view.dart';
import 'package:fluffychat/pages/settings/settings.dart'; import 'package:fluffychat/pages/settings/settings.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
enum AliasActions { copy, delete, setCanonical } enum AliasActions { copy, delete, setCanonical }
@ -376,9 +377,11 @@ class ChatDetailsController extends State<ChatDetails> {
name: result.path, name: result.path,
); );
} else { } else {
final picked = await FilePicker.platform.pickFiles( final picked = await AppLock.of(context).pauseWhile(
type: FileType.image, FilePicker.platform.pickFiles(
withData: true, type: FileType.image,
withData: true,
),
); );
final pickedFile = picked?.files.firstOrNull; final pickedFile = picked?.files.firstOrNull;
if (pickedFile == null) return; if (pickedFile == null) return;

@ -17,6 +17,7 @@ import 'package:universal_html/html.dart' as html;
import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart'; import 'package:fluffychat/pages/homeserver_picker/homeserver_picker_view.dart';
import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/matrix.dart'; import 'package:fluffychat/widgets/matrix.dart';
import '../../utils/localized_exception_extension.dart'; import '../../utils/localized_exception_extension.dart';
@ -168,7 +169,9 @@ class HomeserverPickerController extends State<HomeserverPicker> {
Widget build(BuildContext context) => HomeserverPickerView(this); Widget build(BuildContext context) => HomeserverPickerView(this);
Future<void> restoreBackup() async { Future<void> restoreBackup() async {
final picked = await FilePicker.platform.pickFiles(withData: true); final picked = await AppLock.of(context).pauseWhile(
FilePicker.platform.pickFiles(withData: true),
);
final file = picked?.files.firstOrNull; final file = picked?.files.firstOrNull;
if (file == null) return; if (file == null) return;
await showFutureLoadingDialog( await showFutureLoadingDialog(

@ -11,6 +11,7 @@ import 'package:image_picker/image_picker.dart';
import 'package:matrix/matrix.dart'; import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import '../../widgets/matrix.dart'; import '../../widgets/matrix.dart';
import '../bootstrap/bootstrap_dialog.dart'; import '../bootstrap/bootstrap_dialog.dart';
import 'settings_view.dart'; import 'settings_view.dart';
@ -135,9 +136,11 @@ class SettingsController extends State<Settings> {
name: result.path, name: result.path,
); );
} else { } else {
final result = await FilePicker.platform.pickFiles( final result = await AppLock.of(context).pauseWhile(
type: FileType.image, FilePicker.platform.pickFiles(
withData: true, type: FileType.image,
withData: true,
),
); );
final pickedFile = result?.files.firstOrNull; final pickedFile = result?.files.firstOrNull;
if (pickedFile == null) return; if (pickedFile == null) return;

@ -14,6 +14,7 @@ import 'package:matrix/matrix.dart';
import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import '../../widgets/matrix.dart'; import '../../widgets/matrix.dart';
import 'import_archive_dialog.dart'; import 'import_archive_dialog.dart';
import 'settings_emotes_view.dart'; import 'settings_emotes_view.dart';
@ -221,9 +222,11 @@ class EmotesSettingsController extends State<EmotesSettings> {
void imagePickerAction( void imagePickerAction(
ValueNotifier<ImagePackImageContent?> controller, ValueNotifier<ImagePackImageContent?> controller,
) async { ) async {
final result = await FilePicker.platform.pickFiles( final result = await AppLock.of(context).pauseWhile(
type: FileType.image, FilePicker.platform.pickFiles(
withData: true, type: FileType.image,
withData: true,
),
); );
final pickedFile = result?.files.firstOrNull; final pickedFile = result?.files.firstOrNull;
if (pickedFile == null) return; if (pickedFile == null) return;
@ -279,14 +282,16 @@ class EmotesSettingsController extends State<EmotesSettings> {
final result = await showFutureLoadingDialog<Archive?>( final result = await showFutureLoadingDialog<Archive?>(
context: context, context: context,
future: () async { future: () async {
final result = await FilePicker.platform.pickFiles( final result = await AppLock.of(context).pauseWhile(
type: FileType.custom, FilePicker.platform.pickFiles(
allowedExtensions: [ type: FileType.custom,
'zip', allowedExtensions: [
// TODO: add further encoders 'zip',
], // TODO: add further encoders
// TODO: migrate to stream, currently brrrr because of `archive_io`. ],
withData: true, // TODO: migrate to stream, currently brrrr because of `archive_io`.
withData: true,
),
); );
if (result == null) return null; if (result == null) return null;

@ -5,6 +5,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/theme_builder.dart'; import 'package:fluffychat/widgets/theme_builder.dart';
import '../../widgets/matrix.dart'; import '../../widgets/matrix.dart';
import 'settings_style_view.dart'; import 'settings_style_view.dart';
@ -18,9 +19,11 @@ class SettingsStyle extends StatefulWidget {
class SettingsStyleController extends State<SettingsStyle> { class SettingsStyleController extends State<SettingsStyle> {
void setWallpaperAction() async { void setWallpaperAction() async {
final picked = await FilePicker.platform.pickFiles( final picked = await AppLock.of(context).pauseWhile(
type: FileType.image, FilePicker.platform.pickFiles(
withData: false, type: FileType.image,
withData: false,
),
); );
final pickedFile = picked?.files.firstOrNull; final pickedFile = picked?.files.firstOrNull;

@ -28,10 +28,12 @@ class AppLockWidget extends StatefulWidget {
class AppLock extends State<AppLockWidget> with WidgetsBindingObserver { class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
String? _pincode; String? _pincode;
bool _isLocked = false; bool _isLocked = false;
bool _paused = false;
bool get isActive => bool get isActive =>
_pincode != null && _pincode != null &&
int.tryParse(_pincode!) != null && int.tryParse(_pincode!) != null &&
_pincode!.length == 4; _pincode!.length == 4 &&
!_paused;
@override @override
void initState() { void initState() {
@ -86,6 +88,15 @@ class AppLock extends State<AppLockWidget> with WidgetsBindingObserver {
_isLocked = true; _isLocked = true;
}); });
Future<T> pauseWhile<T>(Future<T> future) async {
_paused = true;
try {
return await future;
} finally {
_paused = false;
}
}
static AppLock of(BuildContext context) => Provider.of<AppLock>( static AppLock of(BuildContext context) => Provider.of<AppLock>(
context, context,
listen: false, listen: false,

Loading…
Cancel
Save