WebActivities / webactivities-os

MIT License
0 stars 0 forks source link

Intent , startActivity e popup di scelta #4

Closed f-mon closed 10 years ago

f-mon commented 10 years ago

Provo a descrivere la mia idea di come mi immagino funzionino gli Intent per lanciare funzionalità offerta da altre applicazioni/activity

Un intent serve a lanciare una richiesta che un qualche componente soddisferà, l'Intent di tipo START_ACTIVITY viene soddisfatto e eseguito dal framework quindi trova sempre chi lo esegue e non ha mai bisogno del popup di scelta, quindi secondo me il nome da passare come activity target dello start_activity deve essere un nome completo appName.activity name senza ambiguità, e un intent di START_ACTIVITY non richiede mai il popup di scelta.

Dove invece serve il popup di scelta: Una activity nel manifest dichiara quali tipi di Intent gestisce (vedi android sezione del manifest "intent filters") quando si fa start di un Intent l'os cerca se tra le activity registrate ce ne sono una o più che accettano quell'intent, se ne trova più di una chiede all'utente quale usare (e qui entra in gioco il popup) una volta selezionata la fa partire passandogli l'intent scatenante e questa svolge il suo lavoro

Quindi per esemplificare: 1)una activity dichiara di gestire l'intent di tipo "SELEZIONA_PLACE", e nel suo manifest dichiara ad esempio:

intentFilters: [{ type: 'SELEZIONA_PLACE' }]

2) un'altra activity a un certo punto vuol far selezionare all'utente un posto (coordinate geografiche) lancia ctx.newIntent("SELEZIONA_PLACE").start().then(.....)

3) l'os quando riceve l'intent trova che ci sono due activity che gestiscono "SELEZIONA_PLACE" quella di google e quella di yahoo

4)fa scegliere all'utente che sceglie google

5) l'os apre l'activity di google passandogli l'intent, questa mostra la mappa e fa le sue cosine e poi quando l'utente conferma l'activity chiama ctx.stop()

simonevellei commented 10 years ago

Ho provato ad abbozzare quanto detto. Per il momento farei ctx.newActivityIntent("idApp", "idActivity").start().then(...); Se non viene specificato idApp o idActivity non viene eseguita alcuna attività.

Ora aggiungo anche il concetto di intentFiters. Lo farei molto semplice come array di stringhe... intentFilters: ['SELEZIONA_PLACE', '...'] o credi che abbia bisogno di altri parametri?

simonevellei commented 10 years ago

Implementato sistema ad intent.

La registrazione degli intent avviene: "activity1" : { "name" : "Activity One", "icon" : "/res/activity.png", "activator" : "Activity1", "intentFilters" : ["map"] },

Per avviare una activity ora: ctx.newActivityIntent("idApp", "idActivity").start().then(..);

Per avviare un intentFilter: ctx.newIntent("map").start().then(..)

f-mon commented 10 years ago

ok possiamo partire semplici con gli intent filters, anche se io mi aspetto che potrebbe essere un punto di espansione. essendo l'intent la "lingua" di comunicazione tra le funzionatità offerte tra activity vorrei che poi nascessero dei vei e propri intent comuni che varie activity soddisfano, Ad esempio un applicativo potrebbe usare gli intent di tipo "FIND_2" (tanto per cambiare) e una potrebbe lanciare ctx.newIntent("FIND_2",{entityType:"PAZIENTE"}).start().then(...) anzi cambiamo esempio va , ctx.newIntent("CREATE_DOCUMENT",{docType:"TXT"}).start().then(...) e una activity filtre sugli intent di tipo CREATE_DOCUMENT e sul parametro docType = TXT perchè se uno vuol creare un documento di un altro tipo c'e' un'altra activity.

Cmq non vedo il commit, hai fatto anche push?

simonevellei commented 10 years ago

Ora faccio push... cmq mi sono dimenticato di dirti che un intent prende sempre parametri ctx.newIntent("FIND_2",{entityType:"PAZIENTE"}).start().then(...) è valido come messaggio :)

simonevellei commented 10 years ago

Feature implementata