1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.shared.customization.data 18 19 /** 20 * Provides current sensor location information in the current screen resolution [scale]. 21 * 22 * @property scale Scale to apply to the sensor location's natural parameters to support different 23 * screen resolutions. 24 */ 25 data class SensorLocation( 26 private val naturalCenterX: Int, 27 private val naturalCenterY: Int, 28 private val naturalRadius: Int, 29 private val scale: Float = 1f, 30 ) { 31 val centerX: Float 32 get() { 33 return naturalCenterX * scale 34 } 35 36 val centerY: Float 37 get() { 38 return naturalCenterY * scale 39 } 40 41 val radius: Float 42 get() { 43 return naturalRadius * scale 44 } 45 encodenull46 fun encode(): String { 47 return floatArrayOf( 48 naturalCenterX.toFloat(), 49 naturalCenterY.toFloat(), 50 naturalRadius.toFloat(), 51 scale, 52 ) 53 .joinToString(DELIMITER) 54 } 55 56 companion object { 57 58 private const val DELIMITER: String = "," 59 decodenull60 fun decode(encoded: String): SensorLocation { 61 val array = encoded.split(DELIMITER).map { it.toFloat() }.toFloatArray() 62 return SensorLocation(array[0].toInt(), array[1].toInt(), array[2].toInt(), array[3]) 63 } 64 } 65 } 66