1 /* 2 * Copyright (C) 2015 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.camera.device; 18 19 import java.util.Objects; 20 21 import javax.annotation.concurrent.ThreadSafe; 22 23 /** 24 * Internal representation of a single camera device for a given API. Only one 25 * device key may be active at any given time and other devices must be closed 26 * before opening a new one. 27 * 28 * A single instance is considered equal if both API and provided cameraIds 29 * match and the device key is suitable for use in hash maps. All values are 30 * immutable. 31 */ 32 @ThreadSafe 33 final class CameraDeviceKey { 34 /** 35 * Unified set of supported types. 36 */ 37 public enum ApiType { 38 CAMERA_API1, 39 CAMERA_API2, 40 CAMERA_API_PORTABILITY_AUTO, 41 CAMERA_API_PORTABILITY_API1, 42 CAMERA_API_PORTABILITY_API2 43 } 44 45 private final ApiType mApiType; 46 private final CameraId mCameraId; 47 48 /** 49 * @return the api type for this instances. 50 */ getApiType()51 public ApiType getApiType() { 52 return mApiType; 53 } 54 55 /** 56 * @return the typed cameraId for this instances. 57 */ getCameraId()58 public CameraId getCameraId() { 59 return mCameraId; 60 } 61 62 /** 63 * Create a camera device key with an explicit API version. 64 */ CameraDeviceKey(ApiType apiType, CameraId cameraId)65 public CameraDeviceKey(ApiType apiType, CameraId cameraId) { 66 mApiType = apiType; 67 mCameraId = cameraId; 68 } 69 70 @Override toString()71 public String toString() { 72 return "CameraDeviceKey{" + 73 "mApiType: " + mApiType + 74 ", mCameraId: " + mCameraId + "}"; 75 } 76 77 @Override equals(Object o)78 public boolean equals(Object o) { 79 if (this == o) { 80 return true; 81 } 82 if (o == null || getClass() != o.getClass()) { 83 return false; 84 } 85 86 CameraDeviceKey other = (CameraDeviceKey) o; 87 88 if (mApiType != other.mApiType) { 89 return false; 90 } 91 if (!mCameraId.equals(other.mCameraId)) { 92 return false; 93 } 94 95 return true; 96 } 97 98 @Override hashCode()99 public int hashCode() { 100 return Objects.hash(mApiType, mCameraId); 101 } 102 } 103