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.