폴더블 기기의 경우 화면 회전 동작을 기기의 물리적 상태에 맞게 조정하여 사용자 환경을 최적화할 수 있습니다. 예를 들어 기기가 태블릿과 같은 자세로 펼쳐져 있을 때는 화면이 자동으로 회전하도록 설정할 수 있지만 기기가 접혀 있을 때는 세로 모드로 잠기도록 설정할 수 있습니다.
Android 13부터 Android는 접힘, 펼침 또는 반접힘(테이블탑 모드)과 같은 기기 상태에 따라 자동 회전 설정을 맞춤설정할 수 있는 기능을 제공합니다.
그림 1. 사용자에게 표시되는 기기 상태 기반 자동 회전 설정
기기 상태 기반 자동 회전 설정 사용 설정
기기 상태 기반 자동 회전을 사용 설정하고 구성하려면 다음과 같이 프레임워크의 config.xml 파일에 기기 오버레이를 만듭니다.
기기의 오버레이
config.xml에서config_perDeviceStateRotationLockDefaults정수 배열을 채워 여러 기기 자세의 기본 자동 회전 동작을 구성합니다.<!-- In your device overlay, for example, device/generic/goldfish/phone/overlay/frameworks/base/core/res/res/values/config.xml --> <resources> <!-- Map of device posture to rotation lock setting. Each entry must be in the format "key:value", or "key:value:fallback_key" for example: "0:1" or "2:0:1". The keys are one of Settings.Secure.DeviceStateRotationLockKey, and the values are one of Settings.Secure.DeviceStateRotationLockSetting. --> <integer-array name="config_perDeviceStateRotationLockDefaults"> <item>0:1</item> <!-- CLOSED -> LOCKED --> <item>1:0:2</item> <!-- HALF_OPENED -> IGNORED and fallback to device posture OPENED --> <item>2:2</item> <!-- OPENED -> UNLOCKED --> <item>3:0:0</item> <!-- REAR_DISPLAY -> IGNORED and fallback to device posture CLOSED --> </integer-array> </resources>fallback-key는 다른 기기 보안 상황에 대한 참조이며 보안 상황의 값이Settings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORED일 때 지정해야 합니다. 자세가 이 방식으로 구성되면 자동 회전 환경설정을 가져오거나 설정하려는 모든 요청이 대체 자세로 리디렉션됩니다.예를 들어
HALF_OPENED보안 상황이OPENED보안 상황으로 대체되는 경우:HALF_OPENED의 자동 회전 설정을 읽으면OPENED의 현재 설정이 반환됩니다.- 기기가
HALF_OPENED인 동안 새 자동 회전 환경설정을 작성하면OPENED자세의 환경설정이 업데이트됩니다.
사용자가 설정할 수 있는 각 기기 보안 상황의 설명을 구성합니다. 기기의 설정 앱 오버레이에서
config_settableAutoRotationDeviceStatesDescriptions문자열 배열을 채웁니다.<!-- In your device's Settings app overlay --> <resources> <!-- The settings/preference description for each settable device posture defined in the array "config_perDeviceStateRotationLockDefaults". The item in position "i" describes the auto-rotation setting for the device posture also in position "i" in the array "config_perDeviceStateRotationLockDefaults". --> <string-array name="config_settableAutoRotationDeviceStatesDescriptions"> <item>Auto-rotate when folded</item> <item>@null</item> <!-- No description for state in position 1 (it is not settable by the user) --> <item>Auto-rotate when unfolded</item> </string-array> </resources>일관되지 않은 동작을 방지하려면 설정 제공자에 직접 쓰는 대신 올바른 API를 사용하여 이러한 설정을 프로그래매틱 방식으로 수정합니다.
현재 회전 잠금 상태를 변경하려면 (
ACCELEROMETER_ROTATION수정)- SystemUI 또는 런처에서
RotationPolicy#setRotationLock(...)을 사용합니다. - 창 관리자에서
DisplayRotation#freezeRotation()또는thawRotation()을 사용합니다.
- SystemUI 또는 런처에서
특정 기기 상태의 회전 잠금 환경설정을 변경하려면(
DEVICE_STATE_ROTATION_LOCK수정)-
RotationPolicy또는DeviceStateAutoRotateSettingManager에서requestDeviceStateAutoRotateSettingChange(...)를 사용합니다.
-
구현 세부정보
폴더블 기기의 자동 회전 동작을 제어하는 설정 및 핵심 키 클래스는 다음 섹션에 설명되어 있습니다.
설정
시스템은 다음 두 가지 설정을 사용하여 자동 회전을 관리합니다.
Settings.System.ACCELEROMETER_ROTATION: 기본 자동 회전 설정입니다. 폴더블 기기의 경우 이 값은 기기의 현재 기기 자세에 자동 회전이 사용 설정되어 있는지 여부를 반영합니다.Settings.Secure.DEVICE_STATE_ROTATION_LOCK: 이 설정은 각 기기 자세 (예: 접힘 또는 펼침)에 대한 사용자의 자동 회전 환경설정을 저장합니다. 이를 통해 시스템은 기기 자세가 변경될 때 올바른 환경설정을 적용할 수 있습니다.이 설정은 콜론으로 구분된 문자열로 저장됩니다. 각 값 쌍은 기기 자세와 그에 상응하는 회전 설정을 나타냅니다. 형식은 다음과 같습니다.
<device_posture_0>:<rotation_value_0>:<device_posture_1>:<rotation_value_1>...회전 값은 다음과 같습니다.
0: 무시됨 (대체 자세의 설정이 사용됨)1: 잠김 (자동 회전이 사용 중지됨)2: 잠금 해제됨 (자동 회전이 사용 설정됨)
예를 들어 문자열
"0:2:2:1"은 다음을 의미합니다.- 접힘 상태 (자세
0)의 경우 자동 회전이 잠금 해제 되어 있습니다 (2). - 펼침 상태 (자세
2)의 경우 자동 회전이 잠김 되어 있습니다 (1).
주요 클래스
기기 상태 기반 자동 회전 설정을 관리하는 로직은 다음 클래스에서 처리됩니다.
DeviceStateAutoRotateSettingManagerImpl:DEVICE_STATE_ROTATION_LOCK설정을 관리합니다. 설정을 업데이트하고, 값을 검색하고, 변경사항에 리스너를 등록하는 메서드를 제공합니다.DeviceStateAutoRotateSettingController(창 관리자):ACCELEROMETER_ROTATION및DEVICE_STATE_ROTATION_LOCK을 동기화합니다. 기기 자세가 변경되면 새 상태에 대한 사용자의 환경설정에 따라ACCELEROMETER_ROTATION을 업데이트합니다. 현재 기기 자세의ACCELEROMETER_ROTATION변경사항이DEVICE_STATE_ROTATION_LOCK에 다시 저장되고, 마찬가지로 현재 자세의DEVICE_STATE_ROTATION_LOCK변경사항이ACCELEROMETER_ROTATION에 반영되도록 합니다.DeviceStateAutoRotateSettingController(설정 앱): 기기 상태 기반 자동 회전 설정 페이지의 UI를 제어합니다.PostureDeviceStateConverter: 일반 기기 상태 식별자와 이 기능에서 사용하는 기기 자세 식별자 간에 변환합니다.
유효성 검사
이 기능 동작은 OEM의 구성에 크게 의존하므로 이 기능에 관한 특정 CTS 테스트는 없습니다. 기기가 구성한 여러 물리적 상태 간에 전환될 때 자동 회전 설정이 예상대로 변경되는지 확인하려면 수동 테스트를 실행해야 합니다.