Skip to content

Commit

Permalink
Merge pull request #43 from santiago-hollmann/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
santiago-hollmann authored Feb 7, 2017
2 parents 7e2e73e + b9c802d commit 87f1b5f
Show file tree
Hide file tree
Showing 31 changed files with 85,146 additions and 42 deletions.
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 10300
versionName "1.3.0"
versionCode 10400
versionName "1.4.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,16 @@
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/MAPS_KEY" />

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.shollmann.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ public class TrackerHelper {
private static final String RATE_US_YES = "Rate Us: Yes";
private static final String RATE_US_NO = "Rate Us: No";
private static final String SHARE_APP = "Share app";
private static final String SHARE_FLIGHT = "Share flight";
private static final String OPEN_GMAIL_FLIGHT = "Open Gmail Flight";

public static void trackFlightDisplayed() {
AnswersHelper.trackEvent(FLIGHT_DISPLAYED);
Expand Down Expand Up @@ -134,4 +136,12 @@ public static void trackRateUsNo() {
public static void trackShareApp() {
AnswersHelper.trackEvent(SHARE_APP);
}

public static void trackShareFlight() {
AnswersHelper.trackEvent(SHARE_FLIGHT);
}

public static void trackOpenGmailFlight() {
AnswersHelper.trackEvent(OPEN_GMAIL_FLIGHT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ private void showInformation() {
insertField(R.drawable.ic_calendar, R.string.date, igcFile.getDate());
insertField(R.drawable.ic_person, R.string.pilot_in_charge, Utilities.capitalizeText(igcFile.getPilotInCharge()));
insertField(R.drawable.ic_plane, R.string.glider, igcFile.getGliderTypeAndId());
insertField(R.drawable.ic_speed, R.string.avg_speed, igcFile.getAverageSpeed() + "km/h");
insertField(R.drawable.ic_time, R.string.duration, igcFile.getFlightTime());
insertField(R.drawable.ic_distance, R.string.distance, Utilities.getDistanceInKm(igcFile.getDistance(), getResources().getConfiguration().locale) + "km");
insertField(R.drawable.ic_min, R.string.min_altitude, Utilities.getFormattedNumber(igcFile.getMinAltitude(), getResources().getConfiguration().locale) + "m");
Expand Down
171 changes: 146 additions & 25 deletions app/src/main/java/com/shollmann/igcparser/ui/FlightPreviewActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,12 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.text.Html;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AnimationUtils;
Expand All @@ -57,6 +59,7 @@
import com.google.android.gms.maps.MapView;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CircleOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
Expand All @@ -66,16 +69,19 @@
import com.shollmann.android.igcparser.model.CRecordWayPoint;
import com.shollmann.android.igcparser.model.IGCFile;
import com.shollmann.android.igcparser.model.ILatLonRecord;
import com.shollmann.android.igcparser.util.Logger;
import com.shollmann.android.igcparser.util.Utilities;
import com.shollmann.igcparser.IGCViewerApplication;
import com.shollmann.igcparser.R;
import com.shollmann.igcparser.model.AltitudeTrackSegment;
import com.shollmann.igcparser.tracking.TrackerHelper;
import com.shollmann.igcparser.util.Constants;
import com.shollmann.igcparser.util.FileUtilities;
import com.shollmann.igcparser.util.MapUtilities;
import com.shollmann.igcparser.util.PreferencesHelper;
import com.shollmann.igcparser.util.ResourcesHelper;

import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -119,7 +125,6 @@ public class FlightPreviewActivity extends AppCompatActivity implements OnMapRea
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findViews();
handleIntent();
setClickListeners();
initMap(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Expand All @@ -133,8 +138,13 @@ private void handleIntent() {

String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
fileToLoadPath = uri.getPath();
if (intent.getData() != null && Constants.App.CONTENT_URI.equalsIgnoreCase(intent.getData().getScheme())) {
TrackerHelper.trackOpenGmailFlight();
new GetGmailAttachmentAsyncTask(this).execute(intent.getDataString());
} else {
Uri uri = intent.getData();
fileToLoadPath = uri.getPath();
}
}
}

Expand Down Expand Up @@ -183,7 +193,9 @@ public void onMapReady(GoogleMap googleMap) {
this.googleMap.getUiSettings().setZoomGesturesEnabled(true);
this.googleMap.getUiSettings().setRotateGesturesEnabled(false);

new ParseIGCFileAsyncTask(this).execute();
if (!TextUtils.isEmpty(fileToLoadPath)) {
new ParseIGCFileAsyncTask(this).execute();
}
}

private void displayFlightInformation() {
Expand Down Expand Up @@ -219,7 +231,6 @@ private void displayTrack() {
PolylineOptions polyline = getAltitudeTrackPolyline(trackSegment);
polyline.addAll(Utilities.getLatLngPoints(trackSegment.getListRecords()));
googleMap.addPolyline(polyline);

}

}
Expand All @@ -228,64 +239,102 @@ 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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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));
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(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);
polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.track_line_width)).color(Color.BLACK).zIndex(-1);

}

return polyline;
}

private void displayWayPoints() {
if (!igcFile.getWaypoints().isEmpty()) {
PolylineOptions polyline = new PolylineOptions().width(ResourcesHelper.getDimensionPixelSize(R.dimen.task_line_width)).color(Color.MAGENTA);
polyline.addAll(Utilities.getLatLngPoints(igcFile.getWaypoints()));
googleMap.addPolyline(polyline);
final List<ILatLonRecord> waypoints = igcFile.getWaypoints();
if (!waypoints.isEmpty()) {
displayLinesAndAreas(waypoints);
displayMarkers(waypoints);
displayFinishStartLines(waypoints);
}
}

private void displayFinishStartLines(List<ILatLonRecord> waypoints) {
try {
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(waypoints.get(1), waypoints.get(2), Constants.Map.START_RADIUS));
googleMap.addPolyline(MapUtilities.getPerpendicularPolyline(waypoints.get(waypoints.size() - 2), waypoints.get(waypoints.size() - 3), Constants.Map.FINISH_RADIUS));
} catch (Throwable t) {
Logger.logError("Error trying to draw task lines: " + t.getMessage());
}
}

private void displayMarkers(List<ILatLonRecord> waypoints) {
try {
for (int i = 1; i < waypoints.size() - 2; i++) {
final ILatLonRecord wayPoint = waypoints.get(i);
if (!MapUtilities.isZeroCoordinate(wayPoint)) {
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(wayPoint.getLatLon().getLat(), wayPoint.getLatLon().getLon()))
.draggable(false)
.title(((CRecordWayPoint) wayPoint).getDescription()));
}
}
} catch (Throwable t) {
Logger.logError("Error trying to show markers: " + t.getMessage());
}
}

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));

for (ILatLonRecord wayPoint : igcFile.getWaypoints()) {
if (wayPoint.getLatLon().getLat() != 0 && wayPoint.getLatLon().getLat() != 0) {
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(wayPoint.getLatLon().getLat(), wayPoint.getLatLon().getLon()))
.draggable(false)
.title(((CRecordWayPoint) wayPoint).getDescription()));
for (int i = 1; i < waypoints.size() - 1; i++) {
polyline.add(new LatLng(waypoints.get(i).getLatLon().getLat(), waypoints.get(i).getLatLon().getLon()));
if (i > 1 && i < waypoints.size() - 2) {
googleMap.addCircle(new CircleOptions().center(new LatLng(waypoints.get(i).getLatLon().getLat(), waypoints.get(i).getLatLon().getLon()))
.radius(Constants.Map.TASK_RADIUS).strokeColor(Color.TRANSPARENT).strokeWidth(getResources().getDimensionPixelSize(R.dimen.task_line_width))
.fillColor(getResources().getColor(R.color.task_fill_color)));
}
}
googleMap.addPolyline(polyline);
} catch (Throwable t) {
Logger.logError("Error trying to draw waypoints: " + t.getMessage());
}
}


@Override
public void onResume() {
super.onResume();
mapView.onResume();
handleIntent();
}

@Override
public void onDestroy() {
super.onDestroy();
mapView.onDestroy();
FileUtilities.deleteCache(this);
}

@Override
Expand Down Expand Up @@ -504,7 +553,15 @@ protected void onStop() {

@Override
public boolean onOptionsItemSelected(MenuItem item) {
finish();
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.menu_share:
new CopyFileToCacheAndShareAsyncTask(this).execute(fileToLoadPath);
break;

}
return super.onOptionsItemSelected(item);
}

Expand Down Expand Up @@ -535,4 +592,68 @@ public Shader resize(int width, int height) {

return paint;
}

private class GetGmailAttachmentAsyncTask extends AsyncTask<String, Void, String> {
WeakReference<FlightPreviewActivity> referenceActivity;

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

@Override
protected String doInBackground(String... params) {
File file = FileUtilities.copyFileToCacheFolder(FlightPreviewActivity.this, params[0], Constants.App.TEMP_TRACK_NAME);
return file != null ? file.getPath() : Constants.EMPTY_STRING;
}

@Override
protected void onPostExecute(String tempIgcFilePath) {
if (referenceActivity.get() != null) {
fileToLoadPath = tempIgcFilePath;
new ParseIGCFileAsyncTask(FlightPreviewActivity.this).execute();
}
super.onPostExecute(tempIgcFilePath);
}
}

private class CopyFileToCacheAndShareAsyncTask extends AsyncTask<String, Void, String> {
WeakReference<FlightPreviewActivity> referenceActivity;

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

@Override
protected String doInBackground(String... params) {
File file = FileUtilities.copyFileToCacheFolder(FlightPreviewActivity.this, fileToLoadPath, Uri.parse(fileToLoadPath).getLastPathSegment());
return file != null ? file.getPath() : Constants.EMPTY_STRING;
}

@Override
protected void onPostExecute(String tempIgcFilePath) {
launchShareFile(tempIgcFilePath);
super.onPostExecute(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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ public class IGCFilesActivity extends AppCompatActivity implements MenuItem.OnMe
private static final int EXTERNAL_STORAGE_PERMISSION_REQUEST = 1001;
private RateUsView viewRateUs;
private LinearLayout layoutLoading;
private LinearLayout layoutEmpty;
private RecyclerView recyclerView;
private TextView txtLoading;
private ProgressBar progress;
Expand Down Expand Up @@ -118,6 +119,7 @@ private void setupFilesList() {
private void findViews() {
recyclerView = (RecyclerView) findViewById(R.id.files_recyclerview);
layoutLoading = (LinearLayout) findViewById(R.id.files_layout_loading);
layoutEmpty = (LinearLayout) findViewById(R.id.files_layout_empty_state);
txtLoading = (TextView) findViewById(R.id.files_loading_text);
progress = (ProgressBar) findViewById(R.id.files_loading_progress);
viewRateUs = (RateUsView) findViewById(R.id.view_rate_us);
Expand Down Expand Up @@ -258,6 +260,7 @@ private void searchForFiles(File path) {
}

private void showProgressViews() {
layoutEmpty.setVisibility(View.GONE);
layoutLoading.setVisibility(View.VISIBLE);
progress.setVisibility(View.VISIBLE);
}
Expand Down Expand Up @@ -305,8 +308,9 @@ private void handleFinishFilesLoad(Boolean isEntireFolder) {
txtLoading.setText(getString(R.string.searching_igc_files));
new FindIGCFilesAsyncTask(activity.get()).execute(Utilities.getSdCardFolder());
} else {
progress.setVisibility(View.GONE);
txtLoading.setText(getString(R.string.no_files_found_with_explanation));
viewRateUs.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
layoutEmpty.setVisibility(View.VISIBLE);
TrackerHelper.trackNoFilesFound();
}
}
Expand Down Expand Up @@ -337,6 +341,7 @@ public void onRequestPermissionsResult(int requestCode,
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
new FindIGCFilesAsyncTask(this).execute(Utilities.getSdCardFolder());
} else {
layoutEmpty.setVisibility(View.GONE);
progress.setVisibility(View.GONE);
txtLoading.setClickable(true);
txtLoading.setText(R.string.need_storage_access);
Expand Down
Loading

0 comments on commit 87f1b5f

Please sign in to comment.