diff --git a/app/src/main/java/hendrikschutter/com/externgnss/MainActivity.java b/app/src/main/java/hendrikschutter/com/externgnss/MainActivity.java index 276d35f..9d6db7d 100644 --- a/app/src/main/java/hendrikschutter/com/externgnss/MainActivity.java +++ b/app/src/main/java/hendrikschutter/com/externgnss/MainActivity.java @@ -5,7 +5,9 @@ import android.annotation.SuppressLint; import android.content.Context; import android.location.LocationListener; import android.location.LocationManager; + import androidx.appcompat.app.AppCompatActivity; + import android.os.Bundle; import android.util.Log; import android.widget.EditText; @@ -22,7 +24,7 @@ import java.util.concurrent.LinkedBlockingQueue; public class MainActivity extends AppCompatActivity { private TextView output; - private LocationManager locationManager= null; + private LocationManager locationManager = null; private SerialUSB serialUSB = null; private NMEAParser nmeaParser = null; private boolean doRun = true; @@ -31,6 +33,7 @@ public class MainActivity extends AppCompatActivity { private static final String INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB"; private boolean bChange = true; private BlockingQueue rawSerialByteDataQueue = null; + private double lastInternFixLat, lastInternFixLon; @Override public void onCreate(Bundle savedInstanceState) { @@ -42,6 +45,17 @@ public class MainActivity extends AppCompatActivity { // start extern GNSS and display stats on UI startExternGNSS(); + + setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal"); + + setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no signal"); } // From https://github.com/googlesamples/easypermissions @@ -53,13 +67,13 @@ public class MainActivity extends AppCompatActivity { } - private void startExternGNSS(){ + private void startExternGNSS() { rawSerialByteDataQueue = new LinkedBlockingQueue<>(); serialUSB = new SerialUSB(this, rawSerialByteDataQueue); - if(serialUSB.findSerialDevice()){ + if (serialUSB.findSerialDevice()) { serialUSB.connect(9600, 0); - if (serialUSB.isConnected()){ + if (serialUSB.isConnected()) { nmeaParser = new NMEAParser(); nmeaParser.setReceiveByteStream(rawSerialByteDataQueue); } @@ -117,43 +131,45 @@ public class MainActivity extends AppCompatActivity { public void run() { while (doRun) { if (locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) { - setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), String.format( "%.6f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude())); - setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), String.format( "%.6f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude())); - setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), String.format( "%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAltitude()) + " m"); - setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), String.format( "%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAccuracy()) + " m"); + lastInternFixLat = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude(); + lastInternFixLon = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude(); + setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), String.format("%.6f", lastInternFixLat)); + setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), String.format("%.6f", lastInternFixLon)); + setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), String.format("%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAltitude()) + " m"); + setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), String.format("%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAccuracy()) + " m"); setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), Integer.toString(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getExtras().getInt("satellites"))); - }else{ + } else { setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal"); setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal"); setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal"); setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal"); - setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber),"no signal"); + setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal"); } - if(serialUSB != null){ - if(serialUSB.isConnected()){ + if ((serialUSB != null) && (nmeaParser != null)) { + if (serialUSB.isConnected()) { nmeaParser.handleReceiveByteStream(); if (nmeaParser.checkFix() == true) { - //System.out.println(parser.getLatitude() + " " + parser.getLongitude()); - //System.out.println(parser.calcDistance(fixedPosLat, fixedPosLng)); - - //nmeaParser.getLatitude(); - //nmeaParser.getLongitude(); - Log.i("ExternGNSS", "Fix! Lat: " + String.valueOf(nmeaParser.getLatitude()) + " Lon: " + String.valueOf(nmeaParser.getLongitude())); - - // distance.add(nmeaParser.calcDistance(fixedPosLat, fixedPosLng)); - // satCount.add(nmeaParser.getSatCount()); + //Log.i("ExternGNSS", "Fix! Lat: " + String.valueOf(nmeaParser.getLatitude()) + " Lon: " + String.valueOf(nmeaParser.getLongitude())); + setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), String.format("%.6f", nmeaParser.getLatitude())); + setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), String.format("%.6f", nmeaParser.getLongitude())); + setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), Integer.toString(nmeaParser.getSatCount())); } + } else { + setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal"); + setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal"); + } + + if ((locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) && (serialUSB != null) && (nmeaParser != null)) { + if (nmeaParser.checkFix() == true) { + setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), String.format("%.6f", nmeaParser.calcDistance(lastInternFixLat, lastInternFixLon)) + " m"); + } + } else { + setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no signal"); } } - - runOnUiThread(new Runnable() { - @Override - public void run() { - //Update - } - }); try { sleep(10000); } catch (InterruptedException e) { @@ -180,10 +196,10 @@ public class MainActivity extends AppCompatActivity { Toast.makeText(cntxToastInternGNSSUpdate, "Internal GNSS updated", Toast.LENGTH_LONG).show(); } - @Override + @Override // This callback will never be invoked on Android Q and above. public void onStatusChanged(String provider, int status, Bundle extras) { - // Toast.makeText(mContext, "Status Changed", Toast.LENGTH_LONG).show(); + // Toast.makeText(mContext, "Status Changed", Toast.LENGTH_LONG).show(); } @Override diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 96343c7..3987326 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -33,7 +33,7 @@ android:layout_width="70dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" - android:layout_marginLeft="16dp" + android:layout_marginBottom="8dp" android:text="Altitude:" android:textSize="18sp" app:layout_constraintBottom_toBottomOf="@+id/interngnssAltitudeNumber" @@ -47,7 +47,7 @@ android:layout_marginLeft="16dp" android:layout_marginTop="8dp" android:clickable="false" - android:text="Intern GNSS Receiver" + android:text="Intern GNSS receiver" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" @@ -80,7 +80,6 @@ android:layout_width="150dp" android:layout_height="wrap_content" android:layout_marginStart="128dp" - android:layout_marginLeft="128dp" android:clickable="false" android:cursorVisible="false" android:ems="16" @@ -89,14 +88,14 @@ android:inputType="numberDecimal" android:textSize="16sp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/interngnssNameTextView" /> + app:layout_constraintTop_toBottomOf="@+id/interngnssNameTextView" + tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" /> + app:layout_constraintTop_toBottomOf="@+id/interngnssLatNumber" + tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" /> + app:layout_constraintTop_toBottomOf="@+id/interngnssLongNumber" + tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" /> + app:layout_constraintTop_toBottomOf="@+id/interngnssAltitudeNumber" + tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" /> + app:layout_constraintTop_toBottomOf="@+id/interngnssAccuracyNumber" + tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" /> + + + + + + + + + + + + + + + + + + + + \ No newline at end of file