Commit 9f30bd49 authored by Davide Depau's avatar Davide Depau
Browse files

Translate slides to English

parent 1843f1ff
Pipeline #641 passed with stage
in 1 minute and 20 seconds
## Prima di iniziare
## Before we get started
Preparazione 2
Preparation part 2
Aggiungete al progetto le dipendenze da qua:
Add the project dependencies from here:
https://gitlab.poul.org/corsi/android/cardreader/blob/master/app/build.gradle
......@@ -10,36 +10,46 @@ https://gitlab.poul.org/corsi/android/cardreader/blob/master/app/build.gradle
# Android Fundamentals
## Stavolta più in dettaglio
## More in-depth this time
----
## Recap
- Context
- **Activity** (graphical context)
- **Service** (background context)
- **BroadcastReceiver**
- ContentProvider (we won't talk about it much)
----
## Activity
- Activity è una singola schermata della GUI
- Le attività sono indipendenti tra di loro
- Non ne esistono due contemporaneamente
- O meglio, potrebbero. Ma non ci si può fare affidamento.
- Activity is a single screen of the UI
- Activities are independent
- There cannot be more than one at a given time
- Except in particular circumstances
----
## Activity
- Sebbene si dichiari una o più attività come principale/i, non ne esiste una "iniziale"
- Qualsiasi attività esportata può teoricamente essere avviata per prima
- Although you can declare more than one activity as *main*, there isn't one that is strictly *the first*
- Any exported activity can be launched at any given time
----
## Activity
- Le attività possono lavorare per i fatti loro
- Oppure possono ricevere dati in ingresso/restituirne in uscita
- Activities can work by themselves
- Or they can cooperate and receive input / provide output for other Contexts
----
## Activity
Le activity hanno un **ciclo di vita** ben noto e definito.
Activities have a well-known and defined **lifecycle**
----
......@@ -66,104 +76,112 @@ Le activity hanno un **ciclo di vita** ben noto e definito.
## Activity - Lifecycle
### Cose importanti
### Important
- L'inizializzazione va fatta dentro `onCreate`
- Eventuali dati vanno salvati in `onPause`
- Se l'Activity non viene distrutta, vanno ripresi in `onResume`
- Initialization is done in **`onCreate`**
- Destruction is done in **`onDestroy`**
- Stuff that lives strictly while it is visible is done in **`onPause`**/**`onResume`**
- Data can be saved/loaded in **`onSaveInstanceState`**/**`onRestoreInstanceState`**
----
## View
- L'interfaccia è composta dalle View
- Esistono numerose view, ad esempio per creare pulsanti e layout
- Everything visible inside an Activity is a **`View`**
- There are a number of Views, for instance, for buttons and layouts
---
## Risorse
## Resources
La GUI è in genere strettamente legata alle **risorse**.
The GUI makes extensive use of app and system **resources**.
----
## Risorse
## Resources
- Le risorse si trovano in una directory `res` accanto ai sorgenti
- Consentono di indicare valori al di fuori dal codice
- Resources are found in a directory called `res`, next to the code
- They are very versatile, providing data based on the "environment"
----
### Alcuni tipi di risorse
### Some types of resources
- Layout - layout schermate
- Drawable - immagini scalari e vettoriali
- Mipmap - icone per varie densità display
- Values - valori generici
- XML - XML generici
- Layout - UI layouts
- Drawable - Vector and raster images
- Mipmap - App icons for different screen densities
- Values - Generic values
- XML - Generic XML data
----
### Alcuni tipo di risorse in values
### Some types of value resources
- Colors - Definizione colori base
- Dimens - Dimensioni elementi
- Strings - Stringhe e traduzioni
- Styles - Temi
- Colors - Base theme color definition
- Dimens - Common definition for sizes
- Strings - Text strings and translations
- Styles - App styles and themes
----
### Override risorse
### Overriding resources
Le risorse possono essere selezionate in base a dei qualificatori. Per esempio:
There are a number of qualifiers that resources can be bound to. For instance:
- Lingua
- Orizzontale/verticale
- Densità schermo
- Device language
- Orientation (horizontal/vertical/square screen)
- Screen density
- Night mode
- Proporzioni schermo
- Screen aspect ratio
----
### Risorse
### Resources
Queste funzionalità ci consentono di far adattare la nostra interfaccia a svariati dispositivi,
senza toccare una riga di codice.
When binding resources to qualifiers you can adapt your app to different device form-factors,
language and settings, without a line of code.
---
## Layout
- L'interfaccia viene composta da delle risorse XML chiamate "layout"
- Dentro i layout si definiscono le View e i loro posizionamenti relativi
- The actual UI is normally layed out using XML resources called **`layout`s**
- Inside them you can define Views to be shown and their relative position
----
## Layout
Possiamo definire più volte lo stesso layout con qualificatori diversi (es. portrait/landscape).
Being resources, you can define layouts multiple times with different qualifiers
(i.e. portrait/landscape)
The system will do its job and select the correct one.
----
## Layout
Il sistema sceglierà uno o l'altro in base al qualificatore.
Views inside layouts can be associated to an ID, to interact with them in the app code.
----
## Layout
Possiamo assegnare degli identificativi per usare le view nel codice.
Questi vanno inseriti in tutte le definizioni; il codice non ha bisogno di sapere quale viene utilizzato.
If you use qualifiers you must define IDs for each variation, so that the code won't need to know
which variant of the layout is being used.
---
## I servizi
## Services
I servizi ci consentono di eseguire azioni senza un'interfaccia grafica.
Services allow performing actions without a GUI.
----
## I servizi
## Services
Abbiamo 3 tipi di servizi:
We have 3 types of Services:
- Background service
- Foreground service
......@@ -173,154 +191,164 @@ Abbiamo 3 tipi di servizi:
## Background service
- Sono totalmente invisibili all'utente
- Se ne abusava nei primi giorni di Android
- Completely invisible to the user
- Overly abused in early versions of Android
----
## Background service
- Oggigiorno il sistema li vincola pesantemente per risparmiare batteria
- Nelle ultimissime versioni di Android vengono resi automaticamente "Foreground"
- Tuttavia, se un'Activity dell'app è aperta, non vengono generalmente uccisi
- Nowadays the system heavily restricts them to save battery
- In later Android versions they automatically become Foreground Services
- However, they usually aren't killed if an Activity of the same app is running
----
## Foreground service
- Sono come i background service, ma la prima cosa che fanno è mostrare una notifica
- Finché la notifica è presente, il servizio può eseguire
- Se la notifica è rimossa, è declassato a background service
- Similar to the background ones, but they must show a notification as long as they're running
- As long as the notification is shown they are good to go
- If the notification is removed, they get demoted to background services
----
## Bound service
- Sono speciali servizi che forniscono specifiche funzionalità per altre app o il sistema
- Se un'app "binds to" un servizio, il servizio ha la stessa priorità dell'app
- Special services that provide APIs to the same app, other apps or the system
- If a Context **binds to** a Service (which must support it), the bound service inherits the
priority of the binding Context
----
## I servizi
## Services
Molti degli use-case dei servizi sono coperti, nelle versioni recenti di Android, da JobScheduler.
A lot of use-cases they cover are also covered, in recent Androids, by **JobScheduler**.
I Job dichiarano indicativamente cosa faranno, e vengono gestiti intelligentemente dal sistema in modo da creare il minor disagio.
**Jobs** must declare what they intend to do: the system will schedule them appropriately based on a global power usage plan.
---
## I broadcast
## Broadcasts
- I broadcast sono Intent che vengono inviati dal sistema o da un'app per segnalare un evento.
- Possono essere impliciti o espliciti:
- Espliciti: diretti a un'app specifica
- Impliciti: inviati a tutti
- Broadcasts are **Intents** in disguise, sent by the system or apps to notify of an event.
- They can be **implicit** or **explicit**:
- Explicit: they target a specific app
- Implicit: they target any app that declares interest in the broadcast type
----
## I broadcast receiver
## Broadcast receivers
- Questi Intent possono essere ricevuti da dei BroadcastReceiver
- Il receiver dichiara a quali broadcast è interessato; il sistema glieli manda
- Broadcast intents can be received by BroadcastReceivers
- The receiver must declare which broadcasts it is interested in, the system will deliver them
----
## I broadcast receiver
## Broadcast receivers
- I broadcast receiver possono gestire eventi in background, ma per poco tempo
- Normalmente avviano un Job o mostrano una notifica
- Receivers can handle broadcasts while in background, but they must be quick
- If they want to run longer they must:
- Start a Job/Service to do more processing
- Display a notification so the user can act upon it
----
## I broadcast receiver
## Broadcast receivers
- Possono essere dichiarati nel manifest, oppure a runtime, con degli IntentFilter
- Le versioni recenti di Android non inoltrano la maggior parte dei broadcast impliciti di sistema ai receiver dichiarati nel manifest.
- They can be declared in the manifest or at runtime, with **IntentFilters**
- Recent Androids won't deliver a lot of implicit system broadcasts due to power usage concerns
---
## I content provider
## ContentProviders
- I content provider forniscono *dati*
- Si comportano come un database, esposto alle altre app
- La riservatezza dei dati è controllata dal sistema
- ContentProviders provide *data*
- They basically act like databases exposed to apps
- Data access control is performed by the system
----
## I content provider
## ContentProviders
- Possono richiedere dei permessi per leggere/scrivere dati
- I contenuti sono forniti mediante URI (es. `contacts://...`)
- Un'app (che ha i permessi) può passare ad un'altra app in un Intent il permesso di agire su un URI specifico
- They can require users to have been granted some permissions
- Content is provided using URIs (i.e. `contacts://<contact ID>`)
- An app that has permission may provide another app permission to access a specific URI
---
## Attivazione dei componenti
## Component activation
Ogni componente ha il proprio set di metodi per essere attivato.
Each component has its own set of methods to activate it.
Tutti i componenti possono essere attivati esclusivamente da un `Context` (Activity e Service).
All component can only be activated from within a **`Context`**.
Ai BroadcastReceiver viene fornito un Context insieme ai broadcast: anche loro possono.
All BroadcastReceivers are provided with a Context when they get a broadcast: they can start other components too.
----
## Avvio attività
## Starting Activities
- `startActivity`
- `startActivityForResult` (se si aspetta un risultato)
- `startActivity()`
- `startActivityForResult()`
----
## Avvio servizi
## Starting Services
- `startForegroundService()`
- `startService()` (for background services)
----
## Binding to services
- `bindService()`
- The bound service must support it, you can't bind to a random service
- `startForegroundService` (nuove versioni di Android, per dichiarare preventivamente che il service sarà in foreground)
- `startService`
- `bindService`
----
## Invio broadcast
## Sending broadcasts
- `sendBroadcast`
- `sendOrderedBroadcast` (ricevuto da un solo receiver alla volta)
- `sendStickyBroadcast` (deprecato)
- `sendBroadcast()`
- `sendOrderedBroadcast()` (received by one receiver at a time, in order)
- `sendStickyBroadcast()` (can be retrieved at later times, deprecated)
----
## Attivazione content provider
## Retrieving content providers
- `getContentResolver`
- `getContentResolver()`
---
## Il manifest
## The manifest
È un file XML dove vengono dichiarate tutte le informazioni di interesse pubblico.
It is an XML document which defines all info of public interest about the app.
----
## Nel manifest si dichiarano
## In manifest, we declare
- Permessi usati
- Funzionalità usate
- Dipendenze
- Versione minima e target dell'SDK di Android
- Librerie speciali di sistema (librerie Google)
- Wanted permissions
- Required device functionality
- Dependencies
- Min and max Android SDK version
- Special system libraries and/or built-in Google libraries
----
## Nel manifest si dichiarano
## In manifest, we declare
- Tutte le attività
- Tutti i servizi
- Tutti i content provider
- Eventuali broadcast receiver
- All activities
- All services
- All content providers
- Broadcast receivers, optionally
Eventuali componenti privati possono essere specificati come tali
Any component can be made private: the system still needs to know about them, but we can hide them from apps.
---
# Fine della teoria
# Let's write some code
## Domande?
## Questions?
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment