471 lines
12 KiB
Plaintext
471 lines
12 KiB
Plaintext
Build1=Default,anywheresoftware.b4a.swarm
|
|
File1=drp.bal
|
|
File2=swarm.bal
|
|
FileGroup1=Default Group
|
|
FileGroup2=Default Group
|
|
Group=Default Group
|
|
Library1=core
|
|
Library2=phone
|
|
Library3=reflection
|
|
Library4=tts
|
|
Library5=json
|
|
Library6=okhttputils2
|
|
ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="28"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~'End of default text.~\n~
|
|
Module1=droplist
|
|
NumberOfFiles=2
|
|
NumberOfLibraries=6
|
|
NumberOfModules=1
|
|
Version=13
|
|
@EndOfDesignText@
|
|
#Region Module Attributes
|
|
#FullScreen: True
|
|
#IncludeTitle: False
|
|
#ApplicationLabel: Swarm
|
|
#VersionCode: 1
|
|
#VersionName: 1.0
|
|
#SupportedOrientations: unspecified
|
|
#CanInstallToExternalStorage: False
|
|
|
|
#End Region
|
|
|
|
'#AdditionalJar: jtds-1.3.1.jar
|
|
|
|
'Activity module
|
|
Sub Process_Globals
|
|
'These global variables will be declared once when the application starts.
|
|
'These variables can be accessed from all modules.
|
|
Dim VRStd As VoiceRecognition
|
|
Dim TTSStd As TTS
|
|
|
|
Dim VRImp As VoiceRecognition
|
|
Dim TTSImp As TTS
|
|
|
|
Private Const API_ENDPOINT As String = "https://example.com/api/processes"
|
|
Private Const EVENT_TYPE_STANDARD As String = "standard"
|
|
Private Const EVENT_TYPE_UNEXPECTED As String = "unexpected"
|
|
|
|
Private CurrentProcessId As String
|
|
Private ProcessStartTime As Long
|
|
Private ProcessStartedAt As String
|
|
Private Events As List
|
|
Private ProcessActive As Boolean
|
|
|
|
Private crono As Timer
|
|
crono.Initialize("CronoClock", 1000)
|
|
|
|
|
|
End Sub
|
|
|
|
|
|
Sub CronoClock_Tick
|
|
'Handle tick events
|
|
tempoTrascorso = tempoTrascorso +1
|
|
TimeElapsed.Text= "Secondi trascorsi " & tempoTrascorso & " sec"
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
|
|
Sub Globals
|
|
'These global variables will be redeclared each time the activity is created.
|
|
'These variables can only be accessed from this module.
|
|
|
|
Dim pnl1 As Panel
|
|
Dim dlist As droplist
|
|
Dim tempoTrascorso As Long
|
|
Private BtnRecImp As Button
|
|
Private BtnRecStd As Button
|
|
Private BtnSend As Button
|
|
Private InputImp As EditText
|
|
Private InputStd As EditText
|
|
Private LblEvnt As Label
|
|
Private StartStopTog As ToggleButton
|
|
Private TimeElapsed As Label
|
|
Private pressed As Long
|
|
Private IgnoreToggleEvent As Boolean
|
|
Private EventList As ListView
|
|
Private SelectedEventIndex As Int
|
|
Private RerecordEventIndex As Int
|
|
|
|
tempoTrascorso=0
|
|
SelectedEventIndex = -1
|
|
RerecordEventIndex = -1
|
|
|
|
End Sub
|
|
|
|
Sub Activity_Create(FirstTime As Boolean)
|
|
|
|
If FirstTime Then
|
|
VRStd.Initialize("VRStd")
|
|
TTSStd.Initialize("TTSStd")
|
|
|
|
VRImp.Initialize("VRImp")
|
|
TTSImp.Initialize("TTSImp")
|
|
Events.Initialize
|
|
|
|
End If
|
|
|
|
|
|
Activity.LoadLayout("swarm")
|
|
dlist.Initialize(pnl1, "Operatore:", "DropSelect")
|
|
|
|
dlist.dlItems.Add("Beppe")
|
|
dlist.dlItems.Add("George")
|
|
dlist.dlItems.Add("Cristina")
|
|
dlist.dlItems.Add("Erica")
|
|
dlist.dlItems.Add("Alfonso")
|
|
|
|
' If VR.IsSupported Then
|
|
' ToastMessageShow("Voice recognition is supported.", False)
|
|
' Else
|
|
' ToastMessageShow("Voice recognition is not supported.", True)
|
|
' End If
|
|
|
|
BtnRecImp.SetTextColorAnimated(0, Colors.Black)
|
|
BtnRecImp.Text="Rec imp"
|
|
|
|
BtnRecStd.SetTextColorAnimated(0, Colors.Black)
|
|
BtnRecStd.Text="Rec std"
|
|
|
|
BtnSend.SetTextColorAnimated(0, Colors.Black)
|
|
BtnSend.Text="Invia"
|
|
|
|
SetupEventList
|
|
|
|
End Sub
|
|
|
|
Sub Activity_Resume
|
|
|
|
End Sub
|
|
|
|
Sub Activity_Pause (UserClosed As Boolean)
|
|
|
|
End Sub
|
|
|
|
Sub DropSelect
|
|
Log("** You Selected " & dlist.selVal & ", at " & dlist.selPos & " **")
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Private Sub StartStopTog_CheckedChange(Checked As Boolean)
|
|
If IgnoreToggleEvent Then Return
|
|
|
|
Log("** You Selected: " & StartStopTog.Checked)
|
|
|
|
If StartStopTog.Checked Then
|
|
Log("** Start counting " & StartStopTog.Checked)
|
|
StartProcess
|
|
|
|
|
|
Else
|
|
Log("** Stop counting " & StartStopTog.Checked)
|
|
StopProcess(False)
|
|
End If
|
|
|
|
'Dim pressedTime As Long = DateTime.Now - pressed
|
|
'TimeElapsed.Text = pressedTime & "s"
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub BtnRecStd_Click
|
|
If ProcessActive = False Then
|
|
ToastMessageShow("Avvia prima il processo.", False)
|
|
Return
|
|
End If
|
|
VRStd.Prompt = "Fai il tuo sproloquio per un evento standard!"
|
|
VRStd.Listen 'calls the voice recognition external activity
|
|
End Sub
|
|
|
|
Private Sub BtnRecImp_Click
|
|
If ProcessActive = False Then
|
|
ToastMessageShow("Avvia prima il processo.", False)
|
|
Return
|
|
End If
|
|
VRImp.Prompt = "Descrivi l'evento imprevisto!"
|
|
VRImp.Listen 'calls the voice recognition external activity
|
|
End Sub
|
|
|
|
|
|
Sub VRStd_Result (Success As Boolean, Texts As List)
|
|
If Success = False Then
|
|
RerecordEventIndex = -1
|
|
Return
|
|
End If
|
|
If Texts.IsInitialized = False Then
|
|
RerecordEventIndex = -1
|
|
Return
|
|
End If
|
|
If Texts.Size = 0 Then
|
|
RerecordEventIndex = -1
|
|
Return
|
|
End If
|
|
|
|
Dim description As String = Texts.Get(0)
|
|
Log("** You said: " & description)
|
|
InputStd.Text=description
|
|
TTSStd.Speak(description, True)
|
|
SaveVoiceDescription(EVENT_TYPE_STANDARD, description)
|
|
End Sub
|
|
|
|
|
|
Sub VRImp_Result (Success As Boolean, Texts As List)
|
|
If Success = False Then
|
|
RerecordEventIndex = -1
|
|
Return
|
|
End If
|
|
If Texts.IsInitialized = False Then
|
|
RerecordEventIndex = -1
|
|
Return
|
|
End If
|
|
If Texts.Size = 0 Then
|
|
RerecordEventIndex = -1
|
|
Return
|
|
End If
|
|
|
|
Dim description As String = Texts.Get(0)
|
|
Log("** You said: " & description)
|
|
InputImp.Text=description
|
|
TTSImp.Speak(description, True)
|
|
SaveVoiceDescription(EVENT_TYPE_UNEXPECTED, description)
|
|
End Sub
|
|
|
|
|
|
|
|
Private Sub BtnSend_Click
|
|
Log("** You clicked: " & " INVIATO" )
|
|
SendProcess
|
|
End Sub
|
|
|
|
Private Sub StartProcess
|
|
If dlist.selPos < 0 Then
|
|
ToastMessageShow("Seleziona prima l'operatore.", True)
|
|
IgnoreToggleEvent = True
|
|
StartStopTog.Checked = False
|
|
IgnoreToggleEvent = False
|
|
Return
|
|
End If
|
|
|
|
CurrentProcessId = "SWARM-" & DateTime.Now
|
|
ProcessStartTime = DateTime.Now
|
|
ProcessStartedAt = FormatApiDate(ProcessStartTime)
|
|
tempoTrascorso = 0
|
|
Events.Initialize
|
|
SelectedEventIndex = -1
|
|
RerecordEventIndex = -1
|
|
ProcessActive = True
|
|
crono.Enabled = True
|
|
TimeElapsed.Text= "Secondi trascorsi 0 sec"
|
|
LblEvnt.Text = "Processo avviato"
|
|
RefreshEventList
|
|
End Sub
|
|
|
|
Private Sub StopProcess(ClearData As Boolean)
|
|
crono.Enabled = False
|
|
ProcessActive = False
|
|
|
|
If ClearData Then
|
|
CurrentProcessId = ""
|
|
ProcessStartTime = 0
|
|
ProcessStartedAt = ""
|
|
tempoTrascorso = 0
|
|
Events.Initialize
|
|
SelectedEventIndex = -1
|
|
RerecordEventIndex = -1
|
|
TimeElapsed.Text= " 0"
|
|
LblEvnt.Text = ""
|
|
RefreshEventList
|
|
Else
|
|
LblEvnt.Text = "Processo fermato - eventi: " & Events.Size
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub SaveVoiceDescription(EventType As String, Description As String)
|
|
If RerecordEventIndex >= 0 Then
|
|
UpdateEventDescription(RerecordEventIndex, Description)
|
|
RerecordEventIndex = -1
|
|
Else
|
|
RegisterEvent(EventType, Description)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub RegisterEvent(EventType As String, Description As String)
|
|
If Events.IsInitialized = False Then Events.Initialize
|
|
|
|
Dim evt As Map
|
|
evt.Initialize
|
|
evt.Put("sequence", Events.Size + 1)
|
|
evt.Put("type", EventType)
|
|
evt.Put("description", Description)
|
|
evt.Put("elapsedSeconds", tempoTrascorso)
|
|
evt.Put("timestamp", FormatApiDate(DateTime.Now))
|
|
|
|
Events.Add(evt)
|
|
SelectedEventIndex = -1
|
|
LblEvnt.Text = "Eventi registrati: " & Events.Size
|
|
RefreshEventList
|
|
End Sub
|
|
|
|
Private Sub UpdateEventDescription(Index As Int, Description As String)
|
|
If Events.IsInitialized = False Then Return
|
|
If Index < 0 Or Index >= Events.Size Then Return
|
|
|
|
Dim evt As Map = Events.Get(Index)
|
|
evt.Put("description", Description)
|
|
evt.Put("updatedAt", FormatApiDate(DateTime.Now))
|
|
Events.Set(Index, evt)
|
|
|
|
SelectedEventIndex = -1
|
|
LblEvnt.Text = "Record aggiornato: " & (Index + 1)
|
|
RefreshEventList
|
|
End Sub
|
|
|
|
Private Sub SendProcess
|
|
If CurrentProcessId = "" Then
|
|
ToastMessageShow("Nessun processo da inviare.", True)
|
|
Return
|
|
End If
|
|
|
|
If Events.IsInitialized = False Then
|
|
ToastMessageShow("Registra almeno un evento prima di inviare.", True)
|
|
Return
|
|
End If
|
|
|
|
If Events.Size = 0 Then
|
|
ToastMessageShow("Registra almeno un evento prima di inviare.", True)
|
|
Return
|
|
End If
|
|
|
|
crono.Enabled = False
|
|
ProcessActive = False
|
|
|
|
Dim payload As Map
|
|
payload.Initialize
|
|
payload.Put("processId", CurrentProcessId)
|
|
payload.Put("operator", dlist.selVal)
|
|
payload.Put("startedAt", ProcessStartedAt)
|
|
payload.Put("endedAt", FormatApiDate(DateTime.Now))
|
|
payload.Put("durationSeconds", tempoTrascorso)
|
|
payload.Put("events", Events)
|
|
|
|
Dim json As JSONGenerator
|
|
json.Initialize(payload)
|
|
|
|
Dim job As HttpJob
|
|
job.Initialize("SendProcess", Me)
|
|
job.PostString(API_ENDPOINT, json.ToString)
|
|
job.GetRequest.SetContentType("application/json")
|
|
LblEvnt.Text = "Invio in corso..."
|
|
End Sub
|
|
|
|
Sub JobDone(Job As HttpJob)
|
|
If Job.JobName = "SendProcess" Then
|
|
If Job.Success Then
|
|
Log("** API response: " & Job.GetString)
|
|
ToastMessageShow("Processo inviato.", False)
|
|
IgnoreToggleEvent = True
|
|
StartStopTog.Checked = False
|
|
IgnoreToggleEvent = False
|
|
StopProcess(True)
|
|
Else
|
|
Log("** API error: " & Job.ErrorMessage)
|
|
ToastMessageShow("Errore invio: " & Job.ErrorMessage, True)
|
|
LblEvnt.Text = "Invio non riuscito - eventi: " & Events.Size
|
|
End If
|
|
End If
|
|
Job.Release
|
|
End Sub
|
|
|
|
Private Sub FormatApiDate(Ticks As Long) As String
|
|
Return DateTime.GetYear(Ticks) & "-" & TwoDigits(DateTime.GetMonth(Ticks)) & "-" & TwoDigits(DateTime.GetDayOfMonth(Ticks)) & "T" & TwoDigits(DateTime.GetHour(Ticks)) & ":" & TwoDigits(DateTime.GetMinute(Ticks)) & ":" & TwoDigits(DateTime.GetSecond(Ticks))
|
|
End Sub
|
|
|
|
Private Sub TwoDigits(Value As Int) As String
|
|
If Value < 10 Then Return "0" & Value
|
|
Return "" & Value
|
|
End Sub
|
|
|
|
Private Sub SetupEventList
|
|
EventList.Initialize("EventList")
|
|
Activity.AddView(EventList, 8dip, Activity.Height - 170dip, Activity.Width - 16dip, 160dip)
|
|
EventList.SingleLineLayout.Label.TextSize = 14
|
|
EventList.SingleLineLayout.Label.TextColor = Colors.Black
|
|
EventList.SingleLineLayout.ItemHeight = 48dip
|
|
RefreshEventList
|
|
End Sub
|
|
|
|
Private Sub RefreshEventList
|
|
If EventList.IsInitialized = False Then Return
|
|
EventList.Clear
|
|
If Events.IsInitialized = False Then Return
|
|
|
|
For i = 0 To Events.Size - 1
|
|
Dim evt As Map = Events.Get(i)
|
|
Dim description As String = evt.Get("description")
|
|
If description.Length > 45 Then description = description.SubString2(0, 45) & "..."
|
|
EventList.AddSingleLine((i + 1) & ". [" & evt.Get("elapsedSeconds") & "s] " & evt.Get("type") & ": " & description)
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub EventList_ItemClick (Position As Int, Value As Object)
|
|
If Events.IsInitialized = False Then Return
|
|
If Position < 0 Or Position >= Events.Size Then Return
|
|
|
|
SelectedEventIndex = Position
|
|
RerecordEventIndex = Position
|
|
|
|
Dim evt As Map = Events.Get(Position)
|
|
Dim eventType As String = evt.Get("type")
|
|
LblEvnt.Text = "Riregistra record " & (Position + 1)
|
|
|
|
If eventType = EVENT_TYPE_UNEXPECTED Then
|
|
VRImp.Prompt = "Riregistra la descrizione dell'evento imprevisto."
|
|
VRImp.Listen
|
|
Else
|
|
VRStd.Prompt = "Riregistra la descrizione dell'evento standard."
|
|
VRStd.Listen
|
|
End If
|
|
End Sub
|
|
|
|
Sub GetAllTexts (Act As Activity)
|
|
Dim lbl As Label
|
|
Dim txt As EditText
|
|
|
|
For i = 0 To Act.NumberOfViews - 1
|
|
|
|
|
|
If Act.GetView(i) Is Label Then
|
|
lbl = Act.GetView(i)
|
|
Log(lbl.Text)
|
|
|
|
End If
|
|
' If Activity.GetView(i) Is EditText Then
|
|
' txt= Activity.GetView(i)
|
|
' Log(lbl.Text)
|
|
' End If
|
|
If Act.GetView(i) Is Panel Then
|
|
Dim pan As Panel
|
|
pan = Act.GetView(i)
|
|
'lbl = Act.GetView(i)
|
|
'GetAllTexts(pan)
|
|
For j = 0 To pan.NumberOfViews - 1
|
|
Dim lbl As Label
|
|
Dim txt As EditText
|
|
|
|
If pan.GetView(j) Is Label Then
|
|
lbl = pan.GetView(j)
|
|
Log(lbl.Text)
|
|
|
|
End If
|
|
|
|
Next
|
|
|
|
End If
|
|
|
|
Next
|
|
End Sub
|