Skip to content

Commit efeb8ea

Browse files
committed
- added real-time monitoring activity for viewing C/N0 and AGC (Service interactions can be slightly buggy at start-up and shutdown, but the bugs should be hidden right now by excessive exception catching)
1 parent 6bee10b commit efeb8ea

20 files changed

Lines changed: 925 additions & 36 deletions

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ allprojects {
2020
repositories {
2121
google()
2222
jcenter()
23+
maven { url 'https://jitpack.io' } //for charts
2324
}
2425
}
2526

torgi/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ dependencies {
3636
//implementation fileTree(include: ['*.jar'], dir: 'libs')
3737
//implementation project(':geopackage-sdk')
3838

39+
implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3' //for charts
3940
implementation 'org.osmdroid:osmdroid-android:6.0.2'
4041
implementation 'mil.nga.geopackage:geopackage-android:3.0.2'
4142
implementation 'com.android.support:appcompat-v7:27.1.1'

torgi/src/main/AndroidManifest.xml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,20 @@
2222

2323
<activity
2424
android:name=".ui.MainActivity"
25-
android:label="@string/app_name"
26-
android:theme="@style/AppTheme.NoActionBar">
25+
android:label="@string/app_name">
2726
<intent-filter>
2827
<action android:name="android.intent.action.MAIN" />
2928
<category android:name="android.intent.category.LAUNCHER" />
3029
</intent-filter>
30+
<!--android:theme="@style/AppTheme.NoActionBar">-->
31+
</activity>
32+
<activity
33+
android:name=".ui.MonitorActivity"
34+
android:label="TORGI Monitor">
35+
</activity>
36+
<activity
37+
android:name=".ui.AboutActivity"
38+
android:label="@string/about">
3139
</activity>
3240
</application>
3341
</manifest>

torgi/src/main/java/org/sofwerx/torgi/gnss/SpaceTime.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ public SpaceTime(double latitude, double longitude, double altitude, long time)
2222
}
2323

2424
public SpaceTime(Location loc) {
25-
if (loc != null) {
25+
if (loc == null) {
26+
this.time = System.currentTimeMillis();
27+
} else {
2628
this.latitude = loc.getLatitude();
2729
this.longitude = loc.getLongitude();
2830
if (loc.hasAltitude())

torgi/src/main/java/org/sofwerx/torgi/service/GeoPackageRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ public void onGnssMeasurementsReceived(final GnssMeasurementsEvent event) {
271271

272272
satrow.setValue("svid", g.getSvid());
273273
satrow.setValue("constellation", con);
274-
satrow.setValue("cn0", (double) g.getCn0DbHz());
274+
satrow.setValue("cn0", g.getCn0DbHz());
275275

276276
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
277277
if (g.hasAutomaticGainControlLevelDb()) {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.sofwerx.torgi.ui;
2+
3+
import android.app.Activity;
4+
import android.os.Bundle;
5+
import android.text.Html;
6+
import android.text.method.LinkMovementMethod;
7+
import android.view.View;
8+
import android.widget.TextView;
9+
10+
import org.sofwerx.torgi.R;
11+
import org.sofwerx.torgi.util.Acknowledgements;
12+
13+
public class AboutActivity extends Activity {
14+
private TextView ackTitle;
15+
private TextView ack;
16+
private TextView licTitle;
17+
private TextView lic;
18+
19+
@Override
20+
protected void onCreate(Bundle savedInstanceState) {
21+
super.onCreate(savedInstanceState);
22+
setContentView(R.layout.about_activity);
23+
//Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
24+
//setSupportActionBar(toolbar);
25+
ackTitle = findViewById(R.id.legalAckTitle);
26+
ack = findViewById(R.id.legalAck);
27+
licTitle = findViewById(R.id.legalLicenseTitle);
28+
lic = findViewById(R.id.legalLicense);
29+
ackTitle.setOnClickListener(v -> {
30+
if (ack.getVisibility() == View.VISIBLE) {
31+
ack.setVisibility(View.GONE);
32+
ackTitle.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_expanded_white, 0, 0, 0);
33+
} else {
34+
ack.setVisibility(View.VISIBLE);
35+
ackTitle.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_expandable_white, 0, 0, 0);
36+
}
37+
});
38+
licTitle.setOnClickListener(v -> {
39+
if (lic.getVisibility() == View.VISIBLE) {
40+
lic.setVisibility(View.GONE);
41+
licTitle.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_expanded_white, 0, 0, 0);
42+
} else {
43+
lic.setVisibility(View.VISIBLE);
44+
licTitle.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_expandable_white, 0, 0, 0);
45+
}
46+
});
47+
ack.setText(Html.fromHtml(Acknowledgements.getCredits()));
48+
ack.setMovementMethod(LinkMovementMethod.getInstance());
49+
lic.setText(Html.fromHtml(Acknowledgements.getLicenses()));
50+
lic.setMovementMethod(LinkMovementMethod.getInstance());
51+
}
52+
}

torgi/src/main/java/org/sofwerx/torgi/ui/MainActivity.java

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.sofwerx.torgi.ui;
22

33
import android.Manifest;
4+
import android.app.Activity;
45
import android.app.AlertDialog;
56
import android.content.ActivityNotFoundException;
67
import android.content.ComponentName;
@@ -24,6 +25,9 @@
2425
import android.support.v4.app.FragmentActivity;
2526
import android.support.v4.content.ContextCompat;
2627
import android.util.Log;
28+
import android.view.Menu;
29+
import android.view.MenuInflater;
30+
import android.view.MenuItem;
2731
import android.view.View;
2832
import android.widget.TextView;
2933

@@ -44,7 +48,7 @@
4448
import org.sofwerx.torgi.R;
4549
import org.sofwerx.torgi.service.TorgiService;
4650

47-
public class MainActivity extends FragmentActivity implements GnssMeasurementListener {
51+
public class MainActivity extends Activity implements GnssMeasurementListener {
4852
protected static final int REQUEST_DISABLE_BATTERY_OPTIMIZATION = 401;
4953
private double CENTER_US_LAT = 39.181071d;
5054
private double CENTER_US_LNG = -99.938295d;
@@ -73,6 +77,11 @@ protected void onCreate(Bundle savedInstanceState) {
7377
stat_tv = findViewById(R.id.status_text);
7478
cur_tv = findViewById(R.id.current_text);
7579
meas_tv = findViewById(R.id.measurement_text);
80+
View buttonMonitor = findViewById(R.id.mainButtonMonitor);
81+
buttonMonitor.setOnClickListener(v -> {
82+
startActivity(new Intent(MainActivity.this, MonitorActivity.class));
83+
finish();
84+
});
7685

7786
meas_tv.setText("Acquiring satellites...\n", TextView.BufferType.EDITABLE);
7887
stat_tv.setText("Acquiring satellites...\n", TextView.BufferType.EDITABLE);
@@ -101,6 +110,28 @@ private void osmMapSetup() {
101110
osmMap.setTilesScaledToDpi(true); //scales tiles to the current screen's DPI, helps with readability of labels
102111
}
103112

113+
@Override
114+
public boolean onCreateOptionsMenu(Menu menu) {
115+
MenuInflater inflater = getMenuInflater();
116+
inflater.inflate(R.menu.menu_main, menu);
117+
return true;
118+
}
119+
120+
@Override
121+
public boolean onOptionsItemSelected(MenuItem item) {
122+
// Handle item selection
123+
switch (item.getItemId()) {
124+
case R.id.action_settings:
125+
//TODO
126+
return true;
127+
case R.id.action_about:
128+
startActivity(new Intent(this,AboutActivity.class));
129+
return true;
130+
default:
131+
return super.onOptionsItemSelected(item);
132+
}
133+
}
134+
104135
@Override
105136
public void onResume() {
106137
super.onResume();
@@ -180,7 +211,7 @@ private void drawMarker(LatLng pos, String info) {
180211
currentOSM.setPosition(new GeoPoint(pos.latitude,pos.longitude));
181212
currentOSM.setAnchor(org.osmdroid.views.overlay.Marker.ANCHOR_CENTER,org.osmdroid.views.overlay.Marker.ANCHOR_CENTER);
182213
currentOSM.setIcon(getResources().getDrawable(R.drawable.map_icon));
183-
currentOSM.setTitle("GPS");
214+
currentOSM.setTitle("GNSS Fix");
184215
osmMap.getOverlays().add(currentOSM);
185216
if (osmMap != null) {
186217
osmMap.getController().setZoom(18d);
@@ -390,30 +421,27 @@ public void run() {
390421

391422
@Override
392423
public void onLocationChanged(final Location loc) {
393-
runOnUiThread(new Runnable() {
394-
@Override
395-
public void run() {
396-
StringBuffer out = new StringBuffer();
397-
398-
out.append("Lat: "+ String.valueOf(loc.getLatitude()) + "\n");
399-
out.append("Lon: " + String.valueOf(loc.getLongitude()) + "\n");
400-
out.append("Alt: " + String.valueOf(loc.getAltitude()) + "\n");
401-
out.append("Provider: " + String.valueOf(loc.getProvider()) + "\n");
402-
out.append("Time: " + fmtTime.format(loc.getTime()) + "\n");
403-
int sats = loc.getExtras().getInt("satellites");
404-
if (sats > 0)
405-
out.append("FixSatCount: " + String.valueOf(sats) + "\n");
406-
if (loc.hasAccuracy())
407-
out.append("RadialAccuracy: " + String.valueOf(loc.getAccuracy()) + "\n");
408-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
409-
if (loc.hasVerticalAccuracy())
410-
out.append("VerticalAccuracy: " + String.valueOf(loc.getVerticalAccuracyMeters()) + "\n");
411-
}
412-
413-
String txt = out.toString() + "\n" + (serviceBound?torgiService.getGeoPackageRecorder().getGpkgFilename():"") + " SDK v" + Build.VERSION.SDK_INT;
414-
cur_tv.setText(txt);
415-
drawMarker(new LatLng(loc.getLatitude(), loc.getLongitude()),fmtTime.format(loc.getTime())+", ±"+(loc.hasAccuracy()?fmtAccuracy.format(loc.getAccuracy()):"")+"m");
424+
runOnUiThread(() -> {
425+
StringBuffer out = new StringBuffer();
426+
427+
out.append("Lat: "+ String.valueOf(loc.getLatitude()) + "\n");
428+
out.append("Lon: " + String.valueOf(loc.getLongitude()) + "\n");
429+
out.append("Alt: " + String.valueOf(loc.getAltitude()) + "\n");
430+
out.append("Provider: " + String.valueOf(loc.getProvider()) + "\n");
431+
out.append("Time: " + fmtTime.format(loc.getTime()) + "\n");
432+
int sats = loc.getExtras().getInt("satellites");
433+
if (sats > 0)
434+
out.append("FixSatCount: " + String.valueOf(sats) + "\n");
435+
if (loc.hasAccuracy())
436+
out.append("RadialAccuracy: " + String.valueOf(loc.getAccuracy()) + "\n");
437+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
438+
if (loc.hasVerticalAccuracy())
439+
out.append("VerticalAccuracy: " + String.valueOf(loc.getVerticalAccuracyMeters()) + "\n");
416440
}
441+
442+
String txt = out.toString() + "\n" + (serviceBound?torgiService.getGeoPackageRecorder().getGpkgFilename():"") + " SDK v" + Build.VERSION.SDK_INT;
443+
cur_tv.setText(txt);
444+
drawMarker(new LatLng(loc.getLatitude(), loc.getLongitude()),fmtTime.format(loc.getTime())+", ±"+(loc.hasAccuracy()?fmtAccuracy.format(loc.getAccuracy()):"")+"m");
417445
});
418446
}
419447

0 commit comments

Comments
 (0)