Note di rilascio del simulatore dell'Algoritmo Di Booth semplice e in codifica Bit-Pair per Android "MultypdroidBooth". Versione 1.0 ** Architettura del software ** L'applicazione sfrutta appieno il Framework di Android. È stata sviluppata interamente su Android Studio, per cui si raccomanda di utilizzare lo stesso software. ** Percorso Codice Sorgente ** Il file con /app/build.gradle è necessario per l'esecuzione del progetto su Android Studio. La directory /app/src/main/ contiene tutto il codice sorgente della applicazione. Essa si suddivide in: > /res/ contente tutti i file riguardanti l'interfaccia (risorse grafiche, layouts, stringhe) ; > /java/ contenente la parte logica dell'app. '/unict/peacock/multypdroidbooth/' è il package in cui vi sono situati tutti i file con estensione '.java'. Il file 'AndroidManifest.xml' contiene dati inerenti alle varie Activity, al tema e al lanciatore dell'app, nonché i permessi richiesti al sistema. ** Relazione Activity - Fragment in Android ** Un Fragment è una porzione di Activity. Può essere definito come una specie di sub-activity con un suo ciclo di vita. I Fragment sono particolari classi Java utilizzati per mostrare i layouts ed offrire un'esperienza d'uso migliore di quella ottenibile utilizzando le sole Activity. Per questo motivo, la classe MainActivity del progetto è la classe su cui lavorano i vari Fragments, ossia le classi "Start", "OperatorInsert", "OperatorCoding" e "Calculation". Ognuno di questi Fragment ha dei bottoni per navigare alla sezione successiva o precedente, mantenendo invariati i dati presenti nella classe "MainActivity". \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ L'activity principale "MainActivity" è il lanciatore dell'app contenente funzioni globali al progetto e funzioni grafiche. Contiene inoltre tutte le variabili di input come le stringhe binarie e i numeri in decimale. Più in dettaglio: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || ATTRIBUTI || //Indici dei Fragments (pagine) dell'applicazione (int) MAIN = -1, INS_MULTIPLICAND = 0, INS_MULTIPLICATOR = 1, CODING = 2, CALCULATION = 3, TUTORIAL = 4, CREDITS = 5; //Fragment (pagina) attualmente in uso (int) state = -1; //Modalità di input: binaria o decimale (boolean) isBinaryChecked = true; //Stringhe binarie che rappresentano moltiplicando e moltiplicatore (String) stringMultiplicand = "", stringMultiplicator = ""; //Contiene i valori della codifica scelta (standard o bit-pair) (String[]) stringCoded = new String[8]; //Il numero degli step da eseguire nella moltiplicazione (int) steps = 0; //I numeri di input in base decimale (int) decimalMultiplicand = 0, decimalMultiplicator = 0; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || FUNZIONI || (String) convertToBinary(int state, int number) (String) convertToDecimal(String number) //Torna il complemento a due di 'stringMultiplicand' (String) getComplement() //Somma "1" ad un numero binario a1 in input (String) binaryAddition(String a1) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Il Fragment "OperatorInsert" è la pagina grafica in cui è possibile inserire gli input, sia in complemento a due che in decimale. Il Fragment ne contiene altri due, "BinaryKeyBoard" e "DecimalKeyBoard" nei quali avviene l'inserimento tramite gli appositi bottoni. Più in dettaglio: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || FUNZIONI || //Inserisce "0" o "1" dalla "BinaryKeyBoard" nell'input selezionato (moltiplicando o moltiplicatore) nella posizione meno significativa. (void) insertAdd(int key) //Inverte il segno del moltiplicando o moltiplicatore (void) changeSign() //Inserisce un numero da -1 a 9 nell'input dalla "DecimalKeyBoard" (void) insertDecimal(int num) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Il Fragment "OperatorCoding" è la pagina in cui avviene la codifica Standard e Bit-Pair, selezionabili tramite tasti. Più in dettaglio: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || FUNZIONI || //Imposta graficamente e logicamente la codifica standard (void) setStandardEncodingView(View view) //Imposta graficamente e logicamente la codifica bit-pair (void) setBitPairEncodingView(View view) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Il Fragment "Calculation" è la pagina in cui avviene il calcolo step-by-step. Più in dettaglio: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || ATTRIBUTI || (TextView) tb0, tb1, tb2, tb3, tb4, tb5, tb6, tb7, tb8; //Moltiplicando, carattere per carattere (TextView) tc0, tc1, tc2, tc3, tc4, tc5, tc6, tc7, tc8; //Codifica (standard o bit-pair) (TextView[]) matB, matC, matD, matE, matF, matG, matH, matI, matL, matM, matN, matR; //vettore B: moltiplicando, C: codifica, D..N: steps, R: risultato (TextView[][]) matCalc = new TextView[][]{matD, matE, matF, matG, matH, matI, matL, matM, matN}; //vettore dei vettori (matrice) (RelativeLayout) rld, rle, rlf, rlg, rlh, rli, rll, rlm, rln, rlr; //Views (RelativeLayout[]) rls; //Vettore delle Views (int) stepCount = 0; //Ogni passo interattivo è segnato da questo indice (String) complement = ""; //Il complemento a due del moltiplicando (int) MAX_N_STEP = steps; //Il numero massimo degli steps (String) result = ""; //Stringa del risultato (String) message = ""; //Stringa nel messaggio presente nel Dialog (tutorial) che spiega il passo effettuato (boolean) canShowTutorialDialog = true; (int) indexReport = 0; //L'indice (da sinistra verso destra) che indica l'ultimo carattere in cui prolungare il segno ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || FUNZIONI || //Prolunga il segno per ogni livello dell'addizione (void) setReport() //Metodo di supporto a setReport (void) setExtension(int i, String lastCharacter) //Ritorna l'ultimo carattere (String) getLastCharacter() ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Tecniche di programmazione: Programmazione in Java orientata agli oggetti (OOP). ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ** Collaudi ** I collaudi sono stati effettuati su 4 smartphone Android, rispettivamente nelle versioni di sistema: 4.1, 4.4, 5.0, 7.0. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ** Idee per ulteriori sviluppi ** Eventuali migliorie sono elencate di seguito: 1. Snellimento del Codice. 2. Aumentare la lunghezza dei bit codificabili -------------------------------------------------------------------------------------------------------------------------------------------------------------------------