Aiemmassa kirjoituksessa kävin läpi, miten Viking Linen mobiilisovelluksen käyttöliittymän voi totetuttaa PowerAppsilla. Varsin opettavainen ja hauska harjoitus.

Niin hauska, etten malta jättää leikkiä yhteen kertaan. Otetaan tällä kertaa työn alle kuitenkin astetta haastavampi kohde.

Finnairin mobiilisovellus

Tämän olen halunnut tehdä jo pitkään. Sovellus on tyylikkään näköinen ja tarjoaa sopivasti haastetta tekijälleen.

Toteutetaan sovelluksen kaksi keskeisintä näyttöä (kuvat alla)

  1. Matkan tiedot
  2. Navigaatio / matkan valinta

 

 

Näyttö 1 – Navigaatio / matkan valinta

Aloitetaan helpommasta. Luodaan tyhjä mobiilisovellus ja siihen tyhjä sivu, jonka

  • taustaväriksi asetetaan esikuvasta poimittu harmaa (HEX: 2B2C2D)
  • oikeaan reunaan lisätään valkoinen laatikko

Näyttökuva 2019-5-26 kello 20.43.16.png

Navigaatio

Tarvitsemme navigaatioelementeille (Tutustu, Varaa lentoja jne) ikonit. Kopioidaan ne alkuperäisestä sovelluksesta ja tallennetaan PowerAppsiin kuvina.

Näyttökuva 2019-5-26 kello 20.45.58.png

Luodaan kokoelma (colNavigation), joka sisältää kustakin navigaatioelementistä seuraavat tiedot

  • Id
  • Otsikko (title)
  • Ikoni (icon)
  • Ikoni elementin ollessa valittu (iconSelected)

Näyttökuva 2019-5-26 kello 20.51.13.pngToteutetaan navigaatio galleriana, jonka tietolähteenä on tekemämme kokoelma. Gallerian riveillä näytetään otsikko ja sitä vastaava ikoni.

Otsikko kirjoitetaan isoilla kirjaimilla (Upper).

Näyttökuva 2019-5-26 kello 20.57.20.png

Valitun navigaatiorivin korostaminen

Valittua riviä korostetaan valkoisella ikonilla (ThisItem.iconSelected).

Näyttökuva 2019-5-26 kello 20.59.23.png

Myös otsikon fontti vaihdetaan valkoiseksi.

Color: If(ThisItem.IsSelected;White; RGBA(176; 177; 179; 1))

Omat matkat

Seuraavaksi toteutetaan ”Omat matkat” otsikon alla näytettävä lista käyttäjän tulevista matkoista.

Yksityiskohdat ovat tärkeitä:

  • Matka koostuu meno- ja paluulennosta, jotka on visuaalisesti niputettu yhteen (pystyviiva sekä tyhjä väli matkojen välissä)
  • Käyttäjän valitessa lennon, korostetaan
    • valittu lento valkoisella värillä
    • pystyviiva valkoisella värillä koko matkan (ei yksittäisen lennon) osalta

finnair nav.png

Luodaan lennoista oma kokoelma (colMyTrips). Oikeasti tiedot haettaisiin sopivasta tietovarastosta, mutta oikaistaan hieman. Tässä riittää hommaa muutenkin.

Kokoelman tietueet sisältävät seuraavat tiedot:

  • Id
  • Matkan tunniste (tripid), jolla yhdistetään samaan matkaan liittyvät lennot
  • Lähtöpäivä (departure)
  • Lentoreitti (route)

Näyttökuva 2019-5-27 kello 7.44.22

Lisätään sivulle uusi galleria (galMyTrips), jossa näytetään seuraavat elementit

  • lähtöaika (departure)
  • reitti (route)
  • harmaa pystyviiva

Fonttikokojen ja värien säätämisen jälkeen lopputulos näyttää tältä.

Näyttökuva 2019-5-27 kello 16.36.40.png

Lisätään joka toisen reitti-kentän korkeutta. Näin saadaan erotettua matkat visuaalisesti toisistaan.

Näyttökuva 2019-5-27 kello 16.40.33.png

Korostetaan valittu lento valkoisella värillä. Tämä on helppoa. Mutta miten muutetaan pystyviivan väri valkoiseksi koko matkan kohdalta?

Tämä onnistuu matkan tunnistetta (tripId) hyödyntämällä. Vaihdetaan viiva valkoiseksi, mikäli rivin tripId on sama kuin valitun lennon tripId.

Näyttökuva 2019-5-27 kello 16.44.03.png

Ahkeralla matkaajalla tulevia matkoja voi olla paljon. Rajoitetaan gallerian korkeudeksi kolmen matkan viemä tila (korkeus = 1002).

Height: Min(1002;CountRows(colMyTrips)/2 *167)

Lisää matka -painike

Lisätään gallerian perään teksti ”Lisää matka”, sekä sitä vastavaa ikoni. Teksti ja ikoni sijoittuvat suoraan gallerian alle riippumatta gallerian korkeudesta.

Näyttökuva 2019-5-27 kello 17.11.00.png

Käyttäjän nimi ja linkki yhteydenottolomakkeeseen

Viimeistellään näyttö lisäämällä sen alareunaan

  • käyttäjän nimi
  • käyttäjän bonustaso
  • linkki yhteydenottolomakkeeseen

Sekä tietenkin kivat ikonit, jotka poimitaan alkuperäisestä sovelluksesta.

Näyttökuva 2019-5-27 kello 17.13.34.png

Seuraavaksi voidaankiin siirtyä harjoituksen hankalampaan osuuteen.

Näyttö 2  – Matkan tiedot

Luodaan toinen näyttö, johon lisätään

  • Logo
  • Otsikko, joka kertoo monenko päivän kuluttua lähtö tapahtuu
  • Otsikko, joka kertoo monenko päivän kuluttua lähtöselvitys alkaa
  • Matkakohdetta kuvaava kuva

Päivät lasketaan valitun matkan lähtöajan perusteella.

Text : Upper("Lähtö " & Round(DateValue(galMyTrips.Selected.departure) - Today();0) & " päivän kuluttua")

Näyttökuva 2019-5-27 kello 17.17.39.png

Gallerian vierittäminen kuvan päälle

Sitten se kinkkinen osuus. Miten toteutetaan näytön alaosa? Sitä pitäisi pystyä liu’uttamaan yläosan päälle näin.

IMG_6525TRIM.gif

Pienen pohtimisen jälkeen käyttöliittymän toteutustapa hahmottuu.

Luodaan jälleen kokoelma (colTripInfo), jossa on tällä kertaa kolme tyhjää riviä.

fin col trip.png

Lisätään näytön kokoinen galleria (tyyppiä ”tyhjä, joustava korkeus”), jonka tietolähteenä toimii juuri luotu kokoelma.

Tulemme käyttämään galleriaa seuraavalla tavalla.

  • Rivi 1 – Tyhjä läpinäkyvä rivi, jonka takaa näkyy näytölle aiemmin lisätyt elementit
  • Rivi 2 – Matkan perustiedot lähtöaikoineen
  • Rivi 3 – Matkan lisätiedot

Image-1.jpg

Lisätään galleriaan kuva, joka vaihtuu jokaisella rivillä.

Image: Switch(id;
              2;middle;
              3;bottom)

Huom! Ensimmäisellä rivillä kuvassa ei ole sisältöä.

Kuvan korkeus vaihtelee sekin rivin mukaan.

Height: Switch(id;
               1;600;
               2;110;
               3;800)

Näin saadaan galleriaan aikaiseksi eri korkuiset rivit.

Näyttökuva 2019-5-27 kello 20.18.49.png

Lisätään reittiä, lennon numeroa jne tietoja varten galleriaan tekstikentät. Ne näkyvät ainoastaan rivillä 2.

Visible: ThisItem.id = 2

Näyttökuva 2019-5-27 kello 20.21.33.png

Haluamme näyttää tietenkin valitun lennon tiedot.  Lisätään puuttuvat tiedot kokoelmaan (colMyTrips).

ClearCollect(colMyTrips;
  {
    id: 1;
    tripid: 1;
    departure: "20.6.2019";
    route: "Helsinki - Madrid";
    flightno: "AY1661";
    deptime: "16:50";
    depTerminal: "T2";
    arrtime: "20:15";
    arrTerminal: "T4"
  };...)

 

Vaihdetaan tekstikentät käyttämään valitun matkan tietoja.Näyttökuva 2019-5-30 kello 9.41.39.png

Kuvan häivyttäminen

Miten kohteen kuvan saa häivitettyä, kun käyttäjä scrollaa tietoja sen päälle?

Gallerian VisibleIndex -ominaisuus kertoo mikä rivi näkyy galleriassa ylimpänä. Hyödynnetään tätä tietoa kuvan läpinäkyvyys (Transparency) -ominaisuudessa.

Kuva on sitä läpinäkyvämpi, mitä enemmän gallerian rivejä on vieritetty esiin.

Näyttökuva 2019-5-27 kello 20.31.30.png

Samalla idealla voidaan häivytää myös kuvan yläpuolella näkyvät tekstit.

fin transparency.png

Jotta efektistä saadaan sulavampi, tulee gallerian ensimmäinen (se tyhjä) rivi jakaa seitsemään osaan.

Tällöin kuvan läpikuultavuuden arvoksi voidaan asettaa

Transparency: Gallery1_1.VisibleIndex *0,16

ja vastaavasti tekstien väriksi

Color: RGBA(102;102;102;1-(Gallery1_1.VisibleIndex*0,16))

Navigointi näyttöjen välillä

Loppu häämöttää!

Edellisessä esimerkissä (Viking Line), nähtiin paljon vaivaa näyttöjen välisen siirtymäanimaation toteutukseen. Oli itse tehty ”näyttö” näytön sisällä sekä ajastin, jolla näyttöä liutettiin esiin ja pois.

Kehitys kehittyy ja moisen kikkailun voi nyt unohtaa.

Lisätän molempiin näyttöihin hampurilaisikoni ja lisätään sen toiminnoksi (OnSelect) siirtyminen oikealle näytölle.

OnSelect: Navigate(Screen2;ScreenTransition.CoverRight)

Nyt löytyy animaatiot molempiin suuntiin!

fin navigate1.png

fin navigate2.png

Yhteenveto

Lopputulos näyttää tältä.

Tarkkasilmäiset huomaavat toteutuksessa lukuisan joukon yksityiskohtia, joita en saanut kuntoon. Osaa en vain jaksanut hieroa kuntoon, osassa taas tuli PowerAppsin rajat vastaan.

Mikä järki näissä harjoituksissa on? Eihän PowerAppsilla voi tehdä sovelluksia tenantin ulkopuolisille käyttäjille.

Näiden harjoitusten idea on oppia. Oppia miten PowerAppsilla voi tehdä käyttöliittymiä, joihin sen ei uskota taipuvan. Näitä tehdessä saa uusia käyttöliittymäideoita, sekä oppii aina uutta PowerAppsin peruskontrolleista ja niiden hyödyntämisestä.

Suosittelen kaikille.