# Viimo SalesDesk Android 0.3 — testitoimitus Oikea Android Studio / Kotlin / Gradle -projekti; nykyinen SalesDesk avautuu suojatussa WebView'ssä. Ei rinnakkaista CRM:ää, Capacitoria, VoIPia tai nauhoitusta. Android 10+ (API 29), compile/target SDK 35. Tunniste säilyy `fi.myynnintyopoyta.caller`. **Ei tuotantohyväksytty. Fyysisiä asennus- tai GSM-puhelutestejä ei ole tehty. Offline-tunnistus ei ole toteutettu.** ## Pakettilajit ja yhteensopivuus - `viimo-salesdesk-0.3-debug.apk`: osoite https://salesdesk.viimo.fi. Toimitus ei julkaise verkkosovellusta. Uusien asetusten ja moni-osumahaun käyttö edellyttää tämän verkkoversion erikseen hyväksyttyä julkaisua. - `viimo-salesdesk-0.3-preview-debug.apk`: nykyinen esikatselu; saattaa vaatia Lovable-katseluoikeuden, jota Android WebView'ssä ei ole varmennettu. Käytä tätä uusien asetusten testiin ennen julkaisua. - APK on debug-allekirjoitettu. Aiemman APK:n allekirjoituksen jatkuvuutta ei ole vahvistettu: jos Android antaa UPDATE_INCOMPATIBLE-virheen, älä poista käytössä olevaa sovellusta ilman paikallisten tietojen menetyksen hyväksyntää. Käytä erillistä testilaitetta. - Julkaisuavainta ei ole luotu. `bundleRelease` rakentaa allekirjoittamattoman AAB:n vain menettelyn tarkistamiseksi; sitä ei saa jakaa Play-kauppaan. ## Asenna testipuhelimeen 1. Lataa haluttu APK ja avaa puhelimen Lataukset-kansiosta. Salli asennus vain tälle tiedostolähteelle ja peru lupa asennuksen jälkeen. 2. Avaa **Viimo SalesDesk**, kirjaudu luvalliselle testitilille ja valitse organisaatio. 3. Asetukset → **Puheluntunnistus** → **Ota puheluntunnistus käyttöön**. Hyväksy Androidin oma soittajantunnistaja-/roskapostiroolivalinta ja Android 13+:ssa ilmoituslupa. Android käyttää yhtä tunnistajaa kerrallaan; toinen tunnistajasovellus voi korvata roolin. 4. Tarkista rooli, ilmoitukset ja hakemiston tila. **Päivitä hakemisto** pyytää oikeustarkistettua päivitystä; **Testaa tunnistuksen asetukset** lukee tilan, ei simuloi GSM-puhelua. 5. Testaa oikealla saapuvalla puhelulla. Selaimeen/PWA:han asennus ei anna Android-roolia. USB-asennus: `adb install -r viimo-salesdesk-0.3-debug.apk`. Fyysisen laitteen yhteys tarkistetaan komennolla `adb devices`. ## Täsmällinen Android Studio -käännös 1. Pura lähdepaketti tavalliseen paikalliseen kansioon. Avaa Android Studiossa hakemisto, jossa `settings.gradle.kts` on. 2. Asenna JDK 17, Android SDK Platform 35, Build-Tools 35.0.0 ja Platform-Tools; hyväksy SDK-lisenssit. Wrapper käyttää Gradle 8.11.1:tä, AGP 8.9.2:ta ja Kotlin 2.1.20:tä. 3. Aseta paikallinen `ANDROID_HOME` tai Android Studion luoma `local.properties`; älä jaa paikallista asetustiedostoa. 4. Linux/macOS: `chmod +x gradlew` ja `./gradlew --no-daemon :app:testDebugUnitTest :app:lintDebug :app:assembleDebug`. 5. Windows PowerShell: `.\gradlew.bat --no-daemon :app:testDebugUnitTest :app:lintDebug :app:assembleDebug`. 6. APK: `app/build/outputs/apk/debug/app-debug.apk`. 7. Esikatselukäännös: `./gradlew :app:assembleDebug -PappOrigin=https://id-preview--5c6dd37c-85cd-43fb-bc1e-fd984aa0f592.lovable.app`. 8. AAB-menettely: `./gradlew :app:bundleRelease`. Tuloste `app/build/outputs/bundle/release/app-release.aab` on **allekirjoittamaton**. Julkaisuavaimen, jatkuvuuden ja kauppavaatimusten hyväksyntä erikseen. `backend-public.properties` sisältää vain julkisen yhteysasetuksen; ei palvelinavaimia. Älä lisää käyttäjän salasanoja tai allekirjoitusavaimia lähteisiin. ## Tietoturva ja todelliset rajoitukset - Saapuva tavallinen puhelu sallitaan **ennen** kryptografiaa, tallennusta ja verkkotyötä. Kaikki estämis-/hiljentämisliput ovat false. Puhelin soi tunnistuksen epäonnistuessakin; todellinen viive pitää mitata laitteella. - Android Keystore AES-GCM salaa istunnon, enintään 500 numero-/ID-tietuetta sekä lyhytikäisen odottavan numeron. Ei yritysnimiä, henkilönimiä, muistioita tai historiaa offline-hakemistossa. Varmuuskopiointi ja laitesiirto poissuljettu; tehtävänvaihtajan kuvakaappaus estetty. - CallScreeningService toimii Androidin käynnistämänä ilman Activityn etualaa; fyysistä taustatoimivuutta ei vielä vahvistettu. - Nykyinen palvelinhakemisto on voimassa yhden minuutin, Android hyväksyy enintään 65 sekunnin aikarajan. Saapuva puhelu käynnistää WorkManagerin oikeustarkistetun haun, ja ilmoitus tulee vasta sen onnistuttua. Periodinen päivitys on noin 15 min, Doze/valmistaja voivat viivästyttää sitä. Ei luvata välitöntä tunnistusilmoitusta. - **Offline-tunnistuksen ja välittömän oikeuksien poiston välillä on ristiriita.** Verkon puuttuessa oikeutta ei voi vahvistaa; vanhaa osumaa ei näytetä. Aikarajaa ei pidennetty. Offline hyväksymistesti D jää hylätyksi/avoimeksi tunnistuksen osalta, vaikka puhelu sallitaan. - Uloskirjautuminen, org-/käyttäjävaihto, käyttöesto ja käyttöoikeusvirhe tyhjentävät tiedot. Tuore käyttöoikeus tarkistetaan tunnistusta ja kortin avaamista varten. Ei asiakkaiden oikeusmuutoksia. - Tuntemattomasta/salatusta numerosta ei arvata asiakasta. Useat yritykset avaavat numeron esitäytettynä oikeutetun haun valintanäkymään; valinta edellyttää verkkohakua. Numero ei kulje URL:ssa. - Yksityinen ilmoitus ei näytä asiakkaan nimeä lukitusnäytössä. Yrityksen ID-korttilinkki tarkistaa oikeudet uudelleen. Koko näyttöä ei pakoteta eikä oletuspuhelinsovellusta vaihdeta. - Ei READ_CALL_LOG-, WRITE_CALL_LOG- tai READ_CONTACTS-oikeuksia. Android voi jättää yhteystietoihin tallennetut numerot välittämättä palvelulle. Testaa erikseen tallennetut ja tallentamattomat numerot, salatut numerot ja ei-GSM-puhelut. - Force-stop ei vastaa käyttöliittymän sulkemista: taustatyöt voivat lakata kunnes sovellus avataan. Uudelleenkäynnistys ennen ensimmäistä lukituksen avaamista ei ole hyväksytty käyttötilanne. - OAuth/palautus ulkoisesta selaimesta WebView-istuntoon sekä OEM:n prosessikuolema ovat avoimia laitehyväksymisiä. Näyttökierto palauttaa WebView-tilan; tel-puhelun jälkeen ei automaattista tuloskirjausta. ## Fyysinen hyväksymisraportti Täytä `device-test-report.md` vain oikeilla puheluilla. Testit A–J, kaikki 12 hyväksymiskriteeriä sekä mittarit on eroteltu. Samsung/Pixel ja Android 13/14/15/16 ovat **testaamatta**. Automaattitestit tai APK-käännös eivät ole laitetodiste.