From 0fa3124e6346963073570c766eab1d745e1e56ab Mon Sep 17 00:00:00 2001 From: Tomas Date: Tue, 6 Aug 2024 21:26:49 +0300 Subject: [PATCH 01/14] Add Android's Hinge angle sensor --- Assets/QA/Tests/Android.meta | 8 + Assets/QA/Tests/Android/Sensors.meta | 8 + .../Android/Sensors/AndroidHingeAngleTest.cs | 21 + .../Sensors/AndroidHingeAngleTest.cs.meta | 11 + .../Sensors/AndroidHingeAngleTest.unity | 809 ++++++++++++++++++ .../Sensors/AndroidHingeAngleTest.unity.meta | 7 + .../Tests/InputSystem/Plugins/AndroidTests.cs | 2 + .../Plugins/Android/AndroidSensors.cs | 45 + .../Plugins/Android/AndroidSupport.cs | 5 + 9 files changed, 916 insertions(+) create mode 100644 Assets/QA/Tests/Android.meta create mode 100644 Assets/QA/Tests/Android/Sensors.meta create mode 100644 Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs create mode 100644 Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs.meta create mode 100644 Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity create mode 100644 Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity.meta diff --git a/Assets/QA/Tests/Android.meta b/Assets/QA/Tests/Android.meta new file mode 100644 index 0000000000..6f2d4b337c --- /dev/null +++ b/Assets/QA/Tests/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5a792b571609f14899784f714c9188a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/QA/Tests/Android/Sensors.meta b/Assets/QA/Tests/Android/Sensors.meta new file mode 100644 index 0000000000..07eac484d2 --- /dev/null +++ b/Assets/QA/Tests/Android/Sensors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 369dadeebb6ffe346b5bc7412fc9173e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs new file mode 100644 index 0000000000..e75d6dc194 --- /dev/null +++ b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using UnityEngine.InputSystem.Android; +using UnityEngine.InputSystem; +using UnityEngine.UI; + +public class AndroidHingeAngleTest : MonoBehaviour +{ + public Text info; + void Start() + { + if (AndroidHingeAngle.current != null) + InputSystem.EnableDevice(AndroidHingeAngle.current); + } + + // Update is called once per frame + void Update() + { + if (AndroidHingeAngle.current != null) + info.text = $"Angle: {AndroidHingeAngle.current.angle.ReadValue()}"; + } +} diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs.meta b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs.meta new file mode 100644 index 0000000000..c1161aef06 --- /dev/null +++ b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f63c8c257ca84247900f0c10ac6dc6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity new file mode 100644 index 0000000000..db22434bbc --- /dev/null +++ b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity @@ -0,0 +1,809 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44402242, g: 0.49316543, b: 0.5722324, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 92714479} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!850595691 &92714479 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Settings.lighting + serializedVersion: 4 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 +--- !u!1 &504512815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 504512818} + - component: {fileID: 504512817} + - component: {fileID: 504512816} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &504512816 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504512815} + m_Enabled: 1 +--- !u!20 &504512817 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504512815} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &504512818 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504512815} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &721427935 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 721427939} + - component: {fileID: 721427938} + - component: {fileID: 721427937} + - component: {fileID: 721427936} + - component: {fileID: 721427940} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &721427936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721427935} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &721427937 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721427935} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1080, y: 1920} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &721427938 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721427935} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &721427939 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721427935} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1030887281} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &721427940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721427935} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6f63c8c257ca84247900f0c10ac6dc6c, type: 3} + m_Name: + m_EditorClassIdentifier: + info: {fileID: 1027788740} +--- !u!1 &763086580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 763086583} + - component: {fileID: 763086582} + - component: {fileID: 763086581} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &763086581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 763086580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, + type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 + m_CursorLockBehavior: 0 + m_ScrollDeltaPerTick: 6 +--- !u!114 &763086582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 763086580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &763086583 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 763086580} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1027788739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1027788742} + - component: {fileID: 1027788741} + - component: {fileID: 1027788740} + m_Layer: 5 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1027788740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027788739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 4 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Not Found +--- !u!222 &1027788741 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027788739} + m_CullTransparentMesh: 0 +--- !u!224 &1027788742 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1027788739} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1030887281} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -66} + m_SizeDelta: {x: 400, y: 783} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1030887280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1030887281} + - component: {fileID: 1030887283} + - component: {fileID: 1030887282} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1030887281 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030887280} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1196479008} + - {fileID: 1027788742} + m_Father: {fileID: 721427939} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1030887282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030887280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1030887283 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030887280} + m_CullTransparentMesh: 0 +--- !u!1 &1196479007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1196479008} + - component: {fileID: 1196479010} + - component: {fileID: 1196479009} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1196479008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196479007} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1030887281} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 400} + m_SizeDelta: {x: 1400, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1196479009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196479007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 4 + m_MaxSize: 300 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Android Hinge Angle +--- !u!222 &1196479010 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1196479007} + m_CullTransparentMesh: 0 +--- !u!1 &2143274332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2143274334} + - component: {fileID: 2143274333} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &2143274333 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2143274332} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &2143274334 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2143274332} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity.meta b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity.meta new file mode 100644 index 0000000000..4a7b1c2969 --- /dev/null +++ b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dda14ab167baf6b4984989e50d339bf7 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/InputSystem/Plugins/AndroidTests.cs b/Assets/Tests/InputSystem/Plugins/AndroidTests.cs index 75484728b9..a48041b727 100644 --- a/Assets/Tests/InputSystem/Plugins/AndroidTests.cs +++ b/Assets/Tests/InputSystem/Plugins/AndroidTests.cs @@ -502,6 +502,7 @@ public void Devices_DualshockTriggersHaveCorrectDefaultValues() [TestCase(typeof(AndroidAmbientTemperature))] [TestCase(typeof(AndroidGameRotationVector))] [TestCase(typeof(AndroidStepCounter))] + [TestCase(typeof(AndroidHingeAngle))] public void Devices_CanCreateAndroidSensors(Type type) { var device = InputSystem.AddDevice(type.Name); @@ -518,6 +519,7 @@ public void Devices_CanCreateAndroidSensors(Type type) [TestCase("AndroidProximity", "distance")] [TestCase("AndroidRelativeHumidity", "relativeHumidity")] [TestCase("AndroidAmbientTemperature", "ambientTemperature")] + [TestCase("AndroidHingeAngle", "angle")] public void Devices_SupportSensorsWithAxisControl(string layoutName, string controlName) { var device = InputSystem.AddDevice(layoutName); diff --git a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs index b455d74efd..30c008172c 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs @@ -7,6 +7,7 @@ using UnityEngine.InputSystem.Utilities; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.Processors; +using UnityEngine.InputSystem.Controls; ////TODO: make all the sensor class types internal @@ -42,6 +43,7 @@ internal enum AndroidSensorType HeartBeat = 31, LowLatencyOffBodyDetect = 34, AccelerometerUncalibrated = 35, + HingeAngle = 36 } [Serializable] @@ -105,6 +107,7 @@ internal unsafe struct AndroidSensorState : IInputStateTypeInfo [InputControl(name = "stepCounter", layout = "Integer", variants = "StepCounter")] [InputControl(name = "rotation", layout = "Quaternion", processors = "AndroidCompensateRotation", variants = "GeomagneticRotationVector")] [InputControl(name = "rate", layout = "Axis", variants = "HeartRate")] + [InputControl(name = "angle", layout = "Axis", variants = nameof(AndroidSensorType.HingeAngle))] public fixed float data[16]; public AndroidSensorState WithData(params float[] data) @@ -276,6 +279,48 @@ public class AndroidGameRotationVector : AttitudeSensor public class AndroidStepCounter : StepCounter { } + + /// + /// Hinge angle sensor device on Android. + /// This sensor is usually available on foldable devices. + /// + /// ( + matches: new InputDeviceMatcher() + .WithInterface(kAndroidInterface) + .WithDeviceClass("AndroidSensor") + .WithCapability("sensorType", AndroidSensorType.HingeAngle)); InputSystem.onFindLayoutForDevice += OnFindLayoutForDevice; } From 5df904db0ad3ccf5fbcc1ab67f424f73537c1a2c Mon Sep 17 00:00:00 2001 From: Tomas Date: Tue, 6 Aug 2024 22:30:24 +0300 Subject: [PATCH 02/14] Changelog + docs --- Packages/com.unity.inputsystem/CHANGELOG.md | 3 +++ Packages/com.unity.inputsystem/Documentation~/Sensors.md | 1 + 2 files changed, 4 insertions(+) diff --git a/Packages/com.unity.inputsystem/CHANGELOG.md b/Packages/com.unity.inputsystem/CHANGELOG.md index e137cd5ba6..f4c940ed6a 100644 --- a/Packages/com.unity.inputsystem/CHANGELOG.md +++ b/Packages/com.unity.inputsystem/CHANGELOG.md @@ -13,6 +13,9 @@ however, it has to be formatted properly to pass verification tests. ### Fixed - Fixed memory allocation on every frame when using UIDocument without EventSystem. [ISXB-953](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-953) +### Added +- Added Android Hinge Angle sensor support for foldable phones. + ### Changed - Use `ProfilerMarker` instead of `Profiler.BeginSample` and `Profiler.EndSample` when appropriate to enable recording of profiling data. diff --git a/Packages/com.unity.inputsystem/Documentation~/Sensors.md b/Packages/com.unity.inputsystem/Documentation~/Sensors.md index 23a628c606..f0949727a2 100644 --- a/Packages/com.unity.inputsystem/Documentation~/Sensors.md +++ b/Packages/com.unity.inputsystem/Documentation~/Sensors.md @@ -16,6 +16,7 @@ uid: input-system-sensors - [`HumiditySensor`](#humiditysensor) - [`AmbientTemperatureSensor`](#ambienttemperaturesensor) - [`StepCounter`](#stepcounter) +- [`AndroidHingeAngle`](#androidhingeangle) Sensors are [`InputDevices`](Devices.md) that measure environmental characteristics of the device that the content is running on. Unity currently supports sensors on iOS and Android. Android supports a wider range of sensors than iOS. From 4fbd7fd49cfbb510422e2de643e6abf09596a3a2 Mon Sep 17 00:00:00 2001 From: Tomas Date: Thu, 8 Aug 2024 12:25:26 +0300 Subject: [PATCH 03/14] Refactor code as per review --- Assets/QA/Tests/Android.meta | 8 ---- .../Android/Sensors/AndroidHingeAngleTest.cs | 21 ---------- Assets/QA/Tests/{Android => }/Sensors.meta | 0 Assets/QA/Tests/Sensors/HingeAngleTest.cs | 20 +++++++++ .../HingeAngleTest.cs.meta} | 0 .../HingeAngleTest.unity} | 0 .../HingeAngleTest.unity.meta} | 0 .../Documentation~/Sensors.md | 21 +++++++++- .../InputSystem/Devices/Sensor.cs | 42 +++++++++++++++++++ .../Plugins/Android/AndroidSensors.cs | 34 +-------------- 10 files changed, 83 insertions(+), 63 deletions(-) delete mode 100644 Assets/QA/Tests/Android.meta delete mode 100644 Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs rename Assets/QA/Tests/{Android => }/Sensors.meta (100%) create mode 100644 Assets/QA/Tests/Sensors/HingeAngleTest.cs rename Assets/QA/Tests/{Android/Sensors/AndroidHingeAngleTest.cs.meta => Sensors/HingeAngleTest.cs.meta} (100%) rename Assets/QA/Tests/{Android/Sensors/AndroidHingeAngleTest.unity => Sensors/HingeAngleTest.unity} (100%) rename Assets/QA/Tests/{Android/Sensors/AndroidHingeAngleTest.unity.meta => Sensors/HingeAngleTest.unity.meta} (100%) diff --git a/Assets/QA/Tests/Android.meta b/Assets/QA/Tests/Android.meta deleted file mode 100644 index 6f2d4b337c..0000000000 --- a/Assets/QA/Tests/Android.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e5a792b571609f14899784f714c9188a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs b/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs deleted file mode 100644 index e75d6dc194..0000000000 --- a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs +++ /dev/null @@ -1,21 +0,0 @@ -using UnityEngine; -using UnityEngine.InputSystem.Android; -using UnityEngine.InputSystem; -using UnityEngine.UI; - -public class AndroidHingeAngleTest : MonoBehaviour -{ - public Text info; - void Start() - { - if (AndroidHingeAngle.current != null) - InputSystem.EnableDevice(AndroidHingeAngle.current); - } - - // Update is called once per frame - void Update() - { - if (AndroidHingeAngle.current != null) - info.text = $"Angle: {AndroidHingeAngle.current.angle.ReadValue()}"; - } -} diff --git a/Assets/QA/Tests/Android/Sensors.meta b/Assets/QA/Tests/Sensors.meta similarity index 100% rename from Assets/QA/Tests/Android/Sensors.meta rename to Assets/QA/Tests/Sensors.meta diff --git a/Assets/QA/Tests/Sensors/HingeAngleTest.cs b/Assets/QA/Tests/Sensors/HingeAngleTest.cs new file mode 100644 index 0000000000..5af7523519 --- /dev/null +++ b/Assets/QA/Tests/Sensors/HingeAngleTest.cs @@ -0,0 +1,20 @@ +using UnityEngine; +using UnityEngine.InputSystem; +using UnityEngine.UI; + +public class HingeAngleTest : MonoBehaviour +{ + public Text info; + void Start() + { + if (HingeAngle.current != null) + InputSystem.EnableDevice(HingeAngle.current); + } + + // Update is called once per frame + void Update() + { + if (HingeAngle.current != null) + info.text = $"Angle: {HingeAngle.current.angle.ReadValue()}"; + } +} diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs.meta b/Assets/QA/Tests/Sensors/HingeAngleTest.cs.meta similarity index 100% rename from Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.cs.meta rename to Assets/QA/Tests/Sensors/HingeAngleTest.cs.meta diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity b/Assets/QA/Tests/Sensors/HingeAngleTest.unity similarity index 100% rename from Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity rename to Assets/QA/Tests/Sensors/HingeAngleTest.unity diff --git a/Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity.meta b/Assets/QA/Tests/Sensors/HingeAngleTest.unity.meta similarity index 100% rename from Assets/QA/Tests/Android/Sensors/AndroidHingeAngleTest.unity.meta rename to Assets/QA/Tests/Sensors/HingeAngleTest.unity.meta diff --git a/Packages/com.unity.inputsystem/Documentation~/Sensors.md b/Packages/com.unity.inputsystem/Documentation~/Sensors.md index f0949727a2..3a6d1a555d 100644 --- a/Packages/com.unity.inputsystem/Documentation~/Sensors.md +++ b/Packages/com.unity.inputsystem/Documentation~/Sensors.md @@ -16,7 +16,7 @@ uid: input-system-sensors - [`HumiditySensor`](#humiditysensor) - [`AmbientTemperatureSensor`](#ambienttemperaturesensor) - [`StepCounter`](#stepcounter) -- [`AndroidHingeAngle`](#androidhingeangle) +- [`HingeAngle`](#hingeangle) Sensors are [`InputDevices`](Devices.md) that measure environmental characteristics of the device that the content is running on. Unity currently supports sensors on iOS and Android. Android supports a wider range of sensors than iOS. @@ -65,6 +65,7 @@ Each sensor Device implements a single Control which represents the data read by |[`HumiditySensor`](#humiditysensor)|Yes|No|No|[`relativeHumidity`](../api/UnityEngine.InputSystem.HumiditySensor.html#UnityEngine_InputSystem_HumiditySensor_relativeHumidity)|[`AxisControl`](../api/UnityEngine.InputSystem.Controls.AxisControl.html)| |[`AmbientTemperatureSensor`](#ambienttemperaturesensor)|Yes|No|No|[`ambientTemperature`](../api/UnityEngine.InputSystem.AmbientTemperatureSensor.html#UnityEngine_InputSystem_AmbientTemperatureSensor_ambientTemperature)|[`AxisControl`](../api/UnityEngine.InputSystem.Controls.AxisControl.html)| |[`StepCounter`](#stepcounter)|Yes|Yes|No|[`stepCounter`](../api/UnityEngine.InputSystem.StepCounter.html#UnityEngine_InputSystem_StepCounter_stepCounter)|[`IntegerControl`](../api/UnityEngine.InputSystem.Controls.IntegerControl.html)| +|[`HingeAngle`](#hingeangle)|Yes|No|No|[`angle`](../api/UnityEngine.InputSystem.HingeAngle.html#UnityEngine_InputSystem_HingeAngle_angle)|[`AxisControl`](../api/UnityEngine.InputSystem.Controls.AxisControl.html)| >__Notes__: >1. Sensor support for WebGL on Android and iOS devices is available in Unity 2021.2 @@ -169,3 +170,21 @@ This Input Device represents the ambient air temperature measured by the device This Input Device represents the user's footstep count as measured by the device which is running the content. >NOTE: To access the pedometer on iOS/tvOS devices, you need to enable the [__Motion Usage__ setting](Settings.md#iostvos) in the [Input Settings](Settings.md). + +## [`HingeAngle`](../api/UnityEngine.InputSystem.HingeAngle.html) + +This Input Device represents hinge angle for foldable devices. For ex., Google Fold Android phone. + +```CSharp + void Start() + { + if (HingeAngle.current != null) + InputSystem.EnableDevice(HingeAngle.current); + } + + void Update() + { + if (HingeAngle.current != null) + Debug.Log($"HingeAngle={HingeAngle.current.angle.ReadValue()}"); + } +``` \ No newline at end of file diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs index 0eb1e065df..447d71e6dd 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs @@ -1,4 +1,5 @@ using System; +using UnityEngine.InputSystem.Android.LowLevel; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.LowLevel; @@ -651,4 +652,45 @@ protected override void FinishSetup() base.FinishSetup(); } } + + /// + /// Hinge angle sensor. + /// This sensor is usually available on foldable devices. + /// + [InputControlLayout(displayName = "Hinge Angle")] + public class HingeAngle : Sensor + { + /// + /// The angle in degrees on how much the device is unfolded + /// + /// 0 means fully folded, 180 means fully unfolded. + public AxisControl angle { get; protected set; } + + /// + /// The hinge angle sensor that was last added or had activity last. + /// + /// Current hinge angle sensor or null. + public static HingeAngle current { get; private set; } + + /// + public override void MakeCurrent() + { + base.MakeCurrent(); + current = this; + } + + /// + protected override void OnRemoved() + { + base.OnRemoved(); + if (current == this) + current = null; + } + + protected override void FinishSetup() + { + angle = GetChildControl("angle"); + base.FinishSetup(); + } + } } diff --git a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs index 30c008172c..f51d3c6af6 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs @@ -286,40 +286,8 @@ public class AndroidStepCounter : StepCounter /// /// Date: Thu, 8 Aug 2024 12:25:40 +0300 Subject: [PATCH 04/14] changelog --- Packages/com.unity.inputsystem/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/CHANGELOG.md b/Packages/com.unity.inputsystem/CHANGELOG.md index f4c940ed6a..9b8b34cd42 100644 --- a/Packages/com.unity.inputsystem/CHANGELOG.md +++ b/Packages/com.unity.inputsystem/CHANGELOG.md @@ -14,7 +14,7 @@ however, it has to be formatted properly to pass verification tests. - Fixed memory allocation on every frame when using UIDocument without EventSystem. [ISXB-953](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-953) ### Added -- Added Android Hinge Angle sensor support for foldable phones. +- Added Hinge Angle sensor support for foldable devices. ### Changed - Use `ProfilerMarker` instead of `Profiler.BeginSample` and `Profiler.EndSample` when appropriate to enable recording of profiling data. From 6b15c2ca5f4eec32602d69b0c0a0c8071a3b434a Mon Sep 17 00:00:00 2001 From: Tomas Date: Thu, 8 Aug 2024 12:27:53 +0300 Subject: [PATCH 05/14] remove accidental --- Packages/com.unity.inputsystem/Documentation~/Sensors.md | 2 +- Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Packages/com.unity.inputsystem/Documentation~/Sensors.md b/Packages/com.unity.inputsystem/Documentation~/Sensors.md index 3a6d1a555d..d2e7825274 100644 --- a/Packages/com.unity.inputsystem/Documentation~/Sensors.md +++ b/Packages/com.unity.inputsystem/Documentation~/Sensors.md @@ -187,4 +187,4 @@ This Input Device represents hinge angle for foldable devices. For ex., Google F if (HingeAngle.current != null) Debug.Log($"HingeAngle={HingeAngle.current.angle.ReadValue()}"); } -``` \ No newline at end of file +``` diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs index 447d71e6dd..9bbe72fdbf 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs @@ -1,5 +1,4 @@ using System; -using UnityEngine.InputSystem.Android.LowLevel; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.LowLevel; From 42ac168005ddd9ed96e49b785e323a720356b399 Mon Sep 17 00:00:00 2001 From: Tomas Date: Thu, 8 Aug 2024 12:28:47 +0300 Subject: [PATCH 06/14] remove more accidental code --- .../InputSystem/Plugins/Android/AndroidSensors.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs index f51d3c6af6..6dbfc53b27 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs @@ -7,7 +7,6 @@ using UnityEngine.InputSystem.Utilities; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.Processors; -using UnityEngine.InputSystem.Controls; ////TODO: make all the sensor class types internal From ee1fe12fbf583d57bc1d2bf8387f8818ba947383 Mon Sep 17 00:00:00 2001 From: Tomas Dirvanauskas Date: Fri, 9 Aug 2024 14:02:54 +0300 Subject: [PATCH 07/14] Fix docs --- .../InputSystem/Plugins/Android/AndroidSensors.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs index 6dbfc53b27..7e3226f284 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Plugins/Android/AndroidSensors.cs @@ -283,7 +283,7 @@ public class AndroidStepCounter : StepCounter /// Hinge angle sensor device on Android. /// This sensor is usually available on foldable devices. /// - /// [InputControlLayout(stateType = typeof(AndroidSensorState), variants = nameof(AndroidSensorType.HingeAngle), hideInUI = true)] public class AndroidHingeAngle : HingeAngle { From 510c6a1cc52c27b6580e6ed9a37b2490d133c1a2 Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 13:04:29 +0300 Subject: [PATCH 08/14] Expand example to show sensor resolution --- Assets/QA/Tests/Sensors/HingeAngleTest.cs | 18 +++++++++++++++++- Assets/QA/Tests/Sensors/HingeAngleTest.unity | 2 +- .../Documentation~/Sensors.md | 12 ++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Assets/QA/Tests/Sensors/HingeAngleTest.cs b/Assets/QA/Tests/Sensors/HingeAngleTest.cs index 5af7523519..6358925c13 100644 --- a/Assets/QA/Tests/Sensors/HingeAngleTest.cs +++ b/Assets/QA/Tests/Sensors/HingeAngleTest.cs @@ -1,20 +1,36 @@ +using System; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; public class HingeAngleTest : MonoBehaviour { + [Serializable] + class SensorCapabilities + { + public int sensorType; + public float resolution; + public int minDelay; + } + public Text info; + SensorCapabilities caps; void Start() { if (HingeAngle.current != null) + { InputSystem.EnableDevice(HingeAngle.current); + caps = JsonUtility.FromJson(HingeAngle.current.description.capabilities); + } } // Update is called once per frame void Update() { if (HingeAngle.current != null) - info.text = $"Angle: {HingeAngle.current.angle.ReadValue()}"; + { + info.text = $"Capabilities: resolution = {caps.resolution}, minDelay = {caps.minDelay}\n" + + $"Angle: {HingeAngle.current.angle.ReadValue()}"; + } } } diff --git a/Assets/QA/Tests/Sensors/HingeAngleTest.unity b/Assets/QA/Tests/Sensors/HingeAngleTest.unity index db22434bbc..65c0fa4c97 100644 --- a/Assets/QA/Tests/Sensors/HingeAngleTest.unity +++ b/Assets/QA/Tests/Sensors/HingeAngleTest.unity @@ -553,7 +553,7 @@ RectTransform: m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} m_AnchoredPosition: {x: 0, y: -66} - m_SizeDelta: {x: 400, y: 783} + m_SizeDelta: {x: 800, y: 783} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1030887280 GameObject: diff --git a/Packages/com.unity.inputsystem/Documentation~/Sensors.md b/Packages/com.unity.inputsystem/Documentation~/Sensors.md index d2e7825274..4bf32b3298 100644 --- a/Packages/com.unity.inputsystem/Documentation~/Sensors.md +++ b/Packages/com.unity.inputsystem/Documentation~/Sensors.md @@ -176,10 +176,22 @@ This Input Device represents the user's footstep count as measured by the device This Input Device represents hinge angle for foldable devices. For ex., Google Fold Android phone. ```CSharp + [Serializable] + class SensorCapabilities + { + public int sensorType; + public float resolution; + public int minDelay; + } + void Start() { if (HingeAngle.current != null) + { InputSystem.EnableDevice(HingeAngle.current); + var caps = JsonUtility.FromJson(HingeAngle.current.description.capabilities); + Debug.Log($"HingeAngle Capabilities: resolution = {caps.resolution}, minDelay = {caps.minDelay}"); + } } void Update() From 66e40dd615f800cc3c1d43010131943059ddc51c Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 13:05:31 +0300 Subject: [PATCH 09/14] Bump minor version --- Packages/com.unity.inputsystem/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/package.json b/Packages/com.unity.inputsystem/package.json index 1fa1599368..f907ddc8e0 100755 --- a/Packages/com.unity.inputsystem/package.json +++ b/Packages/com.unity.inputsystem/package.json @@ -1,7 +1,7 @@ { "name": "com.unity.inputsystem", "displayName": "Input System", - "version": "1.10.1", + "version": "1.11.0", "unity": "2019.4", "description": "A new input system which can be used as a more extensible and customizable alternative to Unity's classic input system in UnityEngine.Input.", "keywords": [ From bbe0d4ecb64b4a08a9352dcbb6499cf42c8f339a Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 13:59:34 +0300 Subject: [PATCH 10/14] Match version to 1.11.0 --- Packages/com.unity.inputsystem/InputSystem/AssemblyInfo.cs | 4 ++-- .../com.unity.inputsystem/Tests/TestFixture/AssemblyInfo.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/AssemblyInfo.cs b/Packages/com.unity.inputsystem/InputSystem/AssemblyInfo.cs index 5f257f4601..f5e172f9a4 100644 --- a/Packages/com.unity.inputsystem/InputSystem/AssemblyInfo.cs +++ b/Packages/com.unity.inputsystem/InputSystem/AssemblyInfo.cs @@ -16,7 +16,7 @@ public static partial class InputSystem // Keep this in sync with "Packages/com.unity.inputsystem/package.json". // NOTE: Unfortunately, System.Version doesn't use semantic versioning so we can't include // "-preview" suffixes here. - internal const string kAssemblyVersion = "1.10.1"; - internal const string kDocUrl = "https://docs.unity3d.com/Packages/com.unity.inputsystem@1.10"; + internal const string kAssemblyVersion = "1.11.0"; + internal const string kDocUrl = "https://docs.unity3d.com/Packages/com.unity.inputsystem@1.11"; } } diff --git a/Packages/com.unity.inputsystem/Tests/TestFixture/AssemblyInfo.cs b/Packages/com.unity.inputsystem/Tests/TestFixture/AssemblyInfo.cs index f61d1e645c..064ded0b36 100644 --- a/Packages/com.unity.inputsystem/Tests/TestFixture/AssemblyInfo.cs +++ b/Packages/com.unity.inputsystem/Tests/TestFixture/AssemblyInfo.cs @@ -4,7 +4,7 @@ // Keep this in sync with "Packages/com.unity.inputsystem/package.json". // NOTE: Unfortunately, System.Version doesn't use semantic versioning so we can't include // "-preview" suffixes here. -[assembly: AssemblyVersion("1.10.1")] +[assembly: AssemblyVersion("1.11.0")] [assembly: InternalsVisibleTo("Unity.InputSystem.Tests.Editor")] [assembly: InternalsVisibleTo("Unity.InputSystem.Tests")] [assembly: InternalsVisibleTo("Unity.InputSystem.IntegrationTests")] From b059a9d071c22c4d3b6c59edd0c8189feddd08c2 Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 14:10:02 +0300 Subject: [PATCH 11/14] Expand docs --- Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs index 9bbe72fdbf..f0247e959c 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs @@ -655,12 +655,13 @@ protected override void FinishSetup() /// /// Hinge angle sensor. /// This sensor is usually available on foldable devices. + /// Note: The step resolution for angle is device dependentent, on Android you can query the sensor resolution by querying device capabilities. /// [InputControlLayout(displayName = "Hinge Angle")] public class HingeAngle : Sensor { /// - /// The angle in degrees on how much the device is unfolded + /// The angle in degrees on how much the device is unfolded. /// /// 0 means fully folded, 180 means fully unfolded. public AxisControl angle { get; protected set; } From 76b0736e6d4083a96ab9fef8d4c086979ea7fae5 Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 14:34:52 +0300 Subject: [PATCH 12/14] Update layouts --- .../InputSystem/Devices/Precompiled/FastKeyboard.cs | 2 +- .../InputSystem/Devices/Precompiled/FastMouse.cs | 2 +- .../InputSystem/Devices/Precompiled/FastTouchscreen.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastKeyboard.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastKeyboard.cs index 582dfe6e61..9e3ecf5d1a 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastKeyboard.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastKeyboard.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputLayoutCodeGenerator -// version 1.10.1 +// version 1.11.0 // from "Keyboard" layout // // Changes to this file may cause incorrect behavior and will be lost if diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastMouse.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastMouse.cs index c531e7627b..b7d38266da 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastMouse.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastMouse.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputLayoutCodeGenerator -// version 1.10.1 +// version 1.11.0 // from "Mouse" layout // // Changes to this file may cause incorrect behavior and will be lost if diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastTouchscreen.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastTouchscreen.cs index b8d27e62e3..5860c47017 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastTouchscreen.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Precompiled/FastTouchscreen.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputLayoutCodeGenerator -// version 1.10.1 +// version 1.11.0 // from "Touchscreen" layout // // Changes to this file may cause incorrect behavior and will be lost if From cfb5f84d0b4cda3ae5ba8cbea8b3cf6b4db172f7 Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 15:02:17 +0300 Subject: [PATCH 13/14] missing doc comment --- Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs index f0247e959c..413d76f92d 100644 --- a/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs +++ b/Packages/com.unity.inputsystem/InputSystem/Devices/Sensor.cs @@ -687,6 +687,7 @@ protected override void OnRemoved() current = null; } + /// protected override void FinishSetup() { angle = GetChildControl("angle"); From 9ea9575bdd8f9100233c6d9e677c60ec720f99d9 Mon Sep 17 00:00:00 2001 From: Tomas Date: Mon, 12 Aug 2024 15:37:37 +0300 Subject: [PATCH 14/14] regenerate files --- Assets/Samples/InGameHints/InGameHintsActions.cs | 2 +- Assets/Samples/SimpleDemo/SimpleControls.cs | 2 +- Assets/Tests/InputSystem/InputActionCodeGeneratorActions.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Samples/InGameHints/InGameHintsActions.cs b/Assets/Samples/InGameHints/InGameHintsActions.cs index 0fd288ac9f..34662df6f3 100644 --- a/Assets/Samples/InGameHints/InGameHintsActions.cs +++ b/Assets/Samples/InGameHints/InGameHintsActions.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator -// version 1.10.1 +// version 1.11.0 // from Assets/Samples/InGameHints/InGameHintsActions.inputactions // // Changes to this file may cause incorrect behavior and will be lost if diff --git a/Assets/Samples/SimpleDemo/SimpleControls.cs b/Assets/Samples/SimpleDemo/SimpleControls.cs index 6903d2ad67..6ed6ae20ac 100644 --- a/Assets/Samples/SimpleDemo/SimpleControls.cs +++ b/Assets/Samples/SimpleDemo/SimpleControls.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator -// version 1.10.1 +// version 1.11.0 // from Assets/Samples/SimpleDemo/SimpleControls.inputactions // // Changes to this file may cause incorrect behavior and will be lost if diff --git a/Assets/Tests/InputSystem/InputActionCodeGeneratorActions.cs b/Assets/Tests/InputSystem/InputActionCodeGeneratorActions.cs index aab3d835b7..559888300d 100644 --- a/Assets/Tests/InputSystem/InputActionCodeGeneratorActions.cs +++ b/Assets/Tests/InputSystem/InputActionCodeGeneratorActions.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator -// version 1.10.1 +// version 1.11.0 // from Assets/Tests/InputSystem/InputActionCodeGeneratorActions.inputactions // // Changes to this file may cause incorrect behavior and will be lost if