mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Use the compass in landscape
This commit is contained in:
1 parent
082b52c58b
commit
1d48ce144f
3 files changed
+43
-3
No files matched your search
@@ -5,6 +5,7 @@ import android.content.Context
|
|||||||
import android.hardware.Sensor
|
import android.hardware.Sensor
|
||||||
import android.hardware.SensorManager
|
import android.hardware.SensorManager
|
||||||
import android.location.LocationManager
|
import android.location.LocationManager
|
||||||
|
import android.view.WindowManager
|
||||||
import androidx.room.Room
|
import androidx.room.Room
|
||||||
import com.rtbishop.look4sat.core.data.database.Look4SatDb
|
import com.rtbishop.look4sat.core.data.database.Look4SatDb
|
||||||
import com.rtbishop.look4sat.core.data.framework.BluetoothReporter
|
import com.rtbishop.look4sat.core.data.framework.BluetoothReporter
|
||||||
@@ -64,7 +65,8 @@ class MainContainer(private val context: Context) : IMainContainer {
|
|||||||
override fun provideSensorsRepo(): ISensorsRepo {
|
override fun provideSensorsRepo(): ISensorsRepo {
|
||||||
val manager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
val manager = context.getSystemService(Context.SENSOR_SERVICE) as SensorManager
|
||||||
val sensor = manager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR)
|
val sensor = manager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR)
|
||||||
return SensorsRepo(manager, sensor)
|
val window = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
|
||||||
|
return SensorsRepo(manager,sensor,window)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun provideDatabaseRepo(): IDatabaseRepo {
|
private fun provideDatabaseRepo(): IDatabaseRepo {
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import android.hardware.Sensor
|
|||||||
import android.hardware.SensorEvent
|
import android.hardware.SensorEvent
|
||||||
import android.hardware.SensorEventListener
|
import android.hardware.SensorEventListener
|
||||||
import android.hardware.SensorManager
|
import android.hardware.SensorManager
|
||||||
|
import android.view.Surface
|
||||||
|
import android.view.WindowManager
|
||||||
import com.rtbishop.look4sat.core.domain.predict.GeoPos
|
import com.rtbishop.look4sat.core.domain.predict.GeoPos
|
||||||
import com.rtbishop.look4sat.core.domain.predict.RAD2DEG
|
import com.rtbishop.look4sat.core.domain.predict.RAD2DEG
|
||||||
import com.rtbishop.look4sat.core.domain.repository.ISensorsRepo
|
import com.rtbishop.look4sat.core.domain.repository.ISensorsRepo
|
||||||
@@ -29,7 +31,11 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
|||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
|
|
||||||
class SensorsRepo(private val sensorManager: SensorManager, private val sensor: Sensor?) :
|
class SensorsRepo(
|
||||||
|
private val sensorManager: SensorManager,
|
||||||
|
private val sensor: Sensor?,
|
||||||
|
private val windowManager: WindowManager
|
||||||
|
) :
|
||||||
SensorEventListener, ISensorsRepo {
|
SensorEventListener, ISensorsRepo {
|
||||||
|
|
||||||
private val _orientation = MutableStateFlow(Pair(0f, 0f))
|
private val _orientation = MutableStateFlow(Pair(0f, 0f))
|
||||||
@@ -61,8 +67,40 @@ class SensorsRepo(private val sensorManager: SensorManager, private val sensor:
|
|||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getDisplayRotation(): Int {
|
||||||
|
return try {
|
||||||
|
@Suppress("DEPRECATION")
|
||||||
|
windowManager.defaultDisplay.rotation
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Surface.ROTATION_0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun transformRotationMatrix(rotationMatrix: FloatArray, rotation: Int) {
|
||||||
|
val tempMatrix = FloatArray(9)
|
||||||
|
when (rotation) {
|
||||||
|
Surface.ROTATION_0 -> {
|
||||||
|
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Y, tempMatrix)
|
||||||
|
System.arraycopy(tempMatrix, 0, rotationMatrix, 0, 9)
|
||||||
|
}
|
||||||
|
Surface.ROTATION_90 -> {
|
||||||
|
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, tempMatrix)
|
||||||
|
SensorManager.remapCoordinateSystem(tempMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_Y, rotationMatrix)
|
||||||
|
}
|
||||||
|
Surface.ROTATION_180 -> {
|
||||||
|
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y, tempMatrix)
|
||||||
|
System.arraycopy(tempMatrix, 0, rotationMatrix, 0, 9)
|
||||||
|
}
|
||||||
|
Surface.ROTATION_270 -> {
|
||||||
|
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X, tempMatrix)
|
||||||
|
SensorManager.remapCoordinateSystem(tempMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_Y, rotationMatrix)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun updateOrientation(rotationVector: FloatArray) {
|
private fun updateOrientation(rotationVector: FloatArray) {
|
||||||
SensorManager.getRotationMatrixFromVector(rotationMatrix, rotationVector)
|
SensorManager.getRotationMatrixFromVector(rotationMatrix, rotationVector)
|
||||||
|
transformRotationMatrix(rotationMatrix, getDisplayRotation())
|
||||||
SensorManager.getOrientation(rotationMatrix, orientationValues)
|
SensorManager.getOrientation(rotationMatrix, orientationValues)
|
||||||
val azimuth = (orientationValues[0] * RAD2DEG).toFloat()
|
val azimuth = (orientationValues[0] * RAD2DEG).toFloat()
|
||||||
val pitch = (orientationValues[1] * RAD2DEG).toFloat() // roll [2]
|
val pitch = (orientationValues[1] * RAD2DEG).toFloat() // roll [2]
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ private fun RadarScreen(uiState: RadarState, navigateUp: () -> Unit) {
|
|||||||
items = uiState.satTrack,
|
items = uiState.satTrack,
|
||||||
azimElev = uiState.orientationValues,
|
azimElev = uiState.orientationValues,
|
||||||
shouldShowSweep = uiState.shouldShowSweep,
|
shouldShowSweep = uiState.shouldShowSweep,
|
||||||
shouldUseCompass = false,
|
shouldUseCompass = uiState.shouldUseCompass,
|
||||||
modifier = Modifier.align(Alignment.Center)
|
modifier = Modifier.align(Alignment.Center)
|
||||||
)
|
)
|
||||||
Column(
|
Column(
|
||||||
|
|||||||
Reference in new issue
Block a user