parent
6917ff1071
commit
62446a0eee
@ -1,447 +0,0 @@
|
|||||||
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~<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="28"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.DarkTheme)~\n~~\n~AddApplicationText(~\n~<meta-data~\n~ android:name="com.google.android.geo.API_KEY"~\n~ android:value="AIzaSyBPqtpSYMEAfgvf-K7wF_L2TFOTUxeDwsA"/>~\n~)~\n~~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~ <meta-data android:name="com.google.android.gms.version"~\n~ android:value="@integer/google_play_services_version" />~\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~<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">~\n~ <background android:drawable="@mipmap/background"/>~\n~ <foreground android:drawable="@mipmap/foreground"/>~\n~</adaptive-icon>~\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
|
|
||||||
Loading…
Reference in new issue