Halo { @Keep @Api(2.0) public void ready(@NonNull final HaloReadyListener listener) { ensureExists(); try { mReadyChecker.checkReady(listener); } catch (InterruptedException e) { Halog.e(getClass(), "A thread has been interrupted abruptly", e); listener.onHaloReady(); } } Halo(@NonNull HaloConfig.Builder configurationBuilder,
         @NonNull HaloSessionManager sessionManager,
         @Nullable Credentials credentials,
         @Nullable List<TagCollector> tagCollectors,
         @Nullable StartupProcess[] processes); @Keep @Api(1.3) void uninstall(); @Keep @Api(1.0) @NonNull static Halo instance(); @Keep @Api(1.3) @NonNull static HaloCore core(); @Keep @Api(1.0) static boolean isInitialized(); @Keep @Api(1.0) @NonNull static Installer installer(@NonNull Context context); @Keep @Api(2.0) void ready(@NonNull final HaloReadyListener listener); @Keep @Api(1.0) @NonNull Context context(); @Keep @NonNull @Api(1.1) HaloFramework framework(); @Keep @Api(1.0) @NonNull HaloCore getCore(); @Keep @Api(2.0) @NonNull HaloManagerApi manager();  }
@Test public void thatIntegrateInstallationListener() throws InterruptedException { HaloMock.create().ready(givenAReadyListenerFlagged(mCallbackFlag)); TestUtils.flushMainThread(); assertThat(mCallbackFlag.timesExecuted()).isGreaterThan(0); }