init
This commit is contained in:
115
sample/src/main/java/com/zklh/dronecontroller/MainActivity.kt
Normal file
115
sample/src/main/java/com/zklh/dronecontroller/MainActivity.kt
Normal file
@@ -0,0 +1,115 @@
|
||||
package com.zklh.dronecontroller
|
||||
|
||||
import android.Manifest
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.view.WindowInsets
|
||||
import android.view.WindowInsetsController
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.core.content.ContextCompat
|
||||
import dji.sampleV5.aircraft.models.MSDKManagerVM
|
||||
import dji.sampleV5.aircraft.models.globalViewModels
|
||||
import dji.v5.common.register.DJISDKInitEvent
|
||||
import com.zklh.dronecontroller.core.msdk.DroneSdkManager
|
||||
import com.zklh.dronecontroller.ui.DroneControllerScreen
|
||||
import com.zklh.dronecontroller.ui.ZklhDroneTheme
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
private val msdkManagerVM: MSDKManagerVM by globalViewModels()
|
||||
|
||||
private val permissionLauncher = registerForActivityResult(
|
||||
ActivityResultContracts.RequestMultiplePermissions()
|
||||
) {
|
||||
DroneSdkManager.initMobileSdk(application)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
observeOfficialMsdkManager()
|
||||
enterImmersiveMode()
|
||||
requestRuntimePermissions()
|
||||
setContent {
|
||||
ZklhDroneTheme {
|
||||
DroneControllerScreen()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun observeOfficialMsdkManager() {
|
||||
msdkManagerVM.lvInitProcess.observe(this) { (event, totalProcess) ->
|
||||
DroneSdkManager.onOfficialInitProcess(
|
||||
eventName = event.name,
|
||||
totalProcess = totalProcess,
|
||||
initialized = event == DJISDKInitEvent.INITIALIZE_COMPLETE
|
||||
)
|
||||
}
|
||||
msdkManagerVM.lvRegisterState.observe(this) { (success, error) ->
|
||||
DroneSdkManager.onOfficialRegisterState(
|
||||
success = success,
|
||||
errorMessage = error?.toString()
|
||||
)
|
||||
}
|
||||
msdkManagerVM.lvProductConnectionState.observe(this) { (connected, productId) ->
|
||||
DroneSdkManager.onOfficialProductConnection(connected, productId)
|
||||
}
|
||||
msdkManagerVM.lvDBDownloadProgress.observe(this) { (current, total) ->
|
||||
DroneSdkManager.onOfficialDatabaseProgress(current, total)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||
super.onWindowFocusChanged(hasFocus)
|
||||
if (hasFocus) {
|
||||
enterImmersiveMode()
|
||||
}
|
||||
}
|
||||
|
||||
private fun requestRuntimePermissions() {
|
||||
val permissions = buildList {
|
||||
add(Manifest.permission.ACCESS_FINE_LOCATION)
|
||||
add(Manifest.permission.ACCESS_COARSE_LOCATION)
|
||||
add(Manifest.permission.RECORD_AUDIO)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
add(Manifest.permission.BLUETOOTH_CONNECT)
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
add(Manifest.permission.POST_NOTIFICATIONS)
|
||||
}
|
||||
}.filter {
|
||||
ContextCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
|
||||
if (permissions.isNotEmpty()) {
|
||||
permissionLauncher.launch(permissions.toTypedArray())
|
||||
} else {
|
||||
DroneSdkManager.initMobileSdk(application)
|
||||
}
|
||||
}
|
||||
|
||||
private fun enterImmersiveMode() {
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
@Suppress("DEPRECATION")
|
||||
window.decorView.systemUiVisibility =
|
||||
View.SYSTEM_UI_FLAG_FULLSCREEN or
|
||||
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
|
||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
window.decorView.post {
|
||||
window.decorView.windowInsetsController?.let { controller ->
|
||||
controller.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
|
||||
controller.systemBarsBehavior =
|
||||
WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user