forked from canonical/ubuntu-desktop-installer
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ref: canonical#34
- Loading branch information
Showing
6 changed files
with
151 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
...ubuntu_desktop_installer/lib/pages/generate_recovery_key/generate_recovery_key_model.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import 'package:flutter/foundation.dart'; | ||
import 'package:subiquity_client/subiquity_client.dart'; | ||
|
||
/// View model for [GenerateRecoveryKeyPage]. | ||
class GenerateRecoveryKeyModel extends ChangeNotifier { | ||
/// Creates the model with the given client. | ||
GenerateRecoveryKeyModel(this._client) { | ||
Listenable.merge([ | ||
_recoveryKey, | ||
_overwrite, | ||
]).addListener(notifyListeners); | ||
} | ||
|
||
final SubiquityClient _client; | ||
final _recoveryKey = ValueNotifier(''); | ||
final _overwrite = ValueNotifier(false); | ||
|
||
/// The current recovery key. | ||
String get recoveryKey => _recoveryKey.value; | ||
set recoveryKey(String value) => _recoveryKey.value = value; | ||
|
||
/// Whether empty disk space is overridden. | ||
bool get overwriteEmptyDiskSpace => _overwrite.value; | ||
set overwriteEmptyDiskSpace(bool value) => _overwrite.value = value; | ||
|
||
/// Whether the current input is valid. | ||
bool get isValid => true; | ||
|
||
/// Loads the security key. | ||
Future<void> loadRecoveryKey() async {} | ||
|
||
/// Saves the security key. | ||
Future<void> saveRecoveryKey() async {} | ||
} |
105 changes: 105 additions & 0 deletions
105
.../ubuntu_desktop_installer/lib/pages/generate_recovery_key/generate_recovery_key_page.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
import 'package:flutter/material.dart'; | ||
import 'package:flutter_html/flutter_html.dart'; | ||
import 'package:provider/provider.dart'; | ||
import 'package:subiquity_client/subiquity_client.dart'; | ||
import 'package:ubuntu_wizard/constants.dart'; | ||
import 'package:ubuntu_wizard/utils.dart'; | ||
import 'package:ubuntu_wizard/widgets.dart'; | ||
|
||
import '../../l10n.dart'; | ||
import '../../widgets.dart'; | ||
import 'generate_recovery_key_model.dart'; | ||
|
||
part 'generate_recovery_key_widgets.dart'; | ||
|
||
/// Choose security key page. | ||
/// | ||
/// See also: | ||
/// * [GenerateRecoveryKeyModel] | ||
class GenerateRecoveryKeyPage extends StatefulWidget { | ||
/// Use [create] instead. | ||
@visibleForTesting | ||
const GenerateRecoveryKeyPage({ | ||
Key? key, | ||
}) : super(key: key); | ||
|
||
/// Creates an instance with [GenerateRecoveryKeyModel]. | ||
static Widget create(BuildContext context) { | ||
final client = Provider.of<SubiquityClient>(context, listen: false); | ||
return ChangeNotifierProvider( | ||
create: (_) => GenerateRecoveryKeyModel(client), | ||
child: GenerateRecoveryKeyPage(), | ||
); | ||
} | ||
|
||
@override | ||
_GenerateRecoveryKeyPageState createState() => | ||
_GenerateRecoveryKeyPageState(); | ||
} | ||
|
||
class _GenerateRecoveryKeyPageState extends State<GenerateRecoveryKeyPage> { | ||
@override | ||
void initState() { | ||
super.initState(); | ||
|
||
final model = Provider.of<GenerateRecoveryKeyModel>(context, listen: false); | ||
model.loadRecoveryKey(); | ||
} | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
final lang = AppLocalizations.of(context); | ||
final model = Provider.of<GenerateRecoveryKeyModel>(context); | ||
return LocalizedView(builder: (context, lang) { | ||
return WizardPage( | ||
title: Text(lang.generateRecoveryKeyTitle), | ||
header: Text(lang.generateRecoveryKeyHeader), | ||
content: LayoutBuilder(builder: (context, constraints) { | ||
final fieldWidth = constraints.maxWidth * kContentWidthFraction; | ||
return ListView( | ||
children: <Widget>[ | ||
_RecoveryKeyLocationSelector(), | ||
const SizedBox(height: kContentSpacing), | ||
_RecoveryKeyField(), | ||
const SizedBox(height: kContentSpacing), | ||
Text(lang.generateRecoveryKeyMoreSecurity), | ||
const SizedBox(height: kContentSpacing), | ||
CheckButton( | ||
value: model.overwriteEmptyDiskSpace, | ||
title: lang.generateRecoveryKeyMoreSecurity, | ||
), | ||
], | ||
); | ||
}), | ||
actions: <WizardAction>[ | ||
WizardAction( | ||
label: lang.backButtonText, | ||
onActivated: Wizard.of(context).back, | ||
), | ||
WizardAction( | ||
label: lang.continueButtonText, | ||
enabled: context.select<GenerateRecoveryKeyModel, bool>( | ||
(model) => model.isValid), | ||
onActivated: () async { | ||
final model = | ||
Provider.of<GenerateRecoveryKeyModel>(context, listen: false); | ||
await model.saveSecurityKey(); | ||
|
||
Wizard.of(context).next(); | ||
}, | ||
), | ||
], | ||
); | ||
}); | ||
} | ||
} | ||
|
||
extension _HexColor on Color { | ||
String toHex() => | ||
_formatHex(alpha.toHex(), red.toHex(), green.toHex(), blue.toHex()); | ||
String _formatHex(String a, String r, String g, String b) => '#$a$r$g$b'; | ||
} | ||
|
||
extension _IntHex on int { | ||
String toHex() => toRadixString(16).padLeft(2, '0'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters