[settings] refactor most settings off deprecated APIs, and make async SY-988

Change-Id: I466fa0769aae6d279c69930f5bedd2218b9aa314
diff --git a/bin/accessibility_settings/BUILD.gn b/bin/accessibility_settings/BUILD.gn
index e526334..f0fe1eb 100644
--- a/bin/accessibility_settings/BUILD.gn
+++ b/bin/accessibility_settings/BUILD.gn
@@ -24,7 +24,8 @@
   deps = [
     "//third_party/dart-pkg/git/flutter/packages/flutter",
     "//topaz/lib/settings:lib.settings",
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",
     "//topaz/public/dart/widgets:lib.widgets",
-    "//topaz/public/lib/app/dart",
   ]
 }
diff --git a/bin/accessibility_settings/OWNERS b/bin/accessibility_settings/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/bin/accessibility_settings/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/bin/bluetooth_settings/BUILD.gn b/bin/bluetooth_settings/BUILD.gn
index e0aad2c..4568278 100644
--- a/bin/bluetooth_settings/BUILD.gn
+++ b/bin/bluetooth_settings/BUILD.gn
@@ -29,9 +29,8 @@
     "//sdk/fidl/fuchsia.bluetooth.le",
     "//third_party/dart-pkg/git/flutter/packages/flutter",
     "//topaz/lib/settings:lib.settings",
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",
     "//topaz/public/dart/widgets:lib.widgets",
-    "//topaz/public/lib/app/dart",
-    "//topaz/public/lib/app_driver/dart",
-    "//topaz/public/lib/schemas/dart",
   ]
 }
diff --git a/bin/bluetooth_settings/OWNERS b/bin/bluetooth_settings/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/bin/bluetooth_settings/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/bin/bluetooth_settings/lib/main.dart b/bin/bluetooth_settings/lib/main.dart
index da339e8..6d6c8d4 100644
--- a/bin/bluetooth_settings/lib/main.dart
+++ b/bin/bluetooth_settings/lib/main.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter/material.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
 import 'package:lib.widgets/model.dart';
 
 import 'src/bluetooth_model.dart';
diff --git a/bin/bluetooth_settings/lib/src/bluetooth_model.dart b/bin/bluetooth_settings/lib/src/bluetooth_model.dart
index 25b1ab3..74db363 100644
--- a/bin/bluetooth_settings/lib/src/bluetooth_model.dart
+++ b/bin/bluetooth_settings/lib/src/bluetooth_model.dart
@@ -3,46 +3,47 @@
 // found in the LICENSE file.
 
 import 'dart:async';
-import 'package:fidl_fuchsia_bluetooth/fidl.dart';
-import 'package:fidl_fuchsia_bluetooth_control/fidl.dart';
-import 'package:lib.app.dart/app.dart';
+import 'package:fidl_fuchsia_bluetooth/fidl_async.dart';
+import 'package:fidl_fuchsia_bluetooth_control/fidl_async.dart';
+import 'package:flutter/foundation.dart';
+import 'package:fuchsia_services/services.dart';
 import 'package:lib.widgets/model.dart';
 
 const Duration _deviceListRefreshInterval = Duration(seconds: 5);
 
 /// Model containing state needed for the bluetooth settings app.
-class BluetoothSettingsModel extends Model implements PairingDelegate {
+class BluetoothSettingsModel extends Model {
   /// Bluetooth controller proxy.
   final ControlProxy _control = new ControlProxy();
+  final BluetoothSettingsPairingDelegate _pairingDelegate =
+      BluetoothSettingsPairingDelegate();
 
   List<AdapterInfo> _adapters;
   AdapterInfo _activeAdapter;
   final List<RemoteDevice> _remoteDevices = [];
   Timer _sortListTimer;
   bool _discoverable = true;
-
-  PairingStatus pairingStatus;
+  final List<StreamSubscription> _listeners = [];
 
   BluetoothSettingsModel() {
     _onStart();
   }
 
-  void setDiscoverable({bool discoverable}) {
-    _control.setDiscoverable(discoverable, (status) {
-      _discoverable = discoverable;
-      notifyListeners();
-    });
+  Future<void> setDiscoverable({bool discoverable}) async {
+    await _control.setDiscoverable(discoverable);
+    _discoverable = discoverable;
+    notifyListeners();
   }
 
   bool get discoverable => _discoverable;
 
   /// TODO(ejia): handle failures and error messages
-  void connect(RemoteDevice device) {
-    _control.connect(device.identifier, (Status status) {});
+  Future<void> connect(RemoteDevice device) async {
+    await _control.connect(device.identifier);
   }
 
-  void disconnect(RemoteDevice device) {
-    _control.disconnect(device.identifier, (Status status) {});
+  Future<void> disconnect(RemoteDevice device) async {
+    await _control.disconnect(device.identifier);
   }
 
   /// Bluetooth devices that are seen, but are not connected.
@@ -61,10 +62,11 @@
       _adapters?.where((adapter) => activeAdapter.address != adapter.address) ??
       [];
 
-  void _onStart() {
-    final startupContext = StartupContext.fromStartupInfo();
-    connectToService(startupContext.environmentServices, _control.ctrl);
-    _refresh();
+  PairingStatus get pairingStatus => _pairingDelegate.pairingStatus;
+
+  Future<void> _onStart() async {
+    StartupContext.fromStartupInfo().incoming.connectToService(_control);
+    await _refresh();
 
     // Sort the list by signal strength every few seconds.
     _sortListTimer = Timer.periodic(_deviceListRefreshInterval, (_) {
@@ -75,17 +77,11 @@
 
     // Just for first draft purposes, refresh whenever there are any changes.
     // TODO: handle errors, refresh more gracefully
-    _control
-      ..onActiveAdapterChanged = (_) {
-        _refresh();
-      }
-      ..onAdapterRemoved = (_) {
-        _refresh();
-      }
-      ..onAdapterUpdated = (_) {
-        _refresh();
-      }
-      ..onDeviceUpdated = (device) {
+    _listeners
+      ..add(_control.onActiveAdapterChanged.listen((_) => _refresh()))
+      ..add(_control.onAdapterRemoved.listen((_) => _refresh()))
+      ..add(_control.onAdapterUpdated.listen((_) => _refresh()))
+      ..add(_control.onDeviceUpdated.listen((device) {
         int index =
             _remoteDevices.indexWhere((d) => d.identifier == device.identifier);
         if (index != -1) {
@@ -96,16 +92,16 @@
           _remoteDevices.add(device);
         }
         notifyListeners();
-      }
-      ..onDeviceRemoved = (deviceId) {
+      }))
+      ..add(_control.onDeviceRemoved.listen((deviceId) {
         _removeDeviceFromList(deviceId);
         notifyListeners();
-      }
-      ..requestDiscovery(true, (status) {})
-      ..setDiscoverable(true, (status) {})
-      ..setPairingDelegate(PairingDelegateBinding().wrap(this), (success) {
-        assert(success);
-      });
+      }));
+
+    await _control.requestDiscovery(true);
+    await _control.setDiscoverable(true);
+    await _control
+        .setPairingDelegate(PairingDelegateBinding().wrap(_pairingDelegate));
   }
 
   void _removeDeviceFromList(String deviceId) {
@@ -113,16 +109,10 @@
   }
 
   /// Updates all the state that the model gets from bluetooth.
-  void _refresh() {
-    _control
-      ..getAdapters((adapters) {
-        _adapters = adapters;
-        notifyListeners();
-      })
-      ..getActiveAdapterInfo((adapter) {
-        _activeAdapter = adapter;
-        notifyListeners();
-      });
+  Future<void> _refresh() async {
+    _adapters = await _control.getAdapters();
+    _activeAdapter = await _control.getActiveAdapterInfo();
+    notifyListeners();
   }
 
   /// Closes the connection to the bluetooth control, thus ending active
@@ -130,29 +120,58 @@
   void dispose() {
     _control.ctrl.close();
     _sortListTimer.cancel();
+    _pairingDelegate.dispose();
+    for (StreamSubscription subscription in _listeners) {
+      subscription.cancel();
+    }
+  }
+}
+
+class PairingStatus {
+  final String displayedPassKey;
+  final PairingMethod pairingMethod;
+  final RemoteDevice device;
+  int digitsEntered = 0;
+  bool completing = false;
+
+  PairingStatus(this.displayedPassKey, this.pairingMethod, this.device);
+}
+
+/// Used to capture events from bluetooth pairing.
+class BluetoothSettingsPairingDelegate extends PairingDelegate
+    with ChangeNotifier {
+  PairingStatus pairingStatus;
+
+  final StreamController<PairingDelegate$OnLocalKeypress$Response>
+      _localKeypressController = StreamController.broadcast();
+
+  void localKeypress(PairingKeypressType pressType) {
+    _localKeypressController.add(PairingDelegate$OnLocalKeypress$Response(
+        pairingStatus.device.identifier, pressType));
   }
 
   @override
-  void onPairingComplete(String deviceId, Status status) {
+  Stream<PairingDelegate$OnLocalKeypress$Response> get onLocalKeypress =>
+      _localKeypressController.stream;
+
+  @override
+  Future<void> onPairingComplete(String deviceId, Status status) async {
     pairingStatus = null;
     notifyListeners();
   }
 
   @override
-  void onPairingRequest(
+  Future<PairingDelegate$OnPairingRequest$Response> onPairingRequest(
       RemoteDevice device,
       PairingMethod method,
-      String displayedPasskey,
-      void Function(bool accept, String enteredPasskey) callback) {
-    pairingStatus = PairingStatus(displayedPasskey, method, device);
-
-    // accept the pairing request and show passkey
-    callback(true, displayedPasskey);
-    notifyListeners();
+      String displayedPasskey) async {
+    // TODO: properly display passkey before accepting request
+    return PairingDelegate$OnPairingRequest$Response(true, displayedPasskey);
   }
 
   @override
-  void onRemoteKeypress(String deviceId, PairingKeypressType keypress) {
+  Future<void> onRemoteKeypress(
+      String deviceId, PairingKeypressType keypress) async {
     assert(pairingStatus.device.identifier == deviceId);
     switch (keypress) {
       case PairingKeypressType.digitEntered:
@@ -169,14 +188,10 @@
     }
     notifyListeners();
   }
-}
 
-class PairingStatus {
-  final String displayedPassKey;
-  final PairingMethod pairingMethod;
-  final RemoteDevice device;
-  int digitsEntered = 0;
-  bool completing = false;
-
-  PairingStatus(this.displayedPassKey, this.pairingMethod, this.device);
+  @override
+  void dispose() {
+    super.dispose();
+    _localKeypressController.close();
+  }
 }
diff --git a/bin/bluetooth_settings/lib/src/bluetooth_settings.dart b/bin/bluetooth_settings/lib/src/bluetooth_settings.dart
index 59aacc7..0440c20 100644
--- a/bin/bluetooth_settings/lib/src/bluetooth_settings.dart
+++ b/bin/bluetooth_settings/lib/src/bluetooth_settings.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:fidl_fuchsia_bluetooth_control/fidl.dart';
+import 'package:fidl_fuchsia_bluetooth_control/fidl_async.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:lib.settings/widgets.dart';
diff --git a/bin/device_settings/BUILD.gn b/bin/device_settings/BUILD.gn
index d8fb59f..00b6d93 100644
--- a/bin/device_settings/BUILD.gn
+++ b/bin/device_settings/BUILD.gn
@@ -26,9 +26,8 @@
     "//sdk/fidl/fuchsia.amber",
     "//third_party/dart-pkg/git/flutter/packages/flutter",
     "//topaz/lib/settings:lib.settings",
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",
     "//topaz/public/dart/widgets:lib.widgets",
-    "//topaz/public/lib/app/dart",
-    "//topaz/public/lib/app_driver/dart",
-    "//topaz/public/lib/schemas/dart",
   ]
 }
diff --git a/bin/device_settings/OWNERS b/bin/device_settings/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/bin/device_settings/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/bin/device_settings/lib/main.dart b/bin/device_settings/lib/main.dart
index a80f4e3..f579b16 100644
--- a/bin/device_settings/lib/main.dart
+++ b/bin/device_settings/lib/main.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter/material.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
 import 'package:lib.widgets/model.dart';
 
 import 'src/model.dart';
diff --git a/bin/device_settings/lib/src/model.dart b/bin/device_settings/lib/src/model.dart
index b0cdbc8..d18a41d 100644
--- a/bin/device_settings/lib/src/model.dart
+++ b/bin/device_settings/lib/src/model.dart
@@ -4,10 +4,10 @@
 
 import 'dart:async';
 
-import 'package:fidl_fuchsia_amber/fidl.dart' as amber;
+import 'package:fidl_fuchsia_amber/fidl_async.dart' as amber;
 import 'package:flutter/foundation.dart';
-import 'package:lib.app.dart/app.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
+import 'package:fuchsia_services/services.dart';
 import 'package:lib.settings/device_info.dart';
 import 'package:lib.widgets/model.dart';
 import 'package:zircon/zircon.dart';
@@ -67,8 +67,9 @@
       DateTime.now().isAfter(_lastUpdate.add(Duration(seconds: 60)));
 
   /// Checks for update from the update service
-  void checkForUpdates() {
-    _amberControl.checkForSystemUpdate((_) => _lastUpdate = DateTime.now());
+  Future<void> checkForUpdates() async {
+    await _amberControl.checkForSystemUpdate();
+    _lastUpdate = DateTime.now();
   }
 
   Future<void> selectChannel(amber.SourceConfig selectedConfig) async {
@@ -78,28 +79,19 @@
     // more than one source well.
     for (amber.SourceConfig config in channels) {
       if (config.statusConfig.enabled) {
-        await setSrcEnabled(config.id, enabled: false);
+        await _amberControl.setSrcEnabled(config.id, false);
       }
     }
 
     if (selectedConfig != null) {
-      await setSrcEnabled(selectedConfig.id, enabled: true);
+      await _amberControl.setSrcEnabled(selectedConfig.id, true);
     }
-    _updateSources();
+    await _updateSources();
   }
 
-  /// Wraps amber.setSrcEnabled to be asynchronous.
-  Future<void> setSrcEnabled(String id, {@required bool enabled}) {
-    final completer = Completer();
-    _amberControl.setSrcEnabled(id, enabled, (_) => completer.complete());
-    return completer.future;
-  }
-
-  void _updateSources() {
-    _amberControl.listSrcs((srcs) {
-      _channels = srcs;
-      notifyListeners();
-    });
+  Future<void> _updateSources() async {
+    _channels = await _amberControl.listSrcs();
+    notifyListeners();
   }
 
   void dispose() {
@@ -114,10 +106,9 @@
     _uptimeRefreshTimer =
         Timer.periodic(_uptimeRefreshInterval, (_) => updateUptime());
 
-    final startupContext = StartupContext.fromStartupInfo();
-    connectToService(startupContext.environmentServices, _amberControl.ctrl);
+    StartupContext.fromStartupInfo().incoming.connectToService(_amberControl);
 
-    _updateSources();
+    await _updateSources();
   }
 
   void updateUptime() {
diff --git a/bin/display_settings/BUILD.gn b/bin/display_settings/BUILD.gn
index 8c43870..8518176 100644
--- a/bin/display_settings/BUILD.gn
+++ b/bin/display_settings/BUILD.gn
@@ -25,10 +25,9 @@
     "//third_party/dart-pkg/git/flutter/packages/flutter",
     "//topaz/lib/settings:lib.settings",
     "//topaz/public/dart/widgets:lib.widgets",
-    "//topaz/public/lib/app/dart",
-    "//topaz/public/lib/app_driver/dart",
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",
     "//topaz/public/lib/display/dart",
     "//topaz/public/lib/display/flutter",
-    "//topaz/public/lib/schemas/dart",
   ]
 }
diff --git a/bin/display_settings/OWNERS b/bin/display_settings/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/bin/display_settings/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/bin/display_settings/lib/main.dart b/bin/display_settings/lib/main.dart
index d6fbf94..95759b2 100644
--- a/bin/display_settings/lib/main.dart
+++ b/bin/display_settings/lib/main.dart
@@ -3,16 +3,14 @@
 // found in the LICENSE file.
 
 import 'package:flutter/material.dart';
-import 'package:lib.app.dart/app.dart' show StartupContext;
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
 import 'package:lib.display.flutter/display_policy_brightness_model.dart';
 import 'package:lib.widgets/model.dart';
 import 'src/widget.dart';
 
 /// Main entry point to the display settings module.
 void main() {
-  final Display display =
-      Display(StartupContext.fromStartupInfo().environmentServices);
+  final Display display = Display();
   setupLogger();
 
   Widget app = new MaterialApp(
diff --git a/bin/wifi_settings/BUILD.gn b/bin/wifi_settings/BUILD.gn
index 445737f..583fc17 100644
--- a/bin/wifi_settings/BUILD.gn
+++ b/bin/wifi_settings/BUILD.gn
@@ -28,9 +28,8 @@
     "//sdk/fidl/fuchsia.wlan.service",
     "//third_party/dart-pkg/git/flutter/packages/flutter",
     "//topaz/lib/settings:lib.settings",
-    "//topaz/public/dart/widgets:lib.widgets",
-    "//topaz/public/lib/app/dart",
-    "//topaz/public/lib/app_driver/dart",
-    "//topaz/public/lib/schemas/dart",
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",
+    "//topaz/public/dart/widgets:lib.widgets"
   ]
 }
diff --git a/bin/wifi_settings/OWNERS b/bin/wifi_settings/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/bin/wifi_settings/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/bin/wifi_settings/lib/main.dart b/bin/wifi_settings/lib/main.dart
index 61fb059..471f048 100644
--- a/bin/wifi_settings/lib/main.dart
+++ b/bin/wifi_settings/lib/main.dart
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'package:flutter/material.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
 import 'package:lib.widgets/model.dart';
 
 import 'src/fuchsia/wifi_settings_model.dart';
diff --git a/bin/wifi_settings/lib/src/fuchsia/wifi_settings_model.dart b/bin/wifi_settings/lib/src/fuchsia/wifi_settings_model.dart
index 1d895ee..15a2c59 100644
--- a/bin/wifi_settings/lib/src/fuchsia/wifi_settings_model.dart
+++ b/bin/wifi_settings/lib/src/fuchsia/wifi_settings_model.dart
@@ -4,11 +4,11 @@
 
 import 'dart:async';
 
-import 'package:fidl_fuchsia_netstack/fidl.dart' as net;
-import 'package:fidl_fuchsia_wlan_service/fidl.dart' as wlan;
+import 'package:fidl_fuchsia_netstack/fidl_async.dart' as net;
+import 'package:fidl_fuchsia_wlan_service/fidl_async.dart' as wlan;
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
-import 'package:lib.app.dart/app.dart';
+import 'package:fuchsia_services/services.dart';
 import 'package:lib.settings/debug.dart';
 import 'package:lib.widgets/model.dart';
 
@@ -55,16 +55,17 @@
   Timer _updateTimer;
   Timer _scanTimer;
 
+  StreamSubscription _interfacesChangedSubscription;
+
   /// Constructor.
   WifiSettingsModel()
       : _loading = true,
         _connecting = false {
-    StartupContext startupContext = StartupContext.fromStartupInfo();
+    StartupContext.fromStartupInfo().incoming.connectToService(_wlanProxy);
+    StartupContext.fromStartupInfo().incoming.connectToService(_netstackProxy);
 
-    connectToService(startupContext.environmentServices, _wlanProxy.ctrl);
-    connectToService(startupContext.environmentServices, _netstackProxy.ctrl);
-
-    _netstackProxy.onInterfacesChanged = interfacesChanged;
+    _interfacesChangedSubscription =
+        _netstackProxy.onInterfacesChanged.listen(interfacesChanged);
 
     _scan();
     _updateTimer = Timer.periodic(_updatePeriod, (_) => _update());
@@ -155,18 +156,19 @@
   DebugStatus get debugStatus => _debugInfo;
 
   /// Disconnects from the current network.
-  void disconnect() {
-    _wlanProxy.disconnect((wlan.Error error) {
-      _selectedAccessPoint = null;
-      _loading = true;
-      _update();
-    });
+  Future<void> disconnect() async {
+    await _wlanProxy.disconnect();
+
+    _selectedAccessPoint = null;
+    _loading = true;
+    await _update();
   }
 
   /// Cleans up the model state.
   void dispose() {
     _updateTimer.cancel();
     _scanTimer.cancel();
+    _interfacesChangedSubscription.cancel();
   }
 
   /// Listens for any changes to network interfaces.
@@ -191,7 +193,7 @@
     _connect(_selectedAccessPoint, password);
   }
 
-  void _connect(AccessPoint accessPoint, [String password]) {
+  Future<void> _connect(AccessPoint accessPoint, [String password]) async {
     _connecting = true;
     _scannedAps = null;
 
@@ -201,24 +203,22 @@
         scanInterval: _kConnectionScanInterval,
         bssid: '');
 
-    _wlanProxy.connect(
-      config,
-      (wlan.Error error) {
-        if (error.code == wlan.ErrCode.ok) {
-          _connectionResultMessage = null;
-          _failedAccessPoint = null;
-        } else {
-          _connectionResultMessage = error.description;
-          _failedAccessPoint = selectedAccessPoint;
-          _selectedAccessPoint = null;
-          _connecting = false;
-        }
-        _debugInfo.connectComplete(error);
-        _update();
-      },
-    );
     notifyListeners();
     _debugInfo.connectStart(config);
+
+    final error = await _wlanProxy.connect(config);
+
+    if (error.code == wlan.ErrCode.ok) {
+      _connectionResultMessage = null;
+      _failedAccessPoint = null;
+    } else {
+      _connectionResultMessage = error.description;
+      _failedAccessPoint = selectedAccessPoint;
+      _selectedAccessPoint = null;
+      _connecting = false;
+    }
+    _debugInfo.connectComplete(error);
+    await _update();
   }
 
   /// Remove duplicate and incompatible networks
@@ -242,33 +242,34 @@
     return aps;
   }
 
-  void _scan() {
+  Future<void> _scan() async {
     if (!_connecting) {
-      _wlanProxy.scan(const wlan.ScanRequest(timeout: 25),
-          (wlan.ScanResult scanResult) {
-        _scannedAps = _dedupeAndRemoveIncompatible(scanResult);
-        notifyListeners();
-        _debugInfo.scanComplete(scanResult);
-      });
       _debugInfo.scanStart();
+
+      final scanResult =
+          await _wlanProxy.scan(const wlan.ScanRequest(timeout: 25));
+      _scannedAps = _dedupeAndRemoveIncompatible(scanResult);
+      notifyListeners();
+      _debugInfo.scanComplete(scanResult);
     }
   }
 
-  void _update() {
-    _wlanProxy.status((wlan.WlanStatus status) {
-      _status = status;
-      _loading = false;
-
-      if (status.state == wlan.State.associated ||
-          status.error.code != wlan.ErrCode.ok) {
-        _selectedAccessPoint = null;
-        _connecting = false;
-      }
-
-      notifyListeners();
-      _debugInfo.updateComplete(status);
-    });
+  Future<void> _update() async {
     _debugInfo.updateStart();
+
+    final status = await _wlanProxy.status();
+
+    _status = status;
+    _loading = false;
+
+    if (status.state == wlan.State.associated ||
+        status.error.code != wlan.ErrCode.ok) {
+      _selectedAccessPoint = null;
+      _connecting = false;
+    }
+
+    notifyListeners();
+    _debugInfo.updateComplete(status);
   }
 }
 
diff --git a/lib/settings/BUILD.gn b/lib/settings/BUILD.gn
index 05429ec..2ab97e9 100644
--- a/lib/settings/BUILD.gn
+++ b/lib/settings/BUILD.gn
@@ -17,6 +17,8 @@
   deps = [
     "//sdk/fidl/fuchsia.devicesettings",
     "//third_party/dart-pkg/git/flutter/packages/flutter",
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",
     "//topaz/public/dart/widgets:lib.widgets",
   ]
 }
diff --git a/lib/settings/OWNERS b/lib/settings/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/lib/settings/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/lib/settings/lib/debug.dart b/lib/settings/lib/debug.dart
index d633ed7..8c958bc 100644
--- a/lib/settings/lib/debug.dart
+++ b/lib/settings/lib/debug.dart
@@ -3,7 +3,7 @@
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
 import 'package:lib.widgets/utils.dart';
 
 /// Key/value store used to display debug state using a [DebugStatusWidget].
diff --git a/lib/settings/lib/device_info.dart b/lib/settings/lib/device_info.dart
index c8cca9c..8d6dbdc 100644
--- a/lib/settings/lib/device_info.dart
+++ b/lib/settings/lib/device_info.dart
@@ -1,8 +1,8 @@
 import 'dart:async';
 import 'dart:io';
-import 'package:fidl_fuchsia_devicesettings/fidl.dart';
-import 'package:lib.app.dart/app.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fidl_fuchsia_devicesettings/fidl_async.dart';
+import 'package:fuchsia_logger/logger.dart';
+import 'package:fuchsia_services/services.dart';
 import 'package:meta/meta.dart';
 
 const String _lastUpdateFilePath = '/config/build-info/last-update';
@@ -39,16 +39,14 @@
   /// complete with true if the flag was set successfully and false otherwise.
   static Future<bool> setFactoryResetFlag({@required bool shouldReset}) async {
     final resetFlagValue = shouldReset ? 1 : 0;
-    final completer = Completer<bool>();
     final deviceSettingsManagerProxy = DeviceSettingsManagerProxy();
 
-    connectToService(StartupContext.fromStartupInfo().environmentServices,
-        deviceSettingsManagerProxy.ctrl);
-    deviceSettingsManagerProxy.setInteger(_factoryResetKey, resetFlagValue,
-        (bool result) {
-      deviceSettingsManagerProxy.ctrl.close();
-      completer.complete(result);
-    });
-    return completer.future;
+    StartupContext.fromStartupInfo()
+        .incoming
+        .connectToService(deviceSettingsManagerProxy);
+    final success = await deviceSettingsManagerProxy.setInteger(
+        _factoryResetKey, resetFlagValue);
+    deviceSettingsManagerProxy.ctrl.close();
+    return success;
   }
 }
diff --git a/lib/setui/OWNERS b/lib/setui/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/lib/setui/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/lib/setui/common/BUILD.gn b/lib/setui/common/BUILD.gn
index 553b9f7..7b0da6a 100644
--- a/lib/setui/common/BUILD.gn
+++ b/lib/setui/common/BUILD.gn
@@ -21,8 +21,8 @@
   deps = [
     "//third_party/dart-pkg/pub/quiver",
     "//third_party/dart-pkg/pub/yaml",
-    "//topaz/public/lib/app/dart",
-  ]
+    "//topaz/public/dart/fuchsia_logger",
+    ]
 }
 
 flutter_test("lib_setui_common_test") {
diff --git a/lib/setui/common/lib/syllabus_parser.dart b/lib/setui/common/lib/syllabus_parser.dart
index e01de6a..8fcde62 100644
--- a/lib/setui/common/lib/syllabus_parser.dart
+++ b/lib/setui/common/lib/syllabus_parser.dart
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'package:lib.app.dart/logging.dart';
+import 'package:fuchsia_logger/logger.dart';
 import 'package:lib_setui_common/step.dart';
 import 'package:lib_setui_common/syllabus.dart';
 import 'package:meta/meta.dart';
diff --git a/lib/setui/flutter/BUILD.gn b/lib/setui/flutter/BUILD.gn
index ef807d6..3fa2c85 100644
--- a/lib/setui/flutter/BUILD.gn
+++ b/lib/setui/flutter/BUILD.gn
@@ -19,7 +19,6 @@
     "//third_party/dart-pkg/pub/yaml",
     "//topaz/lib/setui/common:common",
     "//topaz/public/dart/widgets:lib.widgets",
-    "//topaz/public/lib/app/dart",
   ]
 }
 
diff --git a/public/lib/display/OWNERS b/public/lib/display/OWNERS
new file mode 100644
index 0000000..f4ebede
--- /dev/null
+++ b/public/lib/display/OWNERS
@@ -0,0 +1,5 @@
+ejia@google.com
+brycelee@google.com
+spqchan@google.com
+wxyz@google.com
+cfukuhara@google.com
\ No newline at end of file
diff --git a/public/lib/display/dart/BUILD.gn b/public/lib/display/dart/BUILD.gn
index 7416ec1..1db958f 100644
--- a/public/lib/display/dart/BUILD.gn
+++ b/public/lib/display/dart/BUILD.gn
@@ -15,6 +15,6 @@
     "//sdk/fidl/fuchsia.device.display",
     "//sdk/fidl/fuchsia.devicesettings",
     "//topaz/public/dart/fidl",
-    "//topaz/public/lib/app/dart",
-  ]
+    "//topaz/public/dart/fuchsia_logger",
+    "//topaz/public/dart/fuchsia_services",  ]
 }
diff --git a/public/lib/display/dart/lib/display.dart b/public/lib/display/dart/lib/display.dart
index 9acebbc..cd2e5e4 100644
--- a/public/lib/display/dart/lib/display.dart
+++ b/public/lib/display/dart/lib/display.dart
@@ -4,12 +4,10 @@
 
 import 'dart:async';
 
-import 'package:fidl/fidl.dart';
-import 'package:fidl_fuchsia_device_display/fidl.dart';
-import 'package:fidl_fuchsia_devicesettings/fidl.dart';
-import 'package:fidl_fuchsia_sys/fidl.dart';
-import 'package:lib.app.dart/app.dart';
-import 'package:lib.app.dart/logging.dart';
+import 'package:fidl_fuchsia_device_display/fidl_async.dart';
+import 'package:fidl_fuchsia_devicesettings/fidl_async.dart';
+import 'package:fuchsia_logger/logger.dart';
+import 'package:fuchsia_services/services.dart';
 
 /// This class abstracts away the fuchsia.device.display.Manager fidl interface,
 class Display extends DeviceSettingsWatcher {
@@ -30,51 +28,46 @@
   double _brightness;
 
   // ignore: public_member_api_docs
-  Display(ServiceProvider services) {
-    connectToService(services, _displayManagerService.ctrl);
-    _displayManagerService.ctrl.onConnectionError =
-        _handleDisplayConnectionError;
-    _displayManagerService.ctrl.error.then(
-        (ProxyError error) => _handleDisplayConnectionError(error: error));
+  Display() {
+    StartupContext.fromStartupInfo()
+        .incoming
+        .connectToService(_displayManagerService);
 
-    connectToService(services, _deviceSettingsManagerService.ctrl);
-    _deviceSettingsManagerService.ctrl.onConnectionError =
-        _handleSettingsConnectionError;
-    _deviceSettingsManagerService.ctrl.error.then(
-        (ProxyError error) => _handleSettingsConnectionError(error: error));
+    StartupContext.fromStartupInfo()
+        .incoming
+        .connectToService(_deviceSettingsManagerService);
 
     _deviceSettingsManagerService.watch(
-        _brightnessSettingsKey, _deviceSettingsWatcherBinding.wrap(this), null);
+        _brightnessSettingsKey, _deviceSettingsWatcherBinding.wrap(this));
     // Immediately get brightness on construction.
     _refreshBrightness();
   }
 
   /// Invoked during creation to refresh the internal cached brightness.
-  void _refreshBrightness([bool force = false]) {
+  Future<void> _refreshBrightness([bool force = false]) async {
     if (brightness != null && !force) {
       return;
     }
 
-    _deviceSettingsManagerService.getString(_brightnessSettingsKey,
-        (String val, Status status) {
-      if (status == Status.ok) {
-        if (val == null || val.isEmpty) {
-          return;
-        }
+    final result =
+        await _deviceSettingsManagerService.getString(_brightnessSettingsKey);
 
-        // If previous value exists, restore brightness.
-        setBrightness(double.parse(val));
-      } else {
-        // If no previous value is found, fetch display brightness and set.
-        // Setting is a noop from the device side, but makes sure our locale
-        // cache is updated.
-        _displayManagerService.getBrightness((bool success, double brightness) {
-          if (success) {
-            setBrightness(brightness);
-          }
-        });
+    if (result.s == Status.ok) {
+      if (result.val == null || result.val.isEmpty) {
+        return;
       }
-    });
+
+      // If previous value exists, restore brightness.
+      await setBrightness(double.parse(result.val));
+    } else {
+      // If no previous value is found, fetch display brightness and set.
+      // Setting is a noop from the device side, but makes sure our locale
+      // cache is updated.
+      final brightnessResult = await _displayManagerService.getBrightness();
+      if (brightnessResult.success) {
+        await setBrightness(brightnessResult.brightness);
+      }
+    }
   }
 
   // ignore: public_member_api_docs
@@ -89,7 +82,7 @@
 
   /// Sets the brightness to the specified percentage. If specified, the
   /// callback will be invoked with the updated backlight brightness value.
-  Future<bool> setBrightness(double brightness) {
+  Future<bool> setBrightness(double brightness) async {
     var completer = Completer<bool>();
 
     if (_brightness == brightness || brightness < 0 || brightness > 1) {
@@ -97,33 +90,29 @@
       return completer.future;
     }
 
-    _displayManagerService.setBrightness(brightness, (bool success) {
-      if (success) {
-        _brightness = brightness;
-        _deviceSettingsManagerService.setString(
-            _brightnessSettingsKey, brightness.toString(), (bool result) {
-          // This is a silent failure. While we couldn't store the brightness,
-          // it still took effect on the physical display.
-          if (!result) {
-            log.warning('Could not persist display brightness');
-          }
-        });
+    final wasSuccessful =
+        await _displayManagerService.setBrightness(brightness);
 
-        _notifyBrightnessChange();
-        completer.complete(true);
-      } else {
-        _displayManagerService
-            .getBrightness((bool success, double brightnessVal) {
-          if (success) {
-            _brightness = brightnessVal;
-            _notifyBrightnessChange();
-          }
-          completer.complete(false);
-        });
+    if (wasSuccessful) {
+      _brightness = brightness;
+      final deviceSettingWasSuccessful = await _deviceSettingsManagerService
+          .setString(_brightnessSettingsKey, brightness.toString());
+      if (!deviceSettingWasSuccessful) {
+        // This is a silent failure. While we couldn't store the brightness,
+        // it still took effect on the physical display.
+        log.warning('Could not persist display brightness');
       }
-    });
+      _notifyBrightnessChange();
+      return true;
+    } else {
+      final brightness = await _displayManagerService.getBrightness();
 
-    return completer.future;
+      if (brightness.success) {
+        _brightness = brightness.brightness;
+        _notifyBrightnessChange();
+      }
+      return false;
+    }
   }
 
   /// Invoked internally to signal to a registered listener (if set) of a
@@ -132,18 +121,8 @@
     _brightnessStreamController.add(brightness);
   }
 
-  /// Handles connection error to the display service.
-  void _handleDisplayConnectionError({ProxyError error}) {
-    log.severe('Unable to connect to display service', error);
-  }
-
-  /// Handles connection error to the settings service.
-  void _handleSettingsConnectionError({ProxyError error}) {
-    log.severe('Unable to connect to settings service', error);
-  }
-
   @override
-  void onChangeSettings(ValueType type) {
-    _refreshBrightness(true);
+  Future<void> onChangeSettings(ValueType type) async {
+    await _refreshBrightness(true);
   }
 }