Primeiros passos

Esta seção foi projetada para dar aos engenheiros uma visão geral de cinco minutos chamadas entre perfis funcionam com o SDK e como elas podem ser testadas. Não tente criar nada ainda, mas isso não foi projetado para ser usado como referência ou guia, mas apenas uma introdução.

Classes e métodos personalizados com reconhecimento de perfil

O SDK de apps conectados permite anotar suas próprias classes e métodos conforme e perfis cruzados. Isso gera classes e métodos que permitem executar com anotações em qualquer perfil.

Por exemplo, considere a seguinte classe, com a anotação do SDK adicionada:

public class CalendarDatabase {

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

Isso gera uma classe prefixada com Profile, permitindo que você chame essa API no o perfil que preferir. Por exemplo: java profileCalendarDatabase.work().deleteEvent(event, account);

Exemplos mais complexos

De modo mais realista, as classes e os métodos serão mais complexos. Por exemplo: sua API atual pode usar tipos de retorno ListenableFuture e talvez seja necessário para combinar os resultados dos dois perfis. Por exemplo,

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());

Essas classes e métodos gerados funcionam como esperado com segurança de tipo completa e Preenchimento de código do ambiente de desenvolvimento integrado.

Cada tipo de retorno e parâmetro das APIs com anotação deve ser suportado pelo do SDK, mas oferece suporte total ao aninhamento e a genéricos de listas, conjuntos, matrizes qualquer tipo fracionável e qualquer tipo serializável, além de ListenableFuture, Optional e protos. Também é possível adicionar suporte a tipos sem suporte nativo no SDK. Como um exemplo extremo, seria totalmente compatível com ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>>.

Teste

O SDK foi projetado para simplificar o teste de unidade. Para cada classe de perfil gerada, há uma classe FakeProfile correspondente em que você pode fornecer trabalhos e instâncias pessoais. Exemplo:

// 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.