[ledger] Use the new API to retrieve the Ledger

TEST=Everything compiles, existing tests still run.

Change-Id: Icfd0000db68abda065a02fb5d52b80898366770d
diff --git a/app/contacts/agents/content_provider/lib/src/modular/contacts_content_provider_impl.dart b/app/contacts/agents/content_provider/lib/src/modular/contacts_content_provider_impl.dart
index 2ecfceb..9ff68f8 100644
--- a/app/contacts/agents/content_provider/lib/src/modular/contacts_content_provider_impl.dart
+++ b/app/contacts/agents/content_provider/lib/src/modular/contacts_content_provider_impl.dart
@@ -351,21 +351,16 @@
     // Connect to ledger
     _ledger?.ctrl?.close();
     _ledger = new ledger.LedgerProxy();
-    Completer<ledger.Status> statusCompleter = new Completer<ledger.Status>();
-    _componentContext.getLedger(
-      _ledger.ctrl.request(),
-      statusCompleter.complete,
-    );
-    ledger.Status status = await statusCompleter.future;
-    _handleLedgerResponseStatus(
-      status: status,
-      ledgerCall: '_componentContext.getLedger()',
-    );
+    _ledger.ctrl.onConnectionError = () {
+      log.severe('Ledger disconnected.');
+      throw new Exception('Contacts Content Provider Ledger disconnected.');
+    };
+    _componentContext.getLedgerNew(_ledger.ctrl.request());
 
     // Grab the page of contacts
     _page?.ctrl?.close();
     _page = new ledger.PageProxy();
-    statusCompleter = new Completer<ledger.Status>();
+    Completer<ledger.Status> statusCompleter = new Completer<ledger.Status>();
     _ledger.getRootPage(
       _page.ctrl.request(),
       statusCompleter.complete,
diff --git a/bin/xi/xi_mod/lib/main.dart b/bin/xi/xi_mod/lib/main.dart
index 16d7363..f2b109a 100644
--- a/bin/xi/xi_mod/lib/main.dart
+++ b/bin/xi/xi_mod/lib/main.dart
@@ -18,14 +18,6 @@
 /// If `true`, draws the editor with a watermarked background.
 const bool kDrawDebugBackground = false;
 
-dynamic _handleResponse(String description) {
-  return (Status status) {
-    if (status != Status.ok) {
-      log.info('$description: $status');
-    }
-  };
-}
-
 /// An implementation of the [Lifecycle] interface, which controls the lifetime
 /// of the module. Also manages the ModuleContext connection.
 class ModuleImpl implements Lifecycle {
@@ -34,7 +26,7 @@
     log.info('ModuleImpl::init call');
     connectToService(kContext.environmentServices, _moduleContext.ctrl);
     _moduleContext.getComponentContext(_componentContext.ctrl.request());
-    _componentContext.getLedger(_ledgerRequest, _handleResponse('getLedger'));
+    _componentContext.getLedgerNew(_ledgerRequest);
   }
 
   final LifecycleBinding _lifecycleBinding = new LifecycleBinding();
diff --git a/examples/ledger/todo_list/lib/src/models/todo_list_model.dart b/examples/ledger/todo_list/lib/src/models/todo_list_model.dart
index 179177f..9091e85 100644
--- a/examples/ledger/todo_list/lib/src/models/todo_list_model.dart
+++ b/examples/ledger/todo_list/lib/src/models/todo_list_model.dart
@@ -33,9 +33,11 @@
 
   /// Call this method to connect the model
   void connect(ComponentContextProxy componentContext) {
-    componentContext.getLedger(
+    _ledger.ctrl.onConnectionError = () {
+      print('[Todo List] Ledger disconnected.');
+    };
+    componentContext.getLedgerNew(
       _ledger.ctrl.request(),
-      handleLedgerResponse('getLedger'),
     );
     _ledger.getRootPage(
       _page.ctrl.request(),
diff --git a/public/dart/sledge/lib/src/sledge.dart b/public/dart/sledge/lib/src/sledge.dart
index b36692e..d0017ee 100644
--- a/public/dart/sledge/lib/src/sledge.dart
+++ b/public/dart/sledge/lib/src/sledge.dart
@@ -6,7 +6,6 @@
 import 'dart:typed_data';
 
 import 'package:fidl_fuchsia_ledger/fidl.dart' as ledger;
-import 'package:fidl_fuchsia_ledger/fidl.dart' as ledger_async;
 import 'package:fidl_fuchsia_modular/fidl.dart';
 import 'package:fidl_fuchsia_modular/fidl_async.dart' as modular_async;
 import 'package:fidl/fidl.dart' as fidl;
@@ -51,14 +50,7 @@
   /// Default constructor.
   factory Sledge(ComponentContext componentContext, [SledgePageId pageId]) {
     fidl.InterfacePair<ledger.Ledger> ledgerPair = new fidl.InterfacePair();
-    componentContext.getLedger(ledgerPair.passRequest(),
-        (ledger.Status status) {
-      if (status != ledger.Status.ok) {
-        throw new Exception(
-            'Sledge failed to connect to Ledger with status `$status`.');
-      }
-    });
-
+    componentContext.getLedgerNew(ledgerPair.passRequest());
     return new Sledge._(ledgerPair.passHandle(), pageId);
   }
 
@@ -75,7 +67,7 @@
 
     _ledgerProxy.ctrl.onConnectionError = () {
       initializationCompleter.complete(false);
-      throw new Exception('Sledge failed to connect to Ledger.');
+      throw new Exception('Sledge was disconnected from the Ledger.');
     };
 
     _ledgerProxy.getPage(pageId.id, _pageProxy.ctrl.request(),
@@ -97,15 +89,7 @@
   factory Sledge.forAsync(modular_async.ComponentContext componentContext,
       [SledgePageId pageId]) {
     final pair = new ChannelPair();
-    componentContext
-        .getLedger(new fidl.InterfaceRequest(pair.first))
-        .then((status) async {
-      if (status != ledger_async.Status.ok) {
-        throw new Exception(
-            'Sledge failed to connect to Ledger with status `$status`.');
-      }
-    });
-
+    componentContext.getLedgerNew(new fidl.InterfaceRequest(pair.first));
     return new Sledge._(new fidl.InterfaceHandle(pair.second), pageId);
   }