• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.server.wm;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.util.ArrayMap;
22 
23 import java.util.Map;
24 
25 /**
26  * Bidirectional mapping (1:1) for the currently active cameraId and the app package that opened it.
27  *
28  * <p>This class is not thread-safe.
29  */
30 final class CameraIdPackageNameBiMapping {
31     private final Map<String, String> mPackageToCameraIdMap = new ArrayMap<>();
32     private final Map<String, String> mCameraIdToPackageMap = new ArrayMap<>();
33 
isEmpty()34     boolean isEmpty() {
35         return mCameraIdToPackageMap.isEmpty();
36     }
37 
put(@onNull String packageName, @NonNull String cameraId)38     void put(@NonNull String packageName, @NonNull String cameraId) {
39         // Always using the last connected camera ID for the package even for the concurrent
40         // camera use case since we can't guess which camera is more important anyway.
41         removePackageName(packageName);
42         removeCameraId(cameraId);
43         mPackageToCameraIdMap.put(packageName, cameraId);
44         mCameraIdToPackageMap.put(cameraId, packageName);
45     }
46 
containsPackageName(@onNull String packageName)47     boolean containsPackageName(@NonNull String packageName) {
48         return mPackageToCameraIdMap.containsKey(packageName);
49     }
50 
51     @Nullable
getCameraId(@onNull String packageName)52     String getCameraId(@NonNull String packageName) {
53         return mPackageToCameraIdMap.get(packageName);
54     }
55 
removeCameraId(@onNull String cameraId)56     void removeCameraId(@NonNull String cameraId) {
57         final String packageName = mCameraIdToPackageMap.get(cameraId);
58         if (packageName == null) {
59             return;
60         }
61         mPackageToCameraIdMap.remove(packageName, cameraId);
62         mCameraIdToPackageMap.remove(cameraId, packageName);
63     }
64 
65     @NonNull
getSummaryForDisplayRotationHistoryRecord()66     String getSummaryForDisplayRotationHistoryRecord() {
67         return "{ mPackageToCameraIdMap=" + mPackageToCameraIdMap + " }";
68     }
69 
removePackageName(@onNull String packageName)70     private void removePackageName(@NonNull String packageName) {
71         String cameraId = mPackageToCameraIdMap.get(packageName);
72         if (cameraId == null) {
73             return;
74         }
75         mPackageToCameraIdMap.remove(packageName, cameraId);
76         mCameraIdToPackageMap.remove(cameraId, packageName);
77     }
78 }
79