blob: 1fe46e5009d145caa39db2c4c764fbb7c32ee44e [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of stocks;
typedef void SettingsUpdater({
StockMode optimism,
BackupMode backup
});
class StockSettings extends StatefulComponent {
const StockSettings(this.optimism, this.backup, this.updater);
final StockMode optimism;
final BackupMode backup;
final SettingsUpdater updater;
StockSettingsState createState() => new StockSettingsState();
}
class StockSettingsState extends State<StockSettings> {
void _handleOptimismChanged(bool value) {
value ??= false;
sendUpdates(value ? StockMode.optimistic : StockMode.pessimistic, config.backup);
}
void _handleBackupChanged(bool value) {
sendUpdates(config.optimism, value ? BackupMode.enabled : BackupMode.disabled);
}
void _confirmOptimismChange() {
switch (config.optimism) {
case StockMode.optimistic:
_handleOptimismChanged(false);
break;
case StockMode.pessimistic:
showDialog(
context: context,
child: new Dialog(
title: new Text("Change mode?"),
content: new Text("Optimistic mode means everything is awesome. Are you sure you can handle that?"),
actions: <Widget>[
new FlatButton(
child: new Text('NO THANKS'),
onPressed: () {
Navigator.pop(context, false);
}
),
new FlatButton(
child: new Text('AGREE'),
onPressed: () {
Navigator.pop(context, true);
}
),
]
)
).then(_handleOptimismChanged);
break;
}
}
void sendUpdates(StockMode optimism, BackupMode backup) {
if (config.updater != null)
config.updater(
optimism: optimism,
backup: backup
);
}
Widget buildToolBar(BuildContext context) {
return new ToolBar(
center: new Text('Settings')
);
}
Widget buildSettingsPane(BuildContext context) {
// TODO(ianh): Once we have the gesture API hooked up, fix https://github.com/domokit/mojo/issues/281
// (whereby tapping the widgets below causes both the widget and the menu item to fire their callbacks)
return new Block(<Widget>[
new DrawerItem(
icon: 'action/thumb_up',
onPressed: () => _confirmOptimismChange(),
child: new Row(<Widget>[
new Flexible(child: new Text('Everything is awesome')),
new Checkbox(
value: config.optimism == StockMode.optimistic,
onChanged: (bool value) => _confirmOptimismChange()
),
])
),
new DrawerItem(
icon: 'action/backup',
onPressed: () { _handleBackupChanged(!(config.backup == BackupMode.enabled)); },
child: new Row(<Widget>[
new Flexible(child: new Text('Back up stock list to the cloud')),
new Switch(
value: config.backup == BackupMode.enabled,
onChanged: _handleBackupChanged
),
])
),
],
padding: const EdgeDims.symmetric(vertical: 20.0)
);
}
Widget build(BuildContext context) {
return new Scaffold(
toolBar: buildToolBar(context),
body: buildSettingsPane(context)
);
}
}