From 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93 Mon Sep 17 00:00:00 2001
From: liyujie <2352380935@qq.com>
Date: Thu, 28 Aug 2025 12:04:21 +0000
Subject: [PATCH] [4/4]解决USB摄像头打开相机预览界面绿屏

---
 android/packages/apps/Camera2/src/com/android/camera/settings/CameraSettingsActivity.java |   47 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/android/packages/apps/Camera2/src/com/android/camera/settings/CameraSettingsActivity.java b/android/packages/apps/Camera2/src/com/android/camera/settings/CameraSettingsActivity.java
old mode 100755
new mode 100644
index 15307c0..59ced65
--- a/android/packages/apps/Camera2/src/com/android/camera/settings/CameraSettingsActivity.java
+++ b/android/packages/apps/Camera2/src/com/android/camera/settings/CameraSettingsActivity.java
@@ -203,13 +203,31 @@
             loadSizes();
 
             // Send loaded sizes to additional preferences.
-            CameraSettingsActivityHelper.onSizesLoaded(this, mPictureSizes.backCameraSizes,
-                    new ListPreferenceFiller() {
-                        @Override
-                        public void fill(List<Size> sizes, ListPreference preference) {
-                            setEntriesForSelection(sizes, preference);
-                        }
-                    });
+            if (!mPictureSizes.backCameraSizes.isEmpty()) {
+                CameraSettingsActivityHelper.onSizesLoaded(this, mPictureSizes.backCameraSizes,
+                        new ListPreferenceFiller() {
+                            @Override
+                            public void fill(List<Size> sizes, ListPreference preference) {
+                                setEntriesForSelection(sizes, preference);
+                            }
+                        });
+            } else if (!mPictureSizes.frontCameraSizes.isEmpty()) {
+                CameraSettingsActivityHelper.onSizesLoaded(this, mPictureSizes.frontCameraSizes,
+                        new ListPreferenceFiller() {
+                            @Override
+                            public void fill(List<Size> sizes, ListPreference preference) {
+                                setEntriesForSelection(sizes, preference);
+                            }
+                        });
+            } else {
+                CameraSettingsActivityHelper.onSizesLoaded(this, mPictureSizes.externalCameraSizes,
+                        new ListPreferenceFiller() {
+                            @Override
+                            public void fill(List<Size> sizes, ListPreference preference) {
+                                setEntriesForSelection(sizes, preference);
+                            }
+                        });
+            }
 
             // Make sure to hide settings for cameras that don't exist on this
             // device.
@@ -309,6 +327,12 @@
                 recursiveDelete(resolutions,
                         findPreference(Keys.KEY_VIDEO_QUALITY_FRONT));
             }
+            if (mPictureSizes.externalCameraSizes.isEmpty()) {
+                recursiveDelete(resolutions,
+                        findPreference(Keys.KEY_PICTURE_SIZE_EXTERNAL));
+                recursiveDelete(resolutions,
+                        findPreference(Keys.KEY_VIDEO_QUALITY_EXTERNAL));
+            }
         }
 
         /**
@@ -382,10 +406,14 @@
                 setEntriesForSelection(mPictureSizes.backCameraSizes, listPreference);
             } else if (listPreference.getKey().equals(Keys.KEY_PICTURE_SIZE_FRONT)) {
                 setEntriesForSelection(mPictureSizes.frontCameraSizes, listPreference);
+            } else if (listPreference.getKey().equals(Keys.KEY_PICTURE_SIZE_EXTERNAL)) {
+                setEntriesForSelection(mPictureSizes.externalCameraSizes, listPreference);
             } else if (listPreference.getKey().equals(Keys.KEY_VIDEO_QUALITY_BACK)) {
                 setEntriesForSelection(mPictureSizes.videoQualitiesBack.orNull(), listPreference);
             } else if (listPreference.getKey().equals(Keys.KEY_VIDEO_QUALITY_FRONT)) {
                 setEntriesForSelection(mPictureSizes.videoQualitiesFront.orNull(), listPreference);
+            } else if (listPreference.getKey().equals(Keys.KEY_VIDEO_QUALITY_EXTERNAL)) {
+                setEntriesForSelection(mPictureSizes.videoQualitiesExternal.orNull(), listPreference);
             }
         }
 
@@ -405,10 +433,15 @@
             } else if (listPreference.getKey().equals(Keys.KEY_PICTURE_SIZE_FRONT)) {
                 setSummaryForSelection(mPictureSizes.frontCameraSizes,
                         listPreference);
+            } else if (listPreference.getKey().equals(Keys.KEY_PICTURE_SIZE_EXTERNAL)) {
+                setSummaryForSelection(mPictureSizes.externalCameraSizes,
+                        listPreference);
             } else if (listPreference.getKey().equals(Keys.KEY_VIDEO_QUALITY_BACK)) {
                 setSummaryForSelection(mPictureSizes.videoQualitiesBack.orNull(), listPreference);
             } else if (listPreference.getKey().equals(Keys.KEY_VIDEO_QUALITY_FRONT)) {
                 setSummaryForSelection(mPictureSizes.videoQualitiesFront.orNull(), listPreference);
+            } else if (listPreference.getKey().equals(Keys.KEY_VIDEO_QUALITY_EXTERNAL)) {
+                setSummaryForSelection(mPictureSizes.videoQualitiesExternal.orNull(), listPreference);
             } else {
                 listPreference.setSummary(listPreference.getEntry());
             }

--
Gitblit v1.6.2