| /* |
| * Copyright (C) 2023 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.settingslib.devicestate |
| |
| import android.content.Context |
| import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_KEY_FOLDED |
| import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_KEY_HALF_FOLDED |
| import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_KEY_REAR_DISPLAY |
| import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_KEY_UNFOLDED |
| import android.provider.Settings.Secure.DEVICE_STATE_ROTATION_KEY_UNKNOWN |
| import android.provider.Settings.Secure.DeviceStateRotationLockKey |
| import com.android.internal.R |
| |
| /** Helps to convert between device state and posture. */ |
| class PosturesHelper(context: Context) { |
| |
| private val foldedDeviceStates = |
| context.resources.getIntArray(R.array.config_foldedDeviceStates) |
| private val halfFoldedDeviceStates = |
| context.resources.getIntArray(R.array.config_halfFoldedDeviceStates) |
| private val unfoldedDeviceStates = |
| context.resources.getIntArray(R.array.config_openDeviceStates) |
| private val rearDisplayDeviceStates = |
| context.resources.getIntArray(R.array.config_rearDisplayDeviceStates) |
| |
| @DeviceStateRotationLockKey |
| fun deviceStateToPosture(deviceState: Int): Int { |
| return when (deviceState) { |
| in foldedDeviceStates -> DEVICE_STATE_ROTATION_KEY_FOLDED |
| in halfFoldedDeviceStates -> DEVICE_STATE_ROTATION_KEY_HALF_FOLDED |
| in unfoldedDeviceStates -> DEVICE_STATE_ROTATION_KEY_UNFOLDED |
| in rearDisplayDeviceStates -> DEVICE_STATE_ROTATION_KEY_REAR_DISPLAY |
| else -> DEVICE_STATE_ROTATION_KEY_UNKNOWN |
| } |
| } |
| |
| fun postureToDeviceState(@DeviceStateRotationLockKey posture: Int): Int? { |
| return when (posture) { |
| DEVICE_STATE_ROTATION_KEY_FOLDED -> foldedDeviceStates.firstOrNull() |
| DEVICE_STATE_ROTATION_KEY_HALF_FOLDED -> halfFoldedDeviceStates.firstOrNull() |
| DEVICE_STATE_ROTATION_KEY_UNFOLDED -> unfoldedDeviceStates.firstOrNull() |
| DEVICE_STATE_ROTATION_KEY_REAR_DISPLAY -> rearDisplayDeviceStates.firstOrNull() |
| else -> null |
| } |
| } |
| } |