Primeros pasos

Esta sección se diseñó para brindarles a los ingenieros una descripción general de 5 minutos sobre cómo funcionan con el SDK y cómo se pueden probar. No intentes no está diseñado para usarlo como referencia o guía, sino solo como una introducción.

Clases y métodos personalizados compatibles con perfiles

El SDK de apps conectadas te permite anotar tus propias clases y métodos como perfiles sincronizados. Esto genera clases y métodos que te permiten ejecutar la con anotaciones en cualquier perfil.

Por ejemplo, considera la siguiente clase, con la anotación del SDK agregada:

public class CalendarDatabase {

  @CrossProfile // SDK annotation
  public void deleteEvent(Event event, Account account) {
    // complex logic with database calls
  }
}

Esto genera una clase con el prefijo Profile, lo que te permite llamar a esta API en el perfil que elijas. Por ejemplo: java profileCalendarDatabase.work().deleteEvent(event, account);

Ejemplos más complejos

De manera más realista, tus clases y métodos serán más complejos. Por ejemplo: tu API existente podría usar tipos de datos que se devuelven de ListenableFuture y podrías necesitar para combinar los resultados de ambos perfiles. Considera el siguiente ejemplo:

public class CalendarDatabase {

  @CrossProfile // SDK annotation
  public ListenableFuture<Collection<Event>> getEvents() {
    // complex logic with database calls
  }
}
// Merge results from both profiles into a set
profileCalendarDatabase.both()
  .getEvents()
  .transform((Map<Profile, Collection<Event>> events) -> {
    return events.values()
        .stream()
        .flatMap(Collection::stream)
        .collect(Collectors.toSet());
  }, directExecutor());

Estos métodos y clases generados funcionan como se espera con seguridad de tipos completa y Finalización del código IDE.

Cada devolución y tipo de parámetro de tus APIs con anotaciones debe ser compatible con el pero es totalmente compatible con el anidamiento y los genéricos de listas, conjuntos, arrays, primitivas, cualquier tipo parcelable y cualquier tipo serializable, además de ListenableFuture, Optional y protos. También puedes agregar compatibilidad con tipos no compatibles de forma nativa con el SDK. Como ejemplo extremo, admitiría ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>> sin problemas.

Prueba

El SDK está diseñado para simplificar la prueba de unidades. Para cada clase de perfil generada, hay una clase FakeProfile correspondiente que puedes proporcionar instancias personales. Por ejemplo:

// Create an instance of the SDK-generated fake connector class. This
// class lets you control the availability of the profiles, which
// profile you are now running on.
private final FakeCrossProfileConnector connector =
  new FakeCrossProfileConnector();

// Create an instance of your real/fake/mock class for both profiles.
private final CalendarDatabase personalCalendarDatabase =
  new FakeCalendarDatabase();
private final CalendarDatabase workCalendarDatabase =
  new FakeCalendarDatabase();

// Create an instance of the SDK-generated fake profile-aware class.
private final FakeProfileCalendarDatabase profileCalendarDatabase =
  FakeProfileCalendarDatabase.builder()
    .personal(personalCalendarDatabase)
    .work(workCalendarDatabase)
    .connector(connector)
    .build();

// Pass profileCalendarDatabase into your classes under test, or set
// Dagger up to inject the fake automatically.