Skip to content

Commit 7dc7462

Browse files
Merge branch 'master' into release
Conflicts: Android/src/org/droidplanner/android/fragments/FlightActionsFragment.java
2 parents 14b7901 + 4dc9811 commit 7dc7462

File tree

24 files changed

+553
-226
lines changed

24 files changed

+553
-226
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ language: android
22
android:
33
components:
44
- build-tools-19.1.0
5+
- android-19
56
licenses:
67
- 'android-sdk-license-.+'
78

Android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apply plugin: 'android'
1+
apply plugin: 'com.android.application'
22

33
repositories {
44
mavenCentral()

Android/res/values-de/strings.xml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,4 +344,34 @@
344344
<string name="telemetry_label">Telemetrie</string>
345345
<string name="flight_modes_label">Flugmodi</string>
346346
<string name="menu_info_bar">Infoleiste</string>
347+
<string name="activity_title_map_provider_preferences">Karten-Provider Einstellungen</string>
348+
<string name="app_settings">App-Einstellungen</string>
349+
<string name="dlg_clear_mission_confirm">Alle Wegpunkte von der Karte löschen?</string>
350+
<string name="dlg_clear_mission_title">Mission löschen</string>
351+
<string name="draw_the_survey_region">Erhebungsregion zeichnen</string>
352+
<string name="drawer_close">Navigationsleiste ausblenden</string>
353+
<string name="drawer_open">Navigationsleiste anzeigen</string>
354+
<string name="flight_data">Flugdaten</string>
355+
<string name="ga_mode_details_close_panel">Panel geschlossen um</string>
356+
<string name="ga_mode_details_open_panel">Panel geöffnet um</string>
357+
<string name="guided_mode_warning">OK drücken, um Guided Modus zu starten. Um Position zu ändern, Karte drücken und halten.</string>
358+
<string name="mode_hybrid">Hybrid erlaubt das Halten der Position (GPS) mit Reaktion auf Eingaben des Piloten.</string>
359+
<string name="pref_live_upload">Live Upload aktivieren (Alpha-Test)</string>
360+
<string name="pref_live_upload_summary">Live-Verfolgung der Drohne auf Droneshare</string>
361+
<string name="pref_map_provider_settings_summary">Karten-Provider konfigurieren</string>
362+
<string name="pref_map_provider_settings_title">Karten-Provider Einstellungen</string>
363+
<string name="pref_maps_providers_summary">Welcher Karten-Provider verwendet werden soll.</string>
364+
<string name="pref_maps_providers_title">Karten-Provider</string>
365+
<string name="pref_maps_title">Karten</string>
366+
<string name="pref_title_google_map">Google Map Einstellungen</string>
367+
<string name="pref_title_language">Sprache</string>
368+
<string name="pref_title_notifications">Benachrichtigungen</string>
369+
<string name="pref_title_osm">Open Street Map Einstellungen</string>
370+
<string name="pref_title_screen">Bildschirm</string>
371+
<string name="pref_usage_statistics_summary">Mithelfen, DroidPlanner zu verbessern, indem Nutzungsstatistiken eingesendet werden.</string>
372+
<string name="pref_usage_statistics_title">Nutzungsstatistiken senden</string>
373+
<string name="spline_waypoint_toggle">Keil</string>
374+
<string name="usage_statistics">Nutzungsstatistiken</string>
375+
<string name="waypointType_SplineWaypoint">Keilwegpunkt</string>
376+
<string name="expandable_listview_icon_desc">Erweiterbares Listenansichtsicon</string>
347377
</resources>

Android/res/values/preferences_keys.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ This file is used to store the preferences keys so that it's accessible and modi
2828
<string name="pref_mavlink_version_key">pref_mavlink_version</string>
2929
<string name="pref_usage_statistics_key">pref_usage_statistics</string>
3030
<string name="pref_version_key">pref_version</string>
31+
<string name="pref_keep_screen_bright_key">pref_keep_screen_bright</string>
3132
</resources>

Android/res/values/strings.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,6 @@
356356
<string name="expandable_listview_icon_desc">Expandable listview icon</string>
357357

358358
<!-- Google Analytics -->
359-
<string name="ga_mode_details_panel_category">Mode Details Panel</string>
360359
<string name="ga_mode_details_open_panel">Panel Open Time</string>
361360
<string name="ga_mode_details_close_panel">Panel Close Time</string>
362361

@@ -368,9 +367,6 @@
368367
<string name="msg_connect_first">Please connect first</string>
369368
<string name="mode1_throttle_on_right_stick">Mode 1: Throttle on RIGHT stick</string>
370369
<string name="mode2_throttle_on_left_stick">Mode 2: Throttle on LEFT stick</string>
371-
<string name="hello_blank_fragment">Hello blank fragment</string>
372-
<string name="title_activity_test">TestActivity</string>
373-
<string name="hello_world">Hello world!</string>
374370
<string name="pref_map_provider_settings_summary">Configure the selected map provider</string>
375371
<string name="pref_map_provider_settings_title">Map Provider Preferences</string>
376372
<string name="pref_title_google_map">Google Map Preferences</string>

Android/res/xml/preferences.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
android:title="@string/pref_title_screen" >
2929
<CheckBoxPreference
3030
android:defaultValue="true"
31-
android:key="pref_keep_screen_bright"
31+
android:key="@string/pref_keep_screen_bright_key"
3232
android:summary="@string/pref_keep_screen_bright_summary"
3333
android:title="@string/pref_keep_screen_bright" />
3434
<CheckBoxPreference

Android/src/org/droidplanner/android/DroidPlannerApp.java

Lines changed: 9 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package org.droidplanner.android;
22

3-
import org.droidplanner.BuildConfig;
4-
import org.droidplanner.R;
53
import org.droidplanner.android.gcs.FollowMe;
4+
import org.droidplanner.android.utils.analytics.GAUtils;
65
import org.droidplanner.core.bus.events.DroneConnectedEvent;
76
import org.droidplanner.core.bus.events.DroneDisconnectedEvent;
87
import org.droidplanner.android.proxy.mission.MissionProxy;
@@ -18,16 +17,11 @@
1817
import org.droidplanner.core.drone.DroneInterfaces.Clock;
1918
import org.droidplanner.core.drone.DroneInterfaces.DroneEventsType;
2019
import org.droidplanner.core.drone.DroneInterfaces.Handler;
21-
import org.droidplanner.core.drone.Preferences;
2220

21+
import android.content.Context;
2322
import android.os.SystemClock;
2423

2524
import com.MAVLink.Messages.MAVLinkMessage;
26-
import com.google.android.gms.analytics.GoogleAnalytics;
27-
import com.google.android.gms.analytics.Logger;
28-
import com.google.android.gms.analytics.Tracker;
29-
30-
import java.util.concurrent.atomic.AtomicReference;
3125

3226
import de.greenrobot.event.EventBus;
3327

@@ -39,11 +33,6 @@ public class DroidPlannerApp extends ErrorReportApp implements MAVLinkStreams.Ma
3933
public MissionProxy missionProxy;
4034
private MavLinkMsgHandler mavLinkMsgHandler;
4135

42-
/**
43-
* Stores a reference to the google analytics app tracker.
44-
*/
45-
private Tracker mAppTracker;
46-
4736
/**
4837
* Handles dispatching of status bar, and audible notification.
4938
*/
@@ -53,7 +42,8 @@ public class DroidPlannerApp extends ErrorReportApp implements MAVLinkStreams.Ma
5342
public void onCreate() {
5443
super.onCreate();
5544

56-
mNotificationHandler = new NotificationHandler(getApplicationContext());
45+
final Context context = getApplicationContext();
46+
mNotificationHandler = new NotificationHandler(context);
5747

5848
MAVLinkClient MAVClient = new MAVLinkClient(this, this);
5949
Clock clock = new Clock() {
@@ -75,17 +65,19 @@ public void postDelayed(Runnable thread, long timeout) {
7565
handler.postDelayed(thread, timeout);
7666
}
7767
};
78-
DroidplannerPrefs pref = new DroidplannerPrefs(getApplicationContext());
68+
69+
DroidplannerPrefs pref = new DroidplannerPrefs(context);
7970
drone = new Drone(MAVClient, clock, handler, pref);
8071
drone.events.addDroneListener(this);
8172

8273
missionProxy = new MissionProxy(drone.mission);
8374
mavLinkMsgHandler = new org.droidplanner.core.MAVLink.MavLinkMsgHandler(drone);
8475

8576
followMe = new FollowMe(this, drone);
86-
NetworkStateReceiver.register(getApplicationContext());
77+
NetworkStateReceiver.register(context);
8778

88-
initGATracker(pref);
79+
GAUtils.initGATracker(this);
80+
GAUtils.startNewSession(context);
8981
}
9082

9183
@Override
@@ -127,28 +119,4 @@ public void onDroneEvent(DroneEventsType event, Drone drone) {
127119
break;
128120
}
129121
}
130-
131-
private void initGATracker(DroidplannerPrefs pref){
132-
final GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
133-
//Call is needed for now to allow dispatching of auto activity reports
134-
// (http://stackoverflow.com/a/23256722/1088814)
135-
analytics.enableAutoActivityReports(this);
136-
137-
analytics.setAppOptOut(!pref.isUsageStatisticsEnabled());
138-
139-
//If we're in debug mode, set log level to verbose.
140-
if(BuildConfig.DEBUG){
141-
analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE);
142-
}
143-
144-
mAppTracker = analytics.newTracker(R.xml.google_analytics_tracker);
145-
}
146-
147-
/**
148-
* @return handles to the google analytics tracker.
149-
*/
150-
public Tracker getTracker(){
151-
return mAppTracker;
152-
}
153-
154122
}

Android/src/org/droidplanner/android/activities/FlightActivity.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.droidplanner.android.fragments.TelemetryFragment;
88
import org.droidplanner.android.fragments.helpers.FlightSlidingDrawerContent;
99
import org.droidplanner.android.fragments.mode.FlightModePanel;
10+
import org.droidplanner.android.utils.analytics.GAUtils;
1011
import org.droidplanner.core.drone.Drone;
1112
import org.droidplanner.core.drone.DroneInterfaces.DroneEventsType;
1213
import org.droidplanner.core.drone.DroneInterfaces.OnDroneListener;
@@ -55,11 +56,10 @@ public void onDrawerClosed() {
5556
updateMapPadding();
5657

5758
//Stop tracking how long this was opened for.
58-
mTracker.send(new HitBuilders.TimingBuilder()
59-
.setCategory(getString(R.string.ga_mode_details_panel_category))
59+
GAUtils.sendTiming(new HitBuilders.TimingBuilder()
60+
.setCategory(GAUtils.Category.FLIGHT_DATA_DETAILS_PANEL.toString())
6061
.setVariable(getString(R.string.ga_mode_details_close_panel))
61-
.setValue(System.currentTimeMillis())
62-
.build());
62+
.setValue(System.currentTimeMillis()));
6363
}
6464
});
6565

@@ -69,11 +69,10 @@ public void onDrawerOpened() {
6969
updateMapPadding();
7070

7171
//Track how long this is opened for.
72-
mTracker.send(new HitBuilders.TimingBuilder()
73-
.setCategory(getString(R.string.ga_mode_details_panel_category))
72+
GAUtils.sendTiming(new HitBuilders.TimingBuilder()
73+
.setCategory(GAUtils.Category.FLIGHT_DATA_DETAILS_PANEL.toString())
7474
.setVariable(getString(R.string.ga_mode_details_open_panel))
75-
.setValue(System.currentTimeMillis())
76-
.build());
75+
.setValue(System.currentTimeMillis()));
7776
}
7877
});
7978

@@ -85,12 +84,10 @@ public void onDrawerOpened() {
8584
.add(R.id.mapFragment, mapFragment).commit();
8685
}
8786

88-
editorTools = fragmentManager
89-
.findFragmentById(R.id.editorToolsFragment);
87+
editorTools = fragmentManager.findFragmentById(R.id.editorToolsFragment);
9088
if (editorTools == null) {
9189
editorTools = new FlightActionsFragment();
92-
fragmentManager.beginTransaction()
93-
.add(R.id.editorToolsFragment, editorTools).commit();
90+
fragmentManager.beginTransaction().add(R.id.editorToolsFragment, editorTools).commit();
9491
}
9592

9693
/*

Android/src/org/droidplanner/android/activities/helpers/SuperUI.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.droidplanner.android.fragments.helpers.BTDeviceListFragment;
66
import org.droidplanner.android.maps.providers.google_map.GoogleMapFragment;
77
import org.droidplanner.android.utils.Constants;
8+
import org.droidplanner.android.utils.DroidplannerPrefs;
89
import org.droidplanner.android.utils.Utils;
910
import org.droidplanner.android.widgets.actionProviders.InfoBarActionProvider;
1011
import org.droidplanner.core.drone.Drone;
@@ -23,18 +24,17 @@
2324

2425
import com.google.android.gms.analytics.Tracker;
2526

26-
public abstract class SuperUI extends FragmentActivity implements
27-
OnDroneListener {
27+
public abstract class SuperUI extends FragmentActivity implements OnDroneListener {
2828
private ScreenOrientation screenOrientation = new ScreenOrientation(this);
2929
private InfoBarActionProvider infoBar;
3030
private GCSHeartbeat gcsHeartbeat;
3131
public DroidPlannerApp app;
3232
public Drone drone;
3333

3434
/**
35-
* Google analytics tracker used by the children activities.
35+
* Handle to the app preferences.
3636
*/
37-
protected Tracker mTracker;
37+
protected DroidplannerPrefs mAppPrefs;
3838

3939
@Override
4040
public void onCreate(Bundle savedInstanceState) {
@@ -45,28 +45,26 @@ public void onCreate(Bundle savedInstanceState) {
4545
actionBar.setDisplayHomeAsUpEnabled(true);
4646
}
4747

48+
app = (DroidPlannerApp) getApplication();
49+
this.drone = app.drone;
50+
gcsHeartbeat = new GCSHeartbeat(drone, 1);
51+
mAppPrefs = new DroidplannerPrefs(getApplicationContext());
52+
4853
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
4954

5055
/*
5156
* Used to supplant wake lock acquisition (previously in
5257
* org.droidplanner.android.service .MAVLinkService) as suggested by the
5358
* android android.os.PowerManager#newWakeLock documentation.
5459
*/
55-
if (PreferenceManager.getDefaultSharedPreferences(
56-
getApplicationContext()).getBoolean("pref_keep_screen_bright", false)) {
60+
if (mAppPrefs.keepScreenOn()) {
5761
getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
5862
}
5963

60-
app = (DroidPlannerApp) getApplication();
61-
this.drone = app.drone;
62-
6364
setVolumeControlStream(AudioManager.STREAM_MUSIC);
6465

6566
screenOrientation.unlock();
6667
Utils.updateUILanguage(getApplicationContext());
67-
gcsHeartbeat = new GCSHeartbeat(drone, 1);
68-
69-
mTracker = app.getTracker();
7068
}
7169

7270
@Override
@@ -192,10 +190,7 @@ public boolean onMenuItemSelected(int featureId, MenuItem item) {
192190

193191
protected void toggleDroneConnection() {
194192
if (!drone.MavClient.isConnected()) {
195-
final String connectionType = PreferenceManager
196-
.getDefaultSharedPreferences(getApplicationContext())
197-
.getString(Constants.PREF_CONNECTION_TYPE,
198-
Constants.DEFAULT_CONNECTION_TYPE);
193+
final String connectionType = mAppPrefs.getMavLinkConnectionType();
199194

200195
if (Utils.ConnectionType.BLUETOOTH.name().equals(connectionType)) {
201196
// Launch a bluetooth device selection screen for the user

Android/src/org/droidplanner/android/communication/connection/MAVLinkConnection.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import java.io.FileNotFoundException;
66
import java.io.IOException;
77
import java.net.UnknownHostException;
8+
import java.nio.BufferOverflowException;
89
import java.nio.ByteBuffer;
910
import java.nio.ByteOrder;
1011

1112
import org.droidplanner.android.communication.service.UploaderService;
1213
import org.droidplanner.android.utils.DroidplannerPrefs;
14+
import org.droidplanner.android.utils.analytics.GAUtils;
1315
import org.droidplanner.android.utils.file.FileStream;
1416

1517
import android.content.Context;
@@ -75,10 +77,14 @@ public void run() {
7577
try {
7678
parser.stats.mavlinkResetStats();
7779
openConnection();
78-
80+
81+
//Start a new ga analytics session. The new session will be tagged with the mavlink
82+
// connection mechanism, as well as whether the user has an active droneshare account.
83+
GAUtils.startNewSession(parentContext);
84+
7985
logFile = FileStream.getTLogFile();
8086
logWriter = FileStream.openOutputStream(logFile);
81-
logBuffer = ByteBuffer.allocate(Long.SIZE / Byte.SIZE);
87+
logBuffer = ByteBuffer.allocate(4* Long.SIZE / Byte.SIZE);
8288
logBuffer.order(ByteOrder.BIG_ENDIAN);
8389

8490
String login = prefs.getDroneshareLogin();
@@ -159,6 +165,8 @@ private void saveToLog(MAVLinkPacket receivedPacket) throws IOException {
159165
uploader.filterMavlink(uploader.interfaceNum, bytes);
160166
} catch (IOException e) {
161167
Log.e(TAG, "Ignoring IO error in saveToLog: " + e);
168+
}catch (BufferOverflowException e) {
169+
Log.e(TAG, "Ignoring Buffer Overflow in saveToLog: " + e);
162170
} catch (NullPointerException e) {
163171
Log.e(TAG, "Ignoring NPE in " + e);
164172
// There was a null pointer error for some users on

0 commit comments

Comments
 (0)