MinimalApp

WebView Android full-screen per example.com

Cos’è MinimalApp?

MinimalApp Γ¨ una semplice applicazione Android che integra una WebView full-screen per il sito example.com, con supporto per geolocalizzazione, selezione file e JavaScript.

Caratteristiche

Diagrammi UML β€” Dettagli Implementativi

Questa sezione fornisce una visione approfondita dell’architettura Android e dei flussi di interazione attraverso diagrammi UML dettagliati.

πŸ“ Class Diagram β€” Application Structure

Struttura dell'applicazione: MainActivity estende AppCompatActivity, configura WebView con CustomWebChromeClient per gestire eventi UI (file chooser, geolocation). CompanionObject contiene costanti per request codes.

classDiagram direction TB class AppCompatActivity { +onCreate(savedInstanceState) +onActivityResult(requestCode, resultCode, data) +onRequestPermissionsResult(...) } note for AppCompatActivity "Android Framework" class MainActivity { -filePathCallback ValueCallback~Array_Uri~ +onCreate(savedInstanceState Bundle) +onRequestPermissionsResult(requestCode, permissions, grantResults) +onActivityResult(requestCode, resultCode, data) -setupWebView() -handleFileSelection(data) } class CompanionObject { -FILECHOOSER_REQUEST_CODE Int -LOCATION_PERMISSION_REQUEST_CODE Int } note for CompanionObject "Static constants" class CustomWebChromeClient { +onShowFileChooser(webView, callback, params) Boolean +onGeolocationPermissionsShowPrompt(origin, callback) +onProgressChanged(view, newProgress) } class WebChromeClient note for WebChromeClient "Android Framework" class WebView { +loadUrl(url String) +settings WebSettings +webChromeClient WebChromeClient +webViewClient WebViewClient } class WebSettings { +javaScriptEnabled Boolean +domStorageEnabled Boolean +geolocationEnabled Boolean +allowFileAccess Boolean } AppCompatActivity <|-- MainActivity : extends MainActivity *-- CompanionObject : contains MainActivity --> WebView : configures MainActivity ..> CustomWebChromeClient : creates WebChromeClient <|-- CustomWebChromeClient : extends WebView --> CustomWebChromeClient : uses WebView *-- WebSettings : has

πŸ”„ Sequence Diagram β€” File Upload Flow

Flusso completo upload file: utente clicca input β†’ WebChromeClient intercetta β†’ crea Intent ACTION_GET_CONTENT β†’ OS mostra file picker β†’ utente seleziona β†’ onActivityResult β†’ callback alla WebView con Uri del file.

Supporta: input type="file", camera capture, gallery selection

sequenceDiagram autonumber participant User as πŸ‘€ Utente participant WV as WebView participant WCC as WebChromeClient participant Main as MainActivity participant OS as πŸ€– Android OS Note over WV, Main: Click su WV->>WCC: onShowFileChooser(callback, params) activate WCC WCC->>Main: filePathCallback = callback WCC->>WCC: Crea Intent ACTION_GET_CONTENT WCC->>Main: startActivityForResult(intent, CODE) WCC-->>WV: return true deactivate WCC Main->>OS: Lancia File Picker Activity activate OS Note over User, OS: Utente seleziona file o annulla OS-->>Main: onActivityResult(requestCode, resultCode, data) deactivate OS activate Main alt resultCode == RESULT_OK Main->>Main: Estrae Uri da data.clipData o data.data Main->>WV: filePathCallback.onReceiveValue(uriArray) Note right of WV: File disponibile
per upload else Annullato / Errore Main->>WV: filePathCallback.onReceiveValue(null) Note right of WV: Upload cancellato end Main->>Main: filePathCallback = null deactivate Main

πŸ‘€ Use Case Diagram β€” Functional Overview

Panoramica funzionale dal punto di vista utente: navigazione web full-screen, upload file/foto, geolocalizzazione (richiesta dal sito), gestione permessi runtime Android 6.0+.

flowchart LR subgraph User["πŸ‘€ Utente Android"] U((User)) end subgraph App["πŸ“± MinimalApp"] UC1[🌐 Navigazione Web
Full-Screen] UC2[πŸ“ Geolocalizzazione] UC3[πŸ“ Upload File/Foto] UC4[πŸ” Gestione Permessi
Runtime] end subgraph Notes["πŸ“ Note Implementative"] N1[onGeolocationPermissionsShowPrompt
in WebChromeClient] N2[onShowFileChooser
in WebChromeClient] end U --> UC1 U --> UC3 UC1 -.->|include| UC2 UC1 -.->|include| UC4 UC3 -.->|include| UC4 UC2 -.- N1 UC3 -.- N2 style UC1 fill:#3ddc84,color:#000 style UC2 fill:#4285f4,color:#fff style UC3 fill:#fbbc04,color:#000 style UC4 fill:#ea4335,color:#fff

Requisiti

Permessi

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

Installazione

git clone https://github.com/tuo-username/minimal-app.git
cd minimal-app
  1. Configura percorso SDK in local.properties:
    sdk.dir=/percorso/alla/tuo/Android/Sdk
    
  2. Apri il progetto in Android Studio e Build.

Struttura progetto

.
β”œβ”€β”€ app
β”‚   └── src
β”‚       └── main
β”‚           β”œβ”€β”€ AndroidManifest.xml
β”‚           └── java/com/example/minimalapp/MainActivity.kt
└── ...

Come contribuire

  1. Fork del repository
  2. git checkout -b feature/nome-feature
  3. git commit -m "Aggiunta nuova feature"
  4. git push origin feature/nome-feature
  5. Apri una Pull Request

Distribuito sotto licenza MIT