Home | History | Annotate | Download | only in device
      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 javax.annotation.Nonnull;
     20 import javax.annotation.Nullable;
     21 
     22 /**
     23  * Identifier for Camera1 and Camera2 camera devices.
     24  */
     25 public final class CameraId {
     26     private final Integer mLegacyCameraId;
     27     private final String mCameraId;
     28 
     29     public static CameraId fromLegacyId(int camera1Id) {
     30         return new CameraId(computeCameraIdFromLegacyId(camera1Id), camera1Id);
     31     }
     32 
     33     public static CameraId from(@Nonnull String camera2Id) {
     34         return new CameraId(camera2Id, computeLegacyIdFromCamera2Id(camera2Id));
     35     }
     36 
     37     /**
     38      * This should compute a Legacy Api1 camera Id for the given camera2 device.
     39      * This class will return null if the camera2 identifier cannot be transformed
     40      * into an api1 id.
     41      */
     42     private static Integer computeLegacyIdFromCamera2Id(@Nonnull String camera2Id) {
     43         try {
     44             return Integer.parseInt(camera2Id);
     45         } catch (NumberFormatException ignored) {
     46 
     47         }
     48 
     49         return null;
     50     }
     51 
     52     /**
     53      * This should compute a Camera2 Id for the given legacy camera device.
     54      * This should never return a null value.
     55      */
     56     private static String computeCameraIdFromLegacyId(int camera1Id) {
     57         return String.valueOf(camera1Id);
     58     }
     59 
     60     private CameraId(@Nonnull String cameraId, @Nullable Integer legacyCameraId) {
     61         mCameraId = cameraId;
     62         mLegacyCameraId = legacyCameraId;
     63     }
     64 
     65     /**
     66      * Return the Camera Api2 String representation that this instance represents.
     67      */
     68     public String getValue() {
     69         return mCameraId;
     70     }
     71 
     72     /**
     73      * Return the Legacy Api1 Camera index. It will throw an exception if the value
     74      * does not exist, which should only happen if the device that is being opened
     75      * is not supported on Api1.
     76      */
     77     public int getLegacyValue() throws UnsupportedOperationException {
     78         if (mLegacyCameraId == null) {
     79             throw new UnsupportedOperationException("Attempted to access a camera id that is not"
     80                   + " supported on legacy camera API's: " + mCameraId);
     81         }
     82 
     83         return mLegacyCameraId;
     84     }
     85 
     86     /**
     87      * Return true if this instance has a valid Legacy Api camera index.
     88      */
     89     public boolean hasLeagcyValue() {
     90         return mLegacyCameraId != null;
     91     }
     92 
     93     @Override
     94     public boolean equals(Object other) {
     95         if (this == other) {
     96             return true;
     97         }
     98         if (! (other instanceof CameraId)) {
     99             return false;
    100         }
    101 
    102         CameraId otherCameraId = (CameraId) other;
    103 
    104         // Note: mLegacyCameraId is omitted and only mCameraId is used as the
    105         // canonical "equals" for these instances since a Camera2 id can be
    106         // created from any Camera1 id.
    107         return mCameraId.equals(otherCameraId.mCameraId);
    108     }
    109 
    110     @Override
    111     public int hashCode() {
    112         return mCameraId.hashCode();
    113     }
    114 
    115     @Override
    116     public String toString() {
    117         return "CameraId{" +
    118               "Api2='" + mCameraId + "\',Api1:"+mLegacyCameraId+"}";
    119     }
    120 }
    121