Skip to content

Commit

Permalink
Fix #70 - Give used sats bold outline in sky view
Browse files Browse the repository at this point in the history
  • Loading branch information
barbeau committed Nov 16, 2016
1 parent b0f2be7 commit 30934e2
Showing 1 changed file with 44 additions and 17 deletions.
61 changes: 44 additions & 17 deletions GPSTest/src/main/java/com/android/gpstest/GpsSkyFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -189,15 +189,17 @@ private static class GpsSkyView extends View implements GpsTestListener {

private Paint mHorizonActiveFillPaint, mHorizonInactiveFillPaint, mHorizonStrokePaint,
mGridStrokePaint,
mSatelliteFillPaint, mSatelliteStrokePaint, mNorthPaint, mNorthFillPaint,
mPrnIdPaint;
mSatelliteFillPaint, mSatelliteStrokePaint, mSatelliteUsedStrokePaint,
mNorthPaint, mNorthFillPaint, mPrnIdPaint;

private double mOrientation = 0.0;

private boolean mStarted;

private float mSnrCn0s[], mElevs[], mAzims[]; // Holds either SNR or C/N0 - see #65

private boolean mHasEphemeris[], mHasAlmanac[], mUsedInFix[];

private int mPrns[], mConstellationType[];

private int mSvCount;
Expand Down Expand Up @@ -241,6 +243,12 @@ public GpsSkyView(Context context) {
mSatelliteStrokePaint.setStrokeWidth(2.0f);
mSatelliteStrokePaint.setAntiAlias(true);

mSatelliteUsedStrokePaint = new Paint();
mSatelliteUsedStrokePaint.setColor(Color.BLACK);
mSatelliteUsedStrokePaint.setStyle(Paint.Style.STROKE);
mSatelliteUsedStrokePaint.setStrokeWidth(8.0f);
mSatelliteUsedStrokePaint.setAntiAlias(true);

mSnrThresholds = new float[]{0.0f, 10.0f, 20.0f, 30.0f};
mSnrColors = new int[]{Color.GRAY, Color.RED, Color.YELLOW, Color.GREEN};

Expand Down Expand Up @@ -298,6 +306,9 @@ public void setGnssStatus(GnssStatus status) {
mElevs = new float[MAX_LENGTH];
mAzims = new float[MAX_LENGTH];
mConstellationType = new int[MAX_LENGTH];
mHasEphemeris = new boolean[MAX_LENGTH];
mHasAlmanac = new boolean[MAX_LENGTH];
mUsedInFix = new boolean[MAX_LENGTH];
}

int length = status.getSatelliteCount();
Expand All @@ -308,6 +319,9 @@ public void setGnssStatus(GnssStatus status) {
mAzims[mSvCount] = status.getAzimuthDegrees(mSvCount);
mPrns[mSvCount] = status.getSvid(mSvCount);
mConstellationType[mSvCount] = status.getConstellationType(mSvCount);
mHasEphemeris[mSvCount] = status.hasEphemerisData(mSvCount);
mHasAlmanac[mSvCount] = status.hasAlmanacData(mSvCount);
mUsedInFix[mSvCount] = status.usedInFix(mSvCount);
mSvCount++;
}

Expand All @@ -333,6 +347,9 @@ public void setSats(GpsStatus status) {
mElevs = new float[length];
mAzims = new float[length];
mPrns = new int[length];
mHasEphemeris = new boolean[length];
mHasAlmanac = new boolean[length];
mUsedInFix = new boolean[length];
// Constellation type isn't used, but instantiate it to avoid NPE in legacy devices
mConstellationType = new int[length];
}
Expand All @@ -344,6 +361,9 @@ public void setSats(GpsStatus status) {
mElevs[mSvCount] = satellite.getElevation();
mAzims[mSvCount] = satellite.getAzimuth();
mPrns[mSvCount] = satellite.getPrn();
mHasEphemeris[mSvCount] = satellite.hasEphemeris();
mHasAlmanac[mSvCount] = satellite.hasAlmanac();
mUsedInFix[mSvCount] = satellite.usedInFix();
mSvCount++;
}

Expand Down Expand Up @@ -421,15 +441,22 @@ private void drawNorthIndicator(Canvas c, int s) {
}

private void drawSatellite(Canvas c, int s, float elev, float azim, float snrCn0, int prn,
int constellationType) {
int constellationType, boolean usedInFix) {
double radius, angle;
float x, y;
// Place PRN text slightly below drawn satellite
final double PRN_X_SCALE = 1.4;
final double PRN_Y_SCALE = 3.8;
Paint thisPaint;

thisPaint = getSatellitePaint(mSatelliteFillPaint, snrCn0);
Paint fillPaint;
fillPaint = getSatellitePaint(mSatelliteFillPaint, snrCn0);

Paint strokePaint;
if (usedInFix) {
strokePaint = mSatelliteUsedStrokePaint;
} else {
strokePaint = mSatelliteStrokePaint;
}

radius = elevationToRadius(s, elev);
azim -= mOrientation;
Expand All @@ -447,24 +474,24 @@ private void drawSatellite(Canvas c, int s, float elev, float azim, float snrCn0
}
switch (operator) {
case NAVSTAR:
c.drawCircle(x, y, SAT_RADIUS, thisPaint);
c.drawCircle(x, y, SAT_RADIUS, mSatelliteStrokePaint);
c.drawCircle(x, y, SAT_RADIUS, fillPaint);
c.drawCircle(x, y, SAT_RADIUS, strokePaint);
break;
case GLONASS:
c.drawRect(x - SAT_RADIUS, y - SAT_RADIUS, x + SAT_RADIUS, y + SAT_RADIUS,
thisPaint);
fillPaint);
c.drawRect(x - SAT_RADIUS, y - SAT_RADIUS, x + SAT_RADIUS, y + SAT_RADIUS,
mSatelliteStrokePaint);
strokePaint);
break;
case QZSS:
drawTriangle(c, x, y, thisPaint);
drawTriangle(c, x, y, fillPaint, strokePaint);
break;
case BEIDOU:
drawPentagon(c, x, y, thisPaint);
drawPentagon(c, x, y, fillPaint, strokePaint);
break;
case GALILEO:
// We're running out of shapes - QZSS should be regional to Japan, so re-use triangle
drawTriangle(c, x, y, thisPaint);
drawTriangle(c, x, y, fillPaint, strokePaint);
break;
}

Expand All @@ -476,7 +503,7 @@ private float elevationToRadius(int s, float elev) {
return ((s / 2) - SAT_RADIUS) * (1.0f - (elev / 90.0f));
}

private void drawTriangle(Canvas c, float x, float y, Paint fillPaint) {
private void drawTriangle(Canvas c, float x, float y, Paint fillPaint, Paint strokePaint) {
float x1, y1; // Top
x1 = x;
y1 = y - SAT_RADIUS;
Expand All @@ -498,10 +525,10 @@ private void drawTriangle(Canvas c, float x, float y, Paint fillPaint) {
path.close();

c.drawPath(path, fillPaint);
c.drawPath(path, mSatelliteStrokePaint);
c.drawPath(path, strokePaint);
}

private void drawPentagon(Canvas c, float x, float y, Paint fillPaint) {
private void drawPentagon(Canvas c, float x, float y, Paint fillPaint, Paint strokePaint) {
Path path = new Path();
path.moveTo(x, y - SAT_RADIUS);
path.lineTo(x - SAT_RADIUS, y - (SAT_RADIUS / 3));
Expand All @@ -511,7 +538,7 @@ private void drawPentagon(Canvas c, float x, float y, Paint fillPaint) {
path.close();

c.drawPath(path, fillPaint);
c.drawPath(path, mSatelliteStrokePaint);
c.drawPath(path, strokePaint);
}

/**
Expand Down Expand Up @@ -605,7 +632,7 @@ protected void onDraw(Canvas canvas) {
for (int i = 0; i < numSats; i++) {
if (mSnrCn0s[i] > 0.0f && (mElevs[i] != 0.0f || mAzims[i] != 0.0f)) {
drawSatellite(canvas, minScreenDimen, mElevs[i], mAzims[i], mSnrCn0s[i],
mPrns[i], mConstellationType[i]);
mPrns[i], mConstellationType[i], mUsedInFix[i]);
}
}
}
Expand Down

0 comments on commit 30934e2

Please sign in to comment.