Build1=Default,b4a.rocklogster File1=mapfrag.bal File2=marker1.png File3=marker2.png File4=overlay (1).png File5=overlay.png File6=overlaywhite.png File7=Rockloggervisual.bal FileGroup1=Default Group FileGroup2=Default Group FileGroup3=Default Group FileGroup4=Default Group FileGroup5=Default Group FileGroup6=Default Group FileGroup7=Default Group Group=Default Group Library1=core Library2=gps Library3=runtimepermissions Library4=randomaccessfile Library5=googlemaps Library6=googlemapsextras 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~~\n~)~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.DarkTheme)~\n~~\n~AddApplicationText(~\n~~\n~)~\n~~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~~\n~~\n~'End of default text.~\n~'broken icon manifest~\n~SetApplicationAttribute(android:icon, "@mipmap/ic_launcher")~\n~CreateResource(mipmap-anydpi-v26, ic_launcher.xml,~\n~~\n~ ~\n~ ~\n~~\n~)~\n~'CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~~\n~ Module1=Mapmod Module2=Starter NumberOfFiles=7 NumberOfLibraries=6 NumberOfModules=2 Version=9.9 @EndOfDesignText@ #Region Module Attributes #FullScreen: False #IncludeTitle: True #ApplicationLabel: RockLogster #VersionCode: 1 #VersionName: #SupportedOrientations: unspecified #End Region #BridgeLogger: true Sub Process_Globals Public updateclick As Boolean Public RockList As List Public WeedList As List Public PointList As List Dim headerlist As List Public locationstringlist As List Public headerposition As Map End Sub 'Correct the log syntax 'add menu item to clear log 'add comment to last log 'highlight last log 'more buttons Sub Globals Dim locationstrings() As String Dim headerstringget As Matcher Type LoggedEntry (Date As String, Lat As Double, Lot As Double, obstacle As String, comment As String) Private lblLon As LoggedEntry Public lblpnlrock As Label Dim lblSpeed As Label Dim lblSatellites As Label Private btnRock As Button Private btnWeed As Button Private editxt As EditText Private lblSatIndicator As Label Private STime As Double Private SLong As String Private SLat As String Private BtnDownTime As Double Private BtnUpTime As Double Public FLong As String Public FLat As String Public FTime As Double Public FileStringBuilder As StringBuilder Public EstimatorStringBuilder As StringBuilder Public FileString As String Private FileList As List Public DelayedSat As Boolean Public lbl2secwarn As Label Public EstimatorString As String Private pnlrock As Panel Private lblpnlpoint As Label Private lblpnlweed As Label Private rp As RuntimePermissions Dim cust2 As LoggedEntry Dim raf2 As B4XSerializator Dim cust2list As List Private printbut As Button Private savebut As Button Private ButDownTime As Long Private ButUpTime As Long Private LocDown As Location Private LocUp As Location Public ELong As Double Public ELat As Double Public paneldowncomplete As Boolean Private butviewmap As Button Private lblpnlcust As Label End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("Rockloggervisual") Activity.AddMenuItem("Clear Log", "Clearlog") FileStringBuilder.Initialize EstimatorStringBuilder.Initialize FileList.Initialize RockList.Initialize WeedList.Initialize PointList.Initialize 'cust2.Initialize 'cust2list.Initialize rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE) If File.Exists(rp.GetSafeDirdefaultExternal(""), "Editxt.txt") Then editxt.text = File.Readstring(rp.GetSafeDirDefaultExternal(""), "editxt.txt") ' End If ' If File.Exists(rp.GetSafeDirdefaultExternal(""), "Weedlist.txt") Then ' WeedList = File.ReadList(rp.GetSafeDirDefaultExternal(""), "Weedlist.txt") ' End If ' If File.Exists(rp.GetSafeDirdefaultExternal(""), "Pointlist.txt") Then ' PointList = File.ReadList(rp.GetSafeDirDefaultExternal(""), "Pointlist.txt") End If convert_texttolists End Sub Sub Print_rocks Private sb As StringBuilder sb.Initialize sb.append(DateTime.Date(DateTime.Now))'.Append(CRLF) If headerlist.Size >0 Then ' If updateclick = False Then For i = 0 To headerlist.Size - 1 sb.Append(CRLF).Append(headerlist.get(i))'.Append(CRLF) sb.Append(CRLF).Append(locationstringlist.get(i+1))'.Append(CRLF) 'Log(sb.ToString) Next ' Else ' For i = 0 To headerlist.Size - 1 ' sb.Append(headerlist.get(i)) ' sb.Append(locationstringlist.get(i+1))'.Append(CRLF) ' 'Log(sb.ToString) ' Log("trueb") ' Next ' End If End If updateclick = False 'flag editxt.Text = (sb.ToString) End Sub Sub convert_texttolists headerposition.Initialize headerlist.Initialize headerstringget = Regex.matcher2("^\D+$",Regex.MULTILINE, editxt.text)'use this to break loaded textedit file into strings or when textedit text is changed Do While headerstringget.Find = True headerlist.Add(headerstringget.Match) headerposition.Put(headerstringget.Match,headerlist.Size) Log($"headerstringsize${headerlist.size}"$) Loop For i = 0 To headerlist.Size-1 Log(headerlist.Get(i)) Next locationstringlist.Initialize locationstrings = Regex.Split2("\n^\D+$\n",Regex.MULTILINE, editxt.text)'/n to split around the newline, and not include it in the string For i=0 To locationstrings.Length - 1 locationstringlist.Add(locationstrings(i)) Next Log($"Splitted Size: ${locationstrings.Length} "$) ' For i= 0 To teststring.Length-1 ' Log($"Val #${i}=${teststring(i)}"$) ' Next ' For Each k As String In headerposition.Keys ' Log($"k${k}"$) ' Log($"Positionk${headerposition.Get(k)}"$) ' Next ' Private sb As StringBuilder ' sb.Initialize ' sb.append(DateTime.Date(DateTime.Now)).Append(CRLF) ' For i = 0 To headerlist.Size - 1 ' sb.Append(headerlist.get(i)).Append(CRLF) ' sb.Append(locationstrings(i+1)).Append(CRLF) ' Next 'Log(sb.ToString) Print_rocks End Sub Sub Clearlog_Click 'cust2list.Clear locationstringlist.Clear headerlist.Clear headerposition.clear FileList.Clear FileString = "" editxt.Text = "" EstimatorString = "" FileStringBuilder.Initialize RockList.Clear WeedList.Clear PointList.Clear Log ("Clear") convert_texttolists End Sub Sub Activity_Resume If Starter.GPS1.GPSEnabled = False Then ToastMessageShow("Please enable the GPS device.", True) StartActivity(Starter.GPS1.LocationSettingsIntent) 'Will open the relevant settings screen. Else Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) Wait For Activity_PermissionResult (Permission As String, Result As Boolean) If Result Then CallSubDelayed(Starter, "StartGPS") End If End Sub Sub Activity_Pause (UserClosed As Boolean) File.WriteList(rp.GetSafeDirDefaultExternal(""), "Rocklist.txt", RockList) File.WriteList(rp.GetSafeDirDefaultExternal(""), "Weedlist.txt", WeedList) File.WriteList(rp.GetSafeDirDefaultExternal(""), "Pointlist.txt", PointList) File.WriteString(rp.GetSafeDirDefaultExternal(""), "editext.txt", editxt.text) Log("writelists") CallSubDelayed(Starter, "StopGPS") 'File.WriteList(File.DirRootExternal, "LogRocks.txt", FileList) 'File.WriteBytes(File.DirInternal, "List", raf2.ConvertObjectToBytes(cust2list)) 'Log("listsave") End Sub Public Sub GpsStatus (Satellites As List) 'Dim sb As StringBuilder 'sb.Initialize 'sb.Append("Satellites:").Append(CRLF) 'For i = 0 To Satellites.Size - 1 ' Dim Satellite As GPSSatellite = Satellites.Get(i) ' sb.Append(CRLF).Append(Satellite.Prn).Append($" $1.2{Satellite.Snr}"$).Append(" ").Append(Satellite.UsedInFix) ' sb.Append(" ").Append($" $1.2{Satellite.Azimuth}"$).Append($" $1.2{Satellite.Elevation}"$) 'Next 'lblSatellites.Text = sb.ToString 'lblSatIndicator.Color = 0xff7fff00 End Sub Public Sub LocationChanged(Location1 As Location) 'lblLat.Text = "Lat = " & Location1.ConvertToMinutes(Location1.Latitude) 'lblLon.Text = "Lon = " & Location1.ConvertToMinutes(Location1.Longitude) 'lblSpeed.Text = $"Speed = $1.2{Location1.Speed} m/s "$ lblSatIndicator.Color = 0xff7fff00 End Sub Sub pnlrock_touch(ACTION As Int,X As Float,Y As Float) Select ACTION Case Activity.ACTION_DOWN lblpnlrock.Color = 0xFFDEB887 Panel_down Case Activity.ACTION_UP lblpnlrock.Color = 0xFFFFEBCD Panel_up("Rocks") Case Activity.ACTION_MOVE End Select End Sub Sub Panel_down ButDownTime = DateTime.Now paneldowncomplete = False Do While Starter.ValidGPS = False Sleep (100) Loop 'STime = DateTime.Now LocDown = Starter.Location2 paneldowncomplete = True 'SLong = Starter.Location2.Longitude 'checks for valid gps 'logs lat and long and time End Sub Sub Panel_up(obstacle As String) ButUpTime = DateTime.Now Log("panelup") Do While Starter.ValidGPS = False Or paneldowncomplete = False Sleep (200) Loop If (ButUpTime - LocDown.Time < 2000) And (ButUpTime - ButDownTime >500) Then lbl2secwarn.Visible = True Sleep (2000) lbl2secwarn.Visible = False End If LocUp = Starter.Location2 Estimator(obstacle) End Sub Sub Estimator(obstacle As String) DateTime.DateFormat = ("dd/MM/yyyy") If (LocDown.Time = LocUp.Time) Then ELat = LocUp.Latitude ELong = LocUp.Longitude Else ELat =LocDown.Latitude - (LocDown.Latitude - LocUp.Latitude)*(LocDown.Time - 2*ButDownTime + ButUpTime)/(LocDown.Time - LocUp.Time) ELong = (LocDown.Longitude - LocUp.Longitude)*(2*ButDownTime-LocUp.Time-ButUpTime)/(LocDown.Time - LocUp.Time)+LocUp.longitude End If Log(ELong) Log(obstacle) Log(headerposition.Get(obstacle)) Log(headerposition.ContainsKey(obstacle)) 'origional calculationELat = FLat + (BtnDownTime-FTime)*(SLat - FLat)/(STime - FTime) 'ELong = FLong + (BtnDownTime-FTime)*(SLong - FLong)/(STime - FTime) Dim sb2 As StringBuilder sb2.Initialize If headerposition.ContainsKey(obstacle) = False Then Log("false") headerlist.Add(obstacle) headerposition.Put(obstacle,headerlist.Size) sb2.Append($",$2.6{ELat} $2.6{ELong},"$) locationstringlist.Add(sb2.tostring) 'locationstringlist.get(1)="e" Else Log("true") sb2.Append(locationstringlist.get(headerposition.Get(obstacle))).Append($",$2.6{ELat} $2.6{ELong},"$) locationstringlist.InsertAt(headerposition.Get(obstacle),sb2.tostring) locationstringlist.RemoveAt(headerposition.Get(obstacle)+1) End If 'If obstacle = "Rock" Then ' If RockList.Size = 0 Then ' RockList.Add("Rocks") ' End If ' RockList.Add($",$2.6{ELat} $2.6{ELong},"$) 'Else If obstacle = "Weed" Then ' If WeedList.Size = 0 Then ' WeedList.Add("Weeds") ' End If ' WeedList.Add($",$2.6{ELat} $2.6{ELong},"$) 'Else If obstacle = "Point" Then ' If PointList.Size = 0 Then ' PointList.Add("Points") ' End If ' PointList.Add($",$2.6{ELat} $2.6{ELong},"$) 'End If Print_rocks End Sub Sub pnlweed_Touch (Action As Int, X As Float, Y As Float) Select Action Case Activity.ACTION_DOWN lblpnlweed.Color = 0xFF61c800 Panel_down Case Activity.ACTION_UP lblpnlweed.Color = 0xFF7cfc00 '_up Panel_up("Weed") Case Activity.ACTION_MOVE End Select End Sub Sub pnlpoint_Touch (Action As Int, X As Float, Y As Float) Select Action Case Activity.ACTION_DOWN lblpnlpoint.Color = 0xFF68320d Panel_down Case Activity.ACTION_UP lblpnlpoint.Color = 0xff8b4513 '_up Panel_up("Point") Case Activity.ACTION_MOVE End Select End Sub Sub savebut_Click If File.Exists(rp.GetSafeDirdefaultExternal(""), "Editxt.txt") Then editxt.text = File.Readstring(rp.GetSafeDirDefaultExternal(""), "editxt.txt") End If convert_texttolists End Sub Sub printbut_Click editxt.RequestFocus editxt.SelectAll End Sub Sub butviewmap_click StartActivity(Mapmod) End Sub 'Sub Editxt_TextChanged(Old As String,New As String) 'End Sub Sub Updatebtn_Click 'updateclick=True 'used to prevent double new lines in string convert_texttolists 'Log(headerlist.Size) 'Log(locationstringlist) End Sub Sub pnlcust_Touch (Action As Int, X As Float, Y As Float) Select Action Case Activity.ACTION_DOWN 'lblpnlpoint.Color = 0xFF68320d Panel_down For i = 0 To headerlist.Size - 1 If headerlist.Get(i) <> "Rocks" Then If headerlist.Get(i) <> "Weed" Then If headerlist.Get(i) <> "Point" Then lblpnlcust.Text = headerlist.Get(i) Exit End If End If End If Next Case Activity.ACTION_UP 'lblpnlpoint.Color = 0xff8b4513 '_up Panel_up(lblpnlcust.text) Case Activity.ACTION_MOVE End Select End Sub