Skip to content

Commit c78781e

Browse files
siddutgikarSiddharth Utgikar
andauthored
Code for beta 5 (#26)
* Code for beta 5 Co-authored-by: Siddharth Utgikar <siddharth.utgikar@dji.com>
1 parent f336fbe commit c78781e

430 files changed

Lines changed: 17449 additions & 10578 deletions

File tree

Some content is hidden

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

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ before_script:
3838
- chmod +x gradlew
3939

4040
script:
41-
- ./gradlew clean build
42-
- ./gradlew test
41+
- travis_wait 30 ./gradlew clean build
42+
- travis_wait 30 ./gradlew test
4343

4444
after_success:
4545
- bash <(curl -s https://codecov.io/bash)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ You can also post questions, keep up to date on DJI developer news and contribut
2828

2929
## Future Plans
3030

31-
We are eager to give you a sneak peek, and are very interested in receiving your feedback and suggestions. Please refer to the wiki or the release notes for the full list of elements that the Beta 4 version makes available.
31+
We are eager to give you a sneak peek, and are very interested in receiving your feedback and suggestions. Please refer to the wiki or the release notes for the full list of elements that the Beta 5 version makes available.
3232

3333
Our long-term plan is for this framework to reach feature parity with the current UX SDK 4.x release. The core team is currently working on porting the remaining widgets and other APIs to the new architecture and we will open source them in additional future Beta releases as they are completed. We welcome your feedback on the architecture and your ideas for additional widgets, including those not included in prior UX SDK releases, as well as your contributions and PRs for any ***currently open-sourced features***.
3434

android-uxsdk-beta-hardwareaccessory/build.gradle renamed to android-uxsdk-beta-accessory/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ android {
6969
dependencies {
7070
api project(path: ':android-uxsdk-beta-core')
7171

72-
implementation ('com.dji:dji-sdk:4.13.1', {
72+
implementation ('com.dji:dji-sdk:4.14-trial1', {
7373
/**
7474
* Comment the "library-anti-distortion" if your app needs Anti Distortion for Mavic 2 Pro
7575
* and Mavic 2 Zoom.
@@ -81,7 +81,7 @@ dependencies {
8181
exclude module: 'library-anti-distortion'
8282
exclude module: 'fly-safe-database'
8383
})
84-
compileOnly ('com.dji:dji-sdk-provided:4.13.1')
84+
compileOnly ('com.dji:dji-sdk-provided:4.14-trial1')
8585

8686
implementation 'androidx.multidex:multidex:2.0.0'
8787
implementation 'androidx.appcompat:appcompat:1.0.0'
File renamed without changes.

android-uxsdk-beta-hardwareaccessory/proguard-test-rules.pro renamed to android-uxsdk-beta-accessory/proguard-test-rules.pro

File renamed without changes.

android-uxsdk-beta-intelligentflight/src/main/AndroidManifest.xml renamed to android-uxsdk-beta-accessory/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@
2121
~
2222
-->
2323

24-
<manifest package="dji.ux.beta.intelligentflight" />
24+
<manifest package="dji.ux.beta.accessory" />

android-uxsdk-beta-hardwareaccessory/src/main/java/dji/ux/beta/hardwareaccessory/widget/rtk/RTKEnabledWidget.kt renamed to android-uxsdk-beta-accessory/src/main/java/dji/ux/beta/accessory/widget/rtk/RTKEnabledWidget.kt

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1919
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2020
* SOFTWARE.
21-
*
21+
*
2222
*/
2323

24-
package dji.ux.beta.hardwareaccessory.widget.rtk
24+
package dji.ux.beta.accessory.widget.rtk
2525

2626
import android.annotation.SuppressLint
2727
import android.content.Context
@@ -39,17 +39,17 @@ import dji.thirdparty.io.reactivex.Flowable
3939
import dji.thirdparty.io.reactivex.disposables.Disposable
4040
import dji.thirdparty.io.reactivex.functions.Consumer
4141
import dji.thirdparty.io.reactivex.processors.PublishProcessor
42-
import dji.ux.beta.core.base.ConstraintLayoutWidget
42+
import dji.ux.beta.accessory.R
43+
import dji.ux.beta.accessory.widget.rtk.RTKEnabledWidget.ModelState
44+
import dji.ux.beta.accessory.widget.rtk.RTKEnabledWidget.ModelState.ProductConnected
45+
import dji.ux.beta.accessory.widget.rtk.RTKEnabledWidget.ModelState.RTKEnabledUpdated
46+
import dji.ux.beta.accessory.widget.rtk.RTKEnabledWidget.UIState.SwitchChanged
4347
import dji.ux.beta.core.base.DJISDKModel
4448
import dji.ux.beta.core.base.SchedulerProvider
45-
import dji.ux.beta.core.base.uxsdkkeys.ObservableInMemoryKeyedStore
49+
import dji.ux.beta.core.base.widget.ConstraintLayoutWidget
50+
import dji.ux.beta.core.communication.ObservableInMemoryKeyedStore
4651
import dji.ux.beta.core.extension.*
4752
import dji.ux.beta.core.util.DisplayUtil
48-
import dji.ux.beta.hardwareaccessory.R
49-
import dji.ux.beta.hardwareaccessory.widget.rtk.RTKEnabledWidget.RTKEnabledWidgetState
50-
import dji.ux.beta.hardwareaccessory.widget.rtk.RTKEnabledWidget.RTKEnabledWidgetState.ProductConnected
51-
import dji.ux.beta.hardwareaccessory.widget.rtk.RTKEnabledWidget.RTKEnabledWidgetState.RTKEnabledUpdate
52-
import dji.ux.beta.hardwareaccessory.widget.rtk.RTKEnabledWidget.RTKEnabledWidgetUIState.RTKEnabledSwitchCheckChanged
5353

5454
private const val TAG = "RTKEnabledWidget"
5555

@@ -60,19 +60,18 @@ open class RTKEnabledWidget @JvmOverloads constructor(
6060
context: Context,
6161
attrs: AttributeSet? = null,
6262
defStyleAttr: Int = 0
63-
) : ConstraintLayoutWidget<RTKEnabledWidgetState>(context, attrs, defStyleAttr), CompoundButton.OnCheckedChangeListener {
63+
) : ConstraintLayoutWidget<ModelState>(context, attrs, defStyleAttr), CompoundButton.OnCheckedChangeListener {
6464

6565
//region Fields
6666
private val rtkTitleTextView: TextView = findViewById(R.id.textview_rtk_title)
6767
private val rtkEnabledSwitch: Switch = findViewById(R.id.switch_rtk_enabled)
6868
private val rtkEnabledDescriptionTextView: TextView = findViewById(R.id.textview_rtk_enabled_description)
69-
private val uiUpdateStateProcessor: PublishProcessor<RTKEnabledWidgetUIState> = PublishProcessor.create()
69+
private val uiUpdateStateProcessor: PublishProcessor<UIState> = PublishProcessor.create()
7070

7171
private val widgetModel by lazy {
7272
RTKEnabledWidgetModel(
7373
DJISDKModel.getInstance(),
74-
ObservableInMemoryKeyedStore.getInstance(),
75-
SchedulerProvider.getInstance())
74+
ObservableInMemoryKeyedStore.getInstance())
7675
}
7776

7877
/**
@@ -169,7 +168,7 @@ open class RTKEnabledWidget @JvmOverloads constructor(
169168
}
170169
//endregion
171170

172-
//region Constructors
171+
//region Constructor
173172
override fun initView(context: Context, attrs: AttributeSet?, defStyleAttr: Int) {
174173
inflate(context, R.layout.uxsdk_widget_rtk_enabled, this)
175174
}
@@ -197,7 +196,7 @@ open class RTKEnabledWidget @JvmOverloads constructor(
197196

198197
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
199198
addDisposable(widgetModel.canEnableRTK.firstOrError()
200-
.observeOn(SchedulerProvider.getInstance().ui())
199+
.observeOn(SchedulerProvider.ui())
201200
.subscribe(Consumer { canEnableRTK: Boolean ->
202201
if (!canEnableRTK) {
203202
setRTKSwitch(!isChecked)
@@ -206,29 +205,29 @@ open class RTKEnabledWidget @JvmOverloads constructor(
206205
setRTKEnabled(isChecked)
207206
}
208207
}, logErrorConsumer(TAG, "canEnableRTK: ")))
209-
uiUpdateStateProcessor.onNext(RTKEnabledSwitchCheckChanged(isChecked))
208+
uiUpdateStateProcessor.onNext(SwitchChanged(isChecked))
210209
}
211210

212211
override fun reactToModelChanges() {
213212
addReaction(widgetModel.rtkEnabled
214-
.observeOn(SchedulerProvider.getInstance().ui())
213+
.observeOn(SchedulerProvider.ui())
215214
.subscribe { updateUIForRTKEnabled(it) })
216215
addReaction(widgetModel.productConnection
217-
.observeOn(SchedulerProvider.getInstance().ui())
216+
.observeOn(SchedulerProvider.ui())
218217
.subscribe { widgetStateDataProcessor.onNext(ProductConnected(it)) })
219218
}
220219
//endregion
221220

222221
//region Reaction helpers
223222
private fun updateUIForRTKEnabled(rtkEnabled: Boolean) {
224223
setRTKSwitch(rtkEnabled)
225-
widgetStateDataProcessor.onNext(RTKEnabledUpdate(rtkEnabled))
224+
widgetStateDataProcessor.onNext(RTKEnabledUpdated(rtkEnabled))
226225
}
227226

228227
private fun setRTKEnabled(enabled: Boolean) {
229228
addDisposable(widgetModel.rtkEnabled
230229
.firstOrError()
231-
.observeOn(SchedulerProvider.getInstance().ui())
230+
.observeOn(SchedulerProvider.ui())
232231
.subscribe(Consumer { rtkEnabled: Boolean ->
233232
if (rtkEnabled != enabled) {
234233
addDisposable(toggleRTK(enabled))
@@ -238,7 +237,7 @@ open class RTKEnabledWidget @JvmOverloads constructor(
238237

239238
private fun toggleRTK(enabled: Boolean): Disposable {
240239
return widgetModel.setRTKEnabled(enabled)
241-
.observeOn(SchedulerProvider.getInstance().ui())
240+
.observeOn(SchedulerProvider.ui())
242241
.subscribe({}
243242
) { throwable: Throwable ->
244243
setRTKSwitch(!enabled)
@@ -333,42 +332,43 @@ open class RTKEnabledWidget @JvmOverloads constructor(
333332

334333
//region Hooks
335334
/**
336-
* Get the [RTKEnabledWidgetUIState] updates
335+
* Get the [UIState] updates
337336
*/
338-
fun getUIStateUpdates(): Flowable<RTKEnabledWidgetUIState> {
339-
return uiUpdateStateProcessor
337+
fun getUIStateUpdates(): Flowable<UIState> {
338+
return uiUpdateStateProcessor.onBackpressureBuffer()
340339
}
341340

342341
/**
343342
* Widget UI update State
344343
*/
345-
sealed class RTKEnabledWidgetUIState {
344+
sealed class UIState {
346345
/**
347346
* RTK enabled switch check changed update
348347
*/
349-
data class RTKEnabledSwitchCheckChanged(val isChecked: Boolean) : RTKEnabledWidgetUIState()
348+
data class SwitchChanged(val isChecked: Boolean) : UIState()
350349
}
351350

352351
/**
353-
* Get the [RTKEnabledWidgetState] updates
352+
* Get the [ModelState] updates
354353
*/
355-
override fun getWidgetStateUpdate(): Flowable<RTKEnabledWidgetState> {
354+
@SuppressWarnings
355+
override fun getWidgetStateUpdate(): Flowable<ModelState> {
356356
return super.getWidgetStateUpdate()
357357
}
358358

359359
/**
360360
* Class defines the widget state updates
361361
*/
362-
sealed class RTKEnabledWidgetState {
362+
sealed class ModelState {
363363
/**
364364
* Product connection update
365365
*/
366-
data class ProductConnected(val isConnected: Boolean) : RTKEnabledWidgetState()
366+
data class ProductConnected(val isConnected: Boolean) : ModelState()
367367

368368
/**
369369
* RTK enabled update
370370
*/
371-
data class RTKEnabledUpdate(val isRTKEnabled: Boolean) : RTKEnabledWidgetState()
371+
data class RTKEnabledUpdated(val isRTKEnabled: Boolean) : ModelState()
372372
}
373373
//endregion
374374
}

android-uxsdk-beta-hardwareaccessory/src/main/java/dji/ux/beta/hardwareaccessory/widget/rtk/RTKEnabledWidgetModel.kt renamed to android-uxsdk-beta-accessory/src/main/java/dji/ux/beta/accessory/widget/rtk/RTKEnabledWidgetModel.kt

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,27 @@
1818
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1919
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2020
* SOFTWARE.
21-
*
21+
*
2222
*/
2323

24-
package dji.ux.beta.hardwareaccessory.widget.rtk
24+
package dji.ux.beta.accessory.widget.rtk
2525

2626
import dji.keysdk.DJIKey
2727
import dji.keysdk.FlightControllerKey
2828
import dji.thirdparty.io.reactivex.Completable
2929
import dji.thirdparty.io.reactivex.Flowable
3030
import dji.ux.beta.core.base.DJISDKModel
31-
import dji.ux.beta.core.base.SchedulerProviderInterface
3231
import dji.ux.beta.core.base.WidgetModel
33-
import dji.ux.beta.core.base.uxsdkkeys.ObservableInMemoryKeyedStore
32+
import dji.ux.beta.core.communication.ObservableInMemoryKeyedStore
3433
import dji.ux.beta.core.util.DataProcessor
3534

3635
/**
3736
* Widget Model for the [RTKEnabledWidget] used to define
3837
* the underlying logic and communication
3938
*/
40-
class RTKEnabledWidgetModel(djiSdkModel: DJISDKModel,
41-
keyedStore: ObservableInMemoryKeyedStore,
42-
private val schedulerProvider: SchedulerProviderInterface
39+
class RTKEnabledWidgetModel(
40+
djiSdkModel: DJISDKModel,
41+
keyedStore: ObservableInMemoryKeyedStore
4342
) : WidgetModel(djiSdkModel, keyedStore) {
4443

4544
//region Fields
@@ -90,7 +89,7 @@ class RTKEnabledWidgetModel(djiSdkModel: DJISDKModel,
9089

9190
//region User interaction
9291
fun setRTKEnabled(enabled: Boolean): Completable {
93-
return djiSdkModel.setValue(isRTKEnabledKey, enabled).subscribeOn(schedulerProvider.io())
92+
return djiSdkModel.setValue(isRTKEnabledKey, enabled)
9493
}
9594
//endregion
9695
}
@@ -123,15 +122,12 @@ enum class HomePointDataSourceType(@get:JvmName("value") val value: Int) {
123122
UNKNOWN(255);
124123

125124
companion object {
125+
@JvmStatic
126+
val values = values()
127+
126128
@JvmStatic
127129
fun find(value: Int): HomePointDataSourceType {
128-
val values = values()
129-
for (item in values) {
130-
if (item.value == value) {
131-
return item
132-
}
133-
}
134-
return UNKNOWN
130+
return values.find { it.value == value } ?: UNKNOWN
135131
}
136132
}
137133
}

0 commit comments

Comments
 (0)