Skip to content

Commit

Permalink
Merge pull request santiago-hollmann#57 from santiago-hollmann/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
santiago-hollmann committed Apr 24, 2017
2 parents c88bc82 + 71bdfd1 commit e970b18
Show file tree
Hide file tree
Showing 25 changed files with 266 additions and 268 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
*.iml
.gradle
/local.properties
local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ Here you can find some ways for contribution. If you are insterested in, please
* Include new features to the app.
* Port the project to other languages and platforms.

## Setup
### Setup Fabric
Inside app/ create a file called fabric.properties with apiKey=here_the_api_key and below apiSecret=here_api_secret.

### Setup Google Maps
Inside app/ create a file called gradle.properties and add MAPS_KEY="the_key_here".

## Special Thanks to
* <a href="http://www.forsterlewis.com/">Ian Forster-Lewis</a> for his <a href="http://carrier.csi.cam.ac.uk/forsterlewis/soaring/igc_file_format/igc_format_2008.html#link_C/">IGC File Format Reference</a>
* <a href="http://www.maurogianzone.com">Mauro Gianzone</a> for contributing to app design.
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ android {
applicationId "com.shollmann.igcparser"
minSdkVersion 16
targetSdkVersion 24
versionCode 10702
versionName "1.7.2"
versionCode 10800
versionName "1.8.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,22 +36,21 @@
import io.fabric.sdk.android.Fabric;

public class IGCViewerApplication extends Application {
private static Context instance;
private static IGCFile currentIGCFile;

@Override
public void onCreate() {
super.onCreate();
instance = this;
setupCrashlytics();
setupTaskConfig();

}

private void setupTaskConfig() {
TaskConfig.setAreaWidth(PreferencesHelper.getAreaWidth());
TaskConfig.setStartLength(PreferencesHelper.getStartLength());
TaskConfig.setFinishLength(PreferencesHelper.getFinishLength());
PreferencesHelper preferencesHelper = new PreferencesHelper(this);
TaskConfig.setAreaWidth(preferencesHelper.getAreaWidth());
TaskConfig.setStartLength(preferencesHelper.getStartLength());
TaskConfig.setFinishLength(preferencesHelper.getFinishLength());
}

private void setupCrashlytics() {
Expand All @@ -62,8 +61,8 @@ private void setupCrashlytics() {
Fabric.with(this, crashlyticsKit);
}

public static Context getApplication() {
return instance;
public Context getApplication() {
return this;
}

public static IGCFile getCurrentIGCFile() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ private void setupGraphic(LineChart chart, List<Entry> entries, float axisMinimu
LineDataSet dataSet = new LineDataSet(entries, Constants.EMPTY_STRING);
dataSet.setDrawCircles(false);
dataSet.setDrawCircleHole(false);
dataSet.setLineWidth(ResourcesHelper.getDimensionPixelSize(R.dimen.half_dp));
dataSet.setLineWidth(ResourcesHelper.getDimensionPixelSize(this, R.dimen.half_dp));
dataSet.setFillColor(getResources().getColor(R.color.colorPrimary));
dataSet.setDrawFilled(true);
dataSet.setFillAlpha(Constants.Chart.ALPHA_FILL);
Expand Down Expand Up @@ -296,7 +296,7 @@ public boolean onOptionsItemSelected(MenuItem item) {

@Override
protected void onDestroy() {
super.onStop();
super.onDestroy();
IGCViewerApplication.setCurrentIGCFile(null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@


public class FlightPreviewActivity extends AppCompatActivity implements OnMapReadyCallback, View.OnClickListener {
private final Object lock = new Object();
private boolean isFinishReplay = true;
private int duration;
private int replaySpeed = Constants.Map.DEFAULT_REPLAY_SPEED;
Expand Down Expand Up @@ -122,12 +123,41 @@ public class FlightPreviewActivity extends AppCompatActivity implements OnMapRea
private ImageView btnSpeedDown;
private View viewAltitudeReferenceBar;
private Toast toast;
private Object lock = new Object();
private PreferencesHelper preferencesHelper;

public PaintDrawable getColorScala() {
ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient linearGradient = new LinearGradient(width, height, 0, 0,
new int[]{
getResources().getColor(R.color.altitude_0_100),
getResources().getColor(R.color.altitude_100_300),
getResources().getColor(R.color.altitude_300_500),
getResources().getColor(R.color.altitude_500_1000),
getResources().getColor(R.color.altitude_1000_1500),
getResources().getColor(R.color.altitude_1500_2000),
getResources().getColor(R.color.altitude_2000_2500),
getResources().getColor(R.color.altitude_more_than_2500)},
new float[]{
0, 0.07f, 0.14f, 0.28f, 0.42f, 0.56f, 0.7f, 0.84f},
Shader.TileMode.REPEAT);
return linearGradient;
}
};

PaintDrawable paint = new PaintDrawable();
paint.setShape(new RectShape());
paint.setShaderFactory(shaderFactory);

return paint;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findViews();
preferencesHelper = new PreferencesHelper(getApplicationContext());
setClickListeners();
initMap(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Expand Down Expand Up @@ -247,31 +277,31 @@ private PolylineOptions getAltitudeTrackPolyline(AltitudeTrackSegment trackSegme
PolylineOptions polyline;
switch (trackSegment1.getSegmentType()) {
case ALTITUDE_0_100:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_0_100)).zIndex(0);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this, R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_0_100)).zIndex(0);
break;
case ALTITUDE_100_300:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_100_300)).zIndex(1);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this, R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_100_300)).zIndex(1);
break;
case ALTITUDE_300_500:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_300_500)).zIndex(2);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this, R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_300_500)).zIndex(2);
break;
case ALTITUDE_500_1000:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_500_1000)).zIndex(3);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this,R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_500_1000)).zIndex(3);
break;
case ALTITUDE_1000_1500:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_1000_1500)).zIndex(4);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this,R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_1000_1500)).zIndex(4);
break;
case ALTITUDE_1500_2000:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_1500_2000)).zIndex(5);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this,R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_1500_2000)).zIndex(5);
break;
case ALTITUDE_2000_2500:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_2000_2500)).zIndex(6);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this, R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_2000_2500)).zIndex(6);
break;
case ALTITUDE_MORE_THAN_2500:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_more_than_2500)).zIndex(7);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this, R.dimen.track_line_width)).color(getResources().getColor(R.color.altitude_more_than_2500)).zIndex(7);
break;
default:
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(Color.BLACK).zIndex(-1);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this,R.dimen.track_line_width)).color(Color.BLACK).zIndex(-1);

}

Expand All @@ -290,14 +320,14 @@ private void displayWayPoints() {
private void displayFinishStartLines(List<ILatLonRecord> waypoints) {
try {//TODO Move the logic to determine takeoff, start, etc points to WaypointsHelper
if (((CRecordWayPoint) waypoints.get(0)).getType() == CRecordType.START) {
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(waypoints.get(0), waypoints.get(1), TaskConfig.getStartLength()));
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(getApplicationContext(), waypoints.get(0), waypoints.get(1), TaskConfig.getStartLength()));
} else {
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(waypoints.get(1), waypoints.get(2), TaskConfig.getStartLength()));
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(this, waypoints.get(1), waypoints.get(2), TaskConfig.getStartLength()));
}
if (((CRecordWayPoint) waypoints.get(waypoints.size() - 1)).getType() == CRecordType.FINISH) {
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(waypoints.get(waypoints.size() - 1), waypoints.get(waypoints.size() - 2), TaskConfig.getFinishLength()));
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(getApplicationContext(), waypoints.get(waypoints.size() - 1), waypoints.get(waypoints.size() - 2), TaskConfig.getFinishLength()));
} else {
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(waypoints.get(waypoints.size() - 2), waypoints.get(waypoints.size() - 3), TaskConfig.getFinishLength()));
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(getApplicationContext(), waypoints.get(waypoints.size() - 2), waypoints.get(waypoints.size() - 3), TaskConfig.getFinishLength()));
}
} catch (Throwable t) {
Logger.logError("Error trying to draw task lines: " + t.getMessage());
Expand All @@ -322,7 +352,7 @@ private void displayMarkers(List<ILatLonRecord> waypoints) {

private void displayLinesAndAreas(List<ILatLonRecord> waypoints) {
try {
PolylineOptions polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.task_line_width)).color(getResources().getColor(R.color.task_line));
PolylineOptions polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(this, R.dimen.task_line_width)).color(getResources().getColor(R.color.task_line));

for (int i = 0; i < waypoints.size(); i++) {
CRecordWayPoint cRecordWayPoint = (CRecordWayPoint) waypoints.get(i);
Expand All @@ -342,7 +372,6 @@ private void displayLinesAndAreas(List<ILatLonRecord> waypoints) {
}
}


@Override
public void onResume() {
super.onResume();
Expand Down Expand Up @@ -398,28 +427,6 @@ public void onClick(View view) {
}
}

private class ParseIGCFileAsyncTask extends AsyncTask<Void, Void, Void> {
private WeakReference<FlightPreviewActivity> activity;

public ParseIGCFileAsyncTask(FlightPreviewActivity activity) {
this.activity = new WeakReference<>(activity);
}

protected Void doInBackground(Void... something) {
igcFile = Parser.parse(Uri.parse(fileToLoadPath));
return null;
}

protected void onProgressUpdate(Void... something) {
}

protected void onPostExecute(Void result) {
if (activity.get() != null) {
handleIGCFileLoaded();
}
}
}

private void handleIGCFileLoaded() {
listLatLngPoints = Utilities.getLatLngPoints(igcFile.getTrackPoints());
displayWayPoints();
Expand All @@ -430,7 +437,7 @@ private void handleIGCFileLoaded() {
viewAltitudeReferenceBar.setBackground(getColorScala());
mapView.setVisibility(View.VISIBLE);
cardviewInformation.setVisibility(View.VISIBLE);
PreferencesHelper.setViewedFlightsForRate();
preferencesHelper.setViewedFlightsForRate();
loading.setVisibility(View.GONE);
}

Expand Down Expand Up @@ -585,32 +592,46 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}

public static PaintDrawable getColorScala() {
ShapeDrawable.ShaderFactory shaderFactory = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient linearGradient = new LinearGradient(width, height, 0, 0,
new int[]{
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_0_100),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_100_300),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_300_500),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_500_1000),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_1000_1500),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_1500_2000),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_2000_2500),
IGCViewerApplication.getApplication().getResources().getColor(R.color.altitude_more_than_2500)},
new float[]{
0, 0.07f, 0.14f, 0.28f, 0.42f, 0.56f, 0.7f, 0.84f},
Shader.TileMode.REPEAT);
return linearGradient;
}
};
private void launchShareFile(String tempIgcFilePath) {
try {
TrackerHelper.trackShareFlight();
Intent intentEmail = new Intent(Intent.ACTION_SEND);
intentEmail.setType(Constants.App.TEXT_HTML);
intentEmail.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(FlightPreviewActivity.this, Constants.App.FILE_PROVIDER, new File(tempIgcFilePath)));
intentEmail.putExtra(Intent.EXTRA_SUBJECT, String.format(getString(R.string.share_email_subject), Uri.parse(tempIgcFilePath).getLastPathSegment()));
startActivity(Intent.createChooser(intentEmail, getString(R.string.share)));
} catch (Throwable t) {
Toast.makeText(this, R.string.sorry_error_happen, Toast.LENGTH_SHORT).show();
}
}

PaintDrawable paint = new PaintDrawable();
paint.setShape(new RectShape());
paint.setShaderFactory(shaderFactory);
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.flight_preview_menu, menu);

return paint;
return super.onCreateOptionsMenu(menu);
}

private class ParseIGCFileAsyncTask extends AsyncTask<Void, Void, Void> {
private WeakReference<FlightPreviewActivity> activity;

public ParseIGCFileAsyncTask(FlightPreviewActivity activity) {
this.activity = new WeakReference<>(activity);
}

protected Void doInBackground(Void... something) {
igcFile = Parser.parse(Uri.parse(fileToLoadPath));
return null;
}

protected void onProgressUpdate(Void... something) {
}

protected void onPostExecute(Void result) {
if (activity.get() != null) {
handleIGCFileLoaded();
}
}
}

private class GetGmailAttachmentAsyncTask extends AsyncTask<String, Void, String> {
Expand Down Expand Up @@ -656,24 +677,4 @@ protected void onPostExecute(String tempIgcFilePath) {
}

}

private void launchShareFile(String tempIgcFilePath) {
try {
TrackerHelper.trackShareFlight();
Intent intentEmail = new Intent(Intent.ACTION_SEND);
intentEmail.setType(Constants.App.TEXT_HTML);
intentEmail.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(FlightPreviewActivity.this, Constants.App.FILE_PROVIDER, new File(tempIgcFilePath)));
intentEmail.putExtra(Intent.EXTRA_SUBJECT, String.format(getString(R.string.share_email_subject), Uri.parse(tempIgcFilePath).getLastPathSegment()));
startActivity(Intent.createChooser(intentEmail, getString(R.string.share)));
} catch (Throwable t) {
Toast.makeText(this, R.string.sorry_error_happen, Toast.LENGTH_SHORT).show();
}
}

@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.flight_preview_menu, menu);

return super.onCreateOptionsMenu(menu);
}
}
Loading

0 comments on commit e970b18

Please sign in to comment.