Confirm PIN/password with user before persisting it

This commit is contained in:
Ming Ming 2024-05-29 00:36:50 +08:00
parent 0aaeddb544
commit 6dd734d263
5 changed files with 133 additions and 0 deletions

View file

@ -440,7 +440,9 @@
"settingsAppLockDescription": "If enabled, you will be asked to authenticate when you open the app", "settingsAppLockDescription": "If enabled, you will be asked to authenticate when you open the app",
"settingsAppLockSetupBiometricFallbackDialogTitle": "Pick the fallback when biometric is not available", "settingsAppLockSetupBiometricFallbackDialogTitle": "Pick the fallback when biometric is not available",
"settingsAppLockSetupPinDialogTitle": "Set the PIN to unlock app", "settingsAppLockSetupPinDialogTitle": "Set the PIN to unlock app",
"settingsAppLockConfirmPinDialogTitle": "Input the same PIN again",
"settingsAppLockSetupPasswordDialogTitle": "Set the password to unlock app", "settingsAppLockSetupPasswordDialogTitle": "Set the password to unlock app",
"settingsAppLockConfirmPasswordDialogTitle": "Input the same password again",
"settingsExperimentalTitle": "Experimental", "settingsExperimentalTitle": "Experimental",
"settingsExperimentalDescription": "Features that are not ready for everyday use", "settingsExperimentalDescription": "Features that are not ready for everyday use",
"settingsExpertTitle": "Advanced", "settingsExpertTitle": "Advanced",

View file

@ -34,7 +34,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"settingsAboutSectionTitle", "settingsAboutSectionTitle",
"settingsVersionTitle", "settingsVersionTitle",
"settingsServerVersionTitle", "settingsServerVersionTitle",
@ -260,7 +262,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"appLockUnlockHint", "appLockUnlockHint",
"appLockUnlockWrongPassword", "appLockUnlockWrongPassword",
"enabledText", "enabledText",
@ -283,7 +287,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"fileLastSharedByOthersDescription", "fileLastSharedByOthersDescription",
"multipleFilesLinkShareDialogContent", "multipleFilesLinkShareDialogContent",
"createShareProgressText", "createShareProgressText",
@ -348,7 +354,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"settingsExpertTitle", "settingsExpertTitle",
"settingsExpertWarningText", "settingsExpertWarningText",
"settingsClearCacheDatabaseTitle", "settingsClearCacheDatabaseTitle",
@ -449,7 +457,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"appLockUnlockHint", "appLockUnlockHint",
"appLockUnlockWrongPassword", "appLockUnlockWrongPassword",
"enabledText", "enabledText",
@ -467,7 +477,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"appLockUnlockHint", "appLockUnlockHint",
"appLockUnlockWrongPassword", "appLockUnlockWrongPassword",
"enabledText", "enabledText",
@ -485,7 +497,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"appLockUnlockHint", "appLockUnlockHint",
"appLockUnlockWrongPassword", "appLockUnlockWrongPassword",
"enabledText", "enabledText",
@ -505,7 +519,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"unmuteTooltip", "unmuteTooltip",
"slideshowTooltip", "slideshowTooltip",
"enhanceColorPopTitle", "enhanceColorPopTitle",
@ -602,7 +618,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"settingsExperimentalTitle", "settingsExperimentalTitle",
"settingsExperimentalDescription", "settingsExperimentalDescription",
"settingsExpertTitle", "settingsExpertTitle",
@ -894,7 +912,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"enhanceColorPopTitle", "enhanceColorPopTitle",
"imageEditTransformOrientationClockwise", "imageEditTransformOrientationClockwise",
"imageEditTransformOrientationCounterclockwise", "imageEditTransformOrientationCounterclockwise",
@ -920,7 +940,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"settingsServerVersionTitle", "settingsServerVersionTitle",
"searchLandingPeopleListEmptyText2", "searchLandingPeopleListEmptyText2",
"createCollectionFailureNotification", "createCollectionFailureNotification",
@ -953,7 +975,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"appLockUnlockHint", "appLockUnlockHint",
"appLockUnlockWrongPassword", "appLockUnlockWrongPassword",
"enabledText", "enabledText",
@ -971,7 +995,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"appLockUnlockHint", "appLockUnlockHint",
"appLockUnlockWrongPassword", "appLockUnlockWrongPassword",
"enabledText", "enabledText",
@ -1018,7 +1044,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"settingsExpertTitle", "settingsExpertTitle",
"settingsExpertWarningText", "settingsExpertWarningText",
"settingsClearCacheDatabaseTitle", "settingsClearCacheDatabaseTitle",
@ -1161,7 +1189,9 @@
"settingsAppLockDescription", "settingsAppLockDescription",
"settingsAppLockSetupBiometricFallbackDialogTitle", "settingsAppLockSetupBiometricFallbackDialogTitle",
"settingsAppLockSetupPinDialogTitle", "settingsAppLockSetupPinDialogTitle",
"settingsAppLockConfirmPinDialogTitle",
"settingsAppLockSetupPasswordDialogTitle", "settingsAppLockSetupPasswordDialogTitle",
"settingsAppLockConfirmPasswordDialogTitle",
"settingsExpertTitle", "settingsExpertTitle",
"settingsExpertWarningText", "settingsExpertWarningText",
"settingsClearCacheDatabaseTitle", "settingsClearCacheDatabaseTitle",

View file

@ -94,6 +94,47 @@ class _WrappedProtectedPagePasswordSetupDialog extends StatelessWidget {
} }
} }
class ProtectedPagePasswordConfirmDialog extends StatelessWidget {
const ProtectedPagePasswordConfirmDialog({
super.key,
required this.password,
});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => _Bloc(
password: password,
),
child: _WrappedProtectedPagePasswordConfirmDialog(),
);
}
final CiString password;
}
class _WrappedProtectedPagePasswordConfirmDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocListener(
listeners: [
_BlocListenerT(
selector: (state) => state.isAuthorized,
listener: (context, isAuthorized) {
if (isAuthorized.value == true) {
Navigator.of(context).pop(true);
}
},
),
],
child: AlertDialog(
title: Text(L10n.global().settingsAppLockConfirmPasswordDialogTitle),
content: const _DialogBody(),
),
);
}
}
// typedef _BlocBuilder = BlocBuilder<_Bloc, _State>; // typedef _BlocBuilder = BlocBuilder<_Bloc, _State>;
// typedef _BlocListener = BlocListener<_Bloc, _State>; // typedef _BlocListener = BlocListener<_Bloc, _State>;
typedef _BlocListenerT<T> = BlocListenerT<_Bloc, _State, T>; typedef _BlocListenerT<T> = BlocListenerT<_Bloc, _State, T>;

View file

@ -107,6 +107,52 @@ class _WrappedProtectedPagePinSetupDialog extends StatelessWidget {
} }
} }
class ProtectedPagePinConfirmDialog extends StatelessWidget {
const ProtectedPagePinConfirmDialog({
super.key,
required this.pin,
});
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => _Bloc(
pin: pin,
removeItemBuilder: (_, animation, value) => _RemoveItem(
animation: animation,
value: value,
),
),
child: _WrappedProtectedPagePinConfirmDialog(),
);
}
final CiString pin;
}
class _WrappedProtectedPagePinConfirmDialog extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiBlocListener(
listeners: [
_BlocListenerT(
selector: (state) => state.isAuthorized,
listener: (context, isAuthorized) {
if (isAuthorized) {
Navigator.of(context).pop(true);
}
},
),
],
child: AlertDialog(
title: Text(L10n.global().settingsAppLockConfirmPinDialogTitle),
scrollable: true,
content: const _DialogBody(),
),
);
}
}
// typedef _BlocBuilder = BlocBuilder<_Bloc, _State>; // typedef _BlocBuilder = BlocBuilder<_Bloc, _State>;
// typedef _BlocListener = BlocListener<_Bloc, _State>; // typedef _BlocListener = BlocListener<_Bloc, _State>;
typedef _BlocListenerT<T> = BlocListenerT<_Bloc, _State, T>; typedef _BlocListenerT<T> = BlocListenerT<_Bloc, _State, T>;

View file

@ -258,6 +258,13 @@ class _WrappedAppLockSettings extends StatelessWidget {
if (result == null) { if (result == null) {
return null; return null;
} }
final isConfirmed = await showDialog<bool>(
context: context,
builder: (_) => ProtectedPagePinConfirmDialog(pin: result),
);
if (isConfirmed != true) {
return null;
}
return context.bloc.securePrefController.setProtectedPageAuthPin(result); return context.bloc.securePrefController.setProtectedPageAuthPin(result);
} }
@ -269,6 +276,13 @@ class _WrappedAppLockSettings extends StatelessWidget {
if (result == null) { if (result == null) {
return null; return null;
} }
final isConfirmed = await showDialog<bool>(
context: context,
builder: (_) => ProtectedPagePasswordConfirmDialog(password: result),
);
if (isConfirmed != true) {
return null;
}
return context.bloc.securePrefController return context.bloc.securePrefController
.setProtectedPageAuthPassword(result); .setProtectedPageAuthPassword(result);
} }