Skip to content

Commit 348756e

Browse files
committed
Fixed issues with the flight history screen.
1 parent 0ae397a commit 348756e

File tree

8 files changed

+74
-59
lines changed

8 files changed

+74
-59
lines changed

Diff for: Android/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ dependencies {
1111
compile 'com.android.support:cardview-v7:21.0.2'
1212
compile 'com.android.support:recyclerview-v7:21.0.2'
1313

14-
compile 'com.o3dr:3dr-services-lib:2.2.15'
14+
compile 'com.o3dr:3dr-services-lib:2.2.16'
1515

1616
compile files('libs/droneapi-java-0.3-SNAPSHOT.jar')
1717
compile files('libs/j2xx.jar')

Diff for: Android/res/layout/activity_locator.xml

+6
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@
6363
android:layout_width="match_parent"
6464
android:layout_height="wrap_content"
6565
style="@style/editorMissionOverviewText"/>
66+
67+
<TextView
68+
android:id="@+id/altitudeView"
69+
android:layout_width="match_parent"
70+
android:layout_height="wrap_content"
71+
style="@style/editorMissionOverviewText"/>
6672
</LinearLayout>
6773

6874
<include

Diff for: Android/res/menu/menu_parameters.xml

+7-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,6 @@
1212
app:showAsAction="never"
1313
android:icon="@drawable/ic_refresh_black_48dp"
1414
android:title="@string/download_params" />
15-
<item
16-
android:id="@+id/menu_filter_params"
17-
app:showAsAction="never"
18-
android:icon="@android:drawable/ic_menu_search"
19-
android:title="@string/menu_search_toggle"
20-
/>
2115

2216
<item
2317
android:id="@+id/menu_open_parameters"
@@ -29,4 +23,11 @@
2923
app:showAsAction="never"
3024
android:icon="@drawable/ic_action_save"
3125
android:title="@string/export_to_device"/>
26+
27+
<item
28+
android:id="@+id/menu_filter_params"
29+
app:showAsAction="never"
30+
android:icon="@android:drawable/ic_menu_search"
31+
android:title="@string/menu_search_toggle"
32+
/>
3233
</menu>

Diff for: Android/res/values/strings.xml

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
<string name="app_settings">App Settings</string>
1212
<string name="flight_data">Flight Data</string>
1313
<string name="editor">Editor</string>
14-
<string name="upload_mission">Upload Mission</string>
15-
<string name="download_mission">Download Mission</string>
14+
<string name="upload_mission">Upload mission</string>
15+
<string name="download_mission">Download mission</string>
1616

1717
<!-- Drone Setup tabs -->
1818
<string name="screen_tuning">Tuning</string>
@@ -459,8 +459,8 @@
459459
<string name="pref_permanent_notification_summary">Enable to make status bar notification permanent when connected.</string>
460460

461461
<string name="zoom_fit">Zoom to Fit</string>
462-
<string name="open_mission_file">Import mission</string>
463-
<string name="save_mission_file">Export mission</string>
462+
<string name="open_mission_file">Import from file</string>
463+
<string name="save_mission_file">Export to file</string>
464464

465465
<string name="pref_ui_gps_hdop_summary">Display HDOP instead of FIX in satellite info bar item</string>
466466
<string name="pref_ui_gps_hdop_title">Display Satellite HDOP</string>
@@ -488,7 +488,7 @@
488488

489489
<!-- Drone locator strings -->
490490
<string name="locator">Flight History</string>
491-
<string name="open_tlog_file">Open Log File</string>
491+
<string name="open_tlog_file">Open log file</string>
492492
<string name="status_waiting_for_gps">Waiting for GPS…</string>
493493

494494
<!-- Preference dialogs -->
@@ -513,8 +513,8 @@
513513
<string name="pref_licenses_summary">Libraries (and their licenses) used in this project</string>
514514
<string name="upload_params">Upload parameters</string>
515515
<string name="download_params">Download parameters</string>
516-
<string name="import_from_device">Import parameters</string>
517-
<string name="export_to_device">Export parameters</string>
516+
<string name="import_from_device">Import from file</string>
517+
<string name="export_to_device">Export to file</string>
518518
<string name="pref_title_local">Localization</string>
519519

520520
<string name="unit_system_entry_auto">Auto</string>

Diff for: Android/src/org/droidplanner/android/activities/LocatorActivity.java

+36-33
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
package org.droidplanner.android.activities;
22

33
import android.app.ProgressDialog;
4-
import android.content.Context;
54
import android.content.Intent;
65
import android.location.Location;
76
import android.location.LocationListener;
8-
import android.net.Uri;
97
import android.os.AsyncTask;
108
import android.os.Bundle;
11-
import android.os.ParcelFileDescriptor;
129
import android.support.v4.app.FragmentManager;
13-
import android.util.Log;
1410
import android.view.Menu;
1511
import android.view.MenuItem;
1612
import android.view.View;
@@ -21,19 +17,18 @@
2117
import com.MAVLink.common.msg_global_position_int;
2218
import com.o3dr.android.client.data.tlog.TLogPicker;
2319
import com.o3dr.services.android.lib.coordinate.LatLong;
20+
import com.o3dr.services.android.lib.data.ServiceDataContract;
2421
import com.o3dr.services.android.lib.util.MathUtils;
2522

2623
import org.beyene.sius.unit.length.LengthUnit;
2724
import org.droidplanner.android.R;
28-
import org.droidplanner.android.dialogs.openfile.OpenFileDialog;
29-
import org.droidplanner.android.dialogs.openfile.OpenTLogDialog;
3025
import org.droidplanner.android.fragments.LocatorListFragment;
3126
import org.droidplanner.android.fragments.LocatorMapFragment;
3227
import org.droidplanner.android.utils.file.IO.TLogReader;
28+
import org.droidplanner.android.utils.file.IO.TLogReader.Event;
3329
import org.droidplanner.android.utils.prefs.AutoPanMode;
30+
import org.droidplanner.android.utils.unit.providers.length.LengthUnitProvider;
3431

35-
import java.io.FileDescriptor;
36-
import java.io.FileNotFoundException;
3732
import java.lang.ref.WeakReference;
3833
import java.util.LinkedList;
3934
import java.util.List;
@@ -50,22 +45,24 @@ public class LocatorActivity extends DrawerNavigationUI implements LocatorListFr
5045
private static final String STATE_LAST_SELECTED_POSITION = "STATE_LAST_SELECTED_POSITION";
5146
private static final int TLOG_PICKER_REQUEST_CODE = 101;
5247

53-
private final static List<msg_global_position_int> lastPositions = new LinkedList<>();
48+
private final static List<TLogReader.Event> lastPositions = new LinkedList<>();
49+
50+
private OpenTLogFileAsyncTask tlogOpener;
5451

5552
/*
5653
View widgets.
5754
*/
5855
private LocatorMapFragment locatorMapFragment;
5956
private LocatorListFragment locatorListFragment;
6057
private LinearLayout statusView;
61-
private TextView latView, lonView, distanceView, azimuthView;
58+
private TextView latView, lonView, distanceView, azimuthView, altitudeView;
6259

6360
private msg_global_position_int selectedMsg;
6461
private LatLong lastGCSPosition;
6562
private float lastGCSBearingTo = Float.MAX_VALUE;
6663
private double lastGCSAzimuth = Double.MAX_VALUE;
6764

68-
public List<msg_global_position_int> getLastPositions() {
65+
public List<Event> getLastPositions() {
6966
return lastPositions;
7067
}
7168

@@ -84,6 +81,7 @@ public void onCreate(Bundle savedInstanceState) {
8481
lonView = (TextView) findViewById(R.id.lonView);
8582
distanceView = (TextView) findViewById(R.id.distanceView);
8683
azimuthView = (TextView) findViewById(R.id.azimuthView);
84+
altitudeView = (TextView) findViewById(R.id.altitudeView);
8785

8886
final ImageButton zoomToFit = (ImageButton) findViewById(R.id.zoom_to_fit_button);
8987
zoomToFit.setVisibility(View.VISIBLE);
@@ -152,7 +150,7 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) {
152150

153151
final int lastSelectedPosition = savedInstanceState.getInt(STATE_LAST_SELECTED_POSITION, -1);
154152
if (lastSelectedPosition != -1 && lastSelectedPosition < lastPositions.size())
155-
setSelectedMsg(lastPositions.get(lastSelectedPosition));
153+
setSelectedMsg((msg_global_position_int) lastPositions.get(lastSelectedPosition).getMavLinkMessage());
156154
}
157155

158156
@Override
@@ -187,16 +185,14 @@ public void onActivityResult(int requestCode, int resultCode, Intent returnInten
187185
return;
188186
}
189187

190-
//Get the file's content uri from the incoming intent
191-
Uri returnUri = returnIntent.getData();
188+
//Get the file's absolute path from the incoming intent
189+
final String tlogAbsolutePath = returnIntent.getStringExtra(ServiceDataContract.EXTRA_TLOG_ABSOLUTE_PATH);
192190

193-
try {
194-
ParcelFileDescriptor inputFd = getContentResolver().openFileDescriptor(returnUri, "r");
195-
FileDescriptor fd = inputFd.getFileDescriptor();
196-
new OpenTLogFileAsyncTask(this).execute(fd);
197-
} catch (FileNotFoundException e) {
198-
Log.e(TAG, "File not found.");
199-
}
191+
if(tlogOpener != null)
192+
tlogOpener.cancel(true);
193+
194+
tlogOpener = new OpenTLogFileAsyncTask(this);
195+
tlogOpener.execute(tlogAbsolutePath);
200196
}
201197

202198
/*
@@ -208,7 +204,7 @@ private void loadLastPositions(List<TLogReader.Event> logEvents) {
208204
for (TLogReader.Event event : logEvents) {
209205
final msg_global_position_int message = (msg_global_position_int) event.getMavLinkMessage();
210206
if (message.lat != 0 || message.lon != 0)
211-
lastPositions.add(message);
207+
lastPositions.add(event);
212208
}
213209

214210
setSelectedMsg(null);
@@ -262,6 +258,12 @@ private void updateInfo() {
262258
if (selectedMsg != null) {
263259
statusView.setVisibility(View.VISIBLE);
264260

261+
final LengthUnitProvider lengthUnitProvider = unitSystem.getLengthUnitProvider();
262+
263+
final double altitude = selectedMsg.alt / 1000; //meters
264+
LengthUnit convertedAltitude = lengthUnitProvider.boxBaseValueToTarget(altitude);
265+
altitudeView.setText("Altitude: " + convertedAltitude.toString());
266+
265267
// coords
266268
final LatLong msgCoord = coordFromMsgGlobalPositionInt(selectedMsg);
267269

@@ -272,7 +274,7 @@ private void updateInfo() {
272274
azimuthView.setText("");
273275
} else {
274276
final double distance = MathUtils.getDistance(lastGCSPosition, msgCoord);
275-
final LengthUnit convertedDistance = unitSystem.getLengthUnitProvider().boxBaseValueToTarget(distance);
277+
final LengthUnit convertedDistance = lengthUnitProvider.boxBaseValueToTarget(distance);
276278
String distanceText = getString(R.string.editor_info_window_distance, convertedDistance.toString());
277279
if (lastGCSBearingTo != Float.MAX_VALUE) {
278280
final String bearing = String.format(" @ %.0f°", lastGCSBearingTo);
@@ -294,6 +296,7 @@ private void updateInfo() {
294296
lonView.setText("");
295297
distanceView.setText("");
296298
azimuthView.setText("");
299+
altitudeView.setText("");
297300
}
298301
}
299302

@@ -340,44 +343,44 @@ public void onProviderEnabled(String provider) {
340343
public void onProviderDisabled(String provider) {
341344
}
342345

343-
private static class OpenTLogFileAsyncTask extends AsyncTask<FileDescriptor, Void, List<TLogReader.Event>>{
346+
private static class OpenTLogFileAsyncTask extends AsyncTask<String, Void, List<TLogReader.Event>> {
344347

345348
private final WeakReference<LocatorActivity> activityRef;
346349
private final ProgressDialog progressDialog;
347350

348-
public OpenTLogFileAsyncTask(LocatorActivity activity){
351+
public OpenTLogFileAsyncTask(LocatorActivity activity) {
349352
activityRef = new WeakReference<>(activity);
350353
progressDialog = new ProgressDialog(activity);
351-
progressDialog.setTitle("Processing...");
354+
progressDialog.setTitle("Loading data...");
352355
progressDialog.setMessage("Please wait.");
353356
progressDialog.setIndeterminate(true);
354357
}
355358

356359
@Override
357-
protected void onPreExecute(){
360+
protected void onPreExecute() {
358361
progressDialog.show();
359362
}
360363

361364
@Override
362-
protected List<TLogReader.Event> doInBackground(FileDescriptor... params) {
363-
FileDescriptor fd = params[0];
365+
protected List<TLogReader.Event> doInBackground(String... params) {
366+
final String filename = params[0];
364367

365368
TLogReader tlogReader = new TLogReader(msg_global_position_int.MAVLINK_MSG_ID_GLOBAL_POSITION_INT);
366-
tlogReader.openTLog(fd);
369+
tlogReader.openTLog(filename);
367370

368371
return tlogReader.getLogEvents();
369372
}
370373

371374
@Override
372-
protected void onCancelled(){
375+
protected void onCancelled() {
373376
progressDialog.dismiss();
374377
}
375378

376379
@Override
377-
protected void onPostExecute(List<TLogReader.Event> events){
380+
protected void onPostExecute(List<TLogReader.Event> events) {
378381
progressDialog.dismiss();
379382
final LocatorActivity activity = activityRef.get();
380-
if(activity == null)
383+
if (activity == null)
381384
return;
382385

383386
activity.loadLastPositions(events);

Diff for: Android/src/org/droidplanner/android/fragments/LocatorMapFragment.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void zoomToFit() {
3737
// add lastPosition
3838
final LatLong lastPosition = graphicLocator.getPosition();
3939
if(lastPosition != null && lastPosition.getLongitude() != 0 && lastPosition.getLatitude() != 0) {
40-
mMapFragment.zoomToFitMyLocation(Collections.singletonList(lastPosition));
40+
mMapFragment.zoomToFit(Collections.singletonList(lastPosition));
4141
}
4242
else{
4343
mMapFragment.goToMyLocation();

Diff for: Android/src/org/droidplanner/android/utils/file/IO/TLogReader.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public boolean openTLog(FileDescriptor fd){
8383
while((packet = parser.mavlink_parse_char(in.readUnsignedByte())) == null);
8484

8585
if(msgFilter == MSGFILTER_NONE || packet.msgid == msgFilter) {
86-
if((timestamp - prevTimestamp) > 30000) {
86+
if((timestamp - prevTimestamp) > 5000) {
8787
logEvents.add(new Event(timestamp, packet.unpack()));
8888
prevTimestamp = timestamp;
8989
}
@@ -112,7 +112,7 @@ public boolean openTLog(FileDescriptor fd){
112112
return true;
113113
}
114114

115-
private boolean openTLog(String file) {
115+
public boolean openTLog(String file) {
116116
if (!FileManager.isExternalStorageAvailable()) {
117117
return false;
118118
}
@@ -135,7 +135,7 @@ private boolean openTLog(String file) {
135135
while((packet = parser.mavlink_parse_char(in.readUnsignedByte())) == null);
136136

137137
if(msgFilter == MSGFILTER_NONE || packet.msgid == msgFilter) {
138-
if((timestamp - prevTimestamp) > 60000) {
138+
if((timestamp - prevTimestamp) > 5000) {
139139
logEvents.add(new Event(timestamp, packet.unpack()));
140140
prevTimestamp = timestamp;
141141
}

Diff for: Android/src/org/droidplanner/android/widgets/adapterViews/LocatorItemAdapter.java

+13-8
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@
1010

1111
import org.droidplanner.android.R;
1212
import org.droidplanner.android.fragments.LocatorListFragment;
13+
import org.droidplanner.android.utils.file.IO.TLogReader;
14+
import org.droidplanner.android.utils.file.IO.TLogReader.Event;
1315

16+
import java.text.SimpleDateFormat;
17+
import java.util.Date;
1418
import java.util.List;
19+
import java.util.Locale;
1520

1621
/**
1722
* MissionItem Adapter for the MissionItem horizontal list view. This adapter
@@ -33,11 +38,13 @@ public ViewHolder(View container, TextView timeView) {
3338
}
3439
}
3540

41+
private static final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.US);
42+
3643
private int selectedPosition = -1;
37-
private final List<msg_global_position_int> msgList;
44+
private final List<Event> msgList;
3845
private final LocatorListFragment.OnLocatorListListener listener;
3946

40-
public LocatorItemAdapter(List<msg_global_position_int> list, LocatorListFragment.OnLocatorListListener listener) {
47+
public LocatorItemAdapter(List<TLogReader.Event> list, LocatorListFragment.OnLocatorListListener listener) {
4148
this.msgList = list;
4249
this.listener = listener;
4350
}
@@ -53,7 +60,7 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
5360

5461
@Override
5562
public void onBindViewHolder(ViewHolder holder, final int position) {
56-
final msg_global_position_int msg = msgList.get(position);
63+
final Event msgEvent = msgList.get(position);
5764

5865
final View container = holder.viewContainer;
5966
container.setActivated(isSelected(position));
@@ -63,18 +70,16 @@ public void onClick(View v) {
6370
setSelection(position);
6471
if (listener != null) {
6572
if (isSelected(position)) {
66-
listener.onItemClick(msg);
73+
listener.onItemClick((msg_global_position_int) msgEvent.getMavLinkMessage());
6774
} else {
6875
listener.onItemClick(null);
6976
}
7077
}
7178
}
7279
});
7380

74-
final int hour = msg.time_boot_ms / 3600000;
75-
final int min = (msg.time_boot_ms % 3600000) / 60000;
76-
final int sec = (msg.time_boot_ms % 60000) / 1000;
77-
holder.timeView.setText(String.format("%02d:%02d:%02d", hour, min, sec));
81+
Date eventDate = new Date(msgEvent.getTimestamp());
82+
holder.timeView.setText(sdf.format(eventDate));
7883
}
7984

8085
@Override

0 commit comments

Comments
 (0)