├── .gitignore
├── .gitmodules
├── AUTHORS
├── COPYING
├── LICENSES
├── README.md
├── app
├── build.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ ├── audio
│ │ └── gong.mp3
│ ├── images
│ │ ├── antenna.png
│ │ ├── basic_blue.png
│ │ ├── basic_green.png
│ │ ├── basic_red.png
│ │ ├── basic_turquoise.png
│ │ ├── basic_yellow.png
│ │ ├── container-ship-top.png
│ │ ├── flags
│ │ │ ├── ab.png
│ │ │ ├── ad.png
│ │ │ ├── ae.png
│ │ │ ├── af.png
│ │ │ ├── ag.png
│ │ │ ├── ai.png
│ │ │ ├── al.png
│ │ │ ├── am.png
│ │ │ ├── ao.png
│ │ │ ├── aq.png
│ │ │ ├── ar.png
│ │ │ ├── as.png
│ │ │ ├── at.png
│ │ │ ├── au.png
│ │ │ ├── aw.png
│ │ │ ├── ax.png
│ │ │ ├── az.png
│ │ │ ├── ba.png
│ │ │ ├── bb.png
│ │ │ ├── bd.png
│ │ │ ├── be.png
│ │ │ ├── bf.png
│ │ │ ├── bg.png
│ │ │ ├── bh.png
│ │ │ ├── bi.png
│ │ │ ├── bj.png
│ │ │ ├── bl.png
│ │ │ ├── bm.png
│ │ │ ├── bn.png
│ │ │ ├── bo.png
│ │ │ ├── bq.png
│ │ │ ├── br.png
│ │ │ ├── bs.png
│ │ │ ├── bt.png
│ │ │ ├── bv.png
│ │ │ ├── bw.png
│ │ │ ├── by.png
│ │ │ ├── bz.png
│ │ │ ├── ca.png
│ │ │ ├── cc.png
│ │ │ ├── cd.png
│ │ │ ├── cf.png
│ │ │ ├── cg.png
│ │ │ ├── ch.png
│ │ │ ├── ci.png
│ │ │ ├── ck.png
│ │ │ ├── cl.png
│ │ │ ├── cm.png
│ │ │ ├── cn.png
│ │ │ ├── co.png
│ │ │ ├── cr.png
│ │ │ ├── cu.png
│ │ │ ├── cv.png
│ │ │ ├── cw.png
│ │ │ ├── cx.png
│ │ │ ├── cy.png
│ │ │ ├── cz.png
│ │ │ ├── de.png
│ │ │ ├── dj.png
│ │ │ ├── dk.png
│ │ │ ├── dm.png
│ │ │ ├── do.png
│ │ │ ├── dz.png
│ │ │ ├── ec.png
│ │ │ ├── ee.png
│ │ │ ├── eg.png
│ │ │ ├── eh.png
│ │ │ ├── er.png
│ │ │ ├── es.png
│ │ │ ├── et.png
│ │ │ ├── fi.png
│ │ │ ├── fj.png
│ │ │ ├── fk.png
│ │ │ ├── fm.png
│ │ │ ├── fo.png
│ │ │ ├── fr.png
│ │ │ ├── ga.png
│ │ │ ├── gb.png
│ │ │ ├── gd.png
│ │ │ ├── ge.png
│ │ │ ├── gf.png
│ │ │ ├── gg.png
│ │ │ ├── gh.png
│ │ │ ├── gi.png
│ │ │ ├── gl.png
│ │ │ ├── gm.png
│ │ │ ├── gn.png
│ │ │ ├── gp.png
│ │ │ ├── gq.png
│ │ │ ├── gr.png
│ │ │ ├── gs.png
│ │ │ ├── gt.png
│ │ │ ├── gu.png
│ │ │ ├── gw.png
│ │ │ ├── gy.png
│ │ │ ├── hk.png
│ │ │ ├── hm.png
│ │ │ ├── hn.png
│ │ │ ├── hr.png
│ │ │ ├── ht.png
│ │ │ ├── hu.png
│ │ │ ├── id.png
│ │ │ ├── ie.png
│ │ │ ├── il.png
│ │ │ ├── im.png
│ │ │ ├── in.png
│ │ │ ├── io.png
│ │ │ ├── iq.png
│ │ │ ├── ir.png
│ │ │ ├── is.png
│ │ │ ├── it.png
│ │ │ ├── je.png
│ │ │ ├── jm.png
│ │ │ ├── jo.png
│ │ │ ├── jp.png
│ │ │ ├── ke.png
│ │ │ ├── kg.png
│ │ │ ├── kh.png
│ │ │ ├── ki.png
│ │ │ ├── km.png
│ │ │ ├── kn.png
│ │ │ ├── kp.png
│ │ │ ├── kr.png
│ │ │ ├── kw.png
│ │ │ ├── ky.png
│ │ │ ├── kz.png
│ │ │ ├── la.png
│ │ │ ├── lb.png
│ │ │ ├── lc.png
│ │ │ ├── li.png
│ │ │ ├── lk.png
│ │ │ ├── lr.png
│ │ │ ├── ls.png
│ │ │ ├── lt.png
│ │ │ ├── lu.png
│ │ │ ├── lv.png
│ │ │ ├── ly.png
│ │ │ ├── ma.png
│ │ │ ├── mc.png
│ │ │ ├── md.png
│ │ │ ├── me.png
│ │ │ ├── mf.png
│ │ │ ├── mg.png
│ │ │ ├── mh.png
│ │ │ ├── mk.png
│ │ │ ├── ml.png
│ │ │ ├── mm.png
│ │ │ ├── mn.png
│ │ │ ├── mo.png
│ │ │ ├── mp.png
│ │ │ ├── mq.png
│ │ │ ├── mr.png
│ │ │ ├── ms.png
│ │ │ ├── mt.png
│ │ │ ├── mu.png
│ │ │ ├── mv.png
│ │ │ ├── mw.png
│ │ │ ├── mx.png
│ │ │ ├── my.png
│ │ │ ├── mz.png
│ │ │ ├── na.png
│ │ │ ├── nc.png
│ │ │ ├── ne.png
│ │ │ ├── nf.png
│ │ │ ├── ng.png
│ │ │ ├── ni.png
│ │ │ ├── nl.png
│ │ │ ├── no.png
│ │ │ ├── np.png
│ │ │ ├── nr.png
│ │ │ ├── nu.png
│ │ │ ├── nz.png
│ │ │ ├── om.png
│ │ │ ├── pa.png
│ │ │ ├── pe.png
│ │ │ ├── pf.png
│ │ │ ├── pg.png
│ │ │ ├── ph.png
│ │ │ ├── pk.png
│ │ │ ├── pl.png
│ │ │ ├── pm.png
│ │ │ ├── pn.png
│ │ │ ├── pr.png
│ │ │ ├── ps.png
│ │ │ ├── pt.png
│ │ │ ├── pw.png
│ │ │ ├── py.png
│ │ │ ├── qa.png
│ │ │ ├── re.png
│ │ │ ├── ro.png
│ │ │ ├── rs.png
│ │ │ ├── ru.png
│ │ │ ├── rw.png
│ │ │ ├── sa.png
│ │ │ ├── sb.png
│ │ │ ├── sc.png
│ │ │ ├── sd.png
│ │ │ ├── se.png
│ │ │ ├── sg.png
│ │ │ ├── sh.png
│ │ │ ├── si.png
│ │ │ ├── sj.png
│ │ │ ├── sk.png
│ │ │ ├── sl.png
│ │ │ ├── sm.png
│ │ │ ├── sn.png
│ │ │ ├── so.png
│ │ │ ├── sr.png
│ │ │ ├── ss.png
│ │ │ ├── st.png
│ │ │ ├── sv.png
│ │ │ ├── sx.png
│ │ │ ├── sy.png
│ │ │ ├── sz.png
│ │ │ ├── tc.png
│ │ │ ├── td.png
│ │ │ ├── tf.png
│ │ │ ├── tg.png
│ │ │ ├── th.png
│ │ │ ├── tj.png
│ │ │ ├── tk.png
│ │ │ ├── tl.png
│ │ │ ├── tm.png
│ │ │ ├── tn.png
│ │ │ ├── to.png
│ │ │ ├── tr.png
│ │ │ ├── tt.png
│ │ │ ├── tv.png
│ │ │ ├── tw.png
│ │ │ ├── tz.png
│ │ │ ├── ua.png
│ │ │ ├── ug.png
│ │ │ ├── um.png
│ │ │ ├── us.png
│ │ │ ├── uy.png
│ │ │ ├── uz.png
│ │ │ ├── va.png
│ │ │ ├── vc.png
│ │ │ ├── ve.png
│ │ │ ├── vg.png
│ │ │ ├── vi.png
│ │ │ ├── vn.png
│ │ │ ├── vu.png
│ │ │ ├── wf.png
│ │ │ ├── ws.png
│ │ │ ├── xk.png
│ │ │ ├── ye.png
│ │ │ ├── yt.png
│ │ │ ├── za.png
│ │ │ ├── zm.png
│ │ │ └── zw.png
│ │ ├── house.png
│ │ ├── passenger.png
│ │ ├── sailboat-black-side.png
│ │ ├── sailing-yacht_1.png
│ │ ├── sailing-yacht_2.png
│ │ ├── yacht_1.png
│ │ ├── yacht_2.png
│ │ ├── yacht_3.png
│ │ ├── yacht_4.png
│ │ └── yellow_dot.png
│ ├── index.html
│ ├── openstreetmap
│ │ ├── OpenLayers.js
│ │ ├── OpenStreetMap.js
│ │ ├── extra.css
│ │ ├── img
│ │ │ ├── blank.gif
│ │ │ ├── close.gif
│ │ │ ├── cloud-popup-relative.png
│ │ │ ├── drag-rectangle-off.png
│ │ │ ├── drag-rectangle-on.png
│ │ │ ├── east-mini.png
│ │ │ ├── layer-switcher-maximize.png
│ │ │ ├── layer-switcher-minimize.png
│ │ │ ├── marker-blue.png
│ │ │ ├── marker-gold.png
│ │ │ ├── marker-green.png
│ │ │ ├── marker.png
│ │ │ ├── measuring-stick-off.png
│ │ │ ├── measuring-stick-on.png
│ │ │ ├── north-mini.png
│ │ │ ├── panning-hand-off.png
│ │ │ ├── panning-hand-on.png
│ │ │ ├── slider.png
│ │ │ ├── south-mini.png
│ │ │ ├── west-mini.png
│ │ │ ├── zoom-minus-mini.png
│ │ │ ├── zoom-plus-mini.png
│ │ │ ├── zoom-world-mini.png
│ │ │ └── zoombar.png
│ │ ├── jquery-3.6.0.min.js
│ │ ├── readme.txt
│ │ ├── style.css
│ │ └── theme
│ │ │ └── default
│ │ │ └── style.css
│ └── ships.js
│ ├── ic_launcher-web.png
│ ├── java
│ ├── dk
│ │ └── dma
│ │ │ ├── ais
│ │ │ ├── binary
│ │ │ │ ├── BinArray.java
│ │ │ │ ├── SixbitEncoder.java
│ │ │ │ └── SixbitException.java
│ │ │ ├── message
│ │ │ │ ├── AisBinaryMessage.java
│ │ │ │ ├── AisMessage.java
│ │ │ │ ├── AisMessage1.java
│ │ │ │ ├── AisMessage10.java
│ │ │ │ ├── AisMessage12.java
│ │ │ │ ├── AisMessage13.java
│ │ │ │ ├── AisMessage14.java
│ │ │ │ ├── AisMessage17.java
│ │ │ │ ├── AisMessage18.java
│ │ │ │ ├── AisMessage19.java
│ │ │ │ ├── AisMessage2.java
│ │ │ │ ├── AisMessage21.java
│ │ │ │ ├── AisMessage24.java
│ │ │ │ ├── AisMessage27.java
│ │ │ │ ├── AisMessage3.java
│ │ │ │ ├── AisMessage4.java
│ │ │ │ ├── AisMessage5.java
│ │ │ │ ├── AisMessage6.java
│ │ │ │ ├── AisMessage7.java
│ │ │ │ ├── AisMessage8.java
│ │ │ │ ├── AisMessage9.java
│ │ │ │ ├── AisMessageException.java
│ │ │ │ ├── AisPosition.java
│ │ │ │ ├── AisPositionMessage.java
│ │ │ │ ├── AisStaticCommon.java
│ │ │ │ ├── AisTargetType.java
│ │ │ │ ├── AisUnsupportedMessageType.java
│ │ │ │ ├── IPositionMessage.java
│ │ │ │ ├── IVesselPositionMessage.java
│ │ │ │ ├── NavigationalStatus.java
│ │ │ │ ├── ShipTypeCargo.java
│ │ │ │ ├── ShipTypeColor.java
│ │ │ │ └── binary
│ │ │ │ │ ├── AddressedAreaNotice.java
│ │ │ │ │ ├── AddressedRouteInformation.java
│ │ │ │ │ ├── AisApplicationMessage.java
│ │ │ │ │ ├── AreaNotice.java
│ │ │ │ │ ├── AsmAcknowledge.java
│ │ │ │ │ ├── BroadcastAreaNotice.java
│ │ │ │ │ ├── BroadcastIntendedRoute.java
│ │ │ │ │ ├── BroadcastRouteInformation.java
│ │ │ │ │ ├── Capability.java
│ │ │ │ │ ├── MetHyd11.java
│ │ │ │ │ ├── RouteExchange.java
│ │ │ │ │ ├── RouteInformation.java
│ │ │ │ │ ├── RouteMessage.java
│ │ │ │ │ ├── RouteSuggestion.java
│ │ │ │ │ ├── RouteSuggestionReply.java
│ │ │ │ │ ├── SubArea.java
│ │ │ │ │ └── UnknownAsm.java
│ │ │ ├── packet
│ │ │ │ ├── AisPacket.java
│ │ │ │ ├── AisPacketParser.java
│ │ │ │ └── AisPacketTags.java
│ │ │ ├── proprietary
│ │ │ │ ├── GatehouseFactory.java
│ │ │ │ ├── GatehouseSourceTag.java
│ │ │ │ ├── IProprietarySourceTag.java
│ │ │ │ ├── IProprietaryTag.java
│ │ │ │ └── ProprietaryFactory.java
│ │ │ └── sentence
│ │ │ │ ├── Abk.java
│ │ │ │ ├── Abm.java
│ │ │ │ ├── AnySentence.java
│ │ │ │ ├── Bbm.java
│ │ │ │ ├── CommentBlock.java
│ │ │ │ ├── CommentBlockException.java
│ │ │ │ ├── CommentBlockLine.java
│ │ │ │ ├── EncapsulatedSentence.java
│ │ │ │ ├── ParametricSentence.java
│ │ │ │ ├── SendSentence.java
│ │ │ │ ├── Sentence.java
│ │ │ │ ├── SentenceException.java
│ │ │ │ ├── SentenceLine.java
│ │ │ │ └── Vdm.java
│ │ │ └── enav
│ │ │ └── model
│ │ │ ├── Country.java
│ │ │ └── geometry
│ │ │ └── Position.java
│ └── net
│ │ └── videgro
│ │ ├── analytics
│ │ └── MyFirebaseAnalytics.java
│ │ ├── ships
│ │ ├── Analytics.java
│ │ ├── MyFirebaseMessagingRepeater.java
│ │ ├── Notifications.java
│ │ ├── Repeater.java
│ │ ├── SettingsUtils.java
│ │ ├── StartRtlSdrRequest.java
│ │ ├── Utils.java
│ │ ├── activities
│ │ │ ├── AugmentedRealityLocationActivity.kt
│ │ │ ├── HelpActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── OpenDeviceActivity.java
│ │ │ └── SettingsActivity.java
│ │ ├── adapters
│ │ │ └── ShipsTableDataAdapter.java
│ │ ├── ar
│ │ │ └── utils
│ │ │ │ ├── AugmentedRealityLocationUtils.kt
│ │ │ │ └── PermissionUtils.kt
│ │ ├── bridge
│ │ │ └── NativeRtlSdr.java
│ │ ├── fragments
│ │ │ ├── CalibrateFragment.java
│ │ │ ├── DeviceDialogFragment.java
│ │ │ ├── HelpFragment.java
│ │ │ ├── SettingsFragment.java
│ │ │ ├── ShowMapFragment.java
│ │ │ └── internal
│ │ │ │ ├── FragmentUtils.java
│ │ │ │ ├── IndicatorAnimation.java
│ │ │ │ ├── OpenDeviceResult.java
│ │ │ │ └── ShipsTableManager.java
│ │ ├── listeners
│ │ │ ├── CalibrateListener.java
│ │ │ ├── ImagePopupListener.java
│ │ │ ├── NmeaReceivedListener.java
│ │ │ ├── OwnLocationReceivedListener.java
│ │ │ └── ShipReceivedListener.java
│ │ ├── nmea2ship
│ │ │ ├── AisParser.java
│ │ │ ├── Nmea2Ship.java
│ │ │ └── domain
│ │ │ │ ├── Mid.java
│ │ │ │ └── Ship.java
│ │ ├── preferences
│ │ │ └── PromoPreferenceRateMe.java
│ │ ├── services
│ │ │ ├── MyFirebaseMessagingService.java
│ │ │ ├── NmeaClientService.java
│ │ │ ├── RtlSdrAisService.java
│ │ │ ├── RtlSdrService.java
│ │ │ ├── TrackService.java
│ │ │ └── internal
│ │ │ │ └── NmeaMessagesCache.java
│ │ ├── tasks
│ │ │ ├── CalibrateTask.java
│ │ │ ├── HttpCacheFifoTask.java
│ │ │ ├── NmeaFirebaseMessagingClientTask.java
│ │ │ ├── NmeaUdpClientTask.java
│ │ │ ├── ProcessCachedMessagesTask.java
│ │ │ └── domain
│ │ │ │ └── DatagramSocketConfig.java
│ │ └── tools
│ │ │ └── HttpCacheTileServer.java
│ │ └── usb
│ │ ├── SupportedDevice.java
│ │ ├── UsbUtils.java
│ │ └── rtlsdr
│ │ ├── RtlSdrDevice.java
│ │ ├── RtlSdrDeviceProvider.java
│ │ └── RtlSdrDeviceProviderImpl.java
│ ├── jni
│ ├── CMakeLists.txt
│ ├── NativeRtlSdr.cpp
│ ├── NativeRtlSdr.h
│ ├── NativeRtlSdrUtils.cpp
│ ├── NativeRtlSdrUtils.h
│ └── native2android.h
│ └── res
│ ├── drawable-hdpi
│ ├── ic_launcher.png
│ ├── ic_menu_ar.png
│ ├── ic_stat_notification.png
│ └── ic_stat_usb.png
│ ├── drawable-mdpi
│ ├── but_google_play_rate.png
│ ├── ic_green_sphere.png
│ ├── ic_information.png
│ ├── ic_information_ships.png
│ ├── ic_launcher.png
│ ├── ic_menu_ar.png
│ ├── ic_stat_notification.png
│ ├── ic_stat_usb.png
│ ├── rtlsdr.png
│ ├── thumbs_down_circle.png
│ ├── thumbs_up_circle.png
│ └── warning_icon.png
│ ├── drawable-xhdpi
│ ├── ic_launcher.png
│ ├── ic_menu_ar.png
│ ├── ic_stat_notification.png
│ └── ic_stat_usb.png
│ ├── drawable-xxhdpi
│ ├── ic_launcher.png
│ ├── ic_menu_ar.png
│ ├── ic_stat_notification.png
│ └── ic_stat_usb.png
│ ├── drawable-xxxhdpi
│ ├── ic_launcher.png
│ └── ic_menu_ar.png
│ ├── drawable
│ ├── ar_marker.png
│ └── ic_menu_ar.png
│ ├── layout
│ ├── activity_augmented_reality_location.xml
│ ├── activity_main.xml
│ ├── augmented_reality_location.xml
│ ├── fragment_calibrate.xml
│ ├── fragment_help.xml
│ ├── fragment_main.xml
│ ├── fragment_map.xml
│ ├── loading_dialog.xml
│ ├── progress.xml
│ └── promo_rate_me.xml
│ ├── menu
│ └── main.xml
│ ├── values-v11
│ └── styles.xml
│ ├── values-v14
│ └── styles.xml
│ ├── values-w820dp
│ └── dimens.xml
│ ├── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ ├── network_security_config.xml
│ ├── preferences.xml
│ ├── provider_paths.xml
│ └── supported_devices.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | #
2 | # Initial version downloaded from: https://github.com/github/gitignore/blob/master/Android.gitignore (0d8b5f8)
3 | #
4 | # Built application files
5 | *.apk
6 | *.ap_
7 |
8 | # Files for the ART/Dalvik VM
9 | *.dex
10 |
11 | # Java class files
12 | *.class
13 |
14 | # Generated files
15 | bin/
16 | gen/
17 | out/
18 |
19 | # Gradle files
20 | .gradle/
21 | build/
22 |
23 | # Local configuration file (sdk path, etc)
24 | local.properties
25 |
26 | # Proguard folder generated by Eclipse
27 | proguard/
28 |
29 | # Log Files
30 | *.log
31 |
32 | # Android Studio Navigation editor temp files
33 | .navigation/
34 |
35 | # Android Studio captures folder
36 | captures/
37 |
38 | # Intellij
39 | *.iml
40 | .idea/workspace.xml
41 | .idea/tasks.xml
42 | .idea/gradle.xml
43 | .idea/libraries
44 |
45 | # Keystore files
46 | *.jks
47 |
48 | # External native build folder generated in Android Studio 2.2 and later
49 | .externalNativeBuild
50 |
51 | # Google Services (e.g. APIs or Firebase)
52 | google-services.json
53 |
54 | # Freeline
55 | freeline.py
56 | freeline/
57 | freeline_project_description.json
58 |
59 | # Own additions
60 | /DOWNLOADS/
61 | /DOC/
62 | /bin/
63 | /gen/
64 | obj/
65 | *.so
66 | .classpath
67 | .project
68 | .settings
69 | lint.xml
70 | project.properties
71 | private.xml
72 | analytics.xml
73 | .idea
74 | .cxx
75 |
76 | # Crypto keys
77 | /app/src/main/res/raw/*_key
78 |
79 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "app/src/main/jni/rtl-ais"]
2 | path = app/src/main/jni/rtl-ais
3 | url = https://github.com/dgiardini/rtl-ais.git
4 | [submodule "app/src/main/jni/libusb"]
5 | path = app/src/main/jni/libusb
6 | url = https://github.com/libusb/libusb.git
7 | [submodule "app/src/main/jni/rtl-sdr"]
8 | path = app/src/main/jni/rtl-sdr
9 | url = https://github.com/keenerd/rtl-sdr.git
10 |
--------------------------------------------------------------------------------
/AUTHORS:
--------------------------------------------------------------------------------
1 | Vincent de Groot
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Ships
2 |
3 | VIDEGROs Ships is an Android application which allows you to receive AIS information directly from ships in your neighbourhood using a cheap DVB-T-DAB-FM / RTL-SDR receiver.
4 |
5 | IMPORTANT: You need to have an OTG capable Android device and a DVB-T-DAB-FM / RTL-SDR receiver, otherwise this application is useless.
6 |
7 | It is an all in one application. This means that these 3 features are combined in one:
8 | - Find the parts per million offset (PPM) of your DVB-T-DAB-FM receiver;
9 | - Receive the AIS data from air;
10 | - Plot ships data onto a map (or send it to another application).
11 |
12 | More information: http://blog.videgro.net/2017/01/ships/
13 |
--------------------------------------------------------------------------------
/app/src/main/assets/audio/gong.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/audio/gong.mp3
--------------------------------------------------------------------------------
/app/src/main/assets/images/antenna.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/antenna.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/basic_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/basic_blue.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/basic_green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/basic_green.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/basic_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/basic_red.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/basic_turquoise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/basic_turquoise.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/basic_yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/basic_yellow.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/container-ship-top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/container-ship-top.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ab.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ad.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ae.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ae.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/af.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/af.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ag.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ai.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ai.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/al.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/al.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/am.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/am.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ao.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/aq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/aq.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ar.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/as.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/as.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/at.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/at.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/au.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/au.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/aw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/aw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ax.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ax.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/az.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/az.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ba.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bb.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bd.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/be.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/be.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bh.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bi.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bj.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bo.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bq.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/br.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/br.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bs.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bv.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/by.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/by.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/bz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/bz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ca.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cd.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ch.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ci.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ci.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ck.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/co.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/co.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cv.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cx.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cy.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/cz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/cz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/de.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/de.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/dj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/dj.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/dk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/dk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/dm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/dm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/do.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/do.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/dz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/dz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ec.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ee.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/eg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/eg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/eh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/eh.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/er.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/er.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/es.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/es.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/et.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/et.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/fi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/fi.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/fj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/fj.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/fk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/fk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/fm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/fm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/fo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/fo.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/fr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/fr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ga.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ga.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gb.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gd.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ge.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ge.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gh.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gi.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gp.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gq.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gs.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/gy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/gy.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/hk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/hk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/hm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/hm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/hn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/hn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/hr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/hr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ht.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ht.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/hu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/hu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/id.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/id.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ie.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/il.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/il.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/im.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/im.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/in.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/in.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/io.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/io.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/iq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/iq.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ir.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ir.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/is.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/is.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/it.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/it.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/je.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/je.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/jm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/jm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/jo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/jo.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/jp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/jp.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ke.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ke.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kh.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ki.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ki.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/km.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/km.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kp.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ky.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ky.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/kz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/kz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/la.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/la.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lb.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/li.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/li.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ls.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/lv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/lv.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ly.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ly.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ma.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/md.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/md.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/me.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mh.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ml.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mo.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mp.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mq.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ms.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mv.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mx.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/my.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/my.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/mz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/mz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/na.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/na.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/nc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/nc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ne.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/nf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/nf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ng.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ng.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ni.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ni.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/nl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/nl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/no.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/no.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/np.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/np.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/nr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/nr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/nu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/nu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/nz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/nz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/om.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/om.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pa.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pe.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ph.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ps.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/pw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/pw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/py.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/py.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/qa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/qa.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/re.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/re.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ro.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/rs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/rs.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ru.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/rw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/rw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sa.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sb.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sd.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/se.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/se.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sh.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/si.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/si.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sj.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/so.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/so.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ss.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/st.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/st.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sv.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sx.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sy.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/sz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/sz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/td.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/td.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/th.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/th.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tj.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tj.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tl.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/to.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/to.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tr.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tv.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/tz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/tz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ua.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ug.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ug.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/um.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/um.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/us.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/us.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/uy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/uy.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/uz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/uz.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/va.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/va.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/vc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/vc.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ve.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/vg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/vg.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/vi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/vi.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/vn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/vn.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/vu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/vu.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/wf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/wf.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ws.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ws.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/xk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/xk.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/ye.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/ye.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/yt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/yt.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/za.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/za.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/zm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/zm.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/flags/zw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/flags/zw.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/house.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/house.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/passenger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/passenger.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/sailboat-black-side.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/sailboat-black-side.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/sailing-yacht_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/sailing-yacht_1.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/sailing-yacht_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/sailing-yacht_2.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/yacht_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/yacht_1.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/yacht_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/yacht_2.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/yacht_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/yacht_3.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/yacht_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/yacht_4.png
--------------------------------------------------------------------------------
/app/src/main/assets/images/yellow_dot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/images/yellow_dot.png
--------------------------------------------------------------------------------
/app/src/main/assets/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Ship tracking
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/extra.css:
--------------------------------------------------------------------------------
1 | .olImageLoadError {
2 | /* when OL encounters a 404, don't display the pink image */
3 | display: none !important;
4 | }
5 | .flag {
6 | width: 20px;
7 | }
8 |
9 | body {
10 | margin: 0;
11 | padding: 0;
12 | }
13 |
14 | /**
15 | * Layer switcher
16 | */
17 | .olControlLayerSwitcher {
18 | font-size: large;
19 | }
20 | .olAlphaImg{
21 | width: 30px;
22 | height: 30px;
23 | right: 10px;
24 | }
25 | .olControlAttribution {
26 | bottom: 0em;
27 | }
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/blank.gif
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/close.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/close.gif
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/cloud-popup-relative.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/cloud-popup-relative.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/drag-rectangle-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/drag-rectangle-off.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/drag-rectangle-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/drag-rectangle-on.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/east-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/east-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/layer-switcher-maximize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/layer-switcher-maximize.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/layer-switcher-minimize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/layer-switcher-minimize.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/marker-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/marker-blue.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/marker-gold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/marker-gold.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/marker-green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/marker-green.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/marker.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/measuring-stick-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/measuring-stick-off.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/measuring-stick-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/measuring-stick-on.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/north-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/north-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/panning-hand-off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/panning-hand-off.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/panning-hand-on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/panning-hand-on.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/slider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/slider.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/south-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/south-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/west-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/west-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/zoom-minus-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/zoom-minus-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/zoom-plus-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/zoom-plus-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/zoom-world-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/zoom-world-mini.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/img/zoombar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/img/zoombar.png
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/readme.txt:
--------------------------------------------------------------------------------
1 | Downloaded from:
2 |
3 | wget http://code.jquery.com/jquery-3.1.1.min.js
4 | wget http://openlayers.org/api/theme/default/style.css
5 | wget http://www.openlayers.org/api/OpenLayers.js
6 |
7 | In 'img'-subdirectory:
8 |
9 | wget http://www.openstreetmap.org/openlayers/img/blank.gif
10 | wget http://www.openstreetmap.org/openlayers/img/cloud-popup-relative.png
11 | wget http://www.openstreetmap.org/openlayers/img/drag-rectangle-off.png
12 | wget http://www.openstreetmap.org/openlayers/img/drag-rectangle-on.png
13 | wget http://www.openstreetmap.org/openlayers/img/east-mini.png
14 | wget http://www.openstreetmap.org/openlayers/img/layer-switcher-maximize.png
15 | wget http://www.openstreetmap.org/openlayers/img/layer-switcher-minimize.png
16 | wget http://www.openstreetmap.org/openlayers/img/marker.png
17 | wget http://www.openstreetmap.org/openlayers/img/marker-blue.png
18 | wget http://www.openstreetmap.org/openlayers/img/marker-gold.png
19 | wget http://www.openstreetmap.org/openlayers/img/marker-green.png
20 | wget http://www.openstreetmap.org/openlayers/img/measuring-stick-off.png
21 | wget http://www.openstreetmap.org/openlayers/img/measuring-stick-on.png
22 | wget http://www.openstreetmap.org/openlayers/img/north-mini.png
23 | wget http://www.openstreetmap.org/openlayers/img/panning-hand-off.png
24 | wget http://www.openstreetmap.org/openlayers/img/panning-hand-on.png
25 | wget http://www.openstreetmap.org/openlayers/img/slider.png
26 | wget http://www.openstreetmap.org/openlayers/img/south-mini.png
27 | wget http://www.openstreetmap.org/openlayers/img/west-mini.png
28 | wget http://www.openstreetmap.org/openlayers/img/zoombar.png
29 | wget http://www.openstreetmap.org/openlayers/img/zoom-minus-mini.png
30 | wget http://www.openstreetmap.org/openlayers/img/zoom-plus-mini.png
31 | wget http://www.openstreetmap.org/openlayers/img/zoom-world-mini.png
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/assets/openstreetmap/theme/default/style.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/assets/openstreetmap/theme/default/style.css
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/binary/SixbitException.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.binary;
16 |
17 | /**
18 | * Exception class for six bit related errors
19 | */
20 | public class SixbitException extends Exception {
21 |
22 | private static final long serialVersionUID = 1L;
23 |
24 | public SixbitException(String msg) {
25 | super(msg);
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisMessage13.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | import dk.dma.ais.binary.SixbitException;
19 | import dk.dma.ais.sentence.Vdm;
20 |
21 | /**
22 | * AIS message 13
23 | *
24 | * Acknowledge message as defined by ITU-R M.1371-4
25 | *
26 | */
27 | public class AisMessage13 extends AisMessage7 {
28 |
29 | /** serialVersionUID. */
30 | private static final long serialVersionUID = 1L;
31 |
32 | public AisMessage13() {
33 | super(13);
34 | }
35 |
36 | public AisMessage13(Vdm vdm) throws AisMessageException, SixbitException {
37 | super(vdm);
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisMessage14.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | import dk.dma.ais.binary.BinArray;
19 | import dk.dma.ais.binary.SixbitEncoder;
20 | import dk.dma.ais.binary.SixbitException;
21 | import dk.dma.ais.sentence.Vdm;
22 |
23 | /**
24 | * Safety related broadcast message as defined by ITU-R M.1371-4
25 | */
26 | public class AisMessage14 extends AisMessage {
27 |
28 | /** serialVersionUID. */
29 | private static final long serialVersionUID = 1L;
30 |
31 | private int spare; // 2 bit: Spare
32 | private String message; // Max 968 bit - 161 characters
33 |
34 | public AisMessage14() {
35 | super(14);
36 | }
37 |
38 | public AisMessage14(Vdm vdm) throws AisMessageException, SixbitException {
39 | super(vdm);
40 | parse();
41 | }
42 |
43 | public void parse() throws AisMessageException, SixbitException {
44 | BinArray binArray = vdm.getBinArray();
45 | if (binArray.getLength() < 40 || binArray.getLength() > 1008) {
46 | throw new AisMessageException("Message " + msgId + " wrong length: " + binArray.getLength());
47 | }
48 | super.parse(binArray);
49 | this.spare = (int) binArray.getVal(2);
50 | this.message = binArray.getString((binArray.getLength() - 40) / 6);
51 | }
52 |
53 | @Override
54 | public SixbitEncoder getEncoded() {
55 | SixbitEncoder encoder = super.encode();
56 | encoder.addVal(spare, 2);
57 | encoder.addString(message);
58 | return encoder;
59 | }
60 |
61 | /**
62 | * Set message from a binary array
63 | *
64 | * @param binArray
65 | * @throws SixbitException
66 | */
67 | public void setMessage(BinArray binArray) throws SixbitException {
68 | message = binArray.getString(binArray.getLength() / 6);
69 | }
70 |
71 | public int getSpare() {
72 | return spare;
73 | }
74 |
75 | public String getMessage() {
76 | return message;
77 | }
78 |
79 | @Override
80 | public String toString() {
81 | StringBuilder builder = new StringBuilder();
82 | builder.append(super.toString());
83 | builder.append(", message=");
84 | builder.append(message);
85 | builder.append(", spare=");
86 | builder.append(spare);
87 | builder.append("]");
88 | return builder.toString();
89 | }
90 |
91 | }
92 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisMessage2.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | import dk.dma.ais.binary.SixbitException;
19 | import dk.dma.ais.sentence.Vdm;
20 |
21 | /**
22 | * AIS message 2
23 | *
24 | * Assigned scheduled position report
25 | *
26 | * This class handles the content of an AIS class A transponders general position report as defined by ITU-R M.1371-4.
27 | *
28 | */
29 | public class AisMessage2 extends AisMessage1 {
30 |
31 | /** serialVersionUID. */
32 | private static final long serialVersionUID = 1L;
33 |
34 | public AisMessage2() {
35 | super(2);
36 | }
37 |
38 | public AisMessage2(Vdm vdm) throws AisMessageException, SixbitException {
39 | super(vdm);
40 | }
41 |
42 | @Override
43 | public String toString() {
44 | StringBuilder builder = new StringBuilder();
45 | builder.append(super.toString());
46 | builder.append("]");
47 | return builder.toString();
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisMessage8.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | import dk.dma.ais.binary.BinArray;
19 | import dk.dma.ais.binary.SixbitEncoder;
20 | import dk.dma.ais.binary.SixbitException;
21 | import dk.dma.ais.sentence.Vdm;
22 |
23 | /**
24 | * AIS message 8
25 | *
26 | * Binary broadcast message as defined by ITU-R M.1371-4
27 | *
28 | */
29 | public class AisMessage8 extends AisBinaryMessage {
30 |
31 | /** serialVersionUID. */
32 | private static final long serialVersionUID = 1L;
33 |
34 | public AisMessage8() {
35 | super(8);
36 | }
37 |
38 | public AisMessage8(Vdm vdm) throws AisMessageException, SixbitException {
39 | super(vdm);
40 | parse();
41 | }
42 |
43 | public void parse() throws AisMessageException, SixbitException {
44 | BinArray binArray = vdm.getBinArray();
45 | if (binArray.getLength() < 56 || binArray.getLength() > 1008) {
46 | throw new AisMessageException("Message " + msgId + " wrong length: " + binArray.getLength());
47 | }
48 | super.parse(binArray);
49 | this.spare = (int) binArray.getVal(2);
50 | this.dac = (int) binArray.getVal(10);
51 | this.fi = (int) binArray.getVal(6);
52 | this.data = binArray;
53 | }
54 |
55 | @Override
56 | public SixbitEncoder getEncoded() {
57 | SixbitEncoder encoder = super.encode();
58 | encoder.addVal(spare, 2);
59 | encoder.addVal(dac, 10);
60 | encoder.addVal(fi, 6);
61 | encoder.append(appMessage.getEncoded());
62 | return encoder;
63 | }
64 |
65 | @Override
66 | public String toString() {
67 | StringBuilder builder = new StringBuilder();
68 | builder.append(super.toString());
69 | builder.append("]");
70 | return builder.toString();
71 | }
72 |
73 | }
74 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisMessageException.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 | /**
18 | * Exception class relating to AIS message exceptions
19 | */
20 | public class AisMessageException extends Exception {
21 |
22 | private static final long serialVersionUID = 1L;
23 |
24 | public AisMessageException() {}
25 |
26 | public AisMessageException(String msg) {
27 | super(msg);
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisTargetType.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | /**
19 | * An AIS target type
20 | *
21 | * @author Kasper Nielsen
22 | */
23 | public enum AisTargetType {
24 |
25 | /** A Class A target type. */
26 | A,
27 |
28 | /** A Class B target type. */
29 | B,
30 |
31 | /** A Basestation. */
32 | BS,
33 |
34 | /** Aid To Navigation target. */
35 | ATON,
36 |
37 | /** A search and rescue target. */
38 | SART;
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/AisUnsupportedMessageType.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | import dk.dma.ais.binary.SixbitEncoder;
19 | import dk.dma.ais.binary.SixbitException;
20 | import dk.dma.ais.sentence.Vdm;
21 |
22 | /**
23 | * Class to fill in for AIS message classes not yet implemented
24 | */
25 | public class AisUnsupportedMessageType extends AisMessage {
26 |
27 | /** serialVersionUID. */
28 | private static final long serialVersionUID = 1L;
29 |
30 | public AisUnsupportedMessageType(Vdm vdm) throws AisMessageException, SixbitException {
31 | super(vdm);
32 | parse(vdm.getBinArray());
33 | }
34 |
35 | @Override
36 | public SixbitEncoder getEncoded() {
37 | throw new UnsupportedOperationException();
38 | }
39 |
40 | @Override
41 | public String toString() {
42 | StringBuilder builder = new StringBuilder();
43 | builder.append(super.toString());
44 | builder.append(" TO BE IMPLEMENTED ");
45 | builder.append("]");
46 | return builder.toString();
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/IPositionMessage.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 |
18 | /**
19 | * Interface for all messages carrying a the position of the sending target.
20 | */
21 | public interface IPositionMessage {
22 |
23 | /**
24 | * Get position
25 | *
26 | * @return
27 | */
28 | AisPosition getPos();
29 |
30 | /**
31 | * Position accuracy
32 | *
33 | * @return
34 | */
35 | int getPosAcc();
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/IVesselPositionMessage.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 | import dk.dma.enav.model.geometry.Position;
18 |
19 |
20 | /**
21 | * Interface to capture the communalities between message 1,2,3 and 18
22 | */
23 | public interface IVesselPositionMessage extends IPositionMessage {
24 |
25 | /**
26 | * Speed over ground
27 | *
28 | * @return
29 | */
30 | int getSog();
31 |
32 | /**
33 | * Course over ground
34 | */
35 | int getCog();
36 |
37 | /**
38 | * True heading
39 | *
40 | * @return
41 | */
42 | int getTrueHeading();
43 |
44 | /**
45 | * Returns a valid position if this message has a valid position, otherwise null.
46 | *
47 | * @return a valid position if this message has a valid position, otherwise null
48 | */
49 | Position getValidPosition();
50 |
51 | /**
52 | * UTC sec
53 | *
54 | * @return
55 | */
56 | int getUtcSec();
57 |
58 | /**
59 | * Determine if position is valid
60 | *
61 | * @return
62 | */
63 | boolean isPositionValid();
64 |
65 | /**
66 | * Course over ground valid
67 | *
68 | * @return
69 | */
70 | boolean isCogValid();
71 |
72 | /**
73 | * Speed over ground valid
74 | *
75 | * @return
76 | */
77 | boolean isSogValid();
78 |
79 | /**
80 | * Heading valid
81 | *
82 | * @return
83 | */
84 | boolean isHeadingValid();
85 |
86 | /**
87 | * Get raim
88 | *
89 | * @return
90 | */
91 | int getRaim();
92 |
93 | }
94 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/NavigationalStatus.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 | /**
18 | * Navigational status as used in AisMessages of type 1, 2, and 3 and
19 | * defined in Rec. ITU-R M.1371-4, table 45.
20 | *
21 | *
22 | * 0 = under way using engine,
23 | * 1 = at anchor,
24 | * 2 = not under command,
25 | * 3 = restricted manoeuvrability
26 | * 4 = constrained by her draught,
27 | * 5 = moore
28 | * 6 = aground
29 | * 7 = engaged in fishing
30 | * 8 = under way sailing
31 | * 9 = reserved for future amendment of navigational status for ships carrying DG, HS, or MP, or IMO hazard or pollutant category C, high speed craft (HSC),
32 | * 10 = reserved for future amendment of navigational status for ships carrying dangerous goods (DG), harmful substances (HS) or marine pollutants (MP), or IMO hazard or pollutant category A, wing in grand (WIG);
33 | * 11-13 = reserved for future use,
34 | * 14 = AIS-SART (active),
35 | * 15 = not defined = default (also used by AIS-SART under test)
36 | */
37 | public enum NavigationalStatus {
38 |
39 | UNDER_WAY_USING_ENGINE(0),
40 | AT_ANCHOR(1),
41 | NOT_UNDER_COMMAND(2),
42 | RESTRICTED_MANOEUVRABILITY(3),
43 | CONSTRAINED_BY_HER_DRAUGHT(4),
44 | MOORED(5),
45 | AGROUND(6),
46 | ENGAGED_IN_FISHING(7),
47 | UNDER_WAY(8),
48 | UNDEFINED(15),
49 | AIS_SART(14)
50 | {
51 | public String prettyStatus() {
52 | return name().replace("_", "-");
53 | }
54 | };
55 |
56 | private final int code;
57 |
58 | NavigationalStatus(int code) {
59 | this.code = code;
60 | }
61 |
62 | public int getCode() {
63 | return code;
64 | }
65 |
66 | public static NavigationalStatus get(int intNavigationalStatus) {
67 | for (NavigationalStatus navigationalStatus : NavigationalStatus.values()) {
68 | if (intNavigationalStatus == navigationalStatus.code) {
69 | return navigationalStatus;
70 | }
71 | }
72 | return UNDEFINED;
73 | }
74 |
75 | public String prettyStatus() {
76 | String navStat = name().replace("_", " ");
77 | return navStat.substring(0, 1) + navStat.substring(1).toLowerCase();
78 | }
79 |
80 | @Override
81 | public String toString() {
82 | return prettyStatus();
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/ShipTypeColor.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message;
16 |
17 | import static java.util.Objects.requireNonNull;
18 |
19 | import java.util.HashMap;
20 |
21 | import dk.dma.ais.message.ShipTypeCargo.ShipType;
22 |
23 | /**
24 | * @author Kasper Nielsen
25 | */
26 | public enum ShipTypeColor {
27 | BLUE(ShipType.PASSENGER),
28 | GREY(ShipType.UNDEFINED, ShipType.UNKNOWN),
29 | GREEN(ShipType.CARGO),
30 | ORANGE(ShipType.FISHING),
31 | PURPLE(ShipType.SAILING, ShipType.PLEASURE),
32 | RED(ShipType.TANKER),
33 | TURQUOISE,
34 | YELLOW(ShipType.HSC, ShipType.WIG);
35 |
36 | private static final HashMap REVERSE_LOOKUP = new HashMap();
37 | private final ShipType[] shipTypes;
38 |
39 | static {
40 | for (ShipTypeColor shipTypeColor : ShipTypeColor.values()) {
41 | for (ShipType shipType : shipTypeColor.shipTypes) {
42 | REVERSE_LOOKUP.put(shipType, shipTypeColor);
43 | }
44 | }
45 | }
46 |
47 | private ShipTypeColor(ShipType... shipTypes) {
48 | this.shipTypes = shipTypes;
49 | }
50 |
51 | public ShipType[] getShipTypes() {
52 | return shipTypes;
53 | }
54 |
55 | public static ShipTypeColor getColor(ShipType type) {
56 | //ShipTypeColor c = REVERSE_LOOKUP.get(requireNonNull(type)); // Min API level 19
57 | final ShipTypeColor c = type==null ? null : REVERSE_LOOKUP.get(type);
58 | return c == null ? ShipTypeColor.TURQUOISE : c;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/AddressedAreaNotice.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 | import dk.dma.ais.binary.BinArray;
18 | import dk.dma.ais.binary.SixbitException;
19 |
20 | /**
21 | * Addressed area notice ASM
22 | */
23 | public class AddressedAreaNotice extends AreaNotice {
24 |
25 | public AddressedAreaNotice() {
26 | super(23);
27 | }
28 |
29 | public AddressedAreaNotice(BinArray binArray) throws SixbitException {
30 | super(23, binArray);
31 | }
32 |
33 | @Override
34 | public String toString() {
35 | StringBuilder builder = new StringBuilder();
36 | builder.append("AddressedAreaNotice [");
37 | builder.append(super.toString());
38 | builder.append("]");
39 | return builder.toString();
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/AddressedRouteInformation.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 | import dk.dma.ais.binary.BinArray;
18 | import dk.dma.ais.binary.SixbitException;
19 |
20 | public class AddressedRouteInformation extends RouteInformation {
21 |
22 | public AddressedRouteInformation() {
23 | super(1, 28);
24 | }
25 |
26 | public AddressedRouteInformation(BinArray binArray) throws SixbitException {
27 | super(1, 28, binArray);
28 | }
29 |
30 | @Override
31 | public String toString() {
32 | StringBuilder builder = new StringBuilder();
33 | builder.append("AddressedRouteInformation [");
34 | builder.append(super.toString());
35 | builder.append("]");
36 | return builder.toString();
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/BroadcastAreaNotice.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 | import dk.dma.ais.binary.BinArray;
18 | import dk.dma.ais.binary.SixbitException;
19 |
20 | /**
21 | * Broadcast area notice ASM
22 | */
23 | public class BroadcastAreaNotice extends AreaNotice {
24 |
25 | public BroadcastAreaNotice() {
26 | super(22);
27 | }
28 |
29 | public BroadcastAreaNotice(BinArray binArray) throws SixbitException {
30 | super(22, binArray);
31 | }
32 |
33 | @Override
34 | public String toString() {
35 | StringBuilder builder = new StringBuilder();
36 | builder.append("BroadcastAreaNotice [");
37 | builder.append(super.toString());
38 | builder.append("]");
39 | return builder.toString();
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/BroadcastIntendedRoute.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 | import dk.dma.ais.binary.BinArray;
18 | import dk.dma.ais.binary.SixbitException;
19 |
20 | /**
21 | * ASM for broadcasting a vessels intended route
22 | */
23 | public class BroadcastIntendedRoute extends RouteExchange {
24 |
25 | public static final int DAC = 219;
26 | public static final int FI = 1;
27 |
28 | public BroadcastIntendedRoute() {
29 | super(DAC, FI);
30 | }
31 |
32 | public BroadcastIntendedRoute(BinArray binArray) throws SixbitException {
33 | super(DAC, FI, binArray);
34 | }
35 |
36 | @Override
37 | public String toString() {
38 | StringBuilder builder = new StringBuilder();
39 | builder.append("BroadcastIntendedRoute [");
40 | builder.append(super.toString());
41 | builder.append("]");
42 | return builder.toString();
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/BroadcastRouteInformation.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 |
18 | import dk.dma.ais.binary.BinArray;
19 | import dk.dma.ais.binary.SixbitException;
20 |
21 | public class BroadcastRouteInformation extends RouteInformation {
22 |
23 | public BroadcastRouteInformation() {
24 | super(1, 27);
25 | }
26 |
27 | public BroadcastRouteInformation(BinArray binArray) throws SixbitException {
28 | super(1, 27, binArray);
29 | }
30 |
31 | @Override
32 | public String toString() {
33 | StringBuilder builder = new StringBuilder();
34 | builder.append("BroadcastRouteInformation [");
35 | builder.append(super.toString());
36 | builder.append("]");
37 | return builder.toString();
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/Capability.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 |
18 | import dk.dma.ais.binary.BinArray;
19 | import dk.dma.ais.binary.SixbitEncoder;
20 | import dk.dma.ais.binary.SixbitException;
21 |
22 | /**
23 | * Capability ASM
24 | */
25 | public class Capability extends AisApplicationMessage {
26 |
27 | private int reqDac; // 10 bits
28 | private int spare; // 70 bits
29 |
30 | public Capability() {
31 | super(1, 3);
32 | }
33 |
34 | public Capability(BinArray binArray) throws SixbitException {
35 | super(1, 3, binArray);
36 | }
37 |
38 | @Override
39 | public SixbitEncoder getEncoded() {
40 | SixbitEncoder encoder = new SixbitEncoder();
41 | encoder.addVal(reqDac, 10);
42 | encoder.addVal(spare, 70);
43 | return encoder;
44 | }
45 |
46 | @Override
47 | public void parse(BinArray binArray) throws SixbitException {
48 | this.reqDac = (int) binArray.getVal(10);
49 | }
50 |
51 | public int getReqDac() {
52 | return reqDac;
53 | }
54 |
55 | public void setReqDac(int reqDac) {
56 | this.reqDac = reqDac;
57 | }
58 |
59 | public int getSpare() {
60 | return spare;
61 | }
62 |
63 | public void setSpare(int spare) {
64 | this.spare = spare;
65 | }
66 |
67 | @Override
68 | public String toString() {
69 | StringBuilder builder = new StringBuilder();
70 | builder.append("[Capability: reqDac=");
71 | builder.append(reqDac);
72 | builder.append("]");
73 | return builder.toString();
74 | }
75 |
76 | }
77 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/RouteExchange.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 | import dk.dma.ais.binary.BinArray;
18 | import dk.dma.ais.binary.SixbitException;
19 |
20 | /**
21 | * Abstract base class for route information ASM DAC=219, FI=1,2
22 | */
23 | public abstract class RouteExchange extends RouteMessage {
24 |
25 | public RouteExchange(int dac, int fi) {
26 | super(dac, fi);
27 | }
28 |
29 | public RouteExchange(int dac, int fi, BinArray binArray) throws SixbitException {
30 | super(dac, fi, binArray);
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/message/binary/UnknownAsm.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.message.binary;
16 |
17 |
18 | import dk.dma.ais.binary.BinArray;
19 | import dk.dma.ais.binary.SixbitEncoder;
20 | import dk.dma.ais.binary.SixbitException;
21 | import dk.dma.ais.message.AisBinaryMessage;
22 |
23 | /**
24 | * Dummy message that represents an unknown ASM
25 | */
26 | public class UnknownAsm extends AisApplicationMessage {
27 |
28 | private BinArray binArray;
29 |
30 | public UnknownAsm(int dac, int fi) {
31 | super(dac, fi);
32 | }
33 |
34 | public UnknownAsm(AisBinaryMessage binaryMessage) {
35 | this(binaryMessage.getDac(), binaryMessage.getFi());
36 | this.binArray = binaryMessage.getData();
37 | }
38 |
39 | @Override
40 | public void parse(BinArray binArray) throws SixbitException {
41 | this.binArray = binArray;
42 | }
43 |
44 | @Override
45 | public SixbitEncoder getEncoded() {
46 | SixbitEncoder encoder = new SixbitEncoder();
47 | encoder.append(binArray);
48 | return encoder;
49 | }
50 |
51 | @Override
52 | public String toString() {
53 | StringBuilder builder = new StringBuilder();
54 | builder.append(super.toString());
55 | if (binArray != null) {
56 | builder.append(", binary length = ");
57 | builder.append(binArray.size());
58 | }
59 | builder.append("]");
60 | return builder.toString();
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/proprietary/GatehouseSourceTag.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.proprietary;
16 |
17 | import java.util.Date;
18 |
19 | import dk.dma.enav.model.Country;
20 |
21 |
22 | /**
23 | * An implementation of a IProprietarySourceTag for Gatehouse source tag
24 | */
25 | //@Immutable
26 | public class GatehouseSourceTag implements IProprietarySourceTag {
27 |
28 | private final Integer baseMmsi;
29 | private final Country country;
30 | private final String region;
31 | private final Date timestamp;
32 | private final String orgSentence;
33 |
34 | public GatehouseSourceTag(Integer baseMmsi, Country country, String region, Date timestamp, String orgSentence) {
35 | this.baseMmsi = baseMmsi;
36 | this.country = country;
37 | this.region = region;
38 | this.timestamp = timestamp;
39 | this.orgSentence = orgSentence;
40 | }
41 |
42 | public Integer getBaseMmsi() {
43 | return baseMmsi;
44 | }
45 |
46 | public Country getCountry() {
47 | return country;
48 | }
49 |
50 | public String getRegion() {
51 | return region;
52 | }
53 |
54 | public Date getTimestamp() {
55 | return timestamp;
56 | }
57 |
58 | public String getSentence() {
59 | return orgSentence;
60 | }
61 |
62 | @Override
63 | public String toString() {
64 | StringBuilder builder = new StringBuilder();
65 | builder.append("GatehouseSourceTag [baseMmsi=");
66 | builder.append(baseMmsi);
67 | builder.append(", country=");
68 | builder.append(country != null ? country.getTwoLetter() : "null");
69 | builder.append(", region=");
70 | builder.append(region);
71 | builder.append(", timestamp=");
72 | builder.append(timestamp);
73 | builder.append("]");
74 | return builder.toString();
75 | }
76 |
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/proprietary/IProprietarySourceTag.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.proprietary;
16 |
17 | import java.util.Date;
18 |
19 | import dk.dma.enav.model.Country;
20 |
21 |
22 |
23 | /**
24 | * Interface for proprietary source tags
25 | */
26 | public interface IProprietarySourceTag extends IProprietaryTag {
27 |
28 | /**
29 | * Time of message receival at source
30 | *
31 | * @return
32 | */
33 | Date getTimestamp();
34 |
35 | /**
36 | * Country origin of message
37 | *
38 | * @return
39 | */
40 | Country getCountry();
41 |
42 | /**
43 | * Unique region identifier
44 | *
45 | * @return
46 | */
47 | String getRegion();
48 |
49 | /**
50 | * Base station MMSI
51 | *
52 | * @return
53 | */
54 | Integer getBaseMmsi();
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/proprietary/IProprietaryTag.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.proprietary;
16 |
17 | /**
18 | * Interface for general proprietary tags
19 | */
20 | public interface IProprietaryTag {
21 |
22 | /**
23 | * Get the original sentence
24 | *
25 | * @return
26 | */
27 | String getSentence();
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/proprietary/ProprietaryFactory.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.proprietary;
16 |
17 | import static java.util.Objects.requireNonNull;
18 |
19 | import java.util.Collection;
20 | import java.util.Collections;
21 | import java.util.HashMap;
22 | import java.util.Map;
23 | import java.util.ServiceLoader;
24 |
25 | import dk.dma.ais.sentence.SentenceLine;
26 |
27 | /**
28 | *
29 | * @author Kasper Nielsen
30 | */
31 | public abstract class ProprietaryFactory {
32 |
33 | static Map ALL_FACTORIES;
34 |
35 | static {
36 | Map map = new HashMap();
37 | for (ProprietaryFactory f : ServiceLoader.load(ProprietaryFactory.class)) {
38 | // We should probably check that we do not have two factories with the same name
39 | map.put(f.prefix, f);
40 | }
41 | ALL_FACTORIES = Collections.unmodifiableMap(map);
42 | }
43 |
44 | private final String prefix;
45 |
46 | public ProprietaryFactory(String prefix) {
47 | //this.prefix = requireNonNull(prefix); // Min API level 19
48 | this.prefix=prefix;
49 |
50 | if (prefix==null || prefix.length() != 3) {
51 | throw new IllegalArgumentException("Prefix length must be exactly 3, was '" + prefix + "'");
52 | }
53 | }
54 |
55 | public String getPrefix() {
56 | return prefix;
57 | }
58 |
59 | /**
60 | * Return the tag for line, if matches, otherwise null is returned
61 | *
62 | * @param sl
63 | * @return
64 | */
65 | public abstract IProprietaryTag getTag(SentenceLine sl);
66 |
67 | public static Collection getAllFactories() {
68 | return ALL_FACTORIES.values();
69 | }
70 |
71 | public static IProprietaryTag parseTag(SentenceLine sl) {
72 | ProprietaryFactory psf = match(sl.getSentenceHead());
73 | return psf == null ? null : psf.getTag(sl);
74 | }
75 |
76 | public static boolean isProprietaryTag(String line) {
77 | return line != null && line.length() >= 5 && line.startsWith("$P");
78 | }
79 |
80 | public static ProprietaryFactory match(String line) {
81 | if (isProprietaryTag(line)) {
82 | String p = line.substring(2, 5);
83 | return ALL_FACTORIES.get(p);
84 | }
85 | return null;
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/sentence/AnySentence.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.sentence;
16 |
17 | import java.util.ArrayList;
18 | import java.util.List;
19 |
20 | import dk.dma.ais.binary.SixbitException;
21 |
22 |
23 | /**
24 | * Class to represent any sentence
25 | */
26 | public class AnySentence extends Sentence {
27 |
28 | List anyFields = new ArrayList();
29 |
30 | @Override
31 | public int parse(SentenceLine sl) throws SentenceException, SixbitException {
32 | // Do common parsing
33 | super.baseParse(sl);
34 | return 0;
35 | }
36 |
37 | @Override
38 | public String getEncoded() {
39 | super.encode();
40 | // Collections.copy(encodedFields, anyFields);
41 | for (String field : anyFields) {
42 | encodedFields.add(field);
43 | }
44 | return super.finalEncode();
45 | }
46 |
47 | public void addField(String field) {
48 | anyFields.add(field);
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/sentence/CommentBlockException.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.sentence;
16 |
17 | /**
18 | * Comment block exception
19 | */
20 | public class CommentBlockException extends Exception {
21 |
22 | private static final long serialVersionUID = 1L;
23 |
24 | public CommentBlockException(String msg) {
25 | super(msg);
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/sentence/ParametricSentence.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.sentence;
16 |
17 | /**
18 | * Abstract base class for parametric sentences like Abk
19 | */
20 | public abstract class ParametricSentence extends Sentence {
21 |
22 | /**
23 | * Base parse method to be used by extending classes
24 | */
25 | @Override
26 | protected void baseParse(SentenceLine sl) throws SentenceException {
27 | super.baseParse(sl);
28 |
29 | // Should at least have three fields
30 | if (sl.getFields().size() < 3) {
31 | throw new SentenceException("Sentence have less than three fields");
32 | }
33 |
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/ais/sentence/SentenceException.java:
--------------------------------------------------------------------------------
1 | /* Copyright (c) 2011 Danish Maritime Authority.
2 | *
3 | * Licensed under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License.
5 | * You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software
10 | * distributed under the License is distributed on an "AS IS" BASIS,
11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 | * See the License for the specific language governing permissions and
13 | * limitations under the License.
14 | */
15 | package dk.dma.ais.sentence;
16 |
17 | import java.util.Deque;
18 |
19 |
20 |
21 | /**
22 | * Exception class for exceptions related to sentences
23 | */
24 | public class SentenceException extends Exception {
25 |
26 | private static final long serialVersionUID = 1L;
27 |
28 | public SentenceException() {
29 | }
30 |
31 | public SentenceException(String msg) {
32 | super(msg);
33 | }
34 |
35 | private static String join(Deque sentenceTrace){
36 | StringBuilder sb=new StringBuilder();
37 | for (String l: sentenceTrace){
38 | if (sb.length()>0) sb.append("\n");
39 | sb.append(l);
40 | }
41 | return sb.toString();
42 | }
43 |
44 | public SentenceException(String msg, Deque sentenceTrace) {
45 | this(msg + "\nSentence trace:\n---\n" + join(sentenceTrace) + "\n---\n");
46 | }
47 |
48 | public SentenceException(SentenceException e, Deque sentenceTrace) {
49 | this(e.getMessage(), sentenceTrace);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/dk/dma/enav/model/geometry/Position.java:
--------------------------------------------------------------------------------
1 | package dk.dma.enav.model.geometry;
2 |
3 | /**
4 | * Created by andreas on 28.12.14.
5 | */
6 | public class Position {
7 | private double longitude;
8 | private double latitude;
9 | public Position(double lat,double lon){
10 | latitude=lat;
11 | longitude=lon;
12 | }
13 |
14 | public double getLongitude() {
15 | return longitude;
16 | }
17 |
18 | public double getLatitude() {
19 | return latitude;
20 | }
21 | public static boolean isValid(double latitude, double longitude) {
22 | return latitude <= 90 && latitude >= -90 && longitude <= 180 && longitude >= -180;
23 | }
24 | public static Position create( double latitude, double longitude) {
25 | return new Position(latitude, longitude);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/analytics/MyFirebaseAnalytics.java:
--------------------------------------------------------------------------------
1 | package net.videgro.analytics;
2 |
3 | import android.content.Context;
4 | import android.os.Bundle;
5 |
6 | import com.google.firebase.analytics.FirebaseAnalytics;
7 |
8 | public class MyFirebaseAnalytics {
9 | private static FirebaseAnalytics firebaseAnalytics=null;
10 |
11 | private static FirebaseAnalytics getFirebaseAnalyticsInstance(final Context context) {
12 | if (firebaseAnalytics == null) {
13 | firebaseAnalytics = FirebaseAnalytics.getInstance(context);
14 | }
15 | return firebaseAnalytics;
16 | }
17 |
18 | public static void logEvent(final Context context, final String category, final String action, final String label) {
19 | final Bundle bundle = new Bundle();
20 | bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY,category);
21 | bundle.putString(FirebaseAnalytics.Param.ITEM_NAME,label);
22 | getFirebaseAnalyticsInstance(context).logEvent(action.replaceAll(" ","_").replaceAll("-",""), bundle);
23 | }
24 |
25 | public static void logEvent(final Context context, final String category, final String action, final String label, final long value) {
26 | final Bundle bundle = new Bundle();
27 | bundle.putString(FirebaseAnalytics.Param.ITEM_CATEGORY,category);
28 | bundle.putString(FirebaseAnalytics.Param.ITEM_NAME,label);
29 | bundle.putString(FirebaseAnalytics.Param.VALUE,""+value);
30 | getFirebaseAnalyticsInstance(context).logEvent(action.replaceAll(" ","_").replaceAll("-",""), bundle);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/Analytics.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships;
2 |
3 | import android.content.Context;
4 |
5 | import net.videgro.analytics.MyFirebaseAnalytics;
6 |
7 | public final class Analytics {
8 | /* Package protected */
9 | static final String CATEGORY_WARNINGS="Warnings";
10 | public static final String CATEGORY_ERRORS="Errors";
11 | public static final String CATEGORY_STATISTICS="Statistics";
12 | public static final String CATEGORY_ANDROID_DEVICE="Device (Android)";
13 | public static final String CATEGORY_RTLSDR_DEVICE="Device (RTL-SDR)";
14 | public static final String CATEGORY_NMEA_REPEAT="NMEA Repeat";
15 | public static final String CATEGORY_AR="AR";
16 | public static final String CATEGORY_AR_ERRORS="AR Errors";
17 |
18 | private Analytics(){
19 | // Utility class, no public constructor
20 | }
21 |
22 | private static String cleanup(final String raw){
23 | // letters, digits or _ (underscores)
24 | // Maximum length 40
25 | final int maxLength=40;
26 |
27 | String result=raw;
28 | if (result!=null) {
29 | result = result.replaceAll("[^a-zA-Z0-9]", "_");
30 | if (result.length() > maxLength) {
31 | result = result.substring(0, maxLength - 1);
32 | }
33 | } else {
34 | result="";
35 | }
36 |
37 | return result;
38 | }
39 |
40 | public static synchronized void logEvent(final Context context,final String category,final String action,final String label) {
41 | MyFirebaseAnalytics.logEvent(context, category, cleanup(action), cleanup(label));
42 | }
43 |
44 | public static synchronized void logEvent(final Context context,final String category,final String action,final String label,final long value){
45 | MyFirebaseAnalytics.logEvent(context, category, cleanup(action), cleanup(label), value);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/Repeater.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships;
2 |
3 | import android.content.Context;
4 | import android.util.Log;
5 |
6 | import net.videgro.ships.tasks.domain.DatagramSocketConfig;
7 |
8 | import java.io.IOException;
9 | import java.net.DatagramPacket;
10 | import java.net.DatagramSocket;
11 | import java.net.InetAddress;
12 | import java.util.List;
13 |
14 | public class Repeater {
15 | private static final String TAG = "Repeater";
16 |
17 | private final Context context;
18 | private final List repeaters;
19 | private final boolean mustRepeatToCloud;
20 | private final MyFirebaseMessagingRepeater myFirebaseMessagingRepeater;
21 |
22 | public Repeater(final Context context,final List repeaters,final boolean mustRepeatToCloud){
23 | this.context=context;
24 | this.repeaters=repeaters;
25 | this.mustRepeatToCloud=mustRepeatToCloud;
26 | myFirebaseMessagingRepeater=new MyFirebaseMessagingRepeater(context);
27 | }
28 |
29 | public Context getContext() {
30 | return context;
31 | }
32 |
33 | /**
34 | * Repeat NMEA to other host(s) via UDP
35 | * @param nmea The NMEA sentence to repeat
36 | */
37 | public void repeatViaUdp(final String nmea){
38 | final String tag="repeatViaUdp - ";
39 |
40 | // Repeat to other host(s) via UDP
41 | for (final DatagramSocketConfig repeater : repeaters) {
42 | if (repeater != null) {
43 | try {
44 | final DatagramSocket serverSocketRepeater = new DatagramSocket();
45 | final byte[] nmeaAsByteArray = nmea.getBytes();
46 | final DatagramPacket packet = new DatagramPacket(nmeaAsByteArray, nmeaAsByteArray.length, InetAddress.getByName(repeater.getAddress()), repeater.getPort());
47 | serverSocketRepeater.send(packet);
48 | } catch (IllegalArgumentException e) {
49 | Analytics.logEvent(context, Analytics.CATEGORY_ERRORS, tag, e.getMessage());
50 | } catch (IOException e) {
51 | Log.e(TAG, tag, e);
52 | }
53 | }
54 | }
55 | }
56 |
57 | /**
58 | * Repeat NMEA o cloud (Firebase)
59 | * Will be send asynchronous in batches
60 | * @param nmea The NMEA sentence to repeat
61 | */
62 | public void repeatToCloud(final String nmea) {
63 | if (mustRepeatToCloud) {
64 | myFirebaseMessagingRepeater.broadcast(nmea);
65 | }
66 | }
67 |
68 | public void stopFirebaseMessaging(){
69 | myFirebaseMessagingRepeater.stop();
70 | }
71 |
72 | public void startFirebaseMessaging(){
73 | myFirebaseMessagingRepeater.start();
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/StartRtlSdrRequest.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships;
2 |
3 | public class StartRtlSdrRequest {
4 | private final String args;
5 | private final int fd;
6 | private final String uspfsPath;
7 |
8 | public StartRtlSdrRequest(String args, int fd, String uspfsPath) {
9 | this.args = args;
10 | this.fd = fd;
11 | this.uspfsPath = uspfsPath;
12 | }
13 |
14 | public String getArgs() {
15 | return args;
16 | }
17 |
18 | public int getFd() {
19 | return fd;
20 | }
21 |
22 | public String getUspfsPath() {
23 | return uspfsPath;
24 | }
25 |
26 | @Override
27 | public String toString() {
28 | return "StartRtlSdrRequest [args=" + args + ", fd=" + fd + ", uspfsPath=" + uspfsPath + "]";
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/activities/HelpActivity.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.activities;
2 |
3 | import android.os.Bundle;
4 |
5 | import androidx.appcompat.app.AppCompatActivity;
6 |
7 | import net.videgro.ships.fragments.HelpFragment;
8 |
9 | public class HelpActivity extends AppCompatActivity {
10 | @Override
11 | protected void onCreate(Bundle savedInstanceState) {
12 | super.onCreate(savedInstanceState);
13 |
14 | // Display the fragment as the main content.
15 | getSupportFragmentManager().beginTransaction().replace(android.R.id.content,new HelpFragment()).commit();
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/activities/SettingsActivity.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.activities;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.net.Uri;
6 | import android.os.Bundle;
7 | import android.preference.PreferenceManager;
8 | import android.view.View;
9 | import net.videgro.ships.Analytics;
10 | import net.videgro.ships.R;
11 | import net.videgro.ships.fragments.SettingsFragment;
12 |
13 | public class SettingsActivity extends Activity {
14 | private static final String TAG="SettingsActivity";
15 |
16 | @Override
17 | protected void onCreate(Bundle savedInstanceState) {
18 | super.onCreate(savedInstanceState);
19 |
20 | // Display the fragment as the main content.
21 | getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
22 | PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
23 | }
24 |
25 | public void onRequestRateClicked(View view){
26 | Analytics.logEvent(this,TAG, "onRequestRateClicked", "gotoGooglePlay");
27 | view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(view.getContext().getString(R.string.app_market_url)))) ;
28 | }
29 | }
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/ar/utils/PermissionUtils.kt:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.ar.utils
2 |
3 | import android.Manifest
4 | import android.app.Activity
5 | import android.content.Intent
6 | import android.content.pm.PackageManager
7 | import android.net.Uri
8 | import android.provider.Settings
9 | import androidx.core.app.ActivityCompat
10 |
11 | object PermissionUtils {
12 | private const val MULTIPLE_PERMISSION_CODE = 1
13 | private const val CAMERA_PERMISSION = Manifest.permission.CAMERA
14 | private val permissions = arrayOf(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION)
15 |
16 | fun hasLocationAndCameraPermissions(activity: Activity): Boolean {
17 | permissions.forEach { permission ->
18 | if (ActivityCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
19 | return false
20 | }
21 | }
22 | return true
23 | }
24 |
25 | fun requestCameraAndLocationPermissions(activity: Activity) {
26 | ActivityCompat.requestPermissions(
27 | activity, permissions, MULTIPLE_PERMISSION_CODE)
28 | }
29 |
30 | fun shouldShowRequestPermissionRationale(activity: Activity): Boolean {
31 | return ActivityCompat.shouldShowRequestPermissionRationale(activity, CAMERA_PERMISSION)
32 | }
33 |
34 | fun launchPermissionSettings(activity: Activity) {
35 | val intent = Intent()
36 | intent.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
37 | intent.data = Uri.fromParts("package", activity.packageName, null)
38 | activity.startActivity(intent)
39 | }
40 | }
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/fragments/HelpFragment.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.fragments;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.os.Bundle;
5 | import android.text.Html;
6 | import android.text.method.LinkMovementMethod;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 | import android.widget.RelativeLayout;
11 | import android.widget.TextView;
12 |
13 | import androidx.fragment.app.Fragment;
14 |
15 | import net.videgro.ships.R;
16 | import net.videgro.ships.Utils;
17 |
18 | public class HelpFragment extends Fragment {
19 | private static final String TAG = "HelpFragment";
20 |
21 | private RelativeLayout adView;
22 |
23 | @SuppressLint("NewApi")
24 | @Override
25 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 |
28 | final View rootView = inflater.inflate(R.layout.fragment_help, container, false);
29 |
30 | final TextView textView = (TextView)rootView.findViewById(R.id.textViewHelp);
31 | textView.setText(Html.fromHtml(getString(R.string.text_help)));
32 | textView.setMovementMethod(LinkMovementMethod.getInstance());
33 |
34 | final RelativeLayout adView = rootView.findViewById(R.id.adView);
35 |
36 | if (isAdded()) {
37 | Utils.loadAd(getActivity(),adView,getString(R.string.adUnitId_HelpFragment));
38 | }
39 |
40 | return rootView;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/fragments/internal/IndicatorAnimation.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.fragments.internal;
2 |
3 | import android.view.animation.AccelerateInterpolator;
4 | import android.view.animation.AlphaAnimation;
5 | import android.view.animation.Animation;
6 | import android.view.animation.AnimationSet;
7 | import android.view.animation.DecelerateInterpolator;
8 |
9 | public class IndicatorAnimation extends AnimationSet {
10 | private final static int DURATION=1000;
11 |
12 | public IndicatorAnimation(boolean shareInterpolator) {
13 | super(shareInterpolator);
14 |
15 | final Animation fadeIn = new AlphaAnimation(0,1);
16 | fadeIn.setInterpolator(new DecelerateInterpolator());
17 | fadeIn.setDuration(DURATION);
18 |
19 | final Animation fadeOut = new AlphaAnimation(1,0);
20 | fadeOut.setInterpolator(new AccelerateInterpolator());
21 | fadeOut.setStartOffset(DURATION);
22 | fadeOut.setDuration(DURATION);
23 |
24 | addAnimation(fadeIn);
25 | addAnimation(fadeOut);
26 | setFillAfter(true);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/fragments/internal/OpenDeviceResult.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.fragments.internal;
2 |
3 | public class OpenDeviceResult {
4 | public static final String TAG="OpenDeviceResult";
5 |
6 | private String message;
7 | private String deviceDescription;
8 | private int errorReason;
9 |
10 | // Package protected
11 | OpenDeviceResult(String message, String deviceDescription, int errorReason) {
12 | this.message = message;
13 | this.deviceDescription = deviceDescription;
14 | this.errorReason = errorReason;
15 | }
16 |
17 | public String getMessage() {
18 | return message;
19 | }
20 | public String getDeviceDescription() {
21 | return deviceDescription;
22 | }
23 | public int getErrorReason() {
24 | return errorReason;
25 | }
26 |
27 | @Override
28 | public String toString() {
29 | String result=message;
30 | if (deviceDescription!=null && !deviceDescription.isEmpty()){
31 | result+=" Device: "+deviceDescription;
32 | }
33 | return result;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/listeners/CalibrateListener.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.listeners;
2 |
3 | public interface CalibrateListener {
4 | boolean onTryPpm(boolean firstTry,int percentage,int ppm);
5 | void onCalibrateReady(int ppm);
6 | void onCalibrateFailed();
7 | void onCalibrateCancelled();
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/listeners/ImagePopupListener.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.listeners;
2 |
3 | public interface ImagePopupListener {
4 | void onImagePopupDispose(final int id);
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/listeners/NmeaReceivedListener.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.listeners;
2 |
3 | import net.videgro.ships.services.NmeaClientService;
4 |
5 | public interface NmeaReceivedListener {
6 | void onNmeaReceived(String line,final NmeaClientService.Source source);
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/listeners/OwnLocationReceivedListener.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.listeners;
2 |
3 | import android.location.Location;
4 |
5 | public interface OwnLocationReceivedListener {
6 | void onOwnLocationReceived(Location location);
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/listeners/ShipReceivedListener.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.listeners;
2 |
3 | import net.videgro.ships.nmea2ship.domain.Ship;
4 |
5 | public interface ShipReceivedListener {
6 | void onShipReceived(final Ship ship);
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/nmea2ship/Nmea2Ship.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.nmea2ship;
2 |
3 | import android.util.Log;
4 |
5 | import net.videgro.ships.nmea2ship.domain.Ship;
6 | import net.videgro.ships.services.NmeaClientService;
7 |
8 | import dk.dma.ais.binary.SixbitException;
9 | import dk.dma.ais.message.AisMessageException;
10 | import dk.dma.ais.packet.AisPacket;
11 | import dk.dma.ais.packet.AisPacketParser;
12 | import dk.dma.ais.sentence.SentenceException;
13 |
14 | public class Nmea2Ship {
15 | private static final String TAG="Nmea2Ship - ";
16 |
17 | private AisPacketParser aisPacketParser=new AisPacketParser();
18 | private final AisParser aisParser=new AisParser();
19 |
20 | public Nmea2Ship(){
21 | Log.i(TAG,"constructor");
22 | }
23 |
24 | public Ship onMessage(final String line, final NmeaClientService.Source source){
25 | Ship result=null;
26 | AisPacket aisPacket=null;
27 | try {
28 | aisPacket = aisPacketParser.readLine(line);
29 | } catch (SentenceException e) {
30 | Log.e(TAG,"onMessage",e);
31 | }
32 |
33 | if (aisPacket!=null){
34 | try {
35 | result=aisParser.parse(aisPacket.getAisMessage());
36 |
37 | switch (source) {
38 | case INTERNAL:
39 | result.setSource(Ship.Source.INTERNAL);
40 | break;
41 | case EXTERNAL:
42 | result.setSource(Ship.Source.EXTERNAL);
43 | break;
44 | case CLOUD:
45 | result.setSource(Ship.Source.CLOUD);
46 | break;
47 | default:
48 | // Nothing to do
49 | break;
50 | } // End switch
51 |
52 | } catch (AisMessageException | SixbitException e) {
53 | Log.e(TAG,"onMessage",e);
54 | }
55 | }
56 |
57 | return result;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/preferences/PromoPreferenceRateMe.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.preferences;
2 |
3 | import android.content.Context;
4 | import android.preference.Preference;
5 | import android.util.AttributeSet;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 |
10 | import net.videgro.ships.R;
11 |
12 | public class PromoPreferenceRateMe extends Preference {
13 |
14 | public PromoPreferenceRateMe(Context context) {
15 | super(context, null);
16 | }
17 |
18 | public PromoPreferenceRateMe(Context context, AttributeSet attrs) {
19 | super(context, attrs);
20 | }
21 |
22 | @Override
23 | protected View onCreateView(ViewGroup parent) {
24 | super.onCreateView(parent);
25 | final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
26 | return inflater!=null ? inflater.inflate(R.layout.promo_rate_me, null) : null;
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/services/MyFirebaseMessagingService.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.services;
2 |
3 | import android.content.Intent;
4 | import android.util.Log;
5 |
6 | import androidx.annotation.NonNull;
7 | import androidx.localbroadcastmanager.content.LocalBroadcastManager;
8 |
9 | import com.google.firebase.messaging.FirebaseMessaging;
10 | import com.google.firebase.messaging.FirebaseMessagingService;
11 | import com.google.firebase.messaging.RemoteMessage;
12 |
13 | import net.videgro.ships.MyFirebaseMessagingRepeater;
14 |
15 | public class MyFirebaseMessagingService extends FirebaseMessagingService {
16 | private static final String TAG = "FbMsgSrv";
17 |
18 | private LocalBroadcastManager broadcaster;
19 |
20 | public final static String MESSAGING_TOPIC="nmea";
21 | public final static String LOCAL_BROADCAST_TOPIC="BroadcastNmeaData";
22 | public final static String LOCAL_BROADCAST_DATA="NmeaData";
23 |
24 | @Override
25 | public void onCreate() {
26 | broadcaster = LocalBroadcastManager.getInstance(this);
27 | FirebaseMessaging.getInstance().subscribeToTopic(MESSAGING_TOPIC);
28 | }
29 |
30 | @Override
31 | public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
32 | final String nmeas=remoteMessage.getData().get(MyFirebaseMessagingRepeater.JSON_DATA_FIELD);
33 | Log.v(TAG,"NMEAs received: "+nmeas);
34 | final Intent intent = new Intent(LOCAL_BROADCAST_TOPIC);
35 | intent.putExtra(LOCAL_BROADCAST_DATA, nmeas);
36 | broadcaster.sendBroadcast(intent);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/services/RtlSdrService.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.services;
2 |
3 | import android.app.Service;
4 |
5 | import net.videgro.ships.StartRtlSdrRequest;
6 |
7 | public abstract class RtlSdrService extends Service {
8 |
9 | abstract public void startRtlSdr(final StartRtlSdrRequest startAisRequest);
10 | abstract public boolean stopRtlSdr();
11 | abstract public boolean isRtlSdrRunning();
12 | abstract public boolean registerListener(final RtlSdrServiceListener listener);
13 | abstract public boolean unregisterListener(final RtlSdrServiceListener listener);
14 | abstract public boolean changePpm(final int newPpm);
15 |
16 | public interface RtlSdrServiceListener {
17 | void onRtlSdrStarted();
18 | void onRtlSdrStopped();
19 | void onRtlSdrException(final int exitCode);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/services/internal/NmeaMessagesCache.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.services.internal;
2 |
3 | import android.os.AsyncTask;
4 | import android.util.Log;
5 |
6 | import net.videgro.ships.Repeater;
7 | import net.videgro.ships.tasks.ProcessCachedMessagesTask;
8 |
9 | import java.io.BufferedWriter;
10 | import java.io.File;
11 | import java.io.FileWriter;
12 | import java.io.IOException;
13 |
14 | public class NmeaMessagesCache {
15 | private static final String TAG = "NmeaMessagesCache";
16 |
17 | private final File cacheFile;
18 | private final Repeater repeater;
19 |
20 | public NmeaMessagesCache(final File cacheDirectory, final Repeater repeater) {
21 | cacheFile = new File(cacheDirectory, "nmea.cache");
22 | this.repeater = repeater;
23 | }
24 |
25 | public void add(final String nmea) {
26 | final String tag = "cacheDatagramPacket - ";
27 | try (final FileWriter fw = new FileWriter(cacheFile, true); final BufferedWriter bw = new BufferedWriter(fw)) {
28 | bw.write(nmea + "\n");
29 | } catch (IOException e) {
30 | Log.e(TAG, tag, e);
31 | }
32 | }
33 |
34 | public void processCachedMessages() {
35 | // Contains network actions, not allowed on main thread: so execute it as task.
36 | final ProcessCachedMessagesTask task = new ProcessCachedMessagesTask(cacheFile, repeater);
37 | task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/tasks/HttpCacheFifoTask.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.tasks;
2 |
3 | import java.io.File;
4 | import java.util.Arrays;
5 | import java.util.Comparator;
6 | import java.util.concurrent.Callable;
7 |
8 | import android.util.Log;
9 |
10 | public class HttpCacheFifoTask implements Callable {
11 | private static final String TAG = "HttpCacheFifoTask";
12 |
13 | private final File cacheDir;
14 | private final long maxDiskUsageInBytes;
15 |
16 | private long totalDeletedBytes = 0;
17 | private int totalDeletedFiles = 0;
18 |
19 | public HttpCacheFifoTask(final File cacheDir, final long maxDiskUsageInBytes) {
20 | this.cacheDir = cacheDir;
21 | this.maxDiskUsageInBytes = maxDiskUsageInBytes;
22 | }
23 |
24 | @Override
25 | public String call() {
26 |
27 | // Get the size of the directory
28 | long dirSize = retrieveDirSize(cacheDir);
29 |
30 | if (dirSize > maxDiskUsageInBytes){
31 |
32 | // Get a orderded (by last modified) list of files
33 | final File[] files = cacheDir.listFiles();
34 | if (files != null && files.length > 0) {
35 | Arrays.sort(files, new Comparator() {
36 | public int compare(File f1, File f2) {
37 | return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified());
38 | }
39 | });
40 | }
41 |
42 | int victimId=0;
43 |
44 | while (files!=null && dirSize > maxDiskUsageInBytes && victimId < files.length) {
45 | final File victim = files[victimId++];
46 | final long fileSize = victim.length();
47 | //Log.d(TAG,"Deleting file: "+victim+", Last modified: "+victim.lastModified()+", Size: "+fileSize+" bytes.");
48 |
49 | if (victim.delete()) {
50 | dirSize -= fileSize;
51 | totalDeletedBytes += fileSize;
52 | totalDeletedFiles++;
53 | }
54 | }
55 | }
56 |
57 | final String result="dirSize: "+dirSize+", maxDiskUsageInBytes: "+maxDiskUsageInBytes+", totalDeletedBytes: "+totalDeletedBytes+", totalDeletedFiles: "+totalDeletedFiles;
58 | Log.d(TAG,result);
59 | return result;
60 | }
61 |
62 | private long retrieveDirSize(final File dir) {
63 | long size = 0;
64 | final File[] files = dir.listFiles();
65 | if (files != null) {
66 | for (final File file : files) {
67 | if (file.isFile()) {
68 | size += file.length();
69 | } else {
70 | size += retrieveDirSize(file);
71 | }
72 | }
73 | }
74 | return size;
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/tasks/NmeaFirebaseMessagingClientTask.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.tasks;
2 |
3 | import android.os.AsyncTask;
4 | import android.util.Log;
5 |
6 | import net.videgro.ships.MyFirebaseMessagingRepeater;
7 | import net.videgro.ships.listeners.NmeaReceivedListener;
8 | import net.videgro.ships.services.NmeaClientService;
9 |
10 | import java.util.regex.Pattern;
11 |
12 | public class NmeaFirebaseMessagingClientTask extends AsyncTask {
13 | private static final String TAG = "NmeaFirebaseMsgCltTsk";
14 |
15 | private final NmeaReceivedListener listener;
16 | private final String nmeasRaw;
17 |
18 |
19 | public NmeaFirebaseMessagingClientTask(final NmeaReceivedListener listener, final String nmeasRaw) {
20 | this.listener = listener;
21 | this.nmeasRaw = nmeasRaw;
22 | }
23 |
24 | public String doInBackground(Void... params) {
25 | final String tag = "doInBackground - ";
26 | Thread.currentThread().setName(TAG);
27 |
28 | if (nmeasRaw != null) {
29 | final String[] nmeas = nmeasRaw.split(Pattern.quote(MyFirebaseMessagingRepeater.NMEA_SEP));
30 | for (final String nmea : nmeas) {
31 | if (!nmea.isEmpty()) {
32 | listener.onNmeaReceived(MyFirebaseMessagingRepeater.PREFIX_AIVDM + nmea, NmeaClientService.Source.CLOUD);
33 | }
34 | }
35 | }
36 |
37 | return "FINISHED";
38 | }
39 |
40 | public void onPostExecute(String result) {
41 | if (result != null) {
42 | Log.d(TAG, "Result: " + result);
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/tasks/NmeaUdpClientTask.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.tasks;
2 |
3 | import android.os.AsyncTask;
4 | import android.util.Log;
5 |
6 | import net.videgro.ships.listeners.NmeaReceivedListener;
7 | import net.videgro.ships.services.NmeaClientService;
8 | import net.videgro.ships.tasks.domain.DatagramSocketConfig;
9 |
10 | import java.io.IOException;
11 | import java.net.DatagramPacket;
12 | import java.net.DatagramSocket;
13 | import java.net.InetAddress;
14 |
15 | public class NmeaUdpClientTask extends AsyncTask {
16 | private static final String TAG = "NmeaUdpClientTask";
17 |
18 | private final DatagramSocketConfig datagramSocketConfig;
19 |
20 | private final NmeaReceivedListener listener;
21 | private final NmeaClientService.Source source;
22 |
23 | private DatagramSocket socket;
24 | private boolean stopped=false;
25 |
26 | public NmeaUdpClientTask(final NmeaReceivedListener listener,final NmeaClientService.Source source,final DatagramSocketConfig datagramSocketConfig) {
27 | this.listener = listener;
28 | this.source = source;
29 | this.datagramSocketConfig = datagramSocketConfig;
30 | }
31 |
32 | public void stop(){
33 | stopped=true;
34 |
35 | if (socket!=null){
36 | // Will stop the socket.receive() call blocking
37 | socket.close();
38 | }
39 | }
40 |
41 | public String doInBackground(Void... params) {
42 | final String tag = "doInBackground - ";
43 | Thread.currentThread().setName(TAG+datagramSocketConfig);
44 |
45 | try {
46 | socket = new DatagramSocket(datagramSocketConfig.getPort(), InetAddress.getByName(datagramSocketConfig.getAddress()));
47 | Log.d(TAG, "Listening on UDP: " + datagramSocketConfig);
48 |
49 | byte[] receiveData = new byte[1024];
50 | final DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
51 |
52 | while (!stopped) {
53 | socket.receive(receivePacket);
54 |
55 | // Split received data into lines (strings)
56 | final String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength());
57 | final String[] lines = sentence.split("\\r?\\n");
58 |
59 | for (final String line : lines) {
60 | Log.v(TAG, tag + "NMEA received - " + line);
61 | listener.onNmeaReceived(line,source);
62 | }
63 | }
64 | } catch (IOException e) {
65 | if (stopped){
66 | Log.i(TAG, tag+"Task has been stopped and socket closed. Ignore this exception.", e);
67 | } else {
68 | Log.e(TAG, tag, e);
69 | }
70 | } finally {
71 | if (socket!=null && !socket.isClosed()){
72 | socket.close();
73 | socket=null;
74 | }
75 | }
76 |
77 | return "FINISHED";
78 | }
79 |
80 | public void onPostExecute(String result) {
81 | if (result != null) {
82 | Log.d(TAG, "Result: " + result);
83 | }
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/tasks/ProcessCachedMessagesTask.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.tasks;
2 |
3 | import android.os.AsyncTask;
4 | import android.util.Log;
5 |
6 | import net.videgro.ships.Analytics;
7 | import net.videgro.ships.Repeater;
8 |
9 | import java.io.BufferedReader;
10 | import java.io.File;
11 | import java.io.FileReader;
12 | import java.io.IOException;
13 |
14 | public class ProcessCachedMessagesTask extends AsyncTask {
15 | private static final String TAG = "ProcessCachedMsgTask";
16 |
17 | private final File cacheFile;
18 | private final Repeater repeater;
19 |
20 | public ProcessCachedMessagesTask(final File cacheFile,final Repeater repeater) {
21 | this.cacheFile = cacheFile;
22 | this.repeater = repeater;
23 | }
24 |
25 | public Integer doInBackground(Void... params) {
26 | final String tag = "doInBackground - ";
27 | Thread.currentThread().setName(TAG);
28 |
29 | int numLines=0;
30 |
31 | if (cacheFile.exists()) {
32 | try (final BufferedReader reader = new BufferedReader(new FileReader(cacheFile))) {
33 | String line;
34 |
35 | while ((line = reader.readLine()) != null) {
36 | repeater.repeatViaUdp(line);
37 | repeater.repeatToCloud(line);
38 | numLines++;
39 | }
40 | } catch (IOException e) {
41 | Log.e(TAG, tag, e);
42 | } finally {
43 | //noinspection ResultOfMethodCallIgnored
44 | cacheFile.delete();
45 | }
46 | }
47 | return numLines;
48 | }
49 |
50 | public void onPostExecute(Integer result) {
51 | if (result != null) {
52 | Log.d(TAG, "Result: " + result);
53 | Analytics.logEvent(repeater.getContext(),Analytics.CATEGORY_NMEA_REPEAT, "Numer_of_processed_cached_messages",String.valueOf(result));
54 | }
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/ships/tasks/domain/DatagramSocketConfig.java:
--------------------------------------------------------------------------------
1 | package net.videgro.ships.tasks.domain;
2 |
3 | public class DatagramSocketConfig{
4 | private String address;
5 | private int port;
6 |
7 | public DatagramSocketConfig(String address, int port) {
8 | this.address = address;
9 | this.port = port;
10 | }
11 |
12 | public String getAddress() {
13 | return address;
14 | }
15 |
16 | public int getPort() {
17 | return port;
18 | }
19 |
20 | @Override
21 | public String toString() {
22 | return address+":"+port;
23 | }
24 |
25 | @Override
26 | public boolean equals(Object o) {
27 | if (this == o) {
28 | return true;
29 | }
30 | if (o == null || getClass() != o.getClass()) {
31 | return false;
32 | }
33 |
34 | DatagramSocketConfig that = (DatagramSocketConfig) o;
35 |
36 | if (port != that.port) {
37 | return false;
38 | }
39 | return address.equals(that.address);
40 | }
41 |
42 | @Override
43 | public int hashCode() {
44 | int result = address.hashCode();
45 | result = 31 * result + port;
46 | return result;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/usb/SupportedDevice.java:
--------------------------------------------------------------------------------
1 | package net.videgro.usb;
2 |
3 | import android.util.Pair;
4 |
5 | public class SupportedDevice {
6 | private final Pair vendorAndProductId;
7 | private final String description;
8 |
9 | // Package protected
10 | SupportedDevice(Pair vendorAndProductId, String description) {
11 | this.vendorAndProductId = vendorAndProductId;
12 | this.description = description;
13 | }
14 |
15 | // Package protected
16 | Pair getVendorAndProductId() {
17 | return vendorAndProductId;
18 | }
19 |
20 | public String getDescription() {
21 | return description;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/usb/rtlsdr/RtlSdrDevice.java:
--------------------------------------------------------------------------------
1 | package net.videgro.usb.rtlsdr;
2 |
3 | import android.hardware.usb.UsbDevice;
4 | import android.os.Parcel;
5 | import android.os.Parcelable;
6 |
7 | public class RtlSdrDevice implements Parcelable {
8 | private final UsbDevice usbDevice;
9 | private final String friendlyName;
10 |
11 | public RtlSdrDevice(final UsbDevice usbDevice,final String friendlyName){
12 | this.usbDevice=usbDevice;
13 | this.friendlyName=friendlyName;
14 | }
15 | public static final Parcelable.Creator CREATOR =
16 | new Parcelable.Creator() {
17 | public RtlSdrDevice createFromParcel(Parcel in) {
18 | final Parcelable usbDevice=in.readParcelable(UsbDevice.class.getClassLoader());
19 | if (usbDevice==null){
20 | throw new IllegalArgumentException("parcelable is null");
21 | }
22 |
23 | final String friendlyName=in.readString();
24 |
25 | return new RtlSdrDevice((UsbDevice)usbDevice,friendlyName);
26 | }
27 |
28 | public RtlSdrDevice[] newArray(int size) {
29 | return new RtlSdrDevice[size];
30 | }
31 | };
32 |
33 | public String getFriendlyName() {
34 | return friendlyName;
35 | }
36 |
37 | public UsbDevice getUsbDevice(){
38 | return usbDevice;
39 | }
40 |
41 | @Override
42 | public int describeContents() {
43 | return 0;
44 | }
45 |
46 | @Override
47 | public void writeToParcel(Parcel dest, int flags) {
48 | dest.writeParcelable(usbDevice,flags);
49 | dest.writeString(friendlyName);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/usb/rtlsdr/RtlSdrDeviceProvider.java:
--------------------------------------------------------------------------------
1 | package net.videgro.usb.rtlsdr;
2 |
3 | import android.content.Context;
4 |
5 | import java.util.List;
6 |
7 | public interface RtlSdrDeviceProvider {
8 | List retrieveDevices(Context context);
9 |
10 | String getName();
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/net/videgro/usb/rtlsdr/RtlSdrDeviceProviderImpl.java:
--------------------------------------------------------------------------------
1 | package net.videgro.usb.rtlsdr;
2 |
3 | import android.content.Context;
4 |
5 | import net.videgro.usb.UsbUtils;
6 |
7 | import java.util.List;
8 |
9 | public class RtlSdrDeviceProviderImpl implements RtlSdrDeviceProvider {
10 | @Override
11 | public List retrieveDevices(final Context context) {
12 | return UsbUtils.retrieveAvailableUsbDevices(context);
13 | }
14 |
15 | @Override
16 | public String getName() {
17 | return "RTL-SDR";
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/jni/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.6.0)
2 |
3 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -DLIBUSB_DESCRIBE=\"\" -O3 -fno-builtin-printf -fno-builtin-fprintf")
4 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=pointer-to-int-cast -Werror=int-to-pointer-cast -Werror=shorten-64-to-32 -Werror=implicit-function-declaration")
5 |
6 | find_library(
7 | log-lib
8 | log
9 | )
10 |
11 | add_library(
12 | # Specifies the name of the library.
13 | NativeRtlSdr
14 |
15 | # Sets the library as a shared library.
16 | SHARED
17 |
18 | # Provides a relative path to source file(s).
19 | libusb/libusb/core.c
20 | libusb/libusb/descriptor.c
21 | libusb/libusb/hotplug.c
22 | libusb/libusb/io.c
23 | libusb/libusb/sync.c
24 | libusb/libusb/strerror.c
25 | libusb/libusb/os/linux_usbfs.c
26 | libusb/libusb/os/poll_posix.c
27 | libusb/libusb/os/threads_posix.c
28 | libusb/libusb/os/linux_netlink.c
29 | rtl-sdr/src/rtl-sdr-android.c
30 | rtl-sdr/src/convenience/convenience.c
31 | rtl-sdr/src/tuner_e4k.c
32 | rtl-sdr/src/tuner_fc0012.c
33 | rtl-sdr/src/tuner_fc0013.c
34 | rtl-sdr/src/tuner_fc2580.c
35 | rtl-sdr/src/tuner_r82xx.c
36 | rtl-sdr/src/rtl_test.c
37 | rtl-ais/main.c
38 | rtl-ais/rtl_ais.c
39 | rtl-ais/aisdecoder/aisdecoder.c
40 | rtl-ais/aisdecoder/sounddecoder.c
41 | rtl-ais/aisdecoder/lib/receiver.c
42 | rtl-ais/aisdecoder/lib/protodec.c
43 | rtl-ais/aisdecoder/lib/hmalloc.c
44 | rtl-ais/aisdecoder/lib/filter.c
45 | rtl-ais/tcp_listener/tcp_listener.c
46 | NativeRtlSdrUtils.cpp
47 | NativeRtlSdr.cpp
48 | )
49 |
50 | # Specifies a path to native header files.
51 | include_directories(
52 | .
53 | libusb
54 | libusb/android
55 | libusb/libusb
56 | libusb/libusb/os
57 | rtl-sdr/include
58 | rtl-sdr/src
59 | rtl-ais
60 | rtl-ais/aisdecoder
61 | rtl-ais/aisdecoder/lib
62 | )
63 |
64 | target_link_libraries(
65 | NativeRtlSdr
66 | ${log-lib}
67 | )
68 |
--------------------------------------------------------------------------------
/app/src/main/jni/NativeRtlSdr.h:
--------------------------------------------------------------------------------
1 | /* DO NOT EDIT THIS FILE - it is machine generated */
2 | #include
3 | /* Header for class net_videgro_ships_bridge_NativeRtlSdr */
4 |
5 | #ifndef _Included_net_videgro_ships_bridge_NativeRtlSdr
6 | #define _Included_net_videgro_ships_bridge_NativeRtlSdr
7 | #ifdef __cplusplus
8 | extern "C" {
9 | #endif
10 | /*
11 | * Class: net_videgro_ships_bridge_NativeRtlSdr
12 | * Method: startRtlSdrAis
13 | * Signature: (Ljava/lang/String;ILjava/lang/String;)V
14 | */
15 | JNIEXPORT void JNICALL Java_net_videgro_ships_bridge_NativeRtlSdr_startRtlSdrAis
16 | (JNIEnv *, jobject, jstring, jint, jstring);
17 |
18 | /*
19 | * Class: net_videgro_ships_bridge_NativeRtlSdr
20 | * Method: stopRtlSdrAis
21 | * Signature: ()V
22 | */
23 | JNIEXPORT void JNICALL Java_net_videgro_ships_bridge_NativeRtlSdr_stopRtlSdrAis
24 | (JNIEnv *, jobject);
25 |
26 | /*
27 | * Class: net_videgro_ships_bridge_NativeRtlSdr
28 | * Method: changeRtlSdrPpm
29 | * Signature: (I)V
30 | */
31 | JNIEXPORT void JNICALL Java_net_videgro_ships_bridge_NativeRtlSdr_changeRtlSdrPpm
32 | (JNIEnv *, jobject, jint);
33 |
34 | /*
35 | * Class: net_videgro_ships_bridge_NativeRtlSdr
36 | * Method: isRunningRtlSdrAis
37 | * Signature: ()Z
38 | */
39 | JNIEXPORT jboolean JNICALL Java_net_videgro_ships_bridge_NativeRtlSdr_isRunningRtlSdrAis
40 | (JNIEnv *, jobject);
41 |
42 | #ifdef __cplusplus
43 | }
44 | #endif
45 | #endif
46 |
--------------------------------------------------------------------------------
/app/src/main/jni/NativeRtlSdrUtils.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #ifdef __cplusplus
5 | extern "C" {
6 | #endif
7 |
8 | void strcpytrimmed(char *dest, const char *src, int dest_malloced_size) {
9 | const int charstocopy = dest_malloced_size - 1;
10 |
11 | dest[charstocopy] = 0;
12 |
13 | int firstspaceends;
14 | for (firstspaceends = 0;
15 | (firstspaceends < charstocopy) && (src[firstspaceends] == ' '); firstspaceends++);
16 |
17 | int lastspacestarts;
18 | for (lastspacestarts = charstocopy - 1;
19 | (lastspacestarts >= firstspaceends) && (src[lastspacestarts] == ' '); lastspacestarts--);
20 |
21 | const int srcrealsize = lastspacestarts - firstspaceends + 1;
22 |
23 | memcpy(dest, &src[firstspaceends], (srcrealsize) * sizeof(char));
24 | }
25 |
26 | void allocate_args_from_string(const char *string, int nargslength, int *argc, char ***argv) {
27 | int i;
28 |
29 | (*argc) = 1;
30 | for (i = 0; i < nargslength; i++) {
31 | if (string[i] == ' ') {
32 | (*argc)++;
33 | }
34 | }
35 |
36 | if ((*argc) == nargslength + 1) {
37 | (*argc) = 0;
38 | return;
39 | }
40 |
41 | //(*argv) = malloc(((*argc) + 2) * sizeof(char *));
42 | (*argv) = (char**)malloc(((*argc) + 2) * sizeof(char *));
43 | (*argv)[0] = 0;
44 | int id = 1;
45 | const char *laststart = string;
46 | int lastlength = 0;
47 | for (i = 0; i < nargslength - 1; i++) {
48 | lastlength++;
49 | if (string[i] == ' ' && string[i + 1] != ' ') {
50 | (*argv)[id] = (char *) malloc(lastlength);
51 | strcpytrimmed((*argv)[id++], laststart, lastlength);
52 |
53 | laststart = &string[i + 1];
54 | lastlength = 0;
55 | }
56 | }
57 | lastlength++;
58 | (*argv)[id] = (char *) malloc(lastlength + 1);
59 | strcpytrimmed((*argv)[id++], laststart, lastlength + 1);
60 | (*argv)[id] = 0;
61 | (*argc) = id;
62 | }
63 |
64 | #ifdef __cplusplus
65 | }
66 | #endif
--------------------------------------------------------------------------------
/app/src/main/jni/NativeRtlSdrUtils.h:
--------------------------------------------------------------------------------
1 | #ifndef SHIPS_NATIVERTLSDRUTILS_H
2 | #define SHIPS_NATIVERTLSDRUTILS_H
3 |
4 | #ifdef __cplusplus
5 | extern "C" {
6 | #endif
7 |
8 | void allocate_args_from_string(const char *string, int nargslength, int *argc, char ***argv);
9 |
10 | #ifdef __cplusplus
11 | }
12 | #endif
13 | #endif
--------------------------------------------------------------------------------
/app/src/main/jni/native2android.h:
--------------------------------------------------------------------------------
1 | #ifndef NATIVE_2_JAVA_H_
2 | #define NATIVE_2_JAVA_H_
3 |
4 | #include
5 |
6 | void send_message(const char *format, ...);
7 |
8 | void send_message_err(const char *format, ...);
9 |
10 | void send_exception(const int exception_code);
11 |
12 | void send_ready();
13 |
14 | //void thread_detach();
15 |
16 | #endif
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_menu_ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-hdpi/ic_menu_ar.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_stat_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-hdpi/ic_stat_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_stat_usb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-hdpi/ic_stat_usb.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/but_google_play_rate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/but_google_play_rate.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_green_sphere.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_green_sphere.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_information.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_information.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_information_ships.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_information_ships.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_menu_ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_menu_ar.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_stat_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_stat_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_stat_usb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/ic_stat_usb.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/rtlsdr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/rtlsdr.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/thumbs_down_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/thumbs_down_circle.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/thumbs_up_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/thumbs_up_circle.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/warning_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-mdpi/warning_icon.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_menu_ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xhdpi/ic_menu_ar.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_stat_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xhdpi/ic_stat_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_stat_usb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xhdpi/ic_stat_usb.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_menu_ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xxhdpi/ic_menu_ar.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_stat_notification.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xxhdpi/ic_stat_notification.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_stat_usb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xxhdpi/ic_stat_usb.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/ic_menu_ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable-xxxhdpi/ic_menu_ar.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ar_marker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable/ar_marker.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_menu_ar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/app/src/main/res/drawable/ic_menu_ar.png
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_augmented_reality_location.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
21 |
22 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/augmented_reality_location.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
14 |
15 |
21 |
22 |
28 |
29 |
39 |
40 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_help.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
20 |
26 |
27 |
28 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/progress.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/promo_rate_me.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/main.xml:
--------------------------------------------------------------------------------
1 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 | 64dp
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 | #000000
5 | #111111
6 | #555555
7 | #AAAAAA
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 16dp
5 | 16dp
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 127.0.0.1
5 | localhost
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | ext.kotlin_version = '1.9.20'
4 | repositories {
5 | mavenCentral()
6 | google()
7 | maven { url 'https://jitpack.io' }
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:8.2.2'
11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
12 | classpath 'com.google.gms:google-services:4.4.1' // google-services plugin
13 | classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.9' // Firebase Crashlytics Gradle plugin
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | /*
20 | * Still here:
21 | * Can not find "de.codecrafters.tableview:tableview:2.8.1" in other repos
22 | * org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find de.codecrafters.tableview:tableview:2.8.1.
23 | */
24 | jcenter()
25 |
26 | mavenCentral()
27 | google()
28 | maven { url 'https://jitpack.io' }
29 | maven { url "https://maven.google.com" }
30 | }
31 | }
32 |
33 | tasks.register('clean', Delete) {
34 | delete rootProject.buildDir
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | # Kotlin code style for this project: "official" or "obsolete":
5 | kotlin.code.style=official
6 | org.gradle.unsafe.configuration-cache=true
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/videgro/Ships/1fc65a032b3584daf8604a8e85086bb695988c91/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Mar 07 08:00:46 CET 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-all.zip
7 |
8 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------