/* * Copyright (C) 2021 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 android.hardware.biometrics; import android.annotation.NonNull; import android.annotation.Nullable; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; /** * The location of a sensor relative to a physical display. * * Note that the location may change depending on other attributes of the device, such as * fold status, which are not yet included in this class. * @hide */ public class SensorLocationInternal implements Parcelable { /** Default value to use when the sensor's location is unknown or undefined. */ public static final SensorLocationInternal DEFAULT = new SensorLocationInternal("", 0, 0, 0); /** * The stable display id. */ @NonNull public final String displayId; /** * The location of the center of the sensor if applicable. For example, sensors of type * {@link FingerprintSensorProperties#TYPE_UDFPS_OPTICAL} would report this value as the * distance in pixels, measured from the left edge of the screen. */ public final int sensorLocationX; /** * The location of the center of the sensor if applicable. For example, sensors of type * {@link FingerprintSensorProperties#TYPE_UDFPS_OPTICAL} would report this value as the * distance in pixels, measured from the top edge of the screen. * */ public final int sensorLocationY; /** * The radius of the sensor if applicable. For example, sensors of type * {@link FingerprintSensorProperties#TYPE_UDFPS_OPTICAL} would report this value as the radius * of the sensor, in pixels. */ public final int sensorRadius; public SensorLocationInternal(@Nullable String displayId, int sensorLocationX, int sensorLocationY, int sensorRadius) { this.displayId = displayId != null ? displayId : ""; this.sensorLocationX = sensorLocationX; this.sensorLocationY = sensorLocationY; this.sensorRadius = sensorRadius; } protected SensorLocationInternal(Parcel in) { displayId = in.readString16NoHelper(); sensorLocationX = in.readInt(); sensorLocationY = in.readInt(); sensorRadius = in.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(displayId); dest.writeInt(sensorLocationX); dest.writeInt(sensorLocationY); dest.writeInt(sensorRadius); } @Override public int describeContents() { return 0; } public static final Creator CREATOR = new Creator() { @Override public SensorLocationInternal createFromParcel(Parcel in) { return new SensorLocationInternal(in); } @Override public SensorLocationInternal[] newArray(int size) { return new SensorLocationInternal[size]; } }; @Override public String toString() { return "[id: " + displayId + ", x: " + sensorLocationX + ", y: " + sensorLocationY + ", r: " + sensorRadius + "]"; } /** Returns coordinates of a bounding box around the sensor. */ public Rect getRect() { return new Rect(sensorLocationX - sensorRadius, sensorLocationY - sensorRadius, sensorLocationX + sensorRadius, sensorLocationY + sensorRadius); } }