Skip to content

Commit 7c55213

Browse files
committed
Merge pull request #232 from dronekit/feature_solo_shots_api
Feature solo api
2 parents 71fad97 + 00ef6e3 commit 7c55213

File tree

90 files changed

+1193
-729
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+1193
-729
lines changed

ClientLib/build.gradle

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
apply plugin: 'com.android.library'
22

33
ext {
4+
VERSION_MAJOR = 2
5+
VERSION_MINOR = 5
6+
VERSION_PATCH = 21
7+
VERSION_BUILD = 0
8+
49
PUBLISH_ARTIFACT_ID = 'dronekit-android'
5-
PUBLISH_VERSION = '2.5.15'
10+
PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH)
11+
PUBLISH_VERSION_CODE = computeVersionCode(VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_BUILD)
612
PROJECT_DESCRIPTION = "Android DroneKit client library."
713
PROJECT_LABELS = ['3DR', '3DR Services', 'DroneAPI', 'Android', 'DroneKit']
814
PROJECT_LICENSES = ['Apache-2.0']
915
}
10-
/* Every time something is changed in the client library the versionCode and
11-
PUBLISH_VERSION must be incremented.
12-
*/
16+
1317
android {
1418
compileSdkVersion Integer.parseInt(project.ANDROID_BUILD_SDK_VERSION)
1519
buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
1620

1721
defaultConfig {
1822
minSdkVersion Integer.parseInt(project.ANDROID_BUILD_MIN_SDK_VERSION)
1923
targetSdkVersion Integer.parseInt(project.ANDROID_BUILD_TARGET_SDK_VERSION)
20-
versionCode 20515
24+
versionCode PUBLISH_VERSION_CODE
2125
versionName PUBLISH_VERSION
2226
}
2327

ClientLib/src/main/java/com/o3dr/android/client/Drone.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.o3dr.services.android.lib.drone.attribute.AttributeEvent;
2020
import com.o3dr.services.android.lib.drone.attribute.AttributeType;
2121
import com.o3dr.services.android.lib.drone.calibration.magnetometer.MagnetometerCalibrationStatus;
22+
import com.o3dr.services.android.lib.drone.companion.solo.SoloAttributes;
2223
import com.o3dr.services.android.lib.drone.connection.ConnectionParameter;
2324
import com.o3dr.services.android.lib.drone.connection.ConnectionResult;
2425
import com.o3dr.services.android.lib.drone.mission.Mission;
@@ -358,8 +359,8 @@ private <T extends Parcelable> T getAttributeDefaultValue(String attributeType)
358359
return (T) new MagnetometerCalibrationStatus();
359360

360361
case AttributeType.CAMERA:
361-
case AttributeType.SOLOLINK_STATE:
362-
case AttributeType.SOLOLINK_GOPRO_STATE:
362+
case SoloAttributes.SOLO_STATE:
363+
case SoloAttributes.SOLO_GOPRO_STATE:
363364
default:
364365
return null;
365366
}
Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,39 @@
11
package com.o3dr.android.client.apis;
22

3+
import com.o3dr.android.client.Drone;
4+
5+
import java.util.concurrent.ConcurrentHashMap;
6+
37
/**
48
* Common interface for the drone set of api classes.
59
* Created by Fredia Huya-Kouadio on 7/5/15.
610
*/
7-
interface Api {
11+
public abstract class Api {
12+
13+
protected interface Builder<T extends Api> {
14+
T build(Drone drone);
15+
}
16+
17+
/**
18+
* Retrieves the api instance bound to the given Drone object.
19+
* @param drone Drone object
20+
* @param apiCache Used to retrieve the api instance if it exists, or store it if it doesn't exist.
21+
* @param apiBuilder Api instance generator.
22+
* @param <T> Specific api instance type.
23+
* @return The matching Api instance.
24+
*/
25+
protected static <T extends Api> T getApi(Drone drone, ConcurrentHashMap<Drone, T> apiCache, Api.Builder<T> apiBuilder){
26+
if(drone == null || apiCache == null)
27+
return null;
28+
29+
T apiInstance = apiCache.get(drone);
30+
if(apiInstance == null && apiBuilder != null){
31+
apiInstance = apiBuilder.build(drone);
32+
final T previousInstance = apiCache.putIfAbsent(drone, apiInstance);
33+
if(previousInstance != null)
34+
apiInstance = previousInstance;
35+
}
836

9-
interface Builder<T extends Api> {
10-
T build();
37+
return apiInstance;
1138
}
1239
}

ClientLib/src/main/java/com/o3dr/android/client/apis/ApiUtils.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

ClientLib/src/main/java/com/o3dr/android/client/apis/CalibrationApi.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,15 @@
2222
* Provides access to the calibration specific functionality.
2323
* Created by Fredia Huya-Kouadio on 1/19/15.
2424
*/
25-
public class CalibrationApi implements Api {
25+
public class CalibrationApi extends Api {
2626

2727
private static final ConcurrentHashMap<Drone, CalibrationApi> calibrationApiCache = new ConcurrentHashMap<>();
28+
private static final Builder<CalibrationApi> apiBuilder = new Builder<CalibrationApi>() {
29+
@Override
30+
public CalibrationApi build(Drone drone) {
31+
return new CalibrationApi(drone);
32+
}
33+
};
2834

2935
/**
3036
* Retrieves a CalibrationApi instance.
@@ -33,12 +39,7 @@ public class CalibrationApi implements Api {
3339
* @return a CalibrationApi instance.
3440
*/
3541
public static CalibrationApi getApi(final Drone drone) {
36-
return ApiUtils.getApi(drone, calibrationApiCache, new Api.Builder<CalibrationApi>() {
37-
@Override
38-
public CalibrationApi build() {
39-
return new CalibrationApi(drone);
40-
}
41-
});
42+
return getApi(drone, calibrationApiCache, apiBuilder);
4243
}
4344

4445
private final Drone drone;

ClientLib/src/main/java/com/o3dr/android/client/apis/CapabilityApi.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* Allows to query the capabilities offered by the vehicle.
1717
* Created by Fredia Huya-Kouadio on 7/5/15.
1818
*/
19-
public class CapabilityApi implements Api {
19+
public class CapabilityApi extends Api {
2020

2121
/**
2222
* Feature support check error. The drone is disconnected.
@@ -34,19 +34,20 @@ public class CapabilityApi implements Api {
3434
public static final int FEATURE_UNSUPPORTED = 1;
3535

3636
private static final ConcurrentHashMap<Drone, CapabilityApi> capabilityApiCache = new ConcurrentHashMap<>();
37+
private static final Builder<CapabilityApi> apiBuilder = new Builder<CapabilityApi>() {
38+
@Override
39+
public CapabilityApi build(Drone drone) {
40+
return new CapabilityApi(drone);
41+
}
42+
};
3743

3844
/**
3945
* Retrieves a capability api instance.
4046
* @param drone target vehicle.
4147
* @return a CapabilityApi instance.
4248
*/
4349
public static CapabilityApi getApi(final Drone drone){
44-
return ApiUtils.getApi(drone, capabilityApiCache, new Builder<CapabilityApi>() {
45-
@Override
46-
public CapabilityApi build() {
47-
return new CapabilityApi(drone);
48-
}
49-
});
50+
return getApi(drone, capabilityApiCache, apiBuilder);
5051
}
5152

5253
private final Drone drone;
@@ -84,7 +85,7 @@ public void run() {
8485
});
8586
break;
8687

87-
case FeatureIds.SOLOLINK_VIDEO_STREAMING:
88+
case FeatureIds.SOLO_VIDEO_STREAMING:
8889
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2) {
8990
drone.post(new Runnable() {
9091
@Override
@@ -137,7 +138,7 @@ public static final class FeatureIds {
137138
/**
138139
* Id for the video feature.
139140
*/
140-
public static final String SOLOLINK_VIDEO_STREAMING = "feature_sololink_video_streaming";
141+
public static final String SOLO_VIDEO_STREAMING = "feature_solo_video_streaming";
141142

142143
/**
143144
* Id for the compass calibration feature.

ClientLib/src/main/java/com/o3dr/android/client/apis/ExperimentalApi.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,15 @@
2626
/**
2727
* Contains drone commands with no defined interaction model yet.
2828
*/
29-
public class ExperimentalApi implements Api {
29+
public class ExperimentalApi extends Api {
3030

3131
private static final ConcurrentHashMap<Drone, ExperimentalApi> experimentalApiCache = new ConcurrentHashMap<>();
32+
private static final Builder<ExperimentalApi> apiBuilder = new Builder<ExperimentalApi>() {
33+
@Override
34+
public ExperimentalApi build(Drone drone) {
35+
return new ExperimentalApi(drone);
36+
}
37+
};
3238

3339
/**
3440
* Retrieves an ExperimentalApi instance.
@@ -37,12 +43,7 @@ public class ExperimentalApi implements Api {
3743
* @return a ExperimentalApi instance.
3844
*/
3945
public static ExperimentalApi getApi(final Drone drone) {
40-
return ApiUtils.getApi(drone, experimentalApiCache, new Builder<ExperimentalApi>() {
41-
@Override
42-
public ExperimentalApi build() {
43-
return new ExperimentalApi(drone);
44-
}
45-
});
46+
return getApi(drone, experimentalApiCache, apiBuilder);
4647
}
4748

4849
private final Drone drone;

ClientLib/src/main/java/com/o3dr/android/client/apis/FollowApi.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,15 @@
1717
* Provides access to the Follow me api.
1818
* Created by Fredia Huya-Kouadio on 1/19/15.
1919
*/
20-
public class FollowApi implements Api {
20+
public class FollowApi extends Api {
2121

2222
private static final ConcurrentHashMap<Drone, FollowApi> followApiCache = new ConcurrentHashMap<>();
23+
private static final Builder<FollowApi> apiBuilder = new Builder<FollowApi>() {
24+
@Override
25+
public FollowApi build(Drone drone) {
26+
return new FollowApi(drone);
27+
}
28+
};
2329

2430
/**
2531
* Retrieves a FollowApi instance.
@@ -28,12 +34,7 @@ public class FollowApi implements Api {
2834
* @return a FollowApi instance.
2935
*/
3036
public static FollowApi getApi(final Drone drone) {
31-
return ApiUtils.getApi(drone, followApiCache, new Builder<FollowApi>() {
32-
@Override
33-
public FollowApi build() {
34-
return new FollowApi(drone);
35-
}
36-
});
37+
return getApi(drone, followApiCache, apiBuilder);
3738
}
3839

3940
private final Drone drone;

ClientLib/src/main/java/com/o3dr/android/client/apis/GimbalApi.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,18 @@
1919

2020
import static com.o3dr.services.android.lib.drone.action.GimbalActions.*;
2121

22-
public final class GimbalApi implements Api, DroneListener {
22+
public final class GimbalApi extends Api implements DroneListener {
2323

2424
private static final ConcurrentHashMap<Drone, GimbalApi> gimbalApiCache = new ConcurrentHashMap<>();
25+
private static final Builder<GimbalApi> apiBuilder = new Builder<GimbalApi>() {
26+
@Override
27+
public GimbalApi build(Drone drone) {
28+
return new GimbalApi(drone);
29+
}
30+
};
2531

2632
public static GimbalApi getApi(final Drone drone){
27-
return ApiUtils.getApi(drone, gimbalApiCache, new Builder<GimbalApi>() {
28-
@Override
29-
public GimbalApi build() {
30-
return new GimbalApi(drone);
31-
}
32-
});
33+
return getApi(drone, gimbalApiCache, apiBuilder);
3334
}
3435

3536
public interface GimbalOrientationListener {

ClientLib/src/main/java/com/o3dr/android/client/apis/MissionApi.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,23 @@
1717
* Provides access to missions specific functionality.
1818
* Created by Fredia Huya-Kouadio on 1/19/15.
1919
*/
20-
public class MissionApi implements Api {
20+
public class MissionApi extends Api {
2121

2222
private static final ConcurrentHashMap<Drone, MissionApi> missionApiCache = new ConcurrentHashMap<>();
23+
private static final Builder<MissionApi> apiBuilder = new Builder<MissionApi>() {
24+
@Override
25+
public MissionApi build(Drone drone) {
26+
return new MissionApi(drone);
27+
}
28+
};
2329

2430
/**
2531
* Retrieves a MissionApi instance.
2632
* @param drone Target vehicle
2733
* @return a MissionApi instance.
2834
*/
29-
public static MissionApi getApi(final Drone drone){
30-
return ApiUtils.getApi(drone, missionApiCache, new Builder<MissionApi>() {
31-
@Override
32-
public MissionApi build() {
33-
return new MissionApi(drone);
34-
}
35-
});
35+
public static MissionApi getApi(final Drone drone) {
36+
return getApi(drone, missionApiCache, apiBuilder);
3637
}
3738

3839
private final Drone drone;

0 commit comments

Comments
 (0)