Browse Source

Merge branch 'feature/dictionary' into develop

feature/upgrade_sdk
Dslak 6 years ago
parent
commit
6c81695ea4
  1. 0
      vds-app/App/assets/bg_green.jpg
  2. 0
      vds-app/App/assets/bg_red.jpg
  3. 0
      vds-app/App/assets/bg_yellow.jpg
  4. BIN
      vds-app/App/assets/check.png
  5. BIN
      vds-app/App/assets/close.png
  6. 25
      vds-app/App/components/Button.js
  7. 11
      vds-app/App/components/Variables.js
  8. 932
      vds-app/App/data/dictionary.js
  9. 11
      vds-app/App/index.js
  10. 238
      vds-app/App/screens/Dictionary.js
  11. 10
      vds-app/App/screens/Info.js
  12. 15
      vds-app/App/screens/Splash.js

0
vds-app/App/assets/passed.jpg → vds-app/App/assets/bg_green.jpg

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

0
vds-app/App/assets/error.jpg → vds-app/App/assets/bg_red.jpg

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

0
vds-app/App/assets/unsafe.jpg → vds-app/App/assets/bg_yellow.jpg

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

BIN
vds-app/App/assets/check.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

BIN
vds-app/App/assets/close.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

25
vds-app/App/components/Button.js

@ -9,7 +9,7 @@ const styles = StyleSheet.create({
borderColor: 'transparent',
borderRadius: 10,
paddingHorizontal: 10,
paddingVertical: 10,
paddingVertical: 13,
alignItems: "center",
justifyContent: "center",
width: "100%",
@ -29,15 +29,19 @@ const styles = StyleSheet.create({
flexDirection: "row",
flexWrap: "wrap",
marginTop: 20,
justifyContent: "space-between"
justifyContent: "space-between",
overflow: "hidden",
borderRadius: 10
}
})
export const Button = ({ text, subtitle = null, isBig = false, colorize = false, color = false, onPress = () => {} }) => {
export const Button = ({ text, subtitle = null, isBig = false, colorize = false, color = false, noPadding = false, noBorder = false, onPress = () => {} }) => {
const buttonBig = isBig ? {fontSize: 25} : {}
const isClicked = colorize.clicked == colorize.id
let buttonColor = {backgroundColor: colors.white_alpha}
let planeButton = noPadding ? { borderRadius: 0, marginTop: 0, borderWidth: 0, borderBottomWidth: 1, borderColor: colors.white_alpha} : {}
let noBorderButton = noBorder ? { borderWidth: 0, borderBottomWidth: 0} : {}
if(colorize && colorize.answered) {
@ -56,14 +60,14 @@ export const Button = ({ text, subtitle = null, isBig = false, colorize = false,
if(subtitle) {
return (
<TouchableOpacity onPress={onPress} style={[styles.button, buttonColor]}>
<TouchableOpacity onPress={onPress} style={[styles.button, buttonColor, planeButton, noBorderButton]}>
<Text style={[styles.text, buttonBig]}>{text}</Text>
<Text style={styles.subtitle}>{subtitle}</Text>
</TouchableOpacity>
)
} else {
return (
<TouchableOpacity onPress={onPress} style={[styles.button, buttonColor]}>
<TouchableOpacity onPress={onPress} style={[styles.button, buttonColor, planeButton, noBorderButton]}>
<Text style={[styles.text, buttonBig]}>{text}</Text>
</TouchableOpacity>
)
@ -71,6 +75,11 @@ export const Button = ({ text, subtitle = null, isBig = false, colorize = false,
}
export const ButtonContainer = ({ children }) => (
<View style={styles.buttonContainer}>{children}</View>
)
export const ButtonContainer = ({ children, isBoxed = false}) => {
let boxedStyle = isBoxed ? {borderWidth: 3, borderColor: colors.white_alpha2} : {}
return (
<View style={[styles.buttonContainer, boxedStyle]}>{children}</View>
)
}

11
vds-app/App/components/Variables.js

@ -1,6 +1,7 @@
export const colors = {
white: "#fff",
white_alpha: "rgba(255, 255, 255, 0.3)",
white_alpha2: "rgba(255, 255, 255, 0.5)",
black: "#000",
black_alpha: "rgba(0, 0, 0, 0.1)",
purple: "#8c0072",
@ -15,7 +16,8 @@ export const colors = {
green_light: "#6cc155",
yellow: "#e1ff3c",
yellow_alpha: "rgba(225, 255, 60, 0.9)",
orange: "#dd732d"
orange: "#dd732d",
transparent: "transparent"
}
export const texts = {
@ -43,7 +45,12 @@ export const texts = {
restart: "Ricomincia!",
recap: "Visualizza errori",
recapTitle: "Riepilogo domande sbagliate",
infoTitle: "Informazioni",
infoTitle: "Informazioni App",
dictionaryTitle: "Terminologia",
dictionarySubtitle: "Dizionario ICAO e abbreviazioni",
alphabethTitle: "Alfabeto ICAO",
abbreviationsTitle: "Abbreviazioni",
numbersTitle: "Numeri ICAO",
version: "Versione",
author: "Autore",
exit: "Esci",

932
vds-app/App/data/dictionary.js

@ -0,0 +1,932 @@
export const abbreviations = [
{
"k": "ACC",
"v": "Area Control Centre. Area di controllo"
},
{
"k": "ADR",
"v": "Advisory Route Rotta a servizio consultivo"
},
{
"k": "AFS",
"v": "Aeronautical Fixed Service. Servizio di informazioni volo fisso"
},
{
"k": "AIP",
"v": "Aeronautical Information Pubblications Pubblicazioni aeronautiche di informazione"
},
{
"k": "AIRMET",
"v": "AIRman's METeorological Information / Informazione Meteorologica per il personale navigante degli aeromobili"
},
{
"k": "ALERFA",
"v": "Alerting phase. Fase di allerta"
},
{
"k": "ALS",
"v": "Appopoach lightning system. Sentiero luminoso di avvicinamento."
},
{
"k": "ALT",
"v": "Altitude Altitudine"
},
{
"k": "ALTN",
"v": "Alternate aerodrome Aerporto alternato"
},
{
"k": "AMSL",
"v": "Above mean sea level. Al di sopra del livello medio del mare"
},
{
"k": "AOC",
"v": "Aerodrome obstruction chart. Carta degli ostacoli aeroportuali"
},
{
"k": "APP",
"v": "Approach controlo office. Ufficio di controllo di avvicinamento o allontanamento da una zona controllata"
},
{
"k": "APRON",
"v": "A defined area intended to accomodate aircraft. Area predisposta per il parcheggio aeromobili"
},
{
"k": "ARO",
"v": "Air traffic services reporting office. Ufficio informazioni dei servizi del T.A."
},
{
"k": "ARR",
"v": "Arrive o arrival. Arrivo"
},
{
"k": "ASMI",
"v": "Aerodrome surface movement. Indicatore dei movimenti a terra degli aeromobili"
},
{
"k": "ATA",
"v": "Actual time of arrival. Orario effettivo di arrivo"
},
{
"k": "ATC",
"v": "Air traffic control in general. Controllo del traffico aereo"
},
{
"k": "ATD",
"v": "Actual time of departure. Orario effettivo di partenza"
},
{
"k": "ATIS",
"v": "Automatic terminal infornation service. Servizio automatico informaz. terminali:di aeroporto o zona"
},
{
"k": "ATS",
"v": "Air Traffic Service Servizio di"
},
{
"k": "ATZ",
"v": "Air Traffic Zone Zona di traffico di aerodromo"
},
{
"k": "AWY",
"v": "Airway. Aerovia"
},
{
"k": "BA",
"v": "Braking action. Azione frenante"
},
{
"k": "BASE",
"v": "Cloud base. Base delle nubi"
},
{
"k": "BDRY",
"v": "Boundry Confine - delimitazione"
},
{
"k": "CA",
"v": "Control Area. Area di controllo"
},
{
"k": "CFM",
"v": "Confirm. Confermate"
},
{
"k": "CHG",
"v": "Modification message. Messaggio di modifica"
},
{
"k": "CNL",
"v": "Cancel message. Messaggio di cancellazione"
},
{
"k": "CTA",
"v": "Control arca. Area di controllo"
},
{
"k": "CTR",
"v": "Control Zone. Zona controllata con limiti ben specifici"
},
{
"k": "CPL",
"v": "Current flight plan. Piano di volo in vigore"
},
{
"k": "CTN",
"v": "Caution Precauzione"
},
{
"k": "CWY",
"v": "Clearway. Area libera da ostacoli"
},
{
"k": "D",
"v": "Danger area. Area Pericolosa"
},
{
"k": "DA/DH",
"v": "Decion altutude/height. Altitudine/altezza di decisione"
},
{
"k": "DCA",
"v": "Jurisditional aerodrome authority. Direzione circoscrizionale aeroportuale"
},
{
"k": "DCT",
"v": "Direct in relation to flight plan clearance. Diretto relativo ad autorizzazioni ATC and type of approach. ed a tipo di avvicinamento"
},
{
"k": "DEP",
"v": "Departure message. Messaggio di partenza"
},
{
"k": "DEST",
"v": "Destination. Destinazione"
},
{
"k": "DETRESFA",
"v": "Distress fase. Fase di pericolo"
},
{
"k": "DEP",
"v": "Departure message. Messaggio di partenza"
},
{
"k": "DLA",
"v": "Delay message. Messaggio di ritardo"
},
{
"k": "DME",
"v": "Distance measuring equipment. Apparato misuratore di distanza"
},
{
"k": "DR",
"v": "Dead reckoning. Navigazione stimata"
},
{
"k": "DVOR",
"v": "Doppler VOR. VOR doppler terminale"
},
{
"k": "EAT",
"v": "Expect approach time. Orario previsto di avvicinamento"
},
{
"k": "EET",
"v": "Estimated elapsed time. Durata stimata del volo"
},
{
"k": "EFAS",
"v": "Electronic flashing approach system. Lampeggiatore elettronico di avvicinamento."
},
{
"k": "ELBA",
"v": "Emergency location beacon-aircraft. Radiofaro di bordo per localizzazione di un aeromobile in emergenza"
},
{
"k": "ELT",
"v": "Emergency locator transmitter. Trasmettitore di bordo per la localizzazione di emergenza"
},
{
"k": "ELV",
"v": "Elevation. Altitudine o elevazione"
},
{
"k": "END",
"v": "End of runway. Fine pista"
},
{
"k": "EOBT",
"v": "Estimated Off Block Time. Tempo stimato di movimento di un aeromobile"
},
{
"k": "EQPT",
"v": "Equipment. Equipaggiamento o dotazione"
},
{
"k": "EST",
"v": "Estimate time over significant point. Ora stimata su un punto significativo"
},
{
"k": "ETA",
"v": "Estimated time of arrival. Orario stimato di arrivo"
},
{
"k": "ETD",
"v": "Estimated time of departure. Orario stimato di partenza"
},
{
"k": "FAF",
"v": "Final approach fix. Fix lungo l'avvicinamento finale"
},
{
"k": "FAP",
"v": "Final approach point. Punto di avvicinamento finale"
},
{
"k": "FCST",
"v": "Forecast. Previsione"
},
{
"k": "FIC",
"v": "Flight Information centre. Centro informazioni volo"
},
{
"k": "FIR",
"v": "Flight Information Region Regione di informazione voli"
},
{
"k": "FIS",
"v": "Flight information service. Servizio informazioni volo"
},
{
"k": "FL",
"v": "Flight Level. Livello di volo"
},
{
"k": "FLP",
"v": "Filed flight plan. Piano di volo compilato"
},
{
"k": "FREQ",
"v": "Frequency. Frequenza"
},
{
"k": "G/A/G",
"v": "Ground-to-air- and air-to ground. Terra-aria-terra T/B/T-Terra/bordo/terra"
},
{
"k": "GND",
"v": "Ground. Suolo o terreno"
},
{
"k": "GP",
"v": "Glide path. Sentiero di discesa"
},
{
"k": "GRASS",
"v": "Grass landing aerea. Zona erbosa di atterraggio"
},
{
"k": "GS",
"v": "Ground speed. Velocit"
},
{
"k": "H 24",
"v": "Continuous day and night service. Servizio continuativo di giorno e di notte"
},
{
"k": "HBN",
"v": "Azard beacon. Faro di pericolo"
},
{
"k": "HDF",
"v": "Hight frequency direction-finding.station. Stazione radiogoniometrica ad alta freq."
},
{
"k": "HDG",
"v": "Heading Prua"
},
{
"k": "HF",
"v": "High frequency. Alta frequenza"
},
{
"k": "HGT",
"v": "Height or height above. Altezza"
},
{
"k": "HJ",
"v": "Sunrise to sunset. Dall'alba al tramonto"
},
{
"k": "HJ ",
"v": "From half an hour before sunrise Da mezz'ora prima del sorgere del sole to half an hour after sunset a mezz'ora dopo il tramonto"
},
{
"k": "HN",
"v": "From half an hour after sunset Da mezz'ora dopo il tramonto to half an hour before sunrise a mezz'ora prima del sorgere del sole"
},
{
"k": "HOSP",
"v": "Hospital aireraft. Aereoambulanza"
},
{
"k": "HP",
"v": "Holding Point Punto di attesa9"
},
{
"k": "HPA",
"v": "Hectopascal"
},
{
"k": "HR",
"v": "Hours of service. Orario di servizio"
},
{
"k": "HX",
"v": "No specific working hours. Orario di servizio non specificato"
},
{
"k": "IAF",
"v": "Initial approach fix. F"
},
{
"k": "IAL",
"v": "Instrument approach and landing chart. Carta di avvicinamento strument/atterrag."
},
{
"k": "IAS",
"v": "Indicated air speed. Velocit"
},
{
"k": "IBN",
"v": "Identification beacon. Faro di identificazione"
},
{
"k": "IF",
"v": "Intermediate approach fix. Fix di avvicinamento intermedio"
},
{
"k": "IFR",
"v": "Instrument Flight Rules Regole del volo strumentale"
},
{
"k": "ILS",
"v": "Instrument landing system. Sistema di atterraggio strumentale"
},
{
"k": "IMC",
"v": "Instrument Metereological Conditions. Condizioni metereologiche strumentali"
},
{
"k": "INCERFA",
"v": "Uncertainly fase. Fase di incertezza"
},
{
"k": "INFO",
"v": "Informations. Informazione o per conoscenza"
},
{
"k": "INOP",
"v": "Inoperative. Non operativo"
},
{
"k": "INS",
"v": "Inches. Pollici unit"
},
{
"k": "INS",
"v": "Inertial navigation system. Sistema di navigazione inerziale"
},
{
"k": "KHZ",
"v": "Kiloherts."
},
{
"k": "KMH",
"v": "Kilometres per hours. Chilometri per ora"
},
{
"k": "KT",
"v": "Knots. Nodi, velocit"
},
{
"k": "L",
"v": "Locator. Radiofaro locatore"
},
{
"k": "LAT",
"v": "Latitude. Latitudine"
},
{
"k": "MA",
"v": "Missed approch. Mancato avvicinamento"
},
{
"k": "MA",
"v": "Movement Area Area di movimento"
},
{
"k": "MSA",
"v": "Minimum safe altitude. Altitudine minima di sicurezza"
},
{
"k": "MSG",
"v": "Message. Messaggio"
},
{
"k": "MSI",
"v": "Mean sea level. Livello medio del mare"
},
{
"k": "MAINT",
"v": "Maintenance. Manutenzione"
},
{
"k": "MAP",
"v": "Aeronautical maps and chart. Carte e mappe aeronautiche"
},
{
"k": "MAPT",
"v": "Missed approach point time. Puntoorario di mancato avvicinamento"
},
{
"k": "MCA",
"v": "Minimum crossing altitude. Altitudine minima di attraversamento"
},
{
"k": "MCL",
"v": "Minimum crossing level. Livello minimo di attraversamento"
},
{
"k": "MDA",
"v": "Minimum descent altitude. Altitudine minima di discesa"
},
{
"k": "MDH",
"v": "Minimum descent height. Altezza minima di discesa"
},
{
"k": "METAR",
"v": "METeorological Air Report"
},
{
"k": "MEA",
"v": "Minimum enroute altitude. Altitudine minima di rotta"
},
{
"k": "MEL",
"v": "Minimum enroute level. Livello minimo di rotta"
},
{
"k": "MET",
"v": "Meteorogical or meteorology. Meteorologico o meteorologia"
},
{
"k": "MF",
"v": "Medium frequency. Frequenza media da 300 a 3000 Khz"
},
{
"k": "MLS",
"v": "Microwawe landing system. Sistema di atterraggio strum. a microonde"
},
{
"k": "MM",
"v": "Middle marker. Marker intermedio"
},
{
"k": "MOC",
"v": "Minimum obstacle clearance. Separazione minima dagli ostacoli"
},
{
"k": "MPH",
"v": "Statute miles per hour. Miglia statutaria per ora"
},
{
"k": "MPS",
"v": "Metres per seconds. Metri al secondo "
},
{
"k": "MRA",
"v": "Minimum reception altitude. Minima altitudine di ricezione radioass."
},
{
"k": "NDB",
"v": "Not directional beacon. Radiofaro adirezionale non direzionale"
},
{
"k": "NGT",
"v": "Night. Notte"
},
{
"k": "NM",
"v": "Nautical miles. Miglia nautiche"
},
{
"k": "NOF",
"v": "International Notam office. Ufficio Notam internazionale"
},
{
"k": "NOSIGN",
"v": "no significante change. Nessuna variazione significativa"
},
{
"k": "NOTAM",
"v": "A notice distributed by means of telecomunications Notizie riguardanti i volo, condizioni degli aeroporti..."
},
{
"k": "OCA",
"v": "Obstacle clearance altitude. Altitudine di separazione dagli ostacoli"
},
{
"k": "OCH",
"v": "Ostacle clearance height. Altezza di separazione dagli ostacoli"
},
{
"k": "OCL",
"v": "Obstacle clearance limit. Limite di separazione dagli ostacoli"
},
{
"k": "OM",
"v": "Outer marker. Marker esterno"
},
{
"k": "OPS",
"v": "Operations."
},
{
"k": "O/R",
"v": "On request. Operazioni a richiesta"
},
{
"k": "P",
"v": "Proibited area. Area Proibita"
},
{
"k": "PANS",
"v": "Procedure for air navigation service. Procedure per i servizi della navig. aerea"
},
{
"k": "PAPI",
"v": "Precision approach path indicator. Indicatore planata per avvicin. di precisione"
},
{
"k": "PERM",
"v": "Permanent."
},
{
"k": "POB",
"v": "Persons on board. Persone a bordo es: POB 2"
},
{
"k": "PSN",
"v": "Position."
},
{
"k": "PRKG",
"v": "Parking."
},
{
"k": "PROC",
"v": "Procedure."
},
{
"k": "QDM",
"v": "Magnetie approach route. Procedura Rotta magnetica di avvicinamento"
},
{
"k": "QDR",
"v": "Magnetic bearing. Rilevamento magnetico"
},
{
"k": "QFE",
"v": "Atmosferic pressure at aerodrome elevation. Pressione atmosferica all'altitudine dell'aeroporto"
},
{
"k": "QFU",
"v": "Magnetic orientation of runway. Orientamento magnetico della pista"
},
{
"k": "QNH",
"v": "Altinieter setting based on the atmosferic pressure at mean sea level. Regolaggio altimetrico basato sulla pressione al livello medio del mare"
},
{
"k": "QTE",
"v": "True bearing. Rilevamento vero"
},
{
"k": "RCC",
"v": "Rescue coordination centre. Centro di coordinamento e soccorso"
},
{
"k": "RCL",
"v": "Runway centre-line. Asse pista"
},
{
"k": "RDH",
"v": "Reference datum hight for ILS. Altezza del dato di riferimento per ILS"
},
{
"k": "RDI",
"v": "Radial. Radiale"
},
{
"k": "REF",
"v": "Reference to... Riferimento a..."
},
{
"k": "REQ",
"v": "Request."
},
{
"k": "RNAV",
"v": "Area navigation. Navigazione d'area"
},
{
"k": "RP",
"v": "Reporting Point Punto di riporto"
},
{
"k": "RPI",
"v": "Repetitive flight plan. Piano di volo ripetitivo"
},
{
"k": "RQS",
"v": "Request supplementary FPL rnessage. Messaggio richiesta di FPL supplementari"
},
{
"k": "RPLC",
"v": "Replace or replaced. Sostituire o sostituito"
},
{
"k": "RVR",
"v": "Runway visual range. Portata visuale di pista"
},
{
"k": "RWY",
"v": "Runway. Pista di volo"
},
{
"k": "SAR",
"v": "Search and rescue. Ricerca e soccorso"
},
{
"k": "SFC",
"v": "Surface. Superficie suolo"
},
{
"k": "SIGMET",
"v": "SIGnificant METeorological Information / Informazioni Meteorologica Significative"
},
{
"k": "SID",
"v": "Standard instrument departure. Rotta di partenza strumentale standard"
},
{
"k": "STAR",
"v": "Standard arrival route. Rotta di arrivo strumentale standard"
},
{
"k": "SMC",
"v": "Surface movement control. Controllo movimenti al suolo"
},
{
"k": "SWLL",
"v": "SIGNIFICANT WEATHER LOW LEVEL"
},
{
"k": "SMR",
"v": "Surface movement radar Radar. Sorveglianza movimenti al suolo"
},
{
"k": "SRA",
"v": "Surveillance radar approach. Avvicinamento condotto con il solo radar di sorveglianza"
},
{
"k": "SRE",
"v": "Surveillance radar element. Elemento radar di sorveglianza del sistema radar per avvicinamento di precisione"
},
{
"k": "SSR",
"v": "Secondary surveillance radar. Radar secondario di sorveglianza"
},
{
"k": "STA",
"v": "Straight -in- approach. Avvicinamento diretto"
},
{
"k": "STOL",
"v": "Short take-off and landing. Decollo ed atterraggio corto"
},
{
"k": "S/VFR",
"v": "Special VFR. VFR Speciale vedi VFR"
},
{
"k": "SVC",
"v": "Service message. Messaggio di servizio"
},
{
"k": "SWY",
"v": "Stop-way. Zona di arresto"
},
{
"k": "TA",
"v": "Transitional altitude. Altitudine di transizione"
},
{
"k": "TACAN",
"v": "UHF Tactical air navigation aid. Radioassistenze UHF per la navigazione tattica"
},
{
"k": "TAS",
"v": "True air speed. Velocit"
},
{
"k": "THR",
"v": "Threshold. Soglia pista"
},
{
"k": "TMA",
"v": "Terminal Area. Area terminale per la confluenza di una o pi"
},
{
"k": "UFN",
"v": "Until further notice. Fino a nuovo avviso"
},
{
"k": "UNL",
"v": "Unlimited. Illimitato"
},
{
"k": "VAL",
"v": "Visual approach landing chart. Carta di avvicinamento/atterraggio visuale"
},
{
"k": "VFR",
"v": "Visual Flight Rules. Regole de volo a vista"
},
{
"k": "VASIS",
"v": "Visual approach slope indicator system. Sistema luminoso dell'angolo di avvicinamento"
},
{
"k": "WIP",
"v": "Works in progress. Lavori in corso"
},
{
"k": "ZULU",
"v": "Orario internazionale secondo il meridiano di riferimento: Greenwich"
}
]
export const alphabeth = [
{
"k": "A",
"v": "alpha"
},
{
"k": "B",
"v": "bravo"
},
{
"k": "C",
"v": "charlie"
},
{
"k": "D",
"v": "delta"
},
{
"k": "E",
"v": "echo"
},
{
"k": "F",
"v": "foxtrot"
},
{
"k": "G",
"v": "golf"
},
{
"k": "H",
"v": "hotel"
},
{
"k": "I",
"v": "india"
},
{
"k": "J",
"v": "juliet"
},
{
"k": "K",
"v": "kilo"
},
{
"k": "L",
"v": "lima"
},
{
"k": "M",
"v": "mike"
},
{
"k": "N",
"v": "november"
},
{
"k": "O",
"v": "oscar"
},
{
"k": "P",
"v": "papa"
},
{
"k": "Q",
"v": "quebec"
},
{
"k": "R",
"v": "romeo"
},
{
"k": "S",
"v": "sierra"
},
{
"k": "T",
"v": "tango"
},
{
"k": "U",
"v": "uniform"
},
{
"k": "V",
"v": "victor"
},
{
"k": "W",
"v": "whiskey"
},
{
"k": "X",
"v": "x-ray"
},
{
"k": "Y",
"v": "yankee"
},
{
"k": "Z",
"v": "zulu"
}
]
export const numbers = [
{
"k": "1",
"v": "one"
},
{
"k": "2",
"v": "two"
},
{
"k": "3",
"v": "three"
},
{
"k": "4",
"v": "four-er"
},
{
"k": "5",
"v": "five"
},
{
"k": "6",
"v": "six"
},
{
"k": "7",
"v": "seven"
},
{
"k": "8",
"v": "eight"
},
{
"k": "9",
"v": "nin-er"
},
{
"k": "0",
"v": "zero"
}
]

11
vds-app/App/index.js

@ -8,6 +8,7 @@ import Exam from "./screens/Exam"
import Results from "./screens/Results"
import Recap from "./screens/Recap"
import Info from "./screens/Info"
import Dictionary from "./screens/Dictionary"
import { colors, texts} from "./components/Variables"
const MainStack = createStackNavigator({
@ -45,10 +46,12 @@ const MainStack = createStackNavigator({
screen: Info,
navigationOptions: ({ navigation }) => ({
header: null,
backgroundColor: colors.yellow,
headerStyle: {
backgroundColor: colors.yellow
}
})
},
Dictionary: {
screen: Dictionary,
navigationOptions: ({ navigation }) => ({
header: null,
})
},
Banner: {

238
vds-app/App/screens/Dictionary.js

@ -0,0 +1,238 @@
import React from "react"
import { View, ScrollView, StyleSheet, StatusBar, Text, SafeAreaView, Dimensions, Image, BackHandler, Linking} from "react-native"
import { AdMobBanner } from "expo-ads-admob"
import { Button, ButtonContainer } from "../components/Button"
import { colors, texts, credentials} from "../components/Variables"
import { abbreviations, alphabeth, numbers} from "../data/dictionary"
const screen = Dimensions.get("window")
const styles = StyleSheet.create({
container: {
backgroundColor: colors.dark_blue,
flex: 1
},
safearea: {
flex: 1,
marginTop: 30,
marginBottom: 30,
justifyContent: "space-between",
paddingHorizontal: 20
},
bannerContainer: {
flex: 1,
alignItems: "center",
justifyContent: "center"
},
banner: {
width: 320,
height: 60,
marginVertical: 10
},
box: {
width: screen.width-40,
paddingHorizontal: 20,
backgroundColor: colors.white,
borderRadius: 10,
overflow: "hidden"
},
scrollView: {
margin: 0,
height: screen.height-350
},
buttonContainer: {
marginHorizontal: 0,
marginBottom: 20
},
text: {
color: colors.black,
fontSize: 16,
textAlign: "left",
fontWeight: "400",
lineHeight: 20,
textShadowColor: 'rgba(0, 0, 0, 0.75)',
textShadowOffset: {width: -1, height: 1},
textShadowRadius: 10
},
title: {
paddingTop: 30,
color: colors.black,
fontSize: 18,
textTransform: "uppercase",
textAlign: "left",
fontWeight: "400",
lineHeight: 20,
textShadowColor: 'rgba(0, 0, 0, 0.75)',
textShadowOffset: {width: -1, height: 1},
textShadowRadius: 10
},
textBig: {
color: colors.white,
fontSize: 24,
textAlign: "center",
fontWeight: "400",
paddingBottom: 10,
textShadowColor: 'rgba(0, 0, 0, 0.75)',
textShadowOffset: {width: -1, height: 1},
textShadowRadius: 10
},
textSmall: {
lineHeight: 23,
marginTop: 15,
borderRadius: 5,
borderWidth: 0,
borderColor: colors.white_alpha,
fontSize: 16,
color: colors.white,
fontWeight: "400",
textAlign: "center",
paddingVertical: 20
},
textItems: {
fontSize: 16,
fontWeight: "400",
lineHeight: 23,
color: colors.black,
textAlign: "left",
paddingBottom: 10,
marginBottom: 10,
borderBottomColor: colors.black_alpha,
borderBottomWidth: 1
},
noBorder: {
borderBottomWidth: 0
},
item: {
width: "100%"
},
noPadding: {
paddingVertical: 0,
},
textLabel: {
paddingHorizontal: 20,
paddingVertical: 20
},
bold: {
lineHeight: 30,
fontSize: 26,
fontWeight: "600"
}
})
const B = (props) => <Text style={{fontWeight: 'bold'}}>{props.children}</Text>
class Dictionary extends React.Component {
state = {
title: texts.alphabethTitle,
items: alphabeth,//numbers
}
componentDidMount() {
BackHandler.addEventListener('hardwareBackPress', this.handleBackButton)
}
componentWillUnmount() {
BackHandler.removeEventListener('hardwareBackPress', this.handleBackButton)
}
handleBackButton = () => {
this.props.navigation.navigate("Splash")
return true
}
switchData = (section) => {
let newState = {}
switch(section) {
case 'abbreviations':
newState = {
title: texts.abbreviationsTitle,
items: abbreviations
}
break;
case 'alphabeth':
newState = {
title: texts.alphabethTitle,
items: alphabeth
}
break;
case 'numbers':
newState = {
title: texts.numbersTitle,
items: numbers
}
break;
}
this.setState( (state) => {
return newState
})
}
render() {
return (
<View style={styles.container} >
<SafeAreaView style={styles.safearea}>
<View style={styles.buttonContainer}>
<ButtonContainer isBoxed={true}>
<Button
noPadding={true}
text={texts.alphabethTitle}
color={this.state.title == texts.alphabethTitle ? colors.white_alpha : colors.black_alpha}
onPress={() => this.switchData('alphabeth')}
/>
<Button
noPadding={true}
text={texts.numbersTitle}
color={this.state.title == texts.numbersTitle ? colors.white_alpha : colors.black_alpha}
onPress={() => this.switchData('numbers')}
/>
<Button
noPadding={true}
noBorder={true}
text={texts.abbreviationsTitle}
color={this.state.title == texts.abbreviationsTitle ? colors.white_alpha : colors.black_alpha}
onPress={() => this.switchData('abbreviations')}
/>
</ButtonContainer>
</View>
<View style={styles.box}>
<View style={styles.scrollView}>
<ScrollView>
<View style={styles.textSmall}>
{this.state.items.map( (arg, index) => (
<Text style={[styles.textItems, index == this.state.items.length-1 ? styles.noBorder : {}]} key={index}>
<B>{arg.k}</B>: {arg.v}
</Text>
))}
</View>
<Text></Text>
</ScrollView>
</View>
</View>
<View style={styles.bannerContainer}>
<AdMobBanner
style={styles.banner}
bannerSize="largeBanner"
adUnitID={credentials.adMobUnitIDFooter}
onDidFailToReceiveAdWithError={this.bannerError} />
</View>
</SafeAreaView>
</View>
)
}
}
export default Dictionary

10
vds-app/App/screens/Info.js

@ -65,12 +65,12 @@ const styles = StyleSheet.create({
textSmall: {
lineHeight: 23,
marginTop: 15,
borderRadius: 5,
backgroundColor: colors.black_alpha,
borderRadius: 10,
backgroundColor: colors.white,
borderWidth: 0,
borderColor: colors.white_alpha,
fontSize: 16,
color: colors.white,
color: colors.black,
fontWeight: "400",
textAlign: "center",
paddingHorizontal: 20,
@ -80,7 +80,7 @@ const styles = StyleSheet.create({
fontSize: 16,
fontWeight: "400",
lineHeight: 23,
color: colors.white,
color: colors.black,
textAlign: "center",
paddingBottom: 10,
marginBottom: 10,
@ -142,9 +142,11 @@ class Info extends React.Component {
<SafeAreaView style={styles.safearea}>
<ScrollView>
<View style={styles.box}>
{/*
<Text style={styles.text}>
<Text style={[styles.textLabel, styles.bold]}>{`${pkg.expo.name}`}</Text>
</Text>
*/}
<Text style={styles.text}>
<Text style={styles.textLabel}>{`${texts.version}: ${pkg.expo.version}`}</Text>
</Text>

15
vds-app/App/screens/Splash.js

@ -139,10 +139,11 @@ class Splash extends React.Component {
<SafeAreaView style={styles.safearea}>
<View>
<ButtonContainer>
<ButtonContainer isBoxed={true}>
<Button
text={texts.section_quizzes}
isBig={false}
noPadding={true}
color={colors.green_light}
onPress={() =>
this.props.navigation.navigate("QuizIndex", {
@ -154,6 +155,7 @@ class Splash extends React.Component {
text={texts.exam}
subtitle={`(${texts.exam_simulation})`}
isBig={false}
noPadding={true}
color={colors.purple_light}
onPress={() =>
this.props.navigation.navigate("Exam", {
@ -162,15 +164,26 @@ class Splash extends React.Component {
color: colors.blue
})}
/>
<Button
text={texts.dictionaryTitle}
subtitle={`(${texts.dictionarySubtitle})`}
isBig={false}
noPadding={true}
color={colors.orange}
onPress={() => this.props.navigation.navigate("Dictionary", {})}
/>
<Button
text={texts.infoTitle}
isBig={false}
noPadding={true}
color={colors.white_alpha}
onPress={() => this.props.navigation.navigate("Info", {})}
/>
<Button
text={texts.exit}
isBig={false}
noPadding={true}
noBorder={true}
color={colors.black_alpha}
onPress={() => this.handleBackButton()}
/>

Loading…
Cancel
Save