![]() |
Developer Manual![]() |
GBAM files handling (TODO)
All app-composer ginstr app operations should be executed in one "appComposerBuilds{ssoUserId}" folder dedicated to user.
SVN that contains ginstr apps will have a "ginstr app templates" directory which allows user via app-composer dropdown to export ginstr app for creating his own ginstr app based on the downloaded template.
There are three ways to create/edit/save ginstr apps:
- 1. Direct modifications to SVN generic apps (this action should only be allowed to ginstr staff):
- App is pulled from SVN by app-composer and is stored to "appComposerBuilds" folder and, after modifications, updated back to original SVN app and from there is pushed to two ginstr servers for download by ginstr clients
- 2. Modifications of SVN generic apps:
- App is pulled from SVN by app-composer stored to "appComposerBuilds", and from there is pushed to two ginstr servers once user presses "publish"
- 3. Newly made ginstr apps:
- Blank apps with minimal structure ready for creation. Once user presses "publish", it is pushed to server for download by ginstr clients
When ginstr app is pushed to servers then the app files are packaged to zip file with zip name = appId.zip
GBAM id' generation rules
ginstr app structure (TODO, MOVE FROM HERE)
ginstr applications are packaged into zip files with name of the zip representing unique application "id" in ginstr cloud.
Immediate structure within zip file :
layout/ ├─ activity.xml └─ start.xml values/ ├─ strings.xml └─ styles.xml drawable-hdpi/ └─ app_icon control/ └─ widget_en_login.xml database/ └─ queries.xml settings/ ├─ changelog.xml ├─ common.xml └─ graphic.xml
The above structure is the minimum requirement for a ginstr app to function.
In the following sections basic information about each of the required components will be explained.
layout
Folder is required.
This folder holds all ginstr app layouts which get displayed as screens, one layout XML in running application is shown as one screen.
Names of XML files in layout folder are not relevant.
Two files are necessary for application to run:
- activity.xml
- XML layout which serves as container for every screen XML file
- start.xml
- XML layout which represents first screen ginstr launcher will load on start of application
values
Folder is required. Folder that holds all ginstr app string translations.
- strings.xml
- represents the default "DE" language.
drawable-hdpi
Folder is required.
Represents the "default" folder into which to store all graphics.
Graphics to be pulled from SVN.
There is one required file in graphics when the app is created.
- app_icon.png
- required to generate shortcut icon for the app
control
Folder is required.
Folder holds all custom internal layouts of widgets.
If widget is not a standard looking widget, internal layout is necessary.
One required file:
- widget_en_login.xml
- represents custom layout for login widget, since each app has login screen this is obligatory.
database
Folder is required.
Folder holds definitions relevant for data structures, variables.
One required file:
- queries.xml
- holds queries for database
settings
Folder is required.
Folder holds extra information about the application and some resources which are not changeable.
3 required files:
- changelog.xml
- log of changes that were made to the application
- common.xml
- information about the ginstr app
- graphic.xml
- information about the graphics used in ginstr app
Graphics handling
All graphics for ginstr apps come from ginstr SVN. gBAM is handling graphical resources via SVN. For more information read Graphics handling gBAM
Widgets
Widgets represent a visual control which can be added to ginstr app screens from ginstr app-composer widget toolbox.
Widgets are organised in categories.
gBAM widget categories
This table describes the purpose of all 'widget categories' used in gBAM to present the widgets to the ginstr app designer.
category name | EN | DE | description |
---|---|---|---|
advanced | advanced | Komplexe Widgets | All widgets that provide more complex functionality. Most prominent example is the questionnaire widget. |
all | all | Alle | All available widgets are assigned to this category |
buttons | buttons | Schaltflächen | All widgets that show a button on the app screen. This can be a 9-patch button or a graphical icon |
contact | contact | Kontaktdaten | All widgets that handle contact details of persons, companies etc. |
database | database | Datenbank | All widgets that can execute some database operation like read from database, write to database, search in database |
date & time | date & time | Datum & Uhrzeit | All widgets that have to do with date and/or time |
dropdown | dropdown | Dropdown | All widgets that show a dropdown menu in the app |
headings and delimiters | headings and delimiters | Überschriften und Trennelemente | All widgets that allow to add headings or delimiters to an app |
hidden | hidden | Versteckt | All hidden widgets; hidden widgets perform some action but are not visible in the app |
identification | identification | Identifikation | All widgets that allow to identify something or someone; typically identification widgets identify assets, people or locations |
input fields | input fields | Eingabefelder | All widgets that allow to enter textual data or numbers; this includes text, numbers, media data, dropdown menus and all other widgets that allow entering data |
location | location | Ort | All widget that have to do with a geographical location |
media | audio, photo, video | Audio, Foto, Video | All widgets that have to do with photos, videos, audio; signature widgets and document widgets do NOT belong to this widget group |
numbers | numbers | Zahlen | All widgets that have to do with numbers; dates and times are NO numbers |
read-only fields | read-only fields | Nur Anzeige | All widgets that allow to show text or numbers but which do NOT allow to enter/edit data |
selection | selection | Auswahl | All widgets that allow to select a value from a predefined list of values; all 'dropdown' widgets must also be listed here ??? |
text | text | Text | All widgets that have to do with text. Widgets that allow to enter numbers only must NOT be assigned to this widget group |
gBAM widgets table
The following widgets are currently implemented into the ginstr app-composer and fully supported by the ginstr launcher:
id | definition | gBAM UI name (en) | gBAM UI name (de) | gBAM UI name (es) | gBAM UI name (fr) | is active on gBAM | cat: all | cat: buttons | cat: contact | cat: database | cat: date & time | cat: dropdown | cat: headings and delimiters | cat: hidden | cat: identification | cat: input fields | cat: location | cat: media | cat: numbers | cat: read-only fields | cat: selection | cat: text | cat: advanced |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
screenScroll | Screen scroll | [x] | [x] | ||||||||||||||||||||
screenSave | Screen save | [x] | [x] | ||||||||||||||||||||
containerHorizontalTwo | Container horizontal two | [x] | |||||||||||||||||||||
containerHorizontalThree | Container horizontal three | [x] | |||||||||||||||||||||
containerHorizontalFour | Container horizontal four | [x] | |||||||||||||||||||||
containerHorizontalFive | Container horizontal five | [x] | |||||||||||||||||||||
buttonSave | Button save | save | Speichern | [x] | [x] | [x] | [x] | ||||||||||||||||
buttonQuery | Button query | query | Abfrage | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
buttonCleanWidgets | Button clean widgets | clear | Leeren | [x] | [x] | [x] | |||||||||||||||||
menuBarLogout | Menu bar logout | screen title settings logout | Bildschirmkopf: Einstellungen und Abmelden | [x] | [x] | [x] | |||||||||||||||||
menuBarSettings | Menu bar settings | screen title settings | Bildschirmkopf: Einstellungen | [x] | [x] | [x] | |||||||||||||||||
dateReadOnly | Date read only | date (read-only) | Datum (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
dateEditable | Date editable | date | Datum | [x] | [x] | [x] | [x] | ||||||||||||||||
dateBirthDay | Birthday | birthday | Geburtstag | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
timeEditable | Time editable | time | Uhrzeit | [x] | [x] | [x] | |||||||||||||||||
timeReadOnly | Time read only | time (read-only) | Uhrzeit (nur Anzeige) | [x] | [x] | [x] | |||||||||||||||||
dateTimeEditable | Date time editable | date & time | Datum & Uhrzeit | [x] | [x] | [x] | |||||||||||||||||
dateTimeReadOnly | Date time read-only | date & time (read-only) | Datum & Uhrzeit (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
textEditable / textEditableHorizontal | Text editable / horizontal | text single line | Text einzeilig | [x] | [x] | [x] | [x] | ||||||||||||||||
textReadOnlyMultiline | Text read only multiline | text multiline (read-only) | Text mehrzeilig (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
textReadOnly / textReadOnlyHorizontal | Text read only / horizontal | text single line (read-only) | Text einzeilig (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
textPhone | Phone | phone no. | Telefon-Nr. | [x] | [x] | [x] | [x] | ||||||||||||||||
textEmail | [x] | [x] | [x] | [x] | [x] | ||||||||||||||||||
nfcTextEditable | Nfc text editable | NFC | NFC | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
nfcImageQuery | Nfc image query | NFC (with image) | NFC (mit Grafik) | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
nfcTextReadOnlyQuery | Nfc text read only query | NFC (read-only) | NFC (nur Anzeige) | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
qrTextEditableQuery / qrTextEditableQueryHorizontal | QR text editable query / horizontal | QR code | QR-Code | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
qrTextEditableQuery / qrTextEditableQueryHorizontal | Barcode editable / horizontal | barcode | Barcode | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
qrTextReadOnlyQuery / qrTextReadOnlyQueryHorizontal | QR read only text query / horizontal | QR code (read-only) | QR-Code (nur Anzeige) | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
qrTextReadOnlyQuery / qrTextReadOnlyQueryHorizontal | Barcode read only text query / horizontal | barcode (read-only) | barcode (nur Anzeige) | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
numberDefault | Number default | number | Zahl | [x] | [x] | [x] | |||||||||||||||||
numberInteger / numberIntegerHorizontal | Integer / horizontal | integer number | Ganzzahl | [x] | [x] | [x] | [x] | ||||||||||||||||
numberDecimal / numberDecimalHorizontal | Decimal / horizontal | decimal number | Dezimalzahl | [x] | [x] | [x] | [x] | ||||||||||||||||
numberDefaultReadOnly / numberDefaultReadOnlyHorizontal | Number default read only / horizontal | number (read-only) | Zahl (nur Anzeige) | [x] | [x] | [x] | |||||||||||||||||
numberIntegerReadOnly / numberIntegerReadOnlyHorizontal | Integer read only / horizontal | integer number (read-only) | Ganzzahl (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
numberDecimalReadOnly / numberDecimalReadOnlyHorizontal | Decimal read only / horizontal | decimal number (read-only) | Dezimalzahl (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
numberPercentage | Percentage | percentage | Prozentwert | [x] | [x] | [x] | |||||||||||||||||
numberCurrency | Currency | currency | Betrag | [x] | [x] | [x] | |||||||||||||||||
numberCounter | Counter | counter | Zähler | [x] | [x] | [x] | |||||||||||||||||
numberCalculationReadOnly | Calculation | calculated value | Berechneter Wert | [x] | [x] | [x] | [x] | ||||||||||||||||
locationGPS | GPS coordinates | GPS coordinate | GPS Koordinate | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
locationAddress | GPS address | GPS address | GPS Adresse | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
locationAddressReadOnly | GPS address read only | GPS address (read-only) | GPS Adresse (nur Anzeige) | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
mediaAudio | Audio | audio | Sprachnachricht | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
mediaPhoto | Photo | photo | Foto | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
mediaPhotoReadOnly | Photo read only | photo (read-only) | Foto (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
mediaVideo | Video | video | Video | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
mediaDocument | Document | document | Dkolument | [x] | [x] | [x] | |||||||||||||||||
mediaSignature | Signature | signature | Unterschrift | [x] | [x] | [x] | [x] | ||||||||||||||||
textPhone | Fax | fax | Fax | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
auditTimestamp | Timestamp | date & time (hidden) | Datum & Uhrzeit (unsichtbar) | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
auditSerial | Phone serial | phone serial no. (hidden) | Seriennummer mobiles Gerät (unsichtbar) | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
actionLoadRecordColumnValue | Load record column value | load value from table (hidden) | Wert aus Tabelle laden (unsichtbar) | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
actionLoadNumberOfRecordsTable | Load number of records table | load number of records (hidden) | Anzahl Datensätze ermitteln (unsichtbar) | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
actionIncrementNumberValue | Increment number widget value | increment number (hidden) | Zahl erhöhen (unsichtbar) | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
actionVibrate | Vibrate | vibrate | Vibrieren | [x] | [x] | ||||||||||||||||||
actionBeep | Beep | beep | Tonsignal | [x] | [x] | ||||||||||||||||||
actionUser | Ginstr username | ginstr username (hidden) | ginstr Benutzername (unsichtbar) | [x] | [x] | [x] | [x] | ||||||||||||||||
auditGPS | GPS hidden | GPS (hidden) | GPS (unsichtbar) | [x] | [x] | [x] | [x] | [x] | |||||||||||||||
auditAddress | GPS address hidden | GPS address (hidden) | GPS Adresse (unsichtbar) | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
dropdownLocalText | Dropdown local text | text dropdown | Text Auswahl | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
dropdownLocalNumber | Dropdown local number | decimal number dropdown | Dezimalzahl Dropdown | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
dropdownLocalMultiselectText | Dropdown local multiselect text | text multi-select | Text Mehrfachauswahl | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
dropdownDatabaseMultiselectText | Dropdown database multiselect text | text dropdown multi-select from database | Text Mehrfachauswahl aus Datenbank | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
dropdownDatabaseText | Dropdown database text | text dropdown from database | Text Auswahl aus Datenbank | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
dropdownDatabaseNumber | Dropdown database number | number dropdown from database | Zahl Auswahl aus Datenbank | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
dropdownDependent | Dependent dropdowns | multi-level text dropdown: level-1 | Abhängige Textauswahl: Ebene-1 | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
dropdownAutoCompleteText | Dropdown autocomplete text | text dropdown autocomplete | Text Dropdown auto-vervollständigt | [x] | [x] | [x] | [x] | [x] | [x] | ||||||||||||||
signature | Signature | signature | Unterschrift | [x] | [x] | [x] | |||||||||||||||||
checkbox | checkbox | checkbox | Checkbox | [x] | [x] | [x] | [x] | ||||||||||||||||
checkboxReadOnly | checkbox read only | checkbox (read-only) | Checkbox (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
appearanceHorizontalDivider | Horizontal divider | horizontal line | Horizontale Linie | [x] | [x] | [x] | |||||||||||||||||
questionnaire | Questionnaire | questionnaire | Fragebogen | [x] | [x] | [x] | [x] | ||||||||||||||||
masterDataDropdownSave | Master data dropdown save | save master data | Stammdaten speichern | [x] | [x] | [x] | [x] | [x] | [x] | [x] | |||||||||||||
headingOne | Heading one | screen title level-1 | Bildschirmkopf Ebene-1 | [x] | [x] | [x] | |||||||||||||||||
headingTwo | Heading two | screen title level-2 | Bildschirm Ebene-2 | [x] | [x] | [x] | |||||||||||||||||
note | Note | note (read-only) | Freitext (nur Anzeige) | [x] | [x] | [x] | [x] | ||||||||||||||||
radioGroup | Radio Group | radio group (2 options) | Mehrfachauswahl (2 Optionen) | [x] | [x] | [x] | [x] | ||||||||||||||||
radioGroup | 3 options radio group | radio group (3 options) | Mehrfachauswahl (3 Optionen) | [x] | [x] | [x] | [x] | ||||||||||||||||
radioGroup | Yes/No radio group | yes / no | Ja / Nein | [x] | [x] | [x] | [x] | ||||||||||||||||
radioGroup | Male/Female radio group | male / female | Männlich / Weiblich | [x] | [x] | [x] | [x] | ||||||||||||||||
urlReadOnly | Url | URL (read-only) | URL (nur Anzeige) | [x] | [x] | [x] |