├── jni
├── gradle.properties
├── img
├── easter.png
├── greyblue.png
└── update.sh
├── libs
├── javAPRSlib.jar
├── javAX25lib.jar
├── jsoundmodem.jar
├── usbserial-6.1.0-cdc.jar
└── mapsforge-map-0.3.0-jar-with-dependencies.jar
├── src
├── PacketCallback.java
├── AudioBufferProcessor.java
├── LoadingIndicator.scala
├── APRSdroidApplication.scala
├── Benchmark.scala
├── tncproto
│ ├── AfskProto.scala
│ ├── Tnc2Proto.scala
│ ├── AprsIsProto.scala
│ ├── TncProto.scala
│ ├── KissProto.scala
│ └── KenwoodProto.scala
├── backend
│ ├── AfskInWrapper.scala
│ ├── UdpUploader.scala
│ ├── HttpPostUploader.scala
│ ├── AfskDemodulator.scala
│ └── AfskUploader.scala
├── LocationReceiver.scala
├── LoadingListActivity.scala
├── SystemEventReceiver.scala
├── StationHelper.scala
├── PreferenceWithValue.java
├── MyAsyncTask.java
├── PrivacyPrefs.scala
├── NotificationPrefs.scala
├── ListPreferenceWithValue.java
├── APRSdroid.scala
├── LocationReceiver2.scala
├── HubActivity.scala
├── UnscaledBitmapLoader.java
├── BluetoothDevicePreference.java
├── location
│ ├── LocationSource.scala
│ └── FixedPosition.scala
├── PostListAdapter.scala
├── MessagingPrefs.scala
├── EditTextPreferenceWithValue.java
├── SymbolView.scala
├── DigiPrefs.scala
├── ConversationListAdapter.scala
├── IgatePrefs.scala
├── ProfileImportActivity.scala
├── LogActivity.scala
├── MainListActivity.scala
├── StationActivity.scala
├── MessageListAdapter.scala
├── ConversationsActivity.scala
├── PermissionHelper.scala
├── BackendPrefs.scala
├── OsmTileDownloader.java
├── MapMode.scala
├── LocationPrefs.scala
├── CompressedPrefs.scala
├── KeyfileImportActivity.scala
├── PrefSymbolAct.scala
├── ServiceNotifier.scala
└── PasscodeDialog.scala
├── res
├── drawable
│ ├── icon.png
│ ├── crosshair.png
│ └── ic_status.png
├── drawable-hdpi
│ ├── icon.png
│ ├── crosshair.png
│ └── ic_status.png
├── drawable-ldpi
│ ├── icon.png
│ └── ic_status.png
├── drawable-xhdpi
│ ├── icon.png
│ ├── crosshair.png
│ └── ic_status.png
├── drawable-xxhdpi
│ ├── icon.png
│ ├── crosshair.png
│ └── ic_status.png
├── drawable-xxxhdpi
│ ├── icon.png
│ ├── crosshair.png
│ └── ic_status.png
├── drawable-nodpi
│ └── allicons.png
├── layout
│ ├── textviews.xml
│ ├── googlemapview.xml
│ ├── buttons.xml
│ ├── mapview.xml
│ ├── conversations.xml
│ ├── main.xml
│ ├── listitem.xml
│ ├── message_act.xml
│ ├── mapcontrols.xml
│ ├── new_message_view.xml
│ ├── conversationview.xml
│ ├── stationactivity.xml
│ ├── prefsymbol.xml
│ ├── firstrunview.xml
│ ├── aboutview.xml
│ └── stationview.xml
├── xml
│ ├── file_paths.xml
│ ├── location.xml
│ ├── proto_tnc2.xml
│ ├── backend_udp.xml
│ ├── backend_http.xml
│ ├── backend.xml
│ ├── backend_usb.xml
│ ├── position_privacy.xml
│ ├── backend_digirig.xml
│ ├── proto_aprsis.xml
│ ├── compressed.xml
│ ├── proto_kiss.xml
│ ├── backend_tcptnc.xml
│ ├── proto_kiss_ble.xml
│ ├── backend_ble.xml
│ ├── proto_kenwood.xml
│ ├── location_periodic.xml
│ ├── location_periodic_imperial.xml
│ ├── digi.xml
│ ├── backend_bluetooth.xml
│ ├── proto_afsk.xml
│ ├── messaging.xml
│ ├── backend_tcp.xml
│ ├── location_manual.xml
│ ├── location_smartbeaconing.xml
│ ├── location_smartbeaconing_imperial.xml
│ ├── notifications.xml
│ └── igate.xml
├── menu
│ ├── custom.xml
│ ├── context_msg.xml
│ ├── options_prefs.xml
│ ├── options_activities.xml
│ ├── options_map.xml
│ ├── context_call.xml
│ └── options.xml
└── values
│ ├── styles.xml
│ ├── notrans.xml
│ ├── themes.xml
│ └── arrays.xml
├── lib
├── mips
│ └── libmultimon.so
├── x86
│ └── libmultimon.so
├── armeabi
│ └── libmultimon.so
├── mips64
│ └── libmultimon.so
├── x86_64
│ └── libmultimon.so
├── arm64-v8a
│ └── libmultimon.so
└── armeabi-v7a
│ └── libmultimon.so
├── .gitmodules
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── aprsdroid-release-7-24-25-latest.apk
├── test
└── java
│ └── org
│ └── aprsdroid
│ └── app
│ └── AprsPacketTests.java
├── .gitignore
├── project.properties
├── androidTest
└── java
│ └── org
│ └── aprsdroid
│ └── app
│ └── ExampleInstrumentedTest.java
├── activities.md
├── .travis.yml
├── asset-graphics
└── crosshair.svg
├── xml2po.sh
├── proguard.cfg
├── gradlew.bat
└── ChangeLog
/jni:
--------------------------------------------------------------------------------
1 | PacketDroid/jni
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 |
2 | android.useAndroidX=true
3 |
--------------------------------------------------------------------------------
/img/easter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/img/easter.png
--------------------------------------------------------------------------------
/img/greyblue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/img/greyblue.png
--------------------------------------------------------------------------------
/libs/javAPRSlib.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/libs/javAPRSlib.jar
--------------------------------------------------------------------------------
/libs/javAX25lib.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/libs/javAX25lib.jar
--------------------------------------------------------------------------------
/src/PacketCallback.java:
--------------------------------------------------------------------------------
1 | ../PacketDroid/src/com/jazzido/PacketDroid/PacketCallback.java
--------------------------------------------------------------------------------
/libs/jsoundmodem.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/libs/jsoundmodem.jar
--------------------------------------------------------------------------------
/res/drawable/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable/icon.png
--------------------------------------------------------------------------------
/lib/mips/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/mips/libmultimon.so
--------------------------------------------------------------------------------
/lib/x86/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/x86/libmultimon.so
--------------------------------------------------------------------------------
/src/AudioBufferProcessor.java:
--------------------------------------------------------------------------------
1 | ../PacketDroid/src/com/jazzido/PacketDroid/AudioBufferProcessor.java
--------------------------------------------------------------------------------
/lib/armeabi/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/armeabi/libmultimon.so
--------------------------------------------------------------------------------
/lib/mips64/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/mips64/libmultimon.so
--------------------------------------------------------------------------------
/lib/x86_64/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/x86_64/libmultimon.so
--------------------------------------------------------------------------------
/res/drawable-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-hdpi/icon.png
--------------------------------------------------------------------------------
/res/drawable-ldpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-ldpi/icon.png
--------------------------------------------------------------------------------
/res/drawable/crosshair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable/crosshair.png
--------------------------------------------------------------------------------
/res/drawable/ic_status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable/ic_status.png
--------------------------------------------------------------------------------
/lib/arm64-v8a/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/arm64-v8a/libmultimon.so
--------------------------------------------------------------------------------
/libs/usbserial-6.1.0-cdc.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/libs/usbserial-6.1.0-cdc.jar
--------------------------------------------------------------------------------
/res/drawable-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xhdpi/icon.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xxhdpi/icon.png
--------------------------------------------------------------------------------
/res/drawable-xxxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xxxhdpi/icon.png
--------------------------------------------------------------------------------
/lib/armeabi-v7a/libmultimon.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/lib/armeabi-v7a/libmultimon.so
--------------------------------------------------------------------------------
/res/drawable-hdpi/crosshair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-hdpi/crosshair.png
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-hdpi/ic_status.png
--------------------------------------------------------------------------------
/res/drawable-ldpi/ic_status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-ldpi/ic_status.png
--------------------------------------------------------------------------------
/res/drawable-nodpi/allicons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-nodpi/allicons.png
--------------------------------------------------------------------------------
/res/layout/textviews.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "PacketDroid"]
2 | path = PacketDroid
3 | url = https://github.com/ge0rg/PacketDroid.git
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/res/drawable-xhdpi/crosshair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xhdpi/crosshair.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xhdpi/ic_status.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/crosshair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xxhdpi/crosshair.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/ic_status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xxhdpi/ic_status.png
--------------------------------------------------------------------------------
/res/drawable-xxxhdpi/crosshair.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xxxhdpi/crosshair.png
--------------------------------------------------------------------------------
/res/drawable-xxxhdpi/ic_status.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/res/drawable-xxxhdpi/ic_status.png
--------------------------------------------------------------------------------
/aprsdroid-release-7-24-25-latest.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/aprsdroid-release-7-24-25-latest.apk
--------------------------------------------------------------------------------
/libs/mapsforge-map-0.3.0-jar-with-dependencies.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/na7q/aprsdroid/HEAD/libs/mapsforge-map-0.3.0-jar-with-dependencies.jar
--------------------------------------------------------------------------------
/src/LoadingIndicator.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | trait LoadingIndicator {
4 |
5 | def onStartLoading()
6 |
7 | def onStopLoading()
8 | }
9 |
--------------------------------------------------------------------------------
/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/test/java/org/aprsdroid/app/AprsPacketTests.java:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | public class AprsPacketTests {
8 | @Test
9 | public void testBasic() {
10 | assertEquals(18403, AprsPacket.passcode("AB1CD"));
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/APRSdroidApplication.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import android.app.Application
4 |
5 | class APRSdroidApplication extends Application {
6 |
7 | override def onCreate() {
8 | super.onCreate()
9 | ServiceNotifier.instance.setupChannels(this)
10 | MapModes.initialize(this)
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/res/menu/custom.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.swo
2 | *.swp
3 | *~
4 | .gradle/
5 | build/
6 | bin
7 | gen
8 | local.properties
9 | tools/proguard.jar
10 | tools/scala-compiler.jar
11 | tools/scala-library.jar
12 | res/layout/mapview.xml
13 | res/values/translators.xml
14 | res/values/version.xml
15 | tags
16 | translations/aprsdroid/
17 | translations/launchpad-*.tar.gz
18 | wiki/
19 |
--------------------------------------------------------------------------------
/res/menu/context_msg.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/res/menu/options_prefs.xml:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/src/Benchmark.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import _root_.android.util.Log
4 |
5 | object Benchmark {
6 | def apply[T](tag: String)(block: => T) : T = {
7 | val start = System.currentTimeMillis
8 | try {
9 | block
10 | } finally {
11 | val exectime = System.currentTimeMillis - start
12 | Log.d(tag, "exectuion time: %.3f s".formatLocal(null, exectime / 1000.0))
13 | }
14 | }
15 | }
16 |
17 |
18 |
--------------------------------------------------------------------------------
/res/layout/googlemapview.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/tncproto/AfskProto.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import _root_.android.util.Log
4 | import _root_.java.io.{InputStream, OutputStream}
5 |
6 | import _root_.net.ab0oo.aprs.parser._
7 |
8 | class AfskProto(service : AprsService, is : InputStream, os : OutputStream) extends TncProto(is, os) {
9 | val TAG = "APRSdroid.AfskProto"
10 |
11 | def readPacket() : String = {
12 | ""
13 | }
14 |
15 | def writePacket(p : APRSPacket) {
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/backend/AfskInWrapper.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import com.jazzido.PacketDroid.AudioBufferProcessor
4 |
5 | class AfskInWrapper(hq : Boolean, au : AfskUploader, in_type : Int, samplerate : Int) {
6 | var abp = if (!hq) new AudioBufferProcessor(au) else null
7 | var ad = if (hq) new AfskDemodulator(au, in_type, samplerate) else null
8 |
9 | def start() = if (!hq) abp.start() else ad.start()
10 | def close() = if (!hq) abp.stopRecording() else ad.close()
11 | }
12 |
--------------------------------------------------------------------------------
/res/layout/buttons.xml:
--------------------------------------------------------------------------------
1 |
4 |
11 |
18 |
19 |
--------------------------------------------------------------------------------
/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system use,
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 |
10 | # Project target.
11 | target=Google Inc.:Google APIs:19
12 |
13 | # work around yet another android SDK fuckup
14 | renderscript.opt.level=O0
15 |
--------------------------------------------------------------------------------
/res/layout/mapview.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/LocationReceiver.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import _root_.android.content.{BroadcastReceiver, Context, Intent, IntentFilter}
4 | import _root_.android.os.Handler
5 |
6 |
7 | class LocationReceiver(handler : Handler, callback : () => Unit) extends BroadcastReceiver {
8 | lazy val runnable = new Runnable() {
9 | override def run() {
10 | callback()
11 | }
12 | }
13 |
14 | override def onReceive(ctx : Context, i : Intent) {
15 | handler.removeCallbacks(runnable)
16 | handler.postDelayed(runnable, 100)
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/tncproto/Tnc2Proto.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 | import _root_.java.io.{BufferedReader, InputStream, InputStreamReader, OutputStream, OutputStreamWriter, PrintWriter}
3 |
4 | import _root_.net.ab0oo.aprs.parser._
5 |
6 | class Tnc2Proto(is : InputStream, os : OutputStream) extends TncProto(is, os) {
7 | val reader = new BufferedReader(new InputStreamReader(is), 256)
8 | val writer = new PrintWriter(new OutputStreamWriter(os), true)
9 |
10 | def readPacket() : String = reader.readLine()
11 | def writePacket(p : APRSPacket) = writer.println(p)
12 | }
13 |
--------------------------------------------------------------------------------
/src/tncproto/AprsIsProto.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 | import _root_.java.io.{BufferedReader, InputStream, InputStreamReader, OutputStream, OutputStreamWriter, PrintWriter}
3 |
4 | import _root_.net.ab0oo.aprs.parser._
5 |
6 | class AprsIsProto(service : AprsService, is : InputStream, os : OutputStream) extends Tnc2Proto(is, os) {
7 | val loginfilter = service.prefs.getLoginString() + service.prefs.getFilterString(service)
8 |
9 | service.postAddPost(StorageDatabase.Post.TYPE_TX,
10 | R.string.p_conn_aprsis, loginfilter)
11 | writer.println(loginfilter)
12 | }
13 |
--------------------------------------------------------------------------------
/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
--------------------------------------------------------------------------------
/res/xml/location.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/res/xml/proto_tnc2.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/res/values/notrans.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | srvr.aprs-is.net
5 |
6 | https://aprsdroid.org/
7 | /$
8 |
9 | https://aprsdroid.org/passcode/
10 |
11 | http://info.aprs.net/index.php?title=SmartBeaconing
12 | https://aprsdroid.org/kenwood/
13 |
14 |
15 |
--------------------------------------------------------------------------------
/res/xml/backend_udp.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/res/xml/backend_http.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/res/xml/backend.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/res/xml/backend_usb.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
7 |
8 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/img/update.sh:
--------------------------------------------------------------------------------
1 | IN=aprsdroid.svg
2 |
3 | inkscape -z -f $IN -C -d 60 -e aprsdroid48.png
4 | cp aprsdroid48.png ../res/drawable-ldpi/icon.png
5 |
6 | inkscape -z -f $IN -C -d 80 -e aprsdroid64.png
7 | cp aprsdroid64.png ../res/drawable/icon.png
8 |
9 | inkscape -z -f $IN -C -d 90 -e aprsdroid72.png
10 | cp aprsdroid72.png ../res/drawable-hdpi/icon.png
11 |
12 | inkscape -z -f $IN -C -d 120 -e ../res/drawable-xhdpi/icon.png
13 |
14 | inkscape -z -f aprsdroid-v11-notification.svg -C -d 60 -e ../res/drawable-xhdpi-v11/ic_status.png
15 | inkscape -z -f aprsdroid-v11-notification.svg -C -d 45 -e ../res/drawable-hdpi-v11/ic_status.png
16 | inkscape -z -f aprsdroid-v11-notification.svg -C -d 40 -e ../res/drawable-v11/ic_status.png
17 |
18 |
--------------------------------------------------------------------------------
/src/tncproto/TncProto.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 | import _root_.java.io.{InputStream, OutputStream}
3 |
4 | import _root_.net.ab0oo.aprs.parser._
5 |
6 | object KissConstants {
7 | val FEND = 0xC0
8 | val CONTROL_COMMAND = 0x06
9 | val RETURN = 0xEB
10 | }
11 |
12 |
13 | abstract class TncProto(is : InputStream, os : OutputStream) {
14 | import KissConstants._ // Import the constants from the shared object
15 |
16 | def readPacket() : String
17 | def writePacket(p : APRSPacket)
18 | def writeReturn(): Unit = {
19 | val frame = Array[Byte](
20 | FEND.toByte, // Start frame
21 | CONTROL_COMMAND.toByte, // Command byte
22 | RETURN.toByte, // Return command byte
23 | FEND.toByte) // End frame
24 | os.write(frame)
25 | os.flush()
26 | }
27 | def stop() {}
28 | }
29 |
--------------------------------------------------------------------------------
/src/LoadingListActivity.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import _root_.android.app.ListActivity
4 | import _root_.android.os.Bundle
5 | import _root_.android.view.Window
6 |
7 | class LoadingListActivity extends ListActivity
8 | with UIHelper {
9 |
10 | override def onCreate(savedInstanceState: Bundle) {
11 | super.onCreate(savedInstanceState)
12 | requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
13 | requestWindowFeature(Window.FEATURE_PROGRESS)
14 | }
15 |
16 | override def onStartLoading() {
17 | setProgressBarIndeterminateVisibility(true)
18 | }
19 |
20 | override def onStopLoading() {
21 | setProgressBarIndeterminateVisibility(false)
22 | }
23 |
24 | override def onResume() {
25 | super.onResume()
26 | setKeepScreenOn()
27 | setVolumeControls()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/SystemEventReceiver.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import android.content.{BroadcastReceiver, Context, Intent}
4 | import android.os.Build
5 |
6 | class SystemEventReceiver extends BroadcastReceiver {
7 | val TAG = "APRSdroid.SystemEventReceiver"
8 |
9 | override def onReceive(ctx : Context, i : Intent) {
10 | android.util.Log.d(TAG, "onReceive: " + i)
11 | val prefs = new PrefsWrapper(ctx)
12 | if (prefs.getBoolean("service_running", false)) {
13 | val i = AprsService.intent(ctx, AprsService.SERVICE)
14 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
15 | ctx.startForegroundService(i)
16 | else
17 | ctx.startService(i)
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/StationHelper.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import _root_.android.content.res.Configuration
4 | import _root_.android.view.{Menu, MenuItem}
5 |
6 | class StationHelper(title_id : Int) extends LoadingListActivity {
7 | lazy val targetcall = getIntent().getDataString()
8 |
9 | override def onResume() = {
10 | super.onResume()
11 | setLongTitle(title_id, targetcall)
12 | }
13 |
14 | override def onConfigurationChanged(c : Configuration) = {
15 | super.onConfigurationChanged(c)
16 | setLongTitle(title_id, targetcall)
17 | }
18 |
19 | override def onCreateOptionsMenu(menu : Menu) : Boolean = {
20 | getMenuInflater().inflate(R.menu.context_call, menu);
21 | true
22 | }
23 |
24 | override def onOptionsItemSelected(mi : MenuItem) : Boolean = {
25 | callsignAction(mi.getItemId, targetcall)
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/androidTest/java/org/aprsdroid/app/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app;
2 |
3 | import android.content.Context;
4 |
5 | import android.support.test.InstrumentationRegistry;
6 | import android.support.test.runner.AndroidJUnit4;
7 |
8 | import org.junit.Test;
9 | import org.junit.runner.RunWith;
10 |
11 | import static org.junit.Assert.*;
12 |
13 | /**
14 | * Instrumented test, which will execute on an Android device.
15 | *
16 | * @see Testing documentation
17 | */
18 | @RunWith(AndroidJUnit4.class)
19 | public class ExampleInstrumentedTest {
20 | @Test
21 | public void useAppContext() {
22 | // Context of the app under test.
23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
24 | assertEquals("org.aprsdroid.app", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/PreferenceWithValue.java:
--------------------------------------------------------------------------------
1 | package de.duenndns;
2 |
3 | import android.content.Context;
4 | import android.preference.Preference;
5 | import android.util.AttributeSet;
6 | import android.view.View;
7 |
8 | public class PreferenceWithValue extends Preference {
9 | CharSequence mSummary;
10 |
11 | public PreferenceWithValue(Context context, AttributeSet attrs) {
12 | super(context, attrs);
13 | }
14 |
15 | public PreferenceWithValue(Context context) {
16 | super(context);
17 | }
18 |
19 | private void setSummaryToText(String text) {
20 | if (mSummary == null)
21 | mSummary = getSummary();
22 | if (text == null || text.length() == 0)
23 | setSummary(mSummary);
24 | else
25 | setSummary(mSummary + ": " + text);
26 | }
27 | @Override
28 | protected void onBindView(View view) {
29 | super.onBindView(view);
30 | setSummaryToText(getSharedPreferences().getString(getKey(), ""));
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/backend/UdpUploader.scala:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app
2 |
3 | import _root_.android.location.Location
4 | import _root_.android.util.Log
5 | import _root_.java.net.{InetAddress, DatagramSocket, DatagramPacket}
6 | import _root_.net.ab0oo.aprs.parser.APRSPacket
7 |
8 | class UdpUploader(prefs : PrefsWrapper) extends AprsBackend(prefs) {
9 | val TAG = "APRSdroid.Udp"
10 | lazy val socket = new DatagramSocket()
11 | val host = prefs.getString("udp.server", "srvr.aprs-is.net")
12 |
13 | def start() = true
14 |
15 | def update(packet : APRSPacket) : String = {
16 | val (h, port) = AprsPacket.parseHostPort(host, 8080)
17 | val addr = InetAddress.getByName(h)
18 | val pbytes = (login + "\r\n" + packet + "\r\n").getBytes()
19 | socket.send(new DatagramPacket(pbytes, pbytes.length, addr, port))
20 | Log.d(TAG, "update(): sent '" + packet + "' to " + host)
21 | "UDP OK"
22 | }
23 |
24 | def stop() {
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/MyAsyncTask.java:
--------------------------------------------------------------------------------
1 | package org.aprsdroid.app;
2 |
3 | import android.os.AsyncTask;
4 |
5 | /**
6 | * Temporary workaround to solve a Scala compiler issue which shows up
7 | * at runtime with the error message
8 | * "java.lang.AbstractMethodError: abstract method not implemented"
9 | * for the missing method LookupTask.doInBackground(String... args).
10 | *
11 | * Our solution: the Java method doInBackground(String... args) forwards
12 | * the call to the Scala method doInBackground1(String[] args).
13 | */
14 | public abstract class MyAsyncTask