Per iniziare

Questa sezione è stata progettata per fornire agli ingegneri una panoramica di 5 minuti su come le chiamate tra più profili funzionano con l'SDK e come possono essere testate. Non provare a creare qualcosa. Questa slide non è pensata per essere usata come riferimento o guida, ma solo come introduzione.

Classi e metodi personalizzati basati sul profilo

L'SDK delle app collegate ti consente di annotare le tue classi e i tuoi metodi come più profili. Questo genera classi e metodi che consentono di eseguire annotato su qualsiasi profilo.

Ad esempio, prendi in considerazione la seguente classe, con l'aggiunta dell'annotazione SDK:

public class CalendarDatabase {

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

In questo modo viene generata una classe con prefisso Profile che ti consente di chiamare questa API su il profilo che preferisci. Ad esempio: java profileCalendarDatabase.work().deleteEvent(event, account);

Esempi più complessi

In modo più realistico, le lezioni e i metodi saranno più complessi. Ad esempio: l'API esistente potrebbe utilizzare ListenableFuture tipi restituiti e potresti aver bisogno per combinare i risultati di entrambi i profili. Considera questo esempio:

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

Questi metodi e classi generati funzionano come previsto con le funzionalità di sicurezza di tipo completo Completamento del codice IDE.

Ogni tipo restituito e di parametro delle API annotate deve essere supportato dal SDK, ma supporta completamente la nidificazione e le generiche di elenchi, set, array, primitive, qualsiasi tipo parcelable e qualsiasi tipo serializzabile, oltre ListenableFuture, Optional e proto. Puoi anche aggiungere per i tipi non supportati in modo nativo dall'SDK. Come esempio estremo, supporteranno perfettamente ListenableFuture<List<Map<CustomProto, CustomParcelableType[]>>>.

Test

L'SDK è progettato per semplificare il test delle unità. Per ogni corso Profile generato c'è un corso FakeProfile corrispondente che puoi fornire e che alle tue istanze personali. Ad esempio:

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