Android-sovellus
- Compose-käyttöliittymä ja Material 3 -komponentit
- ViewModel- ja StateFlow-pohjainen tilanhallinta
- Repository-rajapinnat, mapperit ja Room-DAO:t
- Tuki Android 8:sta (API 26) alkaen, käännetty API 36:ta vasten
Android-sovellus
Julkaistu Google Playssa
Kauppalista & Muistiinpanot pitää ostoslistat, muistiinpanot, reseptit, tehtävät ja syntymäpäivät yhdessä paikassa – ilman tiliä ja ilman verkkoyhteyttä. Kirjautuminen tarvitaan vain jaettuihin listoihin, ja tekoälytoiminnot ovat erillinen, valinnainen kerros paikallisen ytimen päällä.
Useimmat listasovellukset vaativat tilin ennen kuin niillä voi tehdä mitään. Tämä sovellus kääntää asetelman: kaikki arjen perustoiminnot ovat käytettävissä heti asennuksen jälkeen, ja verkkoa tarvitaan vasta silloin, kun käyttäjä itse haluaa jakaa listan tai pyytää tekoälyltä apua.
Arjen suunnitteluun: ostokset, muistiinpanot, reseptit, tehtävät ja muistettavat päivät. Myös niille, jotka eivät halua luoda tiliä pelkkää kauppalistaa varten.
Tiedot pysyvät laitteella eivätkä katoa verkkokatkoon. Samalla käytettävissä ovat myös ne toiminnot, joita paikallinen sovellus ei yksin pysty tarjoamaan: reaaliaikainen jakaminen ja tekoälyn tuottamat ehdotukset.
Listat, muistiinpanot ja reseptit toimivat suoraan. Jaetun listan luominen pyytää Google-kirjautumisen, ja tekoälytoiminnot käynnistyvät vain käyttäjän pyynnöstä.
Nämä kerrokset on eristetty paikallisesta ytimestä. Ne eivät ole käytössä ennen kuin käyttäjä ottaa ne käyttöön, eivätkä ne siirrä paikallisia listoja, muistiinpanoja tai terveysmerkintöjä pilveen.
Yksittäinen ateriaehdotus tai usean päivän ruokalista. Ehdotuksen ainekset voi lisätä suoraan kauppalistalle, ja valmiin reseptin voi tallentaa muistiinpanoihin.
Kuvasta tunnistetut ainekset muodostavat pohjan reseptiehdotuksille. Käyttäjä vahvistaa tunnistetut ainekset ennen kuin niistä pyydetään reseptiä.
Erillinen yhteistyökerros ostos- ja tehtävälistoille. Kutsulinkit, omistaja-, muokkaaja- ja katselijaroolit sekä reaaliaikainen synkronointi Firestoren kautta. Ei korvaa paikallisia listoja.
Jaettujen listojen muutoksista voi saada push-ilmoituksen. Ilmoitusasetukset ovat käyttäjäkohtaisia, ja ilmoituksia rajoitetaan niin ettei yksi muokkausrypäs tuota ilmoitustulvaa.
Tekoälypyynnöt kulkevat oman FastAPI-backendin kautta, joka tarkistaa pyynnön aitouden ja rajoittaa käyttöä. Vastaukset validoidaan palvelimella ennen kuin ne palautetaan sovellukselle.
Terveysmerkinnät ovat käyttäjän omia kirjauksia. Sovellus ei tulkitse arvoja eikä anna terveysneuvontaa.
Sovellus on rakennettu paikallinen ydin edellä. Verkkoa käyttävät osat ovat erillisiä kerroksia, jotka voidaan ottaa käyttöön ilman että paikallinen toiminta muuttuu.
Sovelluksen tietosuojaratkaisu perustuu siihen, mitä ei lähetetä eteenpäin.
Listat, muistiinpanot, reseptit, tehtävät, syntymäpäivät ja terveysmerkinnät tallentuvat laitteelle. Niitä ei siirretä pilveen automaattisesti.
Perustoiminnot eivät vaadi tiliä. Google-kirjautumista pyydetään vasta, kun käyttäjä luo tai liittyy jaettuun listaan.
Tekoälypyynnöt vaativat Firebase App Check -tarkistuksen ja Google Play Integrity -varmennuksen nonce-menettelyllä, joten rajapintaa ei voi käyttää sovelluksen ulkopuolelta.
Jaetuista listoista pilveen tallentuvat vain listan tiedot, rivit, jäsenyydet, roolit, kutsut ja ilmoitusasetukset. Profiilikuvina käytetään ainoastaan Google-tilin kuvalinkkiä.
Käyttöanalytiikka on poiskytkettävissä ja kulkee sallittujen tapahtumien kääreen kautta. Tapahtumiin ei sisällytetä listojen sisältöä, muistiinpanoja, hakuja, terveysmerkintöjä eikä käyttäjätunnisteita.
Muistiinpanot, reseptit, ruokalistat, asetukset ja terveysosio voidaan lukita biometrisesti.
Kuvat ovat sovelluksen Google Play -kuvakaappauksia. Klikkaamalla kuva avautuu täysikokoisena.
Sovellus on Google Play -kaupan tuotantoraiteella paketilla com.janstech.kauppalista. Julkaisut tehdään allekirjoitettuina Android App Bundleina. Paikalliset ominaisuudet ovat käytettävissä ilman tiliä; jaetut listat ja tekoälytoiminnot vaativat verkkoyhteyden ja jaetut listat lisäksi Google-kirjautumisen.