summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-15 09:18:11 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-15 09:18:11 +0000
commitd978909a2ff374a661e1258aec9e12f05cc22390 (patch)
treefbe7f07a56045a0f40651fd864ada21e9eb40a87
parentbd1af86e9d2d97c12781cda36734533b2d43fd92 (diff)
parentac51743c23bc7ddeb01f890d6a3af0dd17ea4fb3 (diff)
downloadgoldfish-aml_tz5_341510010.tar.gz
Snap for 11224086 from ac51743c23bc7ddeb01f890d6a3af0dd17ea4fb3 to mainline-tzdata5-releaseaml_tz5_341510070aml_tz5_341510050aml_tz5_341510010aml_tz5_341510010
Change-Id: Ibc591fc9773ad03ab625266dd82140d3a3050c94
-rw-r--r--64bitonly/product/arm64-vendor.mk3
-rw-r--r--64bitonly/product/emulator64_vendor.mk4
-rw-r--r--64bitonly/product/install_mediafiles.mk18
-rw-r--r--64bitonly/product/sdk_phone64_arm64.mk9
-rw-r--r--64bitonly/product/sdk_phone64_x86_64.mk9
-rw-r--r--64bitonly/product/sdk_tablet_arm64.mk99
-rw-r--r--64bitonly/product/sdk_tablet_x86_64.mk61
-rw-r--r--64bitonly/product/tablet_images_arm64-v8a_source.prop_template12
-rw-r--r--64bitonly/product/tablet_images_x86_64_source.prop_template12
-rw-r--r--64bitonly/product/vendor.mk302
-rw-r--r--64bitonly/product/x86_64-vendor.mk12
-rw-r--r--AndroidProducts.mk1
-rw-r--r--MultiDisplayProvider/AndroidManifest.xml4
-rw-r--r--MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp9
-rw-r--r--MultiDisplayProvider/src/com/android/emulator/multidisplay/MultiDisplayService.java53
-rw-r--r--arm64-kernel.mk1
-rw-r--r--arm64-vendor.mk3
-rw-r--r--audio/device_port_sink.cpp15
-rw-r--r--audio/device_port_source.cpp11
-rw-r--r--audio/policy/primary_audio_policy_configuration.xml4
-rw-r--r--audio/primary_device.cpp13
-rw-r--r--audio/talsa.cpp96
-rw-r--r--audio/talsa.h4
-rw-r--r--audio/util.cpp8
-rw-r--r--audio/util.h1
-rw-r--r--camera/Android.bp4
-rw-r--r--camera/CameraDevice.cpp158
-rw-r--r--camera/CameraDevice.h3
-rw-r--r--camera/CameraDeviceSession.cpp14
-rw-r--r--camera/CameraProvider.cpp34
-rw-r--r--camera/FakeRotatingCamera.cpp30
-rw-r--r--camera/FakeRotatingCamera.h3
-rw-r--r--camera/HwCamera.cpp6
-rw-r--r--camera/HwCamera.h3
-rw-r--r--camera/QemuCamera.cpp15
-rw-r--r--camera/QemuCamera.h2
-rw-r--r--camera/media/codecs_google_video_default.xml15
-rw-r--r--camera/media/codecs_performance.xml2
-rw-r--r--camera/media/codecs_performance_c2.xml29
-rw-r--r--camera/media/codecs_performance_c2_arm64.xml18
-rw-r--r--camera/metadata_utils.cpp69
-rw-r--r--data/etc/advancedFeatures.ini.minigbm30
-rw-r--r--data/etc/config.ini.pixeltablet46
-rw-r--r--data/etc/empty_data_disk1
-rw-r--r--data/etc/google/64bit/user/advancedFeatures.ini2
-rw-r--r--data/etc/google/64bit/user/advancedFeatures.ini.minigbm31
-rw-r--r--data/etc/google/64bit/user/advancedFeatures.ini.tablet29
-rw-r--r--data/etc/google/64bit/user/arm64/advancedFeatures.ini2
-rw-r--r--data/etc/google/64bit/user/arm64/advancedFeatures.ini.tablet28
-rw-r--r--data/etc/google/64bit/userdebug/advancedFeatures.ini1
-rw-r--r--data/etc/google/64bit/userdebug/advancedFeatures.ini.minigbm31
-rw-r--r--data/etc/google/64bit/userdebug/advancedFeatures.ini.tablet29
-rw-r--r--data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini1
-rw-r--r--data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini.tablet28
-rw-r--r--data/etc/google/user/advancedFeatures.ini1
-rw-r--r--data/etc/google/user/advancedFeatures.ini.minigbm31
-rw-r--r--data/etc/google/user/arm64/advancedFeatures.ini1
-rw-r--r--data/etc/google/userdebug/advancedFeatures.ini1
-rw-r--r--data/etc/google/userdebug/advancedFeatures.ini.minigbm31
-rw-r--r--data/etc/google/userdebug/arm64/advancedFeatures.ini1
-rw-r--r--data/etc/handheld_core_hardware.xml1
-rw-r--r--data/etc/permissions/privapp-permissions-multidisplay.xml29
-rw-r--r--data/etc/tablet_core_hardware.xml106
-rw-r--r--data/media/test/media.adb5
-rw-r--r--data/media/test/swirl_128x128_mpeg4.mp4bin4761 -> 0 bytes
-rw-r--r--data/media/test/swirl_130x132_mpeg4.mp4bin9291 -> 0 bytes
-rw-r--r--data/media/test/swirl_132x130_mpeg4.mp4bin9445 -> 0 bytes
-rw-r--r--data/media/test/swirl_136x144_mpeg4.mp4bin5935 -> 0 bytes
-rw-r--r--data/media/test/swirl_144x136_mpeg4.mp4bin7124 -> 0 bytes
-rw-r--r--emulator64_x86_64/BoardConfig.mk2
-rw-r--r--init.ranchu.rc4
-rw-r--r--input/virtio_input_multi_touch_7.idc2
-rw-r--r--overlay/frameworks/base/core/res/res/values/config.xml57
-rw-r--r--overlay/frameworks/base/core/res/res/xml/irq_device_map.xml23
-rw-r--r--overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/Android.mk40
-rw-r--r--overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/readme.txt20
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/config.xml42
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/dimens.xml36
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml25
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_top.xml25
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values-land/dimen.xml25
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/config.xml45
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/dimens.xml50
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/config.xml40
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/dimens.xml31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml23
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_top.xml23
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/config.xml40
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/dimens.xml54
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/config.xml68
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/dimens.xml32
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml22
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_top.xml22
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/config.xml39
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/dimens.xml30
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/Android.mk32
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/config.xml113
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/dimens.xml41
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/Android.mk31
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/AndroidManifest.xml24
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/config.xml37
-rw-r--r--overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/dimens.xml45
-rw-r--r--pc/images_source.prop_template2
-rw-r--r--pixel_fold/device_state_configuration.xml51
-rw-r--r--pixel_fold/display_layout_configuration.xml54
-rw-r--r--pixel_fold/display_settings.xml8
-rw-r--r--provision/EmulatorProvisonLib/src/com/android/sdksetup/ProvisionActivity.java21
-rw-r--r--sensors/Android.bp37
-rw-r--r--sensors/entry.cpp41
-rw-r--r--sensors/include/multihal_sensors.h (renamed from sensors/multihal_sensors.h)24
-rw-r--r--sensors/include/multihal_sensors_transport.h32
-rw-r--r--sensors/multihal_sensors.cpp125
-rw-r--r--sensors/multihal_sensors_epoll.cpp44
-rw-r--r--sensors/multihal_sensors_qemu.cpp55
-rw-r--r--sepolicy/common/file_contexts7
-rw-r--r--sepolicy/common/platform_app.te1
-rw-r--r--tablet/data/etc/display_settings.xml8
-rw-r--r--tablet/data/etc/tablet.xml22
-rw-r--r--tablet/overlay/frameworks/base/core/res/res/values/config.xml60
-rw-r--r--tablet/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml23
-rw-r--r--tablet/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml32
-rw-r--r--tasks/emu_img_zip.mk23
-rw-r--r--tools/Android.mk17
-rw-r--r--vendor.mk297
-rw-r--r--vendor_common.mk349
-rw-r--r--x86-vendor.mk11
-rw-r--r--x86_64-kernel.mk1
-rw-r--r--x86_64-vendor.mk22
141 files changed, 3482 insertions, 1017 deletions
diff --git a/64bitonly/product/arm64-vendor.mk b/64bitonly/product/arm64-vendor.mk
index bb14396c..f6a9896a 100644
--- a/64bitonly/product/arm64-vendor.mk
+++ b/64bitonly/product/arm64-vendor.mk
@@ -6,8 +6,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
PRODUCT_PROPERTY_OVERRIDES += \
ro.crypto.dm_default_key.options_format.version=2
-PRODUCT_SHIPPING_API_LEVEL := 33
-PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false
+PRODUCT_SHIPPING_API_LEVEL := 34
TARGET_USES_MKE2FS := true
# Note: the following lines need to stay at the beginning so that it can
diff --git a/64bitonly/product/emulator64_vendor.mk b/64bitonly/product/emulator64_vendor.mk
index 37c2659e..254425a2 100644
--- a/64bitonly/product/emulator64_vendor.mk
+++ b/64bitonly/product/emulator64_vendor.mk
@@ -28,7 +28,11 @@ endif
PRODUCT_PACKAGES += \
vndk-sp
+ifeq ($(EMULATOR_DISABLE_RADIO),true)
+DEVICE_PACKAGE_OVERLAYS += device/generic/goldfish/tablet/overlay
+else
DEVICE_PACKAGE_OVERLAYS := device/generic/goldfish/overlay
+endif
PRODUCT_CHARACTERISTICS := emulator
diff --git a/64bitonly/product/install_mediafiles.mk b/64bitonly/product/install_mediafiles.mk
deleted file mode 100644
index 919c6548..00000000
--- a/64bitonly/product/install_mediafiles.mk
+++ /dev/null
@@ -1,18 +0,0 @@
-# This is to speed up presubmit of media related tests by asking emulator
-# to run the media.adb script upon boot complete to copy those media files
-# to sdcard/test
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/data/media/test/media.adb:data/adbscripts/media.adb
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/data/media/test/swirl_136x144_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_136x144_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_132x130_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_132x130_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_130x132_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_130x132_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_144x136_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_144x136_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_128x128_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_128x128_mpeg4.mp4
-
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/data/etc/empty_data_disk:data/empty_data_disk
-
diff --git a/64bitonly/product/sdk_phone64_arm64.mk b/64bitonly/product/sdk_phone64_arm64.mk
index 0af17b1c..7fcb2fd9 100644
--- a/64bitonly/product/sdk_phone64_arm64.mk
+++ b/64bitonly/product/sdk_phone64_arm64.mk
@@ -22,6 +22,10 @@ PRODUCT_USE_DYNAMIC_PARTITIONS := true
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
+# 1.5G + 8M
+BOARD_SUPER_PARTITION_SIZE := 1619001344
+BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE := 1610612736
+
#
# All components inherited here go to system image
#
@@ -42,6 +46,9 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_product.mk)
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := \
development/sys-img/images_arm64-v8a_source.prop_template
+PRODUCT_PACKAGES += \
+ GoldfishSkinConfig
+
#
# All components inherited here go to vendor or vendor_boot image
#
@@ -52,5 +59,5 @@ $(call inherit-product, device/generic/goldfish/emulator64_arm64/device.mk)
# Overrides
PRODUCT_BRAND := Android
PRODUCT_NAME := sdk_phone64_arm64
-PRODUCT_DEVICE := emulator64_arm64
+PRODUCT_DEVICE := emu64a
PRODUCT_MODEL := Android SDK built for arm64
diff --git a/64bitonly/product/sdk_phone64_x86_64.mk b/64bitonly/product/sdk_phone64_x86_64.mk
index a2b4677a..89821fab 100644
--- a/64bitonly/product/sdk_phone64_x86_64.mk
+++ b/64bitonly/product/sdk_phone64_x86_64.mk
@@ -15,6 +15,10 @@
#
PRODUCT_USE_DYNAMIC_PARTITIONS := true
+# 1.5G + 8M
+BOARD_SUPER_PARTITION_SIZE := 1619001344
+BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE := 1610612736
+
#
# All components inherited here go to system image
#
@@ -40,6 +44,9 @@ $(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_product.mk)
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := \
development/sys-img/images_x86_64_source.prop_template
+PRODUCT_PACKAGES += \
+ GoldfishSkinConfig
+
#
# All components inherited here go to vendor image
#
@@ -50,5 +57,5 @@ $(call inherit-product, device/generic/goldfish/emulator64_x86_64/device.mk)
# Overrides
PRODUCT_BRAND := Android
PRODUCT_NAME := sdk_phone64_x86_64
-PRODUCT_DEVICE := emulator64_x86_64
+PRODUCT_DEVICE := emu64x
PRODUCT_MODEL := Android SDK built for x86_64
diff --git a/64bitonly/product/sdk_tablet_arm64.mk b/64bitonly/product/sdk_tablet_arm64.mk
new file mode 100644
index 00000000..96440967
--- /dev/null
+++ b/64bitonly/product/sdk_tablet_arm64.mk
@@ -0,0 +1,99 @@
+#
+# Copyright (C) 2023 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.
+#
+PRODUCT_USE_DYNAMIC_PARTITIONS := true
+EMULATOR_DISABLE_RADIO := true
+
+# 1.5G + 8M
+BOARD_SUPER_PARTITION_SIZE := 1619001344
+BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE := 1610612736
+
+PRODUCT_COPY_FILES += \
+ device/generic/goldfish/tablet/data/etc/display_settings.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings.xml \
+ device/generic/goldfish/data/etc/advancedFeatures.ini.tablet:advancedFeatures.ini \
+ device/generic/goldfish/data/etc/config.ini.nexus7tab:config.ini
+
+PRODUCT_COPY_FILES+= \
+ device/generic/goldfish/data/etc/tablet_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
+
+PRODUCT_COPY_FILES += device/generic/goldfish/tablet/data/etc/tablet.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/tablet.xml
+
+PRODUCT_CHARACTERISTICS := tablet,nosdcard
+
+
+#
+# All components inherited here go to system image
+#
+$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_system.mk)
+
+# Enable mainline checking for excat this product name
+PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
+
+
+#
+# All components inherited here go to system_ext image
+#
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_system_ext.mk)
+
+#
+# All components inherited here go to product image
+#
+# Includes all AOSP product packages
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_product.mk)
+
+# Default AOSP sounds
+$(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)
+
+# Additional settings used in all AOSP builds
+PRODUCT_PRODUCT_PROPERTIES += \
+ ro.config.ringtone?=Ring_Synth_04.ogg \
+ ro.config.notification_sound?=pixiedust.ogg \
+
+
+# More AOSP packages
+PRODUCT_PACKAGES += \
+ initial-package-stopped-states-aosp.xml \
+ PhotoTable \
+ preinstalled-packages-platform-aosp-product.xml \
+ WallpaperPicker \
+
+
+# Window Extensions
+$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
+
+# Other packages for virtual device testing.
+PRODUCT_PACKAGES += \
+ LargeScreenSettingsProviderOverlay \
+ curl \
+
+PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += system/bin/curl
+
+PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := \
+ device/generic/goldfish/64bitonly/product/tablet_images_arm64-v8a_source.prop_template
+
+#
+# All components inherited here go to vendor image
+#
+$(call inherit-product, device/generic/goldfish/arm64-vendor.mk)
+$(call inherit-product, device/generic/goldfish/64bitonly/product/emulator64_vendor.mk)
+$(call inherit-product, device/generic/goldfish/emulator64_arm64/device.mk)
+
+# Overrides
+PRODUCT_BRAND := Android
+PRODUCT_NAME := sdk_tablet_arm64
+PRODUCT_DEVICE := emu64a
+PRODUCT_MODEL := Android SDK Tablet for arm64
+
diff --git a/64bitonly/product/sdk_tablet_x86_64.mk b/64bitonly/product/sdk_tablet_x86_64.mk
index bbc6cca2..271d24b3 100644
--- a/64bitonly/product/sdk_tablet_x86_64.mk
+++ b/64bitonly/product/sdk_tablet_x86_64.mk
@@ -1,5 +1,5 @@
#
-# Copyright (C) 2021 The Android Open Source Project
+# Copyright (C) 2023 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.
@@ -16,29 +16,74 @@
PRODUCT_USE_DYNAMIC_PARTITIONS := true
EMULATOR_DISABLE_RADIO := true
+# 1.5G + 8M
+BOARD_SUPER_PARTITION_SIZE := 1619001344
+BOARD_EMULATOR_DYNAMIC_PARTITIONS_SIZE := 1610612736
+
+
PRODUCT_COPY_FILES += \
+ device/generic/goldfish/tablet/data/etc/display_settings.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings.xml \
device/generic/goldfish/data/etc/advancedFeatures.ini.tablet:advancedFeatures.ini \
device/generic/goldfish/data/etc/config.ini.nexus7tab:config.ini
+PRODUCT_COPY_FILES+= \
+ device/generic/goldfish/data/etc/tablet_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
+
+PRODUCT_COPY_FILES += device/generic/goldfish/tablet/data/etc/tablet.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/tablet.xml
+
PRODUCT_CHARACTERISTICS := tablet,nosdcard
+
#
# All components inherited here go to system image
#
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit_only.mk)
-$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_no_telephony.mk)
+$(call inherit-product, $(SRC_TARGET_DIR)/product/generic_system.mk)
# Enable mainline checking for excat this product name
-ifeq (sdk_tablet_x86_64,$(TARGET_PRODUCT))
PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := relaxed
-endif
+
+
+#
+# All components inherited here go to system_ext image
+#
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_system_ext.mk)
#
# All components inherited here go to product image
#
+# Includes all AOSP product packages
+$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_product.mk)
+
+# Default AOSP sounds
+$(call inherit-product-if-exists, frameworks/base/data/sounds/AllAudio.mk)
+
+# Additional settings used in all AOSP builds
+PRODUCT_PRODUCT_PROPERTIES += \
+ ro.config.ringtone?=Ring_Synth_04.ogg \
+ ro.config.notification_sound?=pixiedust.ogg \
+
+
+# More AOSP packages
+PRODUCT_PACKAGES += \
+ initial-package-stopped-states-aosp.xml \
+ PhotoTable \
+ preinstalled-packages-platform-aosp-product.xml \
+ WallpaperPicker \
+
+
+# Window Extensions
+$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
+
+# Other packages for virtual device testing.
+PRODUCT_PACKAGES += \
+ LargeScreenSettingsProviderOverlay \
+ curl \
+
+PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += system/bin/curl
PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP := \
- development/sys-img/images_x86_64_source.prop_template
+ device/generic/goldfish/64bitonly/product/tablet_images_x86_64_source.prop_template
#
# All components inherited here go to vendor image
@@ -47,9 +92,9 @@ $(call inherit-product, device/generic/goldfish/64bitonly/product/x86_64-vendor.
$(call inherit-product, device/generic/goldfish/64bitonly/product/emulator64_vendor.mk)
$(call inherit-product, device/generic/goldfish/emulator64_x86_64/device.mk)
-
# Overrides
PRODUCT_BRAND := Android
PRODUCT_NAME := sdk_tablet_x86_64
-PRODUCT_DEVICE := emulator64_x86_64
-PRODUCT_MODEL := Android SDK built for x86_64
+PRODUCT_DEVICE := emu64x
+PRODUCT_MODEL := Android SDK Tablet for x86_64
+
diff --git a/64bitonly/product/tablet_images_arm64-v8a_source.prop_template b/64bitonly/product/tablet_images_arm64-v8a_source.prop_template
new file mode 100644
index 00000000..5463d6aa
--- /dev/null
+++ b/64bitonly/product/tablet_images_arm64-v8a_source.prop_template
@@ -0,0 +1,12 @@
+Pkg.Desc=Tablet Android SDK System Image
+Pkg.UserSrc=false
+Pkg.Revision=1
+Pkg.Dependencies=emulator#29.1.11
+AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
+AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
+SystemImage.Abi=arm64-v8a
+SystemImage.GpuSupport=true
+SystemImage.TagId=aosp_tablet
+SystemImage.TagDisplay=Tablet Default Android System Image
diff --git a/64bitonly/product/tablet_images_x86_64_source.prop_template b/64bitonly/product/tablet_images_x86_64_source.prop_template
new file mode 100644
index 00000000..722d0855
--- /dev/null
+++ b/64bitonly/product/tablet_images_x86_64_source.prop_template
@@ -0,0 +1,12 @@
+Pkg.Desc=Tablet Android SDK System Image
+Pkg.UserSrc=false
+Pkg.Revision=1
+Pkg.Dependencies=emulator#29.1.11
+AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
+AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
+AndroidVersion.ExtensionLevel=${PLATFORM_SDK_EXTENSION_VERSION}
+AndroidVersion.IsBaseSdk=${PLATFORM_IS_BASE_SDK}
+SystemImage.Abi=x86_64
+SystemImage.GpuSupport=true
+SystemImage.TagId=aosp_tablet
+SystemImage.TagDisplay=Tablet Default Android System Image
diff --git a/64bitonly/product/vendor.mk b/64bitonly/product/vendor.mk
index 4b6146d1..7144efd6 100644
--- a/64bitonly/product/vendor.mk
+++ b/64bitonly/product/vendor.mk
@@ -13,304 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-#
-# This file is to configure vendor/data partitions of emulator-related products
-#
-$(call inherit-product-if-exists, frameworks/native/build/phone-xhdpi-2048-dalvik-heap.mk)
-
-# Enable Scoped Storage related
-$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)
-
-DEVICE_MANIFEST_FILE += device/generic/goldfish/manifest.xml
-
-PRODUCT_SOONG_NAMESPACES += \
- device/generic/goldfish \
- device/generic/goldfish-opengl
-
-PRODUCT_VENDOR_PROPERTIES += \
- ro.control_privapp_permissions=enforce \
- ro.crypto.volume.filenames_mode=aes-256-cts \
- ro.hardware.audio.tinyalsa.period_count=4 \
- ro.hardware.audio.tinyalsa.period_size_multiplier=4 \
- ro.hardware.audio.tinyalsa.host_latency_ms=30 \
- ro.hardware.power=ranchu \
- ro.hardware.vulkan=ranchu \
- ro.incremental.enable=yes \
- ro.logd.size=1M \
- ro.kernel.qemu=1 \
- ro.soc.manufacturer=AOSP \
- ro.soc.model=ranchu \
- ro.surface_flinger.supports_background_blur=1 \
- ro.zygote.disable_gl_preload=1 \
- debug.sf.vsync_reactor_ignore_present_fences=true \
- debug.stagefright.c2inputsurface=-1 \
- debug.stagefright.ccodec=4 \
- graphics.gpu.profiler.support=true \
- persist.sys.zram_enabled=1 \
- wifi.direct.interface=p2p-dev-wlan0 \
- wifi.interface=wlan0 \
-
-# Device modules
-PRODUCT_PACKAGES += \
- android.hardware.drm-service-lazy.clearkey \
- android.hardware.gatekeeper@1.0-service.software \
- android.hardware.usb-service.example \
- vulkan.ranchu \
- libandroidemu \
- libOpenglCodecCommon \
- libOpenglSystemCommon \
- qemu-export-property \
- qemu-props \
- stagefright \
- android.hardware.graphics.allocator@3.0-service.ranchu \
- android.hardware.graphics.mapper@3.0-impl-ranchu \
- android.hardware.graphics.composer3-service.ranchu \
- toybox_vendor \
- android.hardware.wifi-service \
- android.hardware.media.c2@1.0-service-goldfish \
- libcodec2_goldfish_vp8dec \
- libcodec2_goldfish_vp9dec \
- libcodec2_goldfish_avcdec \
- libcodec2_goldfish_hevcdec \
- sh_vendor \
- local_time.default \
- SdkSetup \
- goldfish_overlay_connectivity_gsi \
- MultiDisplayProvider \
- libGoldfishProfiler \
- dlkm_loader
-
-ifneq ($(EMULATOR_DISABLE_RADIO),true)
-PRODUCT_PACKAGES += \
- libcuttlefish-ril-2 \
- libgoldfish-rild \
- EmulatorRadioConfig \
- EmulatorTetheringConfigOverlay
-
-DEVICE_MANIFEST_FILE += device/generic/goldfish/manifest.radio.xml
-DISABLE_RILD_OEM_HOOK := true
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_BIOMETRICS), true)
-PRODUCT_PACKAGES += \
- android.hardware.biometrics.fingerprint-service.ranchu \
- android.hardware.biometrics.face-service.example \
-
-PRODUCT_COPY_FILES += \
- frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml \
- frameworks/native/data/etc/android.hardware.biometrics.face.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.biometrics.face.xml \
-
-endif
-
-ifneq ($(BUILD_EMULATOR_OPENGL),false)
-PRODUCT_PACKAGES += \
- libGLESv1_CM_emulation \
- lib_renderControl_enc \
- libEGL_emulation \
- libGLESv2_enc \
- libvulkan_enc \
- libGLESv2_emulation \
- libGLESv1_enc \
- libEGL_angle \
- libGLESv1_CM_angle \
- libGLESv2_angle
-endif
-
-# Enable bluetooth
-PRODUCT_PACKAGES += \
- android.hardware.bluetooth-service.default \
- android.hardware.bluetooth.audio-impl \
- bt_vhci_forwarder \
-
-# Bluetooth hardware properties.
-ifeq ($(TARGET_PRODUCT_PROP),)
-TARGET_PRODUCT_PROP := $(LOCAL_PATH)/../../bluetooth.prop
-endif
-
-# Bluetooth se policies
-BOARD_SEPOLICY_DIRS += system/bt/vendor_libs/linux/sepolicy
-
-PRODUCT_PACKAGES += \
- android.hardware.security.keymint-service
-PRODUCT_COPY_FILES += \
- frameworks/native/data/etc/android.hardware.keystore.app_attest_key.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.keystore.app_attest_key.xml
-
-PRODUCT_PACKAGES += \
- DisplayCutoutEmulationEmu01Overlay \
- EmulationPixel7ProOverlay \
- SystemUIEmulationPixel7ProOverlay \
- EmulationPixel7Overlay \
- SystemUIEmulationPixel7Overlay \
- EmulationPixel6ProOverlay \
- SystemUIEmulationPixel6ProOverlay \
- EmulationPixel6Overlay \
- SystemUIEmulationPixel6Overlay \
- EmulationPixel6aOverlay \
- SystemUIEmulationPixel6aOverlay \
- EmulationPixel5Overlay \
- SystemUIEmulationPixel5Overlay \
- EmulationPixel4XLOverlay \
- SystemUIEmulationPixel4XLOverlay \
- EmulationPixel4Overlay \
- SystemUIEmulationPixel4Overlay \
- EmulationPixel4aOverlay \
- SystemUIEmulationPixel4aOverlay \
- EmulationPixel3XLOverlay \
- SystemUIEmulationPixel3XLOverlay \
- EmulationPixel3Overlay \
- SystemUIEmulationPixel3Overlay \
- EmulationPixel3aOverlay \
- SystemUIEmulationPixel3aOverlay \
- EmulationPixel3aXLOverlay \
- SystemUIEmulationPixel3aXLOverlay \
- EmulationPixel2XLOverlay \
- NavigationBarMode2ButtonOverlay \
-
-ifneq ($(EMULATOR_VENDOR_NO_GNSS),true)
-PRODUCT_PACKAGES += android.hardware.gnss-service.ranchu
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_SENSORS),true)
-PRODUCT_PACKAGES += \
- android.hardware.sensors-service.multihal \
- android.hardware.sensors@2.1-impl.ranchu
-# TODO(rkir):
-# add a soong namespace and move this into a.h.sensors@2.1-impl.ranchu
-# as prebuilt_etc. For now soong_namespace causes a build break because the fw
-# refers to our wifi HAL in random places.
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/sensors/hals.conf:$(TARGET_COPY_OUT_VENDOR)/etc/sensors/hals.conf
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_CAMERA),true)
-PRODUCT_SOONG_NAMESPACES += \
- hardware/google/camera \
- hardware/google/camera/devices/EmulatedCamera \
-
-PRODUCT_PACKAGES += \
- android.hardware.camera.provider.ranchu \
- android.hardware.camera.provider@2.7-service-google \
- libgooglecamerahwl_impl \
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/camera/media/profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \
- device/generic/goldfish/camera/media/codecs_google_video_default.xml:${TARGET_COPY_OUT_VENDOR}/etc/media_codecs_google_video.xml \
- device/generic/goldfish/camera/media/codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
- device/generic/goldfish/camera/media/codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
- device/generic/goldfish/camera/media/codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \
- frameworks/native/data/etc/android.hardware.camera.ar.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.ar.xml \
- frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.flash-autofocus.xml \
- frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \
- frameworks/native/data/etc/android.hardware.camera.front.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.front.xml \
- frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml \
- frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml \
- hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_back.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_back.json \
- hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_front.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_front.json \
- hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_depth.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_depth.json \
-
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_SOUND),true)
-PRODUCT_PACKAGES += \
- android.hardware.audio.service \
- android.hardware.audio@7.1-impl.ranchu \
- android.hardware.audio.effect@7.0-impl \
-
-DEVICE_MANIFEST_FILE += device/generic/goldfish/audio/android.hardware.audio.effects@7.0.xml
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/audio/policy/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \
- device/generic/goldfish/audio/policy/primary_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/primary_audio_policy_configuration.xml \
- frameworks/av/services/audiopolicy/config/bluetooth_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_audio_policy_configuration_7_0.xml \
- frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
- frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
- frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
- frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
-
-endif
-
-# WiFi: vendor side
-PRODUCT_PACKAGES += \
- mac80211_create_radios \
- dhcpclient \
- hostapd \
- wpa_supplicant \
-
-# Window Extensions
-$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
-
-# "Hello, world!" HAL implementations, mostly for compliance
-PRODUCT_PACKAGES += \
- android.hardware.atrace@1.0-service \
- android.hardware.authsecret-service.example \
- android.hardware.contexthub-service.example \
- android.hardware.dumpstate-service.example \
- android.hardware.health-service.example \
- android.hardware.health.storage-service.default \
- android.hardware.lights-service.example \
- android.hardware.neuralnetworks-shim-service-sample \
- android.hardware.neuralnetworks-service-sample-all \
- android.hardware.neuralnetworks-service-sample-limited \
- android.hardware.power-service.example \
- android.hardware.power.stats-service.example \
- android.hardware.rebootescrow-service.default \
- android.hardware.thermal@2.0-service.mock \
- android.hardware.vibrator-service.example
-
-# TVs don't use a hardware identity service.
-ifneq ($(PRODUCT_IS_ATV_SDK),true)
- PRODUCT_PACKAGES += \
- android.hardware.identity-service.example
-endif
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/data/etc/dtb.img:dtb.img \
- device/generic/goldfish/emulator-info.txt:data/misc/emulator/version.txt \
- device/generic/goldfish/data/etc/apns-conf.xml:data/misc/apns/apns-conf.xml \
- device/generic/goldfish/radio/RadioConfig/radioconfig.xml:data/misc/emulator/config/radioconfig.xml \
- device/generic/goldfish/data/etc/iccprofile_for_sim0.xml:data/misc/modem_simulator/iccprofile_for_sim0.xml \
- device/google/cuttlefish/host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml:data/misc/modem_simulator/iccprofile_for_carrierapitests.xml \
- device/generic/goldfish/data/etc/numeric_operator.xml:data/misc/modem_simulator/etc/modem_simulator/files/numeric_operator.xml \
- device/generic/goldfish/data/etc/local.prop:data/local.prop \
- device/generic/goldfish/init.qemu-adb-keys.sh:$(TARGET_COPY_OUT_SYSTEM_EXT)/bin/init.qemu-adb-keys.sh \
- device/generic/goldfish/init.ranchu-core.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-core.sh \
- device/generic/goldfish/init.ranchu-net.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-net.sh \
- device/generic/goldfish/init.ranchu.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.ranchu.rc \
- device/generic/goldfish/init.system_ext.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.system_ext.rc \
- device/generic/goldfish/ueventd.ranchu.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc \
- device/generic/goldfish/input/virtio_input_rotary.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_rotary.idc \
- device/generic/goldfish/input/qwerty2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/qwerty2.idc \
- device/generic/goldfish/input/qwerty.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/qwerty.kl \
- device/generic/goldfish/input/virtio_input_multi_touch_1.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_1.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_2.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_3.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_3.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_4.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_4.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_5.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_5.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_6.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_6.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_7.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_7.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_8.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_8.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_9.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_9.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_10.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_10.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_11.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_11.idc \
- device/generic/goldfish/display_settings_app_compat.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings_app_compat.xml \
- device/generic/goldfish/display_settings_freeform.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings_freeform.xml \
- device/generic/goldfish/display_settings.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings.xml \
- device/generic/goldfish/data/etc/config.ini:config.ini \
- device/generic/goldfish/wifi/wpa_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \
- frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml \
- frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \
- frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
- frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
- frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \
- device/generic/goldfish/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \
- frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \
- frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \
- frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
- frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \
- frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \
- frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \
- frameworks/native/data/etc/android.software.vulkan.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \
- frameworks/native/data/etc/android.software.opengles.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml \
- frameworks/native/data/etc/android.software.autofill.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.autofill.xml \
- frameworks/native/data/etc/android.software.verified_boot.xml:${TARGET_COPY_OUT_PRODUCT}/etc/permissions/android.software.verified_boot.xml \
- device/generic/goldfish/data/etc/permissions/privapp-permissions-goldfish.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/privapp-permissions-goldfish.xml \
+$(call inherit-product, $(LOCAL_PATH)/../../vendor_common.mk)
diff --git a/64bitonly/product/x86_64-vendor.mk b/64bitonly/product/x86_64-vendor.mk
index e4f8acf7..a28c0356 100644
--- a/64bitonly/product/x86_64-vendor.mk
+++ b/64bitonly/product/x86_64-vendor.mk
@@ -3,18 +3,23 @@ include device/generic/goldfish/x86_64-kernel.mk
PRODUCT_PROPERTY_OVERRIDES += \
vendor.rild.libpath=/vendor/lib64/libgoldfish-ril.so
+ADVANCED_FEATURES_FILE := advancedFeatures.ini
+ifneq ($(filter %_minigbm, $(TARGET_PRODUCT)),)
+ADVANCED_FEATURES_FILE := advancedFeatures.ini.minigbm
+endif
+
# This is a build configuration for a full-featured build of the
# Open-Source part of the tree. It's geared toward a US-centric
# build quite specifically for the emulator, and might not be
# entirely appropriate to inherit from for on-device configurations.
PRODUCT_COPY_FILES += \
device/generic/goldfish/data/etc/config.ini.xl:config.ini \
- device/generic/goldfish/data/etc/advancedFeatures.ini:advancedFeatures.ini \
+ device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILE):advancedFeatures.ini \
device/generic/goldfish/data/etc/encryptionkey.img:encryptionkey.img \
$(EMULATOR_KERNEL_FILE):kernel-ranchu
PRODUCT_SDK_ADDON_COPY_FILES += \
- device/generic/goldfish/data/etc/advancedFeatures.ini:images/x86_64/advancedFeatures.ini \
+ device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILE):images/x86_64/advancedFeatures.ini \
device/generic/goldfish/data/etc/encryptionkey.img:images/x86_64/encryptionkey.img \
$(EMULATOR_KERNEL_FILE):images/x86_64/kernel-ranchu
@@ -24,8 +29,7 @@ PRODUCT_COPY_FILES += \
PRODUCT_PROPERTY_OVERRIDES += \
ro.crypto.dm_default_key.options_format.version=2
-PRODUCT_SHIPPING_API_LEVEL := 33
-PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false
+PRODUCT_SHIPPING_API_LEVEL := 34
TARGET_USES_MKE2FS := true
PRODUCT_PROPERTY_OVERRIDES += \
diff --git a/AndroidProducts.mk b/AndroidProducts.mk
index 13bd09ed..9a22b546 100644
--- a/AndroidProducts.mk
+++ b/AndroidProducts.mk
@@ -2,6 +2,7 @@ PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/sdk_phone_x86_vendor.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_x86_64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_x86_64_riscv64.mk \
+ $(LOCAL_DIR)/64bitonly/product/sdk_tablet_arm64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_tablet_x86_64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_arm64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_slim_x86_64.mk \
diff --git a/MultiDisplayProvider/AndroidManifest.xml b/MultiDisplayProvider/AndroidManifest.xml
index 3b3b1e34..5c203bdc 100644
--- a/MultiDisplayProvider/AndroidManifest.xml
+++ b/MultiDisplayProvider/AndroidManifest.xml
@@ -20,7 +20,11 @@
package="com.android.emulator.multidisplay"
android:sharedUserId="android.uid.system" >
+ <uses-permission android:name="android.permission.HARDWARE_TEST" />
+ <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
+ <uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER" />
<uses-sdk android:minSdkVersion="19" />
+
<application android:label="@string/app_name"
android:persistent="true">
<receiver android:name=".MultiDisplayServiceReceiver"
diff --git a/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp b/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp
index 10e92828..26c7a439 100644
--- a/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp
+++ b/MultiDisplayProvider/jni/com_android_emulator_multidisplay.cpp
@@ -43,6 +43,7 @@ static const uint8_t ADD = 1;
static const uint8_t DEL = 2;
static const uint8_t QUERY = 3;
static const uint8_t BIND = 4;
+static const uint8_t SET_DISPLAY = 0x10;
static void fillMsg(std::vector<uint8_t>& buf, uint8_t cmd, uint8_t* data, uint32_t size) {
// msg format is size(4B) + cmd(1B) + data(size B)
@@ -125,6 +126,14 @@ static bool nativeReadPipe(JNIEnv* env, jobject obj, jintArray arr) {
std::vector<uint8_t> args(length, 0);
qemu_pipe_read_fully(gFd, args.data(), (size_t)length);
switch(args[0]) {
+ case SET_DISPLAY:
+ ALOGV("received setdisplay event");
+ *arrp = SET_DISPLAY;
+ for (int i = 1; i < 6; i++) {
+ *(arrp + i) = *(uint32_t*)(&args[(i - 1) * 4 + 1]);
+ }
+ env->ReleaseIntArrayElements(arr, arrp, JNI_COMMIT);
+ break;
case ADD: {
ALOGV("received add event");
*arrp = ADD;
diff --git a/MultiDisplayProvider/src/com/android/emulator/multidisplay/MultiDisplayService.java b/MultiDisplayProvider/src/com/android/emulator/multidisplay/MultiDisplayService.java
index 41da9237..d78cc4ee 100644
--- a/MultiDisplayProvider/src/com/android/emulator/multidisplay/MultiDisplayService.java
+++ b/MultiDisplayProvider/src/com/android/emulator/multidisplay/MultiDisplayService.java
@@ -17,15 +17,20 @@
package com.android.emulator.multidisplay;
import android.app.Service;
+import android.hardware.display.DisplayManager;
+import android.hardware.display.VirtualDisplay;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Messenger;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.util.DebugUtils;
import android.util.Log;
-import android.hardware.display.DisplayManager;
-import android.hardware.display.VirtualDisplay;
import android.view.Surface;
+import java.lang.Thread;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -33,8 +38,6 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
-import android.os.Messenger;
-
public final class MultiDisplayService extends Service {
private static final String TAG = "MultiDisplayService";
private static final String DISPLAY_NAME = "Emulator 2D Display";
@@ -47,6 +50,10 @@ public final class MultiDisplayService extends Service {
private static final int MAX_DISPLAYS = 10;
private static final int ADD = 1;
private static final int DEL = 2;
+ // the following is used by resizabel to set display
+ // intentionally shifted 4 bits to avoid conflicting
+ // with existing multidisplay functions
+ private static final int SET_DISPLAY = 0x10;
private static final int FLAGS = DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC |
DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY |
@@ -55,6 +62,8 @@ public final class MultiDisplayService extends Service {
1 << 6 |//DisplayManager.VIRTUAL_DISPLAY_FLAG_SUPPORTS_TOUCH
1 << 9; //DisplayManager.VIRTUAL_DISPLAY_FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS;
+ private static final String SURFACE_COMPOSER_INTERFACE_KEY = "android.ui.ISurfaceComposer";
+ private IBinder mSurfaceFlinger;
private DisplayManager mDisplayManager;
private VirtualDisplay mVirtualDisplay[];
private Surface mSurface[];
@@ -130,7 +139,7 @@ public final class MultiDisplayService extends Service {
@Override
public void onCreate() {
- Log.d(TAG, "Creating service");
+ Log.i(TAG, "Creating service");
super.onCreate();
@@ -359,12 +368,16 @@ public final class MultiDisplayService extends Service {
while(nativeOpen() <= 0) {
Log.e(TAG, "failed to open multiDisplay pipe, retry");
}
+ Log.d(TAG, "success open multiDisplay pipe");
while(true) {
+ Log.d(TAG, "waiting to read pipe");
int[] array = {0, 0, 0, 0, 0, 0};
if (!nativeReadPipe(array)) {
+ Log.e(TAG, "failed and try again");
continue;
}
- Log.v(TAG, "run(): array= " + Arrays.toString(array));
+ Log.d(TAG, "have read something from pipe");
+ Log.d(TAG, "run(): array= " + Arrays.toString(array));
switch (array[0]) {
case ADD: {
for (int j = 0; j < 6; j++) {
@@ -392,6 +405,34 @@ public final class MultiDisplayService extends Service {
deleteVirtualDisplay(i);
break;
}
+ case SET_DISPLAY: {
+ for (int j = 0; j < 6; j++) {
+ Log.d(TAG, "SET_DISPLAY received " + array[j]);
+ }
+ if (mSurfaceFlinger == null) {
+ Log.d(TAG, "obtain surfaceflinger " );
+ mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
+ }
+ if (mSurfaceFlinger != null) {
+ int i = array[1];
+ Parcel data = Parcel.obtain();
+ data.writeInterfaceToken(SURFACE_COMPOSER_INTERFACE_KEY);
+ data.writeInt(i);
+ try {
+ if (i >=0) {
+ mSurfaceFlinger.transact(1035, data, null, 0 /* flags */);
+ Log.d(TAG, "setting display to " + i);
+ } else {
+ Log.e(TAG, "invalid display id " + i);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Could not set display:" + e.toString());
+ }
+ } else {
+ Log.e(TAG, "cannot get SurfaceFlinger service");
+ }
+ break;
+ }
// TODO(b/231763427): implement LIST
}
}
diff --git a/arm64-kernel.mk b/arm64-kernel.mk
index 70efdf4a..9286abb6 100644
--- a/arm64-kernel.mk
+++ b/arm64-kernel.mk
@@ -1,4 +1,5 @@
TARGET_KERNEL_USE ?= 6.1
+PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS ?= false
KERNEL_ARTIFACTS_PATH := kernel/prebuilts/$(TARGET_KERNEL_USE)/arm64
diff --git a/arm64-vendor.mk b/arm64-vendor.mk
index 0cf4e530..f8a70d33 100644
--- a/arm64-vendor.mk
+++ b/arm64-vendor.mk
@@ -6,8 +6,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
PRODUCT_PROPERTY_OVERRIDES += \
ro.crypto.dm_default_key.options_format.version=2
-PRODUCT_SHIPPING_API_LEVEL := 33
-PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false
+PRODUCT_SHIPPING_API_LEVEL := 34
TARGET_USES_MKE2FS := true
# Note: the following lines need to stay at the beginning so that it can
diff --git a/audio/device_port_sink.cpp b/audio/device_port_sink.cpp
index ae89076d..c4295c29 100644
--- a/audio/device_port_sink.cpp
+++ b/audio/device_port_sink.cpp
@@ -159,7 +159,7 @@ struct TinyalsaSink : public DevicePortSink {
mReceivedFrames += szFrames;
bytesToWrite -= szBytes;
} else {
- ALOGV("TinyalsaSink::%s:%d pcm_write was late reading "
+ ALOGV("TinyalsaSink::%s:%d pcm_writei was late reading "
"frames, dropping %zu us of audio",
__func__, __LINE__,
size_t(1000000 * bytesToWrite / mFrameSize / mSampleRateHz));
@@ -209,7 +209,18 @@ struct TinyalsaSink : public DevicePortSink {
LOG_ALWAYS_FATAL_IF(mRingBuffer.consume(chunk, szBytes) < szBytes);
}
- talsa::pcmWrite(mPcm.get(), writeBuffer.data(), szBytes);
+ const uint8_t *data8 = writeBuffer.data();
+ while (szBytes > 0) {
+ const int n = talsa::pcmWrite(mPcm.get(), data8, szBytes, mFrameSize);
+ if (n < 0) {
+ break;
+ }
+ LOG_ALWAYS_FATAL_IF(static_cast<size_t>(n) > szBytes,
+ "n=%d szBytes=%zu mFrameSize=%u",
+ n, szBytes, mFrameSize);
+ data8 += n;
+ szBytes -= n;
+ }
}
}
}
diff --git a/audio/device_port_source.cpp b/audio/device_port_source.cpp
index 608992a9..79582dc1 100644
--- a/audio/device_port_source.cpp
+++ b/audio/device_port_source.cpp
@@ -138,7 +138,7 @@ struct TinyalsaSource : public DevicePortSource {
bytesToRead -= writeBufSzBytes;
mSentFrames += writeBufSzBytes / mFrameSize;
} else {
- ALOGD("TinyalsaSource::%s:%d pcm_read was late delivering "
+ ALOGD("TinyalsaSource::%s:%d pcm_readi was late delivering "
"frames, inserting %zu us of silence",
__func__, __LINE__,
size_t(1000000 * bytesToRead / mFrameSize / mSampleRateHz));
@@ -185,7 +185,14 @@ struct TinyalsaSource : public DevicePortSource {
}
size_t doRead(void *dst, size_t sz) {
- return talsa::pcmRead(mPcm.get(), dst, sz) ? sz : 0;
+ const int n = talsa::pcmRead(mPcm.get(), dst, sz, mFrameSize);
+ if (n > 0) {
+ LOG_ALWAYS_FATAL_IF(static_cast<size_t>(n) > sz,
+ "n=%d sz=%zu mFrameSize=%u", n, sz, mFrameSize);
+ return n;
+ } else {
+ return 0;
+ }
}
static std::unique_ptr<TinyalsaSource> create(unsigned pcmCard,
diff --git a/audio/policy/primary_audio_policy_configuration.xml b/audio/policy/primary_audio_policy_configuration.xml
index 93078164..01050d45 100644
--- a/audio/policy/primary_audio_policy_configuration.xml
+++ b/audio/policy/primary_audio_policy_configuration.xml
@@ -13,12 +13,12 @@
<mixPort name="primary output" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000 11025 16000 32000 44100 48000"
- channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
+ channelMasks="AUDIO_CHANNEL_OUT_MONO AUDIO_CHANNEL_OUT_STEREO"/>
</mixPort>
<mixPort name="primary input" role="sink">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
samplingRates="8000 11025 16000 32000 44100 48000"
- channelMasks="AUDIO_CHANNEL_IN_STEREO"/>
+ channelMasks="AUDIO_CHANNEL_IN_MONO AUDIO_CHANNEL_IN_STEREO"/>
</mixPort>
<mixPort name="telephony_tx" role="source">
diff --git a/audio/primary_device.cpp b/audio/primary_device.cpp
index 3163f6d1..7a1aec59 100644
--- a/audio/primary_device.cpp
+++ b/audio/primary_device.cpp
@@ -20,6 +20,7 @@
#include "primary_device.h"
#include "stream_in.h"
#include "stream_out.h"
+#include "talsa.h"
#include "util.h"
#include "debug.h"
@@ -83,7 +84,9 @@ Return<void> Device::getMasterMute(getMasterMute_cb _hidl_cb) {
Return<void> Device::getInputBufferSize(const AudioConfig& config, getInputBufferSize_cb _hidl_cb) {
AudioConfig suggestedConfig;
- if (util::checkAudioConfig(false, kInBufferDurationMs, config, suggestedConfig)) {
+ if (util::checkAudioConfig(false, kInBufferDurationMs,
+ talsa::pcmGetPcmPeriodSettings().periodCount,
+ config, suggestedConfig)) {
const size_t sz =
suggestedConfig.frameCount
* util::countChannels(suggestedConfig.base.channelMask)
@@ -286,7 +289,9 @@ std::tuple<Result, sp<IStreamOut>, AudioConfig> Device::openOutputStreamImpl(
}
AudioConfig suggestedConfig;
- if (util::checkAudioConfig(true, kOutBufferDurationMs, config, suggestedConfig)) {
+ if (util::checkAudioConfig(true, kOutBufferDurationMs,
+ talsa::pcmGetPcmPeriodSettings().periodCount,
+ config, suggestedConfig)) {
auto stream = std::make_unique<StreamOut>(
this, ioHandle, device, suggestedConfig, flags, sourceMetadata);
@@ -314,7 +319,9 @@ std::tuple<Result, sp<IStreamIn>, AudioConfig> Device::openInputStreamImpl(
}
AudioConfig suggestedConfig;
- if (util::checkAudioConfig(false, kInBufferDurationMs, config, suggestedConfig)) {
+ if (util::checkAudioConfig(false, kInBufferDurationMs,
+ talsa::pcmGetPcmPeriodSettings().periodCount,
+ config, suggestedConfig)) {
auto stream = std::make_unique<StreamIn>(
this, ioHandle, device, suggestedConfig, flags, sinkMetadata);
diff --git a/audio/talsa.cpp b/audio/talsa.cpp
index 4c2d7f84..c5d232dc 100644
--- a/audio/talsa.cpp
+++ b/audio/talsa.cpp
@@ -152,6 +152,10 @@ PcmPtr pcmOpen(const unsigned int dev,
pcm_config.period_size =
periodSettings.periodSizeMultiplier * frameCount / periodSettings.periodCount;
pcm_config.format = PCM_FORMAT_S16_LE;
+ if (isOut) {
+ pcm_config.start_threshold = pcm_config.period_size * (pcm_config.period_count - 1);
+ pcm_config.stop_threshold = pcm_config.period_size * pcm_config.period_count;
+ }
pcm_t *pcmRaw = ::pcm_open(dev, card,
(isOut ? PCM_OUT : PCM_IN) | PCM_MONOTONIC,
@@ -183,58 +187,78 @@ PcmPtr pcmOpen(const unsigned int dev,
return pcm;
}
-bool pcmRead(pcm_t *pcm, void *data, unsigned int count) {
+int pcmRead(pcm_t *pcm, void *data, const int szBytes,
+ const unsigned int frameSize) {
+ LOG_ALWAYS_FATAL_IF(frameSize == 0);
+ LOG_ALWAYS_FATAL_IF(szBytes < 0, "szBytes=%d", szBytes);
+ LOG_ALWAYS_FATAL_IF((szBytes % frameSize) != 0, "szBytes=%d frameSize=%u",
+ szBytes, frameSize);
if (!pcm) {
- return FAILURE(false);
+ return FAILURE(-1);
}
+ const int szFrames = szBytes / frameSize;
int tries = 3;
while (true) {
- --tries;
- const int r = ::pcm_read(pcm, data, count);
- switch (-r) {
- case 0:
- return true;
-
- case EIO:
- case EAGAIN:
- if (tries > 0) {
- break;
+ const int framesRead = ::pcm_readi(pcm, data, szFrames);
+ if (framesRead > 0) {
+ LOG_ALWAYS_FATAL_IF(framesRead > szFrames,
+ "framesRead=%d szFrames=%d szBytes=%u frameSize=%u",
+ framesRead, szFrames, szBytes, frameSize);
+ return framesRead * frameSize;
+ } else {
+ --tries;
+ switch (-framesRead) {
+ case EIO:
+ case EAGAIN:
+ if (tries > 0) {
+ break;
+ }
+ [[fallthrough]];
+
+ default:
+ ALOGW("%s:%d pcm_readi failed with '%s' (%d)",
+ __func__, __LINE__, ::pcm_get_error(pcm), framesRead);
+ return FAILURE(-1);
}
- [[fallthrough]];
-
- default:
- ALOGW("%s:%d pcm_read failed with '%s' (%d)",
- __func__, __LINE__, ::pcm_get_error(pcm), r);
- return FAILURE(false);
}
}
}
-bool pcmWrite(pcm_t *pcm, const void *data, unsigned int count) {
+int pcmWrite(pcm_t *pcm, const void *data, const int szBytes,
+ const unsigned int frameSize) {
+ LOG_ALWAYS_FATAL_IF(frameSize == 0);
+ LOG_ALWAYS_FATAL_IF(szBytes < 0, "szBytes=%d", szBytes);
+ LOG_ALWAYS_FATAL_IF((szBytes % frameSize) != 0, "szBytes=%d frameSize=%u",
+ szBytes, frameSize);
if (!pcm) {
- return FAILURE(false);
+ return FAILURE(-1);
}
+ const int szFrames = szBytes / frameSize;
int tries = 3;
while (true) {
- --tries;
- const int r = ::pcm_write(pcm, data, count);
- switch (-r) {
- case 0:
- return true;
-
- case EIO:
- case EAGAIN:
- if (tries > 0) {
- break;
+ const int framesWritten = ::pcm_writei(pcm, data, szFrames);
+ if (framesWritten > 0) {
+ LOG_ALWAYS_FATAL_IF(framesWritten > szFrames,
+ "framesWritten=%d szFrames=%d szBytes=%u frameSize=%u",
+ framesWritten, szFrames, szBytes, frameSize);
+ return framesWritten * frameSize;
+ } else {
+ --tries;
+ switch (-framesWritten) {
+ case EIO:
+ case EAGAIN:
+ if (tries > 0) {
+ break;
+ }
+ [[fallthrough]];
+
+ default:
+ ALOGW("%s:%d pcm_writei failed with '%s' (%d)",
+ __func__, __LINE__, ::pcm_get_error(pcm), framesWritten);
+ return FAILURE(-1);
}
- [[fallthrough]];
-
- default:
- ALOGW("%s:%d pcm_write failed with '%s' (%d)",
- __func__, __LINE__, ::pcm_get_error(pcm), r);
- return FAILURE(false);
}
}
}
diff --git a/audio/talsa.h b/audio/talsa.h
index 956a0165..59804a89 100644
--- a/audio/talsa.h
+++ b/audio/talsa.h
@@ -42,8 +42,8 @@ struct PcmDeleter { void operator()(pcm_t *x) const; };
typedef std::unique_ptr<pcm_t, PcmDeleter> PcmPtr;
PcmPtr pcmOpen(unsigned int dev, unsigned int card, unsigned int nChannels,
size_t sampleRateHz, size_t frameCount, bool isOut);
-bool pcmRead(pcm_t *pcm, void *data, unsigned int count);
-bool pcmWrite(pcm_t *pcm, const void *data, unsigned int count);
+int pcmRead(pcm_t *pcm, void *data, int szBytes, unsigned int frameSize);
+int pcmWrite(pcm_t *pcm, const void *data, int szBytes, unsigned int frameSize);
class Mixer {
public:
diff --git a/audio/util.cpp b/audio/util.cpp
index 95ed9296..dff075b5 100644
--- a/audio/util.cpp
+++ b/audio/util.cpp
@@ -92,9 +92,9 @@ size_t align(size_t v, size_t a) {
return (v + a - 1) / a * a;
}
-size_t getBufferSizeFrames(size_t duration_ms, uint32_t sample_rate) {
+size_t getBufferSizeFrames(size_t duration_ms, size_t sample_rate, size_t extraAlignment) {
// AudioFlinger requires the buffer to be aligned by 16 frames
- return align(sample_rate * duration_ms / 1000, 16);
+ return align(sample_rate * duration_ms / 1000, 16 * extraAlignment);
}
} // namespace
@@ -152,6 +152,7 @@ bool checkAudioConfig(const AudioConfig &cfg) {
bool checkAudioConfig(const bool isOut,
size_t duration_ms,
+ size_t extraAlignment,
const AudioConfig &src,
AudioConfig &suggested) {
bool result = true;
@@ -170,7 +171,8 @@ bool checkAudioConfig(const bool isOut,
}
if (src.frameCount == 0) {
- suggested.frameCount = getBufferSizeFrames(duration_ms, src.base.sampleRateHz);
+ suggested.frameCount = getBufferSizeFrames(duration_ms, src.base.sampleRateHz,
+ extraAlignment);
}
return result;
diff --git a/audio/util.h b/audio/util.h
index db3c3c2a..459978d1 100644
--- a/audio/util.h
+++ b/audio/util.h
@@ -45,6 +45,7 @@ size_t getBytesPerSample(const AudioFormat &format);
bool checkAudioConfig(const AudioConfig &cfg);
bool checkAudioConfig(bool isOut,
size_t duration_ms,
+ size_t extraAlignment,
const AudioConfig &cfg,
AudioConfig &suggested);
diff --git a/camera/Android.bp b/camera/Android.bp
index 63562179..1e83bf8b 100644
--- a/camera/Android.bp
+++ b/camera/Android.bp
@@ -50,9 +50,6 @@ cc_binary {
"yuv.cpp",
],
shared_libs: [
- "android.hardware.graphics.mapper@2.0",
- "android.hardware.graphics.mapper@3.0",
- "android.hardware.graphics.mapper@4.0",
"libbase",
"libbinder",
"libbinder_ndk",
@@ -63,7 +60,6 @@ cc_binary {
"libfmq",
"libGLESv2",
"libgralloctypes",
- "libhidlbase",
"libjpeg",
"liblog",
"libprocessgroup",
diff --git a/camera/CameraDevice.cpp b/camera/CameraDevice.cpp
index ddd04f0a..0447413c 100644
--- a/camera/CameraDevice.cpp
+++ b/camera/CameraDevice.cpp
@@ -16,7 +16,6 @@
#define FAILURE_DEBUG_PREFIX "CameraDevice"
-#include <charconv>
#include <string_view>
#include <system/camera_metadata.h>
@@ -32,8 +31,6 @@ namespace camera {
namespace provider {
namespace implementation {
namespace {
-constexpr char kCameraIdPrefix[] = "device@1.0/internal/";
-
const uint32_t kExtraResultKeys[] = {
ANDROID_CONTROL_AE_STATE,
ANDROID_CONTROL_AF_STATE,
@@ -92,7 +89,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
{
m[ANDROID_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES]
- .add(ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF);
+ .add<uint8_t>(ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF);
}
{ // ANDROID_CONTROL_...
m[ANDROID_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES]
@@ -136,9 +133,9 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
.add<int32_t>(0) // AWB
.add<int32_t>(0); // AF
m[ANDROID_CONTROL_AE_LOCK_AVAILABLE] =
- ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE;
+ uint8_t(ANDROID_CONTROL_AE_LOCK_AVAILABLE_FALSE);
m[ANDROID_CONTROL_AWB_LOCK_AVAILABLE] =
- ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE;
+ uint8_t(ANDROID_CONTROL_AWB_LOCK_AVAILABLE_FALSE);
m[ANDROID_CONTROL_AVAILABLE_MODES]
.add<uint8_t>(ANDROID_CONTROL_MODE_OFF)
.add<uint8_t>(ANDROID_CONTROL_MODE_AUTO);
@@ -156,13 +153,13 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
{ // ANDROID_FLASH_INFO_...
const auto supportedFlashStrength = mHwCamera->getSupportedFlashStrength();
if (supportedFlashStrength.first > 0) {
- m[ANDROID_FLASH_INFO_AVAILABLE] = ANDROID_FLASH_INFO_AVAILABLE_TRUE;
+ m[ANDROID_FLASH_INFO_AVAILABLE] = uint8_t(ANDROID_FLASH_INFO_AVAILABLE_TRUE);
m[ANDROID_FLASH_INFO_STRENGTH_MAXIMUM_LEVEL] =
int32_t(supportedFlashStrength.first);
m[ANDROID_FLASH_INFO_STRENGTH_DEFAULT_LEVEL] =
int32_t(supportedFlashStrength.second);
} else {
- m[ANDROID_FLASH_INFO_AVAILABLE] = ANDROID_FLASH_INFO_AVAILABLE_FALSE;
+ m[ANDROID_FLASH_INFO_AVAILABLE] = uint8_t(ANDROID_FLASH_INFO_AVAILABLE_FALSE);
}
}
{ // ANDROID_HOT_PIXEL_...
@@ -179,8 +176,8 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
m[ANDROID_JPEG_MAX_SIZE] = int32_t(mHwCamera->getJpegMaxSize());
}
{ // ANDROID_LENS_...
- m[ANDROID_LENS_FACING] = mHwCamera->isBackFacing() ?
- ANDROID_LENS_FACING_BACK : ANDROID_LENS_FACING_FRONT;
+ m[ANDROID_LENS_FACING] = uint8_t(mHwCamera->isBackFacing() ?
+ ANDROID_LENS_FACING_BACK : ANDROID_LENS_FACING_FRONT);
{
auto& v = m[ANDROID_LENS_INFO_AVAILABLE_APERTURES];
@@ -202,7 +199,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
m[ANDROID_LENS_INFO_MINIMUM_FOCUS_DISTANCE] =
float(mHwCamera->getMinimumFocusDistance());
m[ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION] =
- ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE;
+ uint8_t(ANDROID_LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE);
}
{ // ANDROID_NOISE_REDUCTION_...
m[ANDROID_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES]
@@ -218,29 +215,21 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
}
m[ANDROID_REQUEST_MAX_NUM_INPUT_STREAMS] = int32_t(0);
- m[ANDROID_REQUEST_PIPELINE_MAX_DEPTH] = mHwCamera->getPipelineMaxDepth();
+ m[ANDROID_REQUEST_PIPELINE_MAX_DEPTH] = uint8_t(mHwCamera->getPipelineMaxDepth());
m[ANDROID_REQUEST_PARTIAL_RESULT_COUNT] = int32_t(1);
- m[ANDROID_REQUEST_AVAILABLE_CAPABILITIES]
- .add(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE)
- .add(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS);
- }
- { // ANDROID_SCALER_...
- {
- auto& v = m[ANDROID_SCALER_AVAILABLE_FORMATS];
- for (const auto fmt : mHwCamera->getSupportedPixelFormats()) {
- v.add(fmt);
- }
- }
{
- auto& jpeg = m[ANDROID_SCALER_AVAILABLE_JPEG_SIZES];
- auto& processed = m[ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES];
+ auto& availableCaps = m[ANDROID_REQUEST_AVAILABLE_CAPABILITIES];
+ uint32_t availableCapsBitmap =
+ mHwCamera->getAvailableCapabilitiesBitmap();
- for (const auto sz : mHwCamera->getSupportedResolutions()) {
- jpeg.add<int32_t>(sz.width).add<int32_t>(sz.height);
- processed.add<int32_t>(sz.width).add<int32_t>(sz.height);
+ for (int i = 0; availableCapsBitmap; ++i, availableCapsBitmap >>= 1) {
+ if (availableCapsBitmap & 1) {
+ availableCaps.add<uint8_t>(i);
+ }
}
}
-
+ }
+ { // ANDROID_SCALER_...
m[ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM] =
float(mHwCamera->getMaxDigitalZoom());
@@ -274,7 +263,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
}
m[ANDROID_SCALER_CROPPING_TYPE] =
- ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY;
+ uint8_t(ANDROID_SCALER_CROPPING_TYPE_CENTER_ONLY);
}
{ // ANDROID_SENSOR_...
m[ANDROID_SENSOR_ORIENTATION] =
@@ -310,7 +299,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
}
m[ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT] =
- ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB;
+ uint8_t(ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB);
{
const auto exposureTimeRange = mHwCamera->getSensorExposureTimeRange();
@@ -323,7 +312,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
m[ANDROID_SENSOR_INFO_MAX_FRAME_DURATION] =
int64_t(mHwCamera->getSensorMaxFrameDuration());
m[ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE] =
- ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN; // SYSTEM_TIME_MONOTONIC
+ uint8_t(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN); // SYSTEM_TIME_MONOTONIC
}
{ // ANDROID_SHADING_...
m[ANDROID_SHADING_AVAILABLE_MODES]
@@ -340,7 +329,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
}
{ // ANDROID_INFO_...
m[ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL] =
- ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
+ uint8_t(ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED);
}
{ // ANDROID_SYNC_
m[ANDROID_SYNC_MAX_LATENCY] = ANDROID_SYNC_MAX_LATENCY_UNKNOWN;
@@ -355,7 +344,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
const std::vector<uint32_t> keys = getSortedKeys(m);
CameraMetadataValue& val = m[ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS];
for (const uint32_t key : keys) {
- val.add<uint32_t>(key);
+ val.add<int32_t>(key);
}
}
{
@@ -365,7 +354,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
const std::vector<uint32_t> keys = getSortedKeys(r);
CameraMetadataValue& val = m[ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS];
for (const uint32_t key : keys) {
- val.add<uint32_t>(key);
+ val.add<int32_t>(key);
}
}
@@ -377,7 +366,7 @@ ScopedAStatus CameraDevice::getCameraCharacteristics(CameraMetadata* metadata) {
const std::vector<uint32_t> keys = getSortedKeys(r);
CameraMetadataValue& val = m[ANDROID_REQUEST_AVAILABLE_RESULT_KEYS];
for (const uint32_t key : keys) {
- val.add<uint32_t>(key);
+ val.add<int32_t>(key);
}
}
}
@@ -440,34 +429,37 @@ CameraMetadataMap CameraDevice::constructDefaultRequestSettings(const RequestTem
CameraMetadataMap m;
m[ANDROID_COLOR_CORRECTION_ABERRATION_MODE] =
- ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF;
- m[ANDROID_CONTROL_AE_ANTIBANDING_MODE] = ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO;
+ uint8_t(ANDROID_COLOR_CORRECTION_ABERRATION_MODE_OFF);
+ m[ANDROID_CONTROL_AE_ANTIBANDING_MODE] =
+ uint8_t(ANDROID_CONTROL_AE_ANTIBANDING_MODE_AUTO);
m[ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION] = int32_t(0);
- m[ANDROID_CONTROL_AE_LOCK] = ANDROID_CONTROL_AE_LOCK_OFF;
- m[ANDROID_CONTROL_AE_MODE] = (tpl == RequestTemplate::MANUAL) ?
- ANDROID_CONTROL_AE_MODE_OFF : ANDROID_CONTROL_AE_MODE_ON;
+ m[ANDROID_CONTROL_AE_LOCK] = uint8_t(ANDROID_CONTROL_AE_LOCK_OFF);
+ m[ANDROID_CONTROL_AE_MODE] = uint8_t((tpl == RequestTemplate::MANUAL) ?
+ ANDROID_CONTROL_AE_MODE_OFF : ANDROID_CONTROL_AE_MODE_ON);
m[ANDROID_CONTROL_AE_TARGET_FPS_RANGE]
.add<int32_t>(fpsRange.first).add<int32_t>(fpsRange.second);
- m[ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER] = ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE;
- m[ANDROID_CONTROL_AF_MODE] = (tpl == RequestTemplate::MANUAL) ?
- ANDROID_CONTROL_AF_MODE_OFF : ANDROID_CONTROL_AF_MODE_AUTO;
- m[ANDROID_CONTROL_AF_TRIGGER] = ANDROID_CONTROL_AF_TRIGGER_IDLE;
- m[ANDROID_CONTROL_AWB_LOCK] = ANDROID_CONTROL_AWB_LOCK_OFF;
- m[ANDROID_CONTROL_AWB_MODE] = (tpl == RequestTemplate::MANUAL) ?
- ANDROID_CONTROL_AWB_MODE_OFF : ANDROID_CONTROL_AWB_MODE_AUTO;
- m[ANDROID_CONTROL_CAPTURE_INTENT] = MapRequestTemplateToIntent(tpl);
- m[ANDROID_CONTROL_EFFECT_MODE] = ANDROID_CONTROL_EFFECT_MODE_OFF;
- m[ANDROID_CONTROL_MODE] = (tpl == RequestTemplate::MANUAL) ?
- ANDROID_CONTROL_MODE_OFF : ANDROID_CONTROL_MODE_AUTO;
- m[ANDROID_CONTROL_SCENE_MODE] = ANDROID_CONTROL_SCENE_MODE_DISABLED;
- m[ANDROID_CONTROL_VIDEO_STABILIZATION_MODE] = ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF;
+ m[ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER] =
+ uint8_t(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_IDLE);
+ m[ANDROID_CONTROL_AF_MODE] = uint8_t((tpl == RequestTemplate::MANUAL) ?
+ ANDROID_CONTROL_AF_MODE_OFF : ANDROID_CONTROL_AF_MODE_AUTO);
+ m[ANDROID_CONTROL_AF_TRIGGER] = uint8_t(ANDROID_CONTROL_AF_TRIGGER_IDLE);
+ m[ANDROID_CONTROL_AWB_LOCK] = uint8_t(ANDROID_CONTROL_AWB_LOCK_OFF);
+ m[ANDROID_CONTROL_AWB_MODE] = uint8_t((tpl == RequestTemplate::MANUAL) ?
+ ANDROID_CONTROL_AWB_MODE_OFF : ANDROID_CONTROL_AWB_MODE_AUTO);
+ m[ANDROID_CONTROL_CAPTURE_INTENT] = uint8_t(MapRequestTemplateToIntent(tpl));
+ m[ANDROID_CONTROL_EFFECT_MODE] = uint8_t(ANDROID_CONTROL_EFFECT_MODE_OFF);
+ m[ANDROID_CONTROL_MODE] = uint8_t((tpl == RequestTemplate::MANUAL) ?
+ ANDROID_CONTROL_MODE_OFF : ANDROID_CONTROL_MODE_AUTO);
+ m[ANDROID_CONTROL_SCENE_MODE] = uint8_t(ANDROID_CONTROL_SCENE_MODE_DISABLED);
+ m[ANDROID_CONTROL_VIDEO_STABILIZATION_MODE] =
+ uint8_t(ANDROID_CONTROL_VIDEO_STABILIZATION_MODE_OFF);
m[ANDROID_CONTROL_ZOOM_RATIO] = float(mHwCamera->getZoomRatioRange().first);
- m[ANDROID_EDGE_MODE] = ANDROID_EDGE_MODE_OFF;
+ m[ANDROID_EDGE_MODE] = uint8_t(ANDROID_EDGE_MODE_OFF);
- m[ANDROID_FLASH_MODE] = ANDROID_FLASH_MODE_OFF;
+ m[ANDROID_FLASH_MODE] = uint8_t(ANDROID_FLASH_MODE_OFF);
- m[ANDROID_HOT_PIXEL_MODE] = ANDROID_HOT_PIXEL_MODE_OFF;
+ m[ANDROID_HOT_PIXEL_MODE] = uint8_t(ANDROID_HOT_PIXEL_MODE_OFF);
m[ANDROID_JPEG_ORIENTATION] = int32_t(0);
m[ANDROID_JPEG_QUALITY] = uint8_t(85);
@@ -478,16 +470,14 @@ CameraMetadataMap CameraDevice::constructDefaultRequestSettings(const RequestTem
m[ANDROID_LENS_FOCAL_LENGTH] = float(mHwCamera->getDefaultFocalLength());
m[ANDROID_LENS_FOCUS_DISTANCE] = float(mHwCamera->getMinimumFocusDistance());
m[ANDROID_LENS_OPTICAL_STABILIZATION_MODE] =
- ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF;
+ uint8_t(ANDROID_LENS_OPTICAL_STABILIZATION_MODE_OFF);
- m[ANDROID_NOISE_REDUCTION_MODE] = ANDROID_NOISE_REDUCTION_MODE_OFF;
+ m[ANDROID_NOISE_REDUCTION_MODE] = uint8_t(ANDROID_NOISE_REDUCTION_MODE_OFF);
- m[ANDROID_SENSOR_TEST_PATTERN_MODE] = ANDROID_SENSOR_TEST_PATTERN_MODE_OFF;
+ m[ANDROID_SENSOR_TEST_PATTERN_MODE] = int32_t(ANDROID_SENSOR_TEST_PATTERN_MODE_OFF);
- m[ANDROID_REQUEST_FRAME_COUNT] = int32_t(0);
m[ANDROID_REQUEST_ID] = int32_t(0);
- m[ANDROID_REQUEST_METADATA_MODE] = ANDROID_REQUEST_METADATA_MODE_FULL;
- m[ANDROID_REQUEST_TYPE] = ANDROID_REQUEST_TYPE_CAPTURE;
+ m[ANDROID_REQUEST_METADATA_MODE] = uint8_t(ANDROID_REQUEST_METADATA_MODE_FULL);
m[ANDROID_SCALER_CROP_REGION]
.add<int32_t>(0).add<int32_t>(0)
@@ -498,42 +488,22 @@ CameraMetadataMap CameraDevice::constructDefaultRequestSettings(const RequestTem
m[ANDROID_SENSOR_FRAME_DURATION] = int64_t(mHwCamera->getDefaultSensorFrameDuration());
m[ANDROID_SENSOR_SENSITIVITY] = int32_t(mHwCamera->getDefaultSensorSensitivity());
- m[ANDROID_STATISTICS_FACE_DETECT_MODE] = ANDROID_STATISTICS_FACE_DETECT_MODE_OFF;
- m[ANDROID_STATISTICS_SHARPNESS_MAP_MODE] = ANDROID_STATISTICS_SHARPNESS_MAP_MODE_OFF;
- m[ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE] = ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE_OFF;
- m[ANDROID_STATISTICS_LENS_SHADING_MAP_MODE] = ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF;
+ m[ANDROID_STATISTICS_FACE_DETECT_MODE] =
+ uint8_t(ANDROID_STATISTICS_FACE_DETECT_MODE_OFF);
+ m[ANDROID_STATISTICS_SHARPNESS_MAP_MODE] =
+ uint8_t(ANDROID_STATISTICS_SHARPNESS_MAP_MODE_OFF);
+ m[ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE] =
+ uint8_t(ANDROID_STATISTICS_HOT_PIXEL_MAP_MODE_OFF);
+ m[ANDROID_STATISTICS_LENS_SHADING_MAP_MODE] =
+ uint8_t(ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_OFF);
- m[ANDROID_BLACK_LEVEL_LOCK] = ANDROID_BLACK_LEVEL_LOCK_OFF;
- m[ANDROID_DISTORTION_CORRECTION_MODE] = ANDROID_DISTORTION_CORRECTION_MODE_OFF;
+ m[ANDROID_BLACK_LEVEL_LOCK] = uint8_t(ANDROID_BLACK_LEVEL_LOCK_OFF);
+ m[ANDROID_DISTORTION_CORRECTION_MODE] =
+ uint8_t(ANDROID_DISTORTION_CORRECTION_MODE_OFF);
return m;
}
-std::string CameraDevice::getPhysicalId(const int index) {
- char buf[sizeof(kCameraIdPrefix) + 8];
- snprintf(buf, sizeof(buf), "%s%d", kCameraIdPrefix, index);
- return buf;
-}
-
-std::optional<int> CameraDevice::parsePhysicalId(const std::string_view str) {
- if (str.size() < sizeof(kCameraIdPrefix)) {
- return FAILURE(std::nullopt);
- }
-
- if (memcmp(str.data(), kCameraIdPrefix, sizeof(kCameraIdPrefix) - 1) != 0) {
- return FAILURE(std::nullopt);
- }
-
- int index;
- const auto r = std::from_chars(&str[sizeof(kCameraIdPrefix) - 1],
- &*str.end(), index, 10);
- if (r.ec == std::errc()) {
- return index;
- } else {
- return FAILURE(std::nullopt);
- }
-}
-
} // namespace implementation
} // namespace provider
} // namespace camera
diff --git a/camera/CameraDevice.h b/camera/CameraDevice.h
index 6e56d42c..f096da37 100644
--- a/camera/CameraDevice.h
+++ b/camera/CameraDevice.h
@@ -65,9 +65,6 @@ struct CameraDevice : public BnCameraDevice {
CameraMetadataMap constructDefaultRequestSettings(RequestTemplate tpl) const;
- static std::string getPhysicalId(int index);
- static std::optional<int> parsePhysicalId(std::string_view str);
-
private:
friend struct CameraProvider;
diff --git a/camera/CameraDeviceSession.cpp b/camera/CameraDeviceSession.cpp
index 70c2aacb..41a22e36 100644
--- a/camera/CameraDeviceSession.cpp
+++ b/camera/CameraDeviceSession.cpp
@@ -105,7 +105,8 @@ void notifyError(ICameraDeviceCallback* cb,
void notifyShutter(ICameraDeviceCallback* cb,
const int32_t frameNumber,
- const int64_t timestamp) {
+ const int64_t shutterTimestamp,
+ const int64_t readoutTimestamp) {
using aidl::android::hardware::camera::device::NotifyMsg;
using aidl::android::hardware::camera::device::ShutterMsg;
using NotifyMsgTag = NotifyMsg::Tag;
@@ -115,7 +116,8 @@ void notifyShutter(ICameraDeviceCallback* cb,
{
ShutterMsg shutterMsg;
shutterMsg.frameNumber = frameNumber;
- shutterMsg.timestamp = timestamp;
+ shutterMsg.timestamp = shutterTimestamp;
+ shutterMsg.readoutTimestamp = readoutTimestamp;
msg.set<NotifyMsgTag::shutter>(shutterMsg);
}
@@ -529,11 +531,9 @@ struct timespec CameraDeviceSession::captureOneFrame(struct timespec nextFrameT,
}
const int32_t frameNumber = req.frameNumber;
- const int64_t shutterTimestampNs = timespec2nanos(nextFrameT);
-
- notifyShutter(&*mCb, frameNumber, shutterTimestampNs);
- auto [frameDurationNs, metadata, outputBuffers, delayedOutputBuffers] =
+ auto [frameDurationNs, exposureDurationNs, metadata,
+ outputBuffers, delayedOutputBuffers] =
mHwCamera.processCaptureRequest(std::move(req.metadataUpdate),
{req.buffers.begin(), req.buffers.end()});
@@ -547,6 +547,8 @@ struct timespec CameraDeviceSession::captureOneFrame(struct timespec nextFrameT,
}
}
+ const int64_t shutterTimestampNs = timespec2nanos(nextFrameT);
+ notifyShutter(&*mCb, frameNumber, shutterTimestampNs, shutterTimestampNs + exposureDurationNs);
metadataSetShutterTimestamp(&metadata, shutterTimestampNs);
consumeCaptureResult(makeCaptureResult(frameNumber,
std::move(metadata), std::move(outputBuffers)));
diff --git a/camera/CameraProvider.cpp b/camera/CameraProvider.cpp
index 004d7af4..02cf5c8b 100644
--- a/camera/CameraProvider.cpp
+++ b/camera/CameraProvider.cpp
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include <charconv>
+
#include <inttypes.h>
#include <log/log.h>
@@ -28,6 +30,34 @@ namespace hardware {
namespace camera {
namespace provider {
namespace implementation {
+namespace {
+constexpr char kCameraIdPrefix[] = "device@1.0/internal/";
+
+std::string getLogicalCameraId(const int index) {
+ char buf[sizeof(kCameraIdPrefix) + 8];
+ snprintf(buf, sizeof(buf), "%s%d", kCameraIdPrefix, index);
+ return buf;
+}
+
+std::optional<int> parseLogicalCameraId(const std::string_view str) {
+ if (str.size() < sizeof(kCameraIdPrefix)) {
+ return FAILURE(std::nullopt);
+ }
+
+ if (memcmp(str.data(), kCameraIdPrefix, sizeof(kCameraIdPrefix) - 1) != 0) {
+ return FAILURE(std::nullopt);
+ }
+
+ int index;
+ const auto r = std::from_chars(&str[sizeof(kCameraIdPrefix) - 1],
+ &*str.end(), index, 10);
+ if (r.ec == std::errc()) {
+ return index;
+ } else {
+ return FAILURE(std::nullopt);
+ }
+}
+} // namespace
using aidl::android::hardware::camera::common::Status;
@@ -53,7 +83,7 @@ ScopedAStatus CameraProvider::getCameraIdList(std::vector<std::string>* camera_i
camera_ids->reserve(mAvailableCameras.size());
for (int i = 0; i < mAvailableCameras.size(); ++i) {
- camera_ids->push_back(CameraDevice::getPhysicalId(mDeviceIdBase + i));
+ camera_ids->push_back(getLogicalCameraId(mDeviceIdBase + i));
}
return ScopedAStatus::ok();
@@ -62,7 +92,7 @@ ScopedAStatus CameraProvider::getCameraIdList(std::vector<std::string>* camera_i
ScopedAStatus CameraProvider::getCameraDeviceInterface(
const std::string& name,
std::shared_ptr<ICameraDevice>* device) {
- const std::optional<int> maybeIndex = CameraDevice::parsePhysicalId(name);
+ const std::optional<int> maybeIndex = parseLogicalCameraId(name);
if (!maybeIndex) {
return toScopedAStatus(FAILURE(Status::ILLEGAL_ARGUMENT));
}
diff --git a/camera/FakeRotatingCamera.cpp b/camera/FakeRotatingCamera.cpp
index 20690135..ec00c5ed 100644
--- a/camera/FakeRotatingCamera.cpp
+++ b/camera/FakeRotatingCamera.cpp
@@ -61,6 +61,8 @@ constexpr int kMedFPS = 15;
constexpr int kMaxFPS = 30;
constexpr int64_t kOneSecondNs = 1000000000;
+constexpr float kDefaultFocalLength = 2.8;
+
constexpr int64_t kMinFrameDurationNs = kOneSecondNs / kMaxFPS;
constexpr int64_t kMaxFrameDurationNs = kOneSecondNs / kMinFPS;
constexpr int64_t kDefaultFrameDurationNs = kOneSecondNs / kMedFPS;
@@ -432,7 +434,7 @@ void FakeRotatingCamera::closeImpl(const bool everything) {
}
}
-std::tuple<int64_t, CameraMetadata,
+std::tuple<int64_t, int64_t, CameraMetadata,
std::vector<StreamBuffer>, std::vector<DelayedStreamBuffer>>
FakeRotatingCamera::processCaptureRequest(CameraMetadata metadataUpdate,
Span<CachedStreamBuffer*> csbs) {
@@ -494,7 +496,7 @@ FakeRotatingCamera::processCaptureRequest(CameraMetadata metadataUpdate,
}
}
- return make_tuple(mFrameDurationNs,
+ return make_tuple(mFrameDurationNs, kDefaultSensorExposureTimeNs,
std::move(resultMetadata), std::move(outputBuffers),
std::move(delayedOutputBuffers));
@@ -505,7 +507,7 @@ fail:
outputBuffers.push_back(csb->finish(false));
}
- return make_tuple(FAILURE(-1),
+ return make_tuple(FAILURE(-1), 0,
std::move(resultMetadata), std::move(outputBuffers),
std::move(delayedOutputBuffers));
}
@@ -806,20 +808,20 @@ CameraMetadata FakeRotatingCamera::applyMetadata(const CameraMetadata& metadata)
CameraMetadataMap m = parseCameraMetadataMap(metadata);
- m[ANDROID_CONTROL_AE_STATE] = ANDROID_CONTROL_AE_STATE_CONVERGED;
- m[ANDROID_CONTROL_AF_STATE] = af.first;
- m[ANDROID_CONTROL_AWB_STATE] = ANDROID_CONTROL_AWB_STATE_CONVERGED;
- m[ANDROID_FLASH_STATE] = ANDROID_FLASH_STATE_UNAVAILABLE;
+ m[ANDROID_CONTROL_AE_STATE] = uint8_t(ANDROID_CONTROL_AE_STATE_CONVERGED);
+ m[ANDROID_CONTROL_AF_STATE] = uint8_t(af.first);
+ m[ANDROID_CONTROL_AWB_STATE] = uint8_t(ANDROID_CONTROL_AWB_STATE_CONVERGED);
+ m[ANDROID_FLASH_STATE] = uint8_t(ANDROID_FLASH_STATE_UNAVAILABLE);
m[ANDROID_LENS_APERTURE] = getDefaultAperture();
m[ANDROID_LENS_FOCUS_DISTANCE] = af.second;
- m[ANDROID_LENS_STATE] = ANDROID_LENS_STATE_STATIONARY;
+ m[ANDROID_LENS_STATE] = uint8_t(ANDROID_LENS_STATE_STATIONARY);
m[ANDROID_REQUEST_PIPELINE_DEPTH] = uint8_t(4);
m[ANDROID_SENSOR_FRAME_DURATION] = mFrameDurationNs;
m[ANDROID_SENSOR_EXPOSURE_TIME] = kDefaultSensorExposureTimeNs;
m[ANDROID_SENSOR_SENSITIVITY] = getDefaultSensorSensitivity();
m[ANDROID_SENSOR_TIMESTAMP] = int64_t(0);
m[ANDROID_SENSOR_ROLLING_SHUTTER_SKEW] = kMinSensorExposureTimeNs;
- m[ANDROID_STATISTICS_SCENE_FLICKER] = ANDROID_STATISTICS_SCENE_FLICKER_NONE;
+ m[ANDROID_STATISTICS_SCENE_FLICKER] = uint8_t(ANDROID_STATISTICS_SCENE_FLICKER_NONE);
std::optional<CameraMetadata> maybeSerialized =
serializeCameraMetadataMap(m);
@@ -908,6 +910,14 @@ bool FakeRotatingCamera::isBackFacing() const {
return mIsBackFacing;
}
+Span<const float> FakeRotatingCamera::getAvailableFocalLength() const {
+ static const float availableFocalLengths[] = {
+ kDefaultFocalLength
+ };
+
+ return availableFocalLengths;
+}
+
std::tuple<int32_t, int32_t, int32_t> FakeRotatingCamera::getMaxNumOutputStreams() const {
return {
0, // raw
@@ -978,7 +988,7 @@ int64_t FakeRotatingCamera::getDefaultSensorFrameDuration() const {
}
float FakeRotatingCamera::getDefaultFocalLength() const {
- return 2.8;
+ return kDefaultFocalLength;
}
} // namespace hw
diff --git a/camera/FakeRotatingCamera.h b/camera/FakeRotatingCamera.h
index 1d95b169..01b97459 100644
--- a/camera/FakeRotatingCamera.h
+++ b/camera/FakeRotatingCamera.h
@@ -44,7 +44,7 @@ struct FakeRotatingCamera : public HwCamera {
const Stream* streams, const HalStream* halStreams) override;
void close() override;
- std::tuple<int64_t, CameraMetadata, std::vector<StreamBuffer>,
+ std::tuple<int64_t, int64_t, CameraMetadata, std::vector<StreamBuffer>,
std::vector<DelayedStreamBuffer>>
processCaptureRequest(CameraMetadata, Span<CachedStreamBuffer*>) override;
@@ -52,6 +52,7 @@ struct FakeRotatingCamera : public HwCamera {
Span<const std::pair<int32_t, int32_t>> getTargetFpsRanges() const override;
Span<const Rect<uint16_t>> getAvailableThumbnailSizes() const override;
bool isBackFacing() const override;
+ Span<const float> getAvailableFocalLength() const override;
std::tuple<int32_t, int32_t, int32_t> getMaxNumOutputStreams() const override;
Span<const PixelFormat> getSupportedPixelFormats() const override;
Span<const Rect<uint16_t>> getSupportedResolutions() const override;
diff --git a/camera/HwCamera.cpp b/camera/HwCamera.cpp
index 1b4ffb25..9c443957 100644
--- a/camera/HwCamera.cpp
+++ b/camera/HwCamera.cpp
@@ -147,6 +147,12 @@ int32_t HwCamera::getPipelineMaxDepth() const {
return 4;
}
+uint32_t HwCamera::getAvailableCapabilitiesBitmap() const {
+ return
+ (1U << ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) |
+ (1U << ANDROID_REQUEST_AVAILABLE_CAPABILITIES_READ_SENSOR_SETTINGS);
+}
+
float HwCamera::getMaxDigitalZoom() const {
return 1.0;
}
diff --git a/camera/HwCamera.h b/camera/HwCamera.h
index 83457054..4ad37a4e 100644
--- a/camera/HwCamera.h
+++ b/camera/HwCamera.h
@@ -80,7 +80,7 @@ struct HwCamera {
const Stream* streams, const HalStream* halStreams) = 0;
virtual void close() = 0;
- virtual std::tuple<int64_t, CameraMetadata, std::vector<StreamBuffer>,
+ virtual std::tuple<int64_t, int64_t, CameraMetadata, std::vector<StreamBuffer>,
std::vector<DelayedStreamBuffer>>
processCaptureRequest(CameraMetadata, Span<CachedStreamBuffer*>) = 0;
@@ -107,6 +107,7 @@ struct HwCamera {
virtual float getMinimumFocusDistance() const;
virtual std::tuple<int32_t, int32_t, int32_t> getMaxNumOutputStreams() const = 0;
virtual int32_t getPipelineMaxDepth() const;
+ virtual uint32_t getAvailableCapabilitiesBitmap() const;
virtual Span<const PixelFormat> getSupportedPixelFormats() const = 0;
virtual Span<const Rect<uint16_t>> getSupportedResolutions() const = 0;
virtual float getMaxDigitalZoom() const;
diff --git a/camera/QemuCamera.cpp b/camera/QemuCamera.cpp
index 23344fa6..c088418c 100644
--- a/camera/QemuCamera.cpp
+++ b/camera/QemuCamera.cpp
@@ -174,7 +174,7 @@ void QemuCamera::close() {
}
}
-std::tuple<int64_t, CameraMetadata,
+std::tuple<int64_t, int64_t, CameraMetadata,
std::vector<StreamBuffer>, std::vector<DelayedStreamBuffer>>
QemuCamera::processCaptureRequest(CameraMetadata metadataUpdate,
Span<CachedStreamBuffer*> csbs) {
@@ -211,6 +211,7 @@ QemuCamera::processCaptureRequest(CameraMetadata metadataUpdate,
}
return make_tuple((mQemuChannel.ok() ? mFrameDurationNs : FAILURE(-1)),
+ mSensorExposureDurationNs,
std::move(resultMetadata), std::move(outputBuffers),
std::move(delayedOutputBuffers));
}
@@ -429,20 +430,20 @@ CameraMetadata QemuCamera::applyMetadata(const CameraMetadata& metadata) {
CameraMetadataMap m = parseCameraMetadataMap(metadata);
- m[ANDROID_CONTROL_AE_STATE] = ANDROID_CONTROL_AE_STATE_CONVERGED;
- m[ANDROID_CONTROL_AF_STATE] = af.first;
- m[ANDROID_CONTROL_AWB_STATE] = ANDROID_CONTROL_AWB_STATE_CONVERGED;
- m[ANDROID_FLASH_STATE] = ANDROID_FLASH_STATE_UNAVAILABLE;
+ m[ANDROID_CONTROL_AE_STATE] = uint8_t(ANDROID_CONTROL_AE_STATE_CONVERGED);
+ m[ANDROID_CONTROL_AF_STATE] = uint8_t(af.first);
+ m[ANDROID_CONTROL_AWB_STATE] = uint8_t(ANDROID_CONTROL_AWB_STATE_CONVERGED);
+ m[ANDROID_FLASH_STATE] = uint8_t(ANDROID_FLASH_STATE_UNAVAILABLE);
m[ANDROID_LENS_APERTURE] = mAperture;
m[ANDROID_LENS_FOCUS_DISTANCE] = af.second;
- m[ANDROID_LENS_STATE] = ANDROID_LENS_STATE_STATIONARY;
+ m[ANDROID_LENS_STATE] = uint8_t(ANDROID_LENS_STATE_STATIONARY);
m[ANDROID_REQUEST_PIPELINE_DEPTH] = uint8_t(4);
m[ANDROID_SENSOR_FRAME_DURATION] = mFrameDurationNs;
m[ANDROID_SENSOR_EXPOSURE_TIME] = mSensorExposureDurationNs;
m[ANDROID_SENSOR_SENSITIVITY] = mSensorSensitivity;
m[ANDROID_SENSOR_TIMESTAMP] = int64_t(0);
m[ANDROID_SENSOR_ROLLING_SHUTTER_SKEW] = kMinSensorExposureTimeNs;
- m[ANDROID_STATISTICS_SCENE_FLICKER] = ANDROID_STATISTICS_SCENE_FLICKER_NONE;
+ m[ANDROID_STATISTICS_SCENE_FLICKER] = uint8_t(ANDROID_STATISTICS_SCENE_FLICKER_NONE);
std::optional<CameraMetadata> maybeSerialized =
serializeCameraMetadataMap(m);
diff --git a/camera/QemuCamera.h b/camera/QemuCamera.h
index b7f5a60a..bf010bcc 100644
--- a/camera/QemuCamera.h
+++ b/camera/QemuCamera.h
@@ -49,7 +49,7 @@ struct QemuCamera : public HwCamera {
const Stream* streams, const HalStream* halStreams) override;
void close() override;
- std::tuple<int64_t, CameraMetadata, std::vector<StreamBuffer>,
+ std::tuple<int64_t, int64_t, CameraMetadata, std::vector<StreamBuffer>,
std::vector<DelayedStreamBuffer>>
processCaptureRequest(CameraMetadata, Span<CachedStreamBuffer*>) override;
diff --git a/camera/media/codecs_google_video_default.xml b/camera/media/codecs_google_video_default.xml
index 7bb71216..f18991bf 100644
--- a/camera/media/codecs_google_video_default.xml
+++ b/camera/media/codecs_google_video_default.xml
@@ -47,7 +47,7 @@
<Limit name="measured-frame-rate-720x480" range="262-264" />
<Limit name="measured-frame-rate-1280x720" range="227-251" />
<Limit name="measured-frame-rate-1920x1080" range="235-247" />
- <Limit name="measured-frame-rate-3840x2160" range="235-247" />
+ <Limit name="measured-frame-rate-3840x2160" range="90-120" />
<Feature name="adaptive-playback" />
</MediaCodec>
<MediaCodec name="c2.goldfish.h264.decoder" type="video/avc">
@@ -62,7 +62,7 @@
<Limit name="measured-frame-rate-720x480" range="262-264" />
<Limit name="measured-frame-rate-1280x720" range="227-251" />
<Limit name="measured-frame-rate-1920x1080" range="235-247" />
- <Limit name="measured-frame-rate-3840x2160" range="235-247" />
+ <Limit name="measured-frame-rate-3840x2160" range="90-120" />
<Feature name="adaptive-playback" />
</MediaCodec>
<MediaCodec name="c2.goldfish.hevc.decoder" type="video/hevc">
@@ -73,11 +73,12 @@
<Limit name="bitrate" range="1-120000000" />
<Limit name="frame-rate" range="1-480" />
<Limit name="performance-point-3840x2160" value="30" />
- <Limit name="measured-frame-rate-320x240" range="257-266" />
+ <Limit name="measured-frame-rate-320x240" range="257-400" />
+ <Limit name="measured-frame-rate-352x288" range="252-400" />
<Limit name="measured-frame-rate-720x480" range="262-264" />
<Limit name="measured-frame-rate-1280x720" range="227-251" />
<Limit name="measured-frame-rate-1920x1080" range="235-247" />
- <Limit name="measured-frame-rate-3840x2160" range="235-247" />
+ <Limit name="measured-frame-rate-3840x2160" range="90-120" />
<Feature name="adaptive-playback" />
</MediaCodec>
<MediaCodec name="OMX.google.h264.decoder" type="video/avc">
@@ -118,7 +119,7 @@
<Limit name="measured-frame-rate-640x360" range="237-258" />
<Limit name="measured-frame-rate-1280x720" range="237-258" />
<Limit name="measured-frame-rate-1920x1080" range="293-302" />
- <Limit name="measured-frame-rate-3840x2160" range="150-150" />
+ <Limit name="measured-frame-rate-3840x2160" range="90-120" />
<Feature name="adaptive-playback" />
</MediaCodec>
<MediaCodec name="OMX.android.goldfish.vp8.decoder" type="video/x-vnd.on2.vp8">
@@ -144,7 +145,7 @@
<Limit name="bitrate" range="1-120000000" />
<Limit name="frame-rate" range="1-480" />
<Limit name="performance-point-1920x1080" value="30" />
- <Limit name="measured-frame-rate-320x180" range="743-817" />
+ <Limit name="measured-frame-rate-320x180" range="300-400" />
<Limit name="measured-frame-rate-640x360" range="237-258" />
<Limit name="measured-frame-rate-1280x720" range="60-160" />
<Limit name="measured-frame-rate-1920x1080" range="30-160" />
@@ -158,7 +159,7 @@
<Limit name="bitrate" range="1-120000000" />
<Limit name="frame-rate" range="1-480" />
<Limit name="performance-point-3840x2160" value="30" />
- <Limit name="measured-frame-rate-320x180" range="950-970" />
+ <Limit name="measured-frame-rate-320x180" range="300-400" />
<Limit name="measured-frame-rate-640x360" range="237-258" />
<Limit name="measured-frame-rate-1280x720" range="237-258" />
<Limit name="measured-frame-rate-1920x1080" range="100-120" />
diff --git a/camera/media/codecs_performance.xml b/camera/media/codecs_performance.xml
index 022fd9c5..c243a54b 100644
--- a/camera/media/codecs_performance.xml
+++ b/camera/media/codecs_performance.xml
@@ -84,6 +84,8 @@
<MediaCodec name="OMX.google.mpeg4.decoder" type="video/mp4v-es" update="true">
<!-- 4 runs, min 1439 max 1625 gmean 1523 -->
<Limit name="measured-frame-rate-176x144" range="1439-1625" />
+ <Limit name="measured-frame-rate-480x360" range="200-400" />
+ <Limit name="measured-frame-rate-1280x720" range="100-200" />
</MediaCodec>
<MediaCodec name="OMX.google.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
<!-- 3 runs, min 1129 max 1261 gmean 1190 -->
diff --git a/camera/media/codecs_performance_c2.xml b/camera/media/codecs_performance_c2.xml
index 9da7ed7c..03778737 100644
--- a/camera/media/codecs_performance_c2.xml
+++ b/camera/media/codecs_performance_c2.xml
@@ -33,7 +33,7 @@
</MediaCodec>
<MediaCodec name="c2.android.vp8.decoder" type="video/x-vnd.on2.vp8" update="true">
<!-- measured 90%:799-924 med:815 N=12 -->
- <Limit name="measured-frame-rate-320x180" range="814-859" /> <!-- v90%=1.1 -->
+ <Limit name="measured-frame-rate-320x180" range="300-400" /> <!-- v90%=1.1 -->
<!-- measured 90%:338-379 med:345 N=12 -->
<Limit name="measured-frame-rate-640x360" range="344-358" /> <!-- v90%=1.1 -->
<Limit name="measured-frame-rate-1280x720" range="88-92" /> <!-- N=50 v90%=1.1 -->
@@ -50,6 +50,17 @@
<!-- measured 90%:56-58 med:57 N=12 -->
<Limit name="measured-frame-rate-1920x1080" range="57-57" /> <!-- v90%=1.0 -->
</MediaCodec>
+ <MediaCodec name="c2.android.av1.decoder" type="video/av01" update="true">
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-320x180" range="156-362" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-640x360" range="100-200" />
+ <Limit name="measured-frame-rate-720x480" range="100-200" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-1280x720" range="40-110" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-1920x1080" range="17-54" />
+ </MediaCodec>
<MediaCodec name="c2.android.h263.decoder" type="video/3gpp" update="true">
<!-- measured 90%:1219-1704 med:1479 N=12 -->
<Limit name="measured-frame-rate-176x144" range="470-520" /> <!-- v90%=1.2 -->
@@ -59,6 +70,8 @@
<MediaCodec name="c2.android.mpeg4.decoder" type="video/mp4v-es" update="true">
<!-- measured 90%:1298-1653 med:1316 SLOW N=12 -->
<Limit name="measured-frame-rate-176x144" range="540-590" /> <!-- v90%=1.1 -->
+ <Limit name="measured-frame-rate-480x360" range="200-400" /> <!-- v90%=1.1 -->
+ <Limit name="measured-frame-rate-1280x720" range="100-200" /> <!-- v90%=1.1 -->
</MediaCodec>
</Decoders>
@@ -80,15 +93,23 @@
<Limit name="measured-frame-rate-176x144" range="1400-1560" /> <!-- SHOULDN'T HAVE TWEAKED N=220 v90%=4.0 -->
</MediaCodec>
<MediaCodec name="c2.android.vp8.encoder" type="video/x-vnd.on2.vp8" update="true">
- <Limit name="measured-frame-rate-320x180" range="178-245" /> <!-- Manual N=20 -->
- <Limit name="measured-frame-rate-640x360" range="100-126" /> <!-- Manual N=20 -->
+ <Limit name="measured-frame-rate-320x180" range="200-300" /> <!-- Manual N=20 -->
+ <Limit name="measured-frame-rate-640x360" range="200-300" /> <!-- Manual N=20 -->
<Limit name="measured-frame-rate-1280x720" range="35-37" /> <!-- Manual N=20 -->
<Limit name="measured-frame-rate-1920x1080" range="24-31" /> <!-- Manual N=20 -->
</MediaCodec>
<MediaCodec name="c2.android.vp9.encoder" type="video/x-vnd.on2.vp9" update="true">
- <Limit name="measured-frame-rate-320x180" range="109-109" /> <!-- v93%=1.3 -->
+ <Limit name="measured-frame-rate-320x180" range="300-400" /> <!-- v93%=1.3 -->
<Limit name="measured-frame-rate-640x360" range="61-61" /> <!-- v95%=1.1 -->
<Limit name="measured-frame-rate-1280x720" range="20-20" /> <!-- v95%=1.3 -->
</MediaCodec>
+ <MediaCodec name="c2.android.av1.encoder" type="video/av01" update="true">
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-320x240" range="300-400" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-720x480" range="80-120" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-1280x720" range="40-50" />
+ </MediaCodec>
</Encoders>
</MediaCodecs>
diff --git a/camera/media/codecs_performance_c2_arm64.xml b/camera/media/codecs_performance_c2_arm64.xml
index 2d207cf5..e6a5ce75 100644
--- a/camera/media/codecs_performance_c2_arm64.xml
+++ b/camera/media/codecs_performance_c2_arm64.xml
@@ -49,6 +49,16 @@
<!-- measured 90%:56-58 med:57 N=12 -->
<Limit name="measured-frame-rate-1920x1080" range="120-160" /> <!-- v90%=1.0 -->
</MediaCodec>
+ <MediaCodec name="c2.android.av1.decoder" type="video/av01" update="true">
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-320x180" range="156-362" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-640x360" range="63-162" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-1280x720" range="40-110" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-1920x1080" range="17-54" />
+ </MediaCodec>
<MediaCodec name="c2.android.h263.decoder" type="video/3gpp" update="true">
<!-- measured 90%:1219-1704 med:1479 N=12 -->
<Limit name="measured-frame-rate-176x144" range="1441-1441" /> <!-- v90%=1.2 -->
@@ -89,5 +99,13 @@
<Limit name="measured-frame-rate-640x360" range="61-61" /> <!-- v95%=1.1 -->
<Limit name="measured-frame-rate-1280x720" range="20-20" /> <!-- v95%=1.3 -->
</MediaCodec>
+ <MediaCodec name="c2.android.av1.encoder" type="video/av01" update="true">
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-320x240" range="84-130" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-720x480" range="20-43" />
+ <!-- MANUALLY ADJUSTED -->
+ <Limit name="measured-frame-rate-1280x720" range="8-21" />
+ </MediaCodec>
</Encoders>
</MediaCodecs>
diff --git a/camera/metadata_utils.cpp b/camera/metadata_utils.cpp
index 318c35bf..5bc1d774 100644
--- a/camera/metadata_utils.cpp
+++ b/camera/metadata_utils.cpp
@@ -62,17 +62,36 @@ std::optional<CameraMetadata> serializeCameraMetadataMap(const CameraMetadataMap
CameraMetadataPtr cm(allocate_camera_metadata(m.size() * 5 / 4, dataSize * 3 / 2));
+ unsigned numIncorrectTagDataSize = 0;
for (const auto& [tag, value] : m) {
if (value.count > 0) {
- if (add_camera_metadata_entry(cm.get(), tag, value.data.data(), value.count)) {
- return FAILURE_V(std::nullopt, "failed to add tag=%s.%s(%u), count=%u",
- get_camera_metadata_section_name(tag),
- get_camera_metadata_tag_name(tag), tag,
- value.count);
+ const int tagType = get_camera_metadata_tag_type(tag);
+ const size_t elementSize = camera_metadata_type_size[tagType];
+ const size_t expectedDataSize = value.count * elementSize;
+
+ if (value.data.size() == expectedDataSize) {
+ if (add_camera_metadata_entry(cm.get(), tag, value.data.data(), value.count)) {
+ return FAILURE_V(std::nullopt, "failed to add tag=%s.%s(%u), count=%u",
+ get_camera_metadata_section_name(tag),
+ get_camera_metadata_tag_name(tag), tag,
+ value.count);
+ }
+ } else {
+ ++numIncorrectTagDataSize;
+ ALOGE("%s:%d: Incorrect tag (%s.%s(%u), %s[%u]) data size, "
+ "expected=%zu, actual=%zu", __func__, __LINE__,
+ get_camera_metadata_section_name(tag),
+ get_camera_metadata_tag_name(tag),
+ tag, camera_metadata_type_names[tagType],
+ value.count, expectedDataSize, value.data.size());
}
}
}
+ LOG_ALWAYS_FATAL_IF(numIncorrectTagDataSize > 0, "%s:%d: there are %u tags "
+ "with incorrect data size, see the messages above.",
+ __func__, __LINE__, numIncorrectTagDataSize);
+
if (sort_camera_metadata(cm.get())) {
return FAILURE(std::nullopt);
}
@@ -127,54 +146,60 @@ void prettyPrintCameraMetadata(const CameraMetadata& m) {
for (size_t i = 0; i < n; ++i) {
camera_metadata_ro_entry_t e;
get_camera_metadata_ro_entry(raw, i, &e);
- char value[256];
+ std::vector<char> value;
if (e.count > 0) {
switch (e.type) {
case TYPE_BYTE: {
- char* s = value;
+ int s = 0;
for (unsigned j = 0; j < e.count; ++j) {
- s += snprintf(s, sizeof(value), "%s%u",
+ value.resize(s + 4);
+ s += snprintf(&value[s], value.size() - s, "%s%u",
((j > 0) ? "," : ""), e.data.u8[j]);
}
}
break;
case TYPE_INT32: {
- char* s = value;
+ int s = 0;
for (unsigned j = 0; j < e.count; ++j) {
- s += snprintf(s, sizeof(value), "%s%d",
+ value.resize(s + 12);
+ s += snprintf(&value[s], value.size() - s, "%s%d",
((j > 0) ? "," : ""), e.data.i32[j]);
}
}
break;
case TYPE_FLOAT: {
- char* s = value;
+ int s = 0;
for (unsigned j = 0; j < e.count; ++j) {
- s += snprintf(s, sizeof(value), "%s%g",
+ value.resize(s + 12);
+ s += snprintf(&value[s], value.size() - s, "%s%g",
((j > 0) ? "," : ""), e.data.f[j]);
}
}
break;
case TYPE_INT64: {
- char* s = value;
+ int s = 0;
for (unsigned j = 0; j < e.count; ++j) {
- s += snprintf(s, sizeof(value), "%s%" PRId64,
+ value.resize(s + 24);
+ s += snprintf(&value[s], value.size() - s, "%s%" PRId64,
((j > 0) ? "," : ""), e.data.i64[j]);
}
}
break;
case TYPE_DOUBLE: {
- char* s = value;
+ int s = 0;
for (unsigned j = 0; j < e.count; ++j) {
- s += snprintf(s, sizeof(value), "%s%g",
+ value.resize(s + 25);
+ s += snprintf(&value[s], value.size() - s, "%s%g",
((j > 0) ? "," : ""), e.data.d[j]);
}
}
break;
case TYPE_RATIONAL: {
- char* s = value;
+ int s = 0;
for (unsigned j = 0; j < e.count; ++j) {
- s += snprintf(s, sizeof(value), "%s%d/%d",
+ value.resize(s + 25);
+ s += snprintf(&value[s], value.size() - s, "%s%d/%d",
((j > 0) ? "," : ""),
e.data.r[j].numerator,
e.data.r[j].denominator);
@@ -182,17 +207,19 @@ void prettyPrintCameraMetadata(const CameraMetadata& m) {
}
break;
default:
- snprintf(value, sizeof(value), "%s", "bad type");
+ value.resize(12);
+ snprintf(&value[0], value.size(), "%s", "bad type");
break;
}
} else {
- snprintf(value, sizeof(value), "%s", "empty");
+ value.resize(8);
+ snprintf(&value[0], value.size(), "%s", "empty");
}
ALOGD("%s:%d i=%zu tag=%s.%s(%u),%s[%zu]: %s", __func__, __LINE__, i,
get_camera_metadata_section_name(e.tag),
get_camera_metadata_tag_name(e.tag),
- e.tag, camera_metadata_type_names[e.type], e.count, value);
+ e.tag, camera_metadata_type_names[e.type], e.count, value.data());
}
}
diff --git a/data/etc/advancedFeatures.ini.minigbm b/data/etc/advancedFeatures.ini.minigbm
new file mode 100644
index 00000000..7c4af33d
--- /dev/null
+++ b/data/etc/advancedFeatures.ini.minigbm
@@ -0,0 +1,30 @@
+BluetoothEmulation = on
+GrallocSync = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+GLDMA = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+VirtioInput = on
+DynamicPartition = on
+HardwareDecoder = on
+ModemSimulator= on
+YUVCache = on
+GLDirectMem = on
+MultiDisplay = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+HWCMultiConfigs = on
+VirtioSndCard = on
+Minigbm = on
diff --git a/data/etc/config.ini.pixeltablet b/data/etc/config.ini.pixeltablet
new file mode 100644
index 00000000..a4e7f922
--- /dev/null
+++ b/data/etc/config.ini.pixeltablet
@@ -0,0 +1,46 @@
+AvdId = Pixel_Tablet_API_34
+PlayStore.enabled = true
+abi.type = x86_64
+avd.ini.displayname = Pixel Tablet API 34
+avd.ini.encoding = UTF-8
+disk.dataPartition.size = 6442450944
+fastboot.chosenSnapshotFile =
+fastboot.forceChosenSnapshotBoot = no
+fastboot.forceColdBoot = no
+fastboot.forceFastBoot = yes
+hw.accelerometer = yes
+hw.arc = false
+hw.audioInput = yes
+hw.battery = yes
+hw.camera.back = virtualscene
+hw.camera.front = emulated
+hw.cpu.arch = x86_64
+hw.cpu.ncore = 4
+hw.dPad = no
+hw.device.hash2 = MD5:3eb16c85159ad6e1cbb3263194d1a735
+hw.device.manufacturer = Google
+hw.device.name = pixel_tablet
+hw.gps = no
+hw.gpu.enabled = yes
+hw.gpu.mode = auto
+hw.initialOrientation = landscape
+hw.keyboard = yes
+hw.lcd.density = 320
+hw.lcd.height = 1600
+hw.lcd.width = 2560
+hw.mainKeys = no
+hw.ramSize = 2048
+hw.sdCard = yes
+hw.sensors.orientation = yes
+hw.sensors.proximity = no
+hw.trackBall = no
+runtime.network.latency = none
+runtime.network.speed = full
+sdcard.size = 512M
+showDeviceFrame = no
+skin.dynamic = yes
+skin.name = 2560x1600
+skin.path.backup = pixel_tablet
+tag.display = Google Play
+tag.id = google_apis_playstore
+vm.heapSize = 192
diff --git a/data/etc/empty_data_disk b/data/etc/empty_data_disk
deleted file mode 100644
index ad425310..00000000
--- a/data/etc/empty_data_disk
+++ /dev/null
@@ -1 +0,0 @@
-This mean the content in data image will start as empty
diff --git a/data/etc/google/64bit/user/advancedFeatures.ini b/data/etc/google/64bit/user/advancedFeatures.ini
index 7d633d6f..027ece5f 100644
--- a/data/etc/google/64bit/user/advancedFeatures.ini
+++ b/data/etc/google/64bit/user/advancedFeatures.ini
@@ -4,6 +4,7 @@ GLDMA = on
LogcatPipe = on
GLAsyncSwap = on
GLESDynamicVersion = on
+HWCMultiConfigs = on
PlayStoreImage = on
EncryptUserData = on
IntelPerformanceMonitoringUnit = on
@@ -24,6 +25,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/64bit/user/advancedFeatures.ini.minigbm b/data/etc/google/64bit/user/advancedFeatures.ini.minigbm
new file mode 100644
index 00000000..0fe52ef1
--- /dev/null
+++ b/data/etc/google/64bit/user/advancedFeatures.ini.minigbm
@@ -0,0 +1,31 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+PlayStoreImage = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+VirtioInput = on
+HardwareDecoder = on
+DynamicPartition = on
+ModemSimulator= on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+SupportPixelFold = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+VirtioSndCard = on
+Minigbm = on
diff --git a/data/etc/google/64bit/user/advancedFeatures.ini.tablet b/data/etc/google/64bit/user/advancedFeatures.ini.tablet
new file mode 100644
index 00000000..2fe44f82
--- /dev/null
+++ b/data/etc/google/64bit/user/advancedFeatures.ini.tablet
@@ -0,0 +1,29 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+PlayStoreImage = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+RefCountPipe = on
+VirtioInput = on
+HardwareDecoder = on
+DynamicPartition = on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+VirtioSndCard = on
diff --git a/data/etc/google/64bit/user/arm64/advancedFeatures.ini b/data/etc/google/64bit/user/arm64/advancedFeatures.ini
index 953f4118..97e3b58f 100644
--- a/data/etc/google/64bit/user/arm64/advancedFeatures.ini
+++ b/data/etc/google/64bit/user/arm64/advancedFeatures.ini
@@ -4,6 +4,7 @@ GLDMA = on
LogcatPipe = on
GLAsyncSwap = on
GLESDynamicVersion = on
+HWCMultiConfigs = on
PlayStoreImage = on
EncryptUserData = on
VirtioWifi = on
@@ -23,6 +24,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/64bit/user/arm64/advancedFeatures.ini.tablet b/data/etc/google/64bit/user/arm64/advancedFeatures.ini.tablet
new file mode 100644
index 00000000..c32cfc07
--- /dev/null
+++ b/data/etc/google/64bit/user/arm64/advancedFeatures.ini.tablet
@@ -0,0 +1,28 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+PlayStoreImage = on
+EncryptUserData = on
+VirtioWifi = on
+HostComposition = on
+RefCountPipe = on
+VirtioInput = on
+HardwareDecoder = on
+DynamicPartition = on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+VirtioSndCard = on
diff --git a/data/etc/google/64bit/userdebug/advancedFeatures.ini b/data/etc/google/64bit/userdebug/advancedFeatures.ini
index 1fbdaa7a..d3ed06d8 100644
--- a/data/etc/google/64bit/userdebug/advancedFeatures.ini
+++ b/data/etc/google/64bit/userdebug/advancedFeatures.ini
@@ -23,6 +23,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/64bit/userdebug/advancedFeatures.ini.minigbm b/data/etc/google/64bit/userdebug/advancedFeatures.ini.minigbm
new file mode 100644
index 00000000..ca47a37f
--- /dev/null
+++ b/data/etc/google/64bit/userdebug/advancedFeatures.ini.minigbm
@@ -0,0 +1,31 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+VirtioInput = on
+HardwareDecoder = on
+DynamicPartition = on
+ModemSimulator= on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+SupportPixelFold = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+HWCMultiConfigs = on
+VirtioSndCard = on
+Minigbm = on
diff --git a/data/etc/google/64bit/userdebug/advancedFeatures.ini.tablet b/data/etc/google/64bit/userdebug/advancedFeatures.ini.tablet
new file mode 100644
index 00000000..0810dfeb
--- /dev/null
+++ b/data/etc/google/64bit/userdebug/advancedFeatures.ini.tablet
@@ -0,0 +1,29 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+RefCountPipe = on
+VirtioInput = on
+HardwareDecoder = on
+DynamicPartition = on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+HWCMultiConfigs = on
+VirtioSndCard = on
diff --git a/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini b/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini
index 61210438..44123cfa 100644
--- a/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini
+++ b/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini
@@ -22,6 +22,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini.tablet b/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini.tablet
new file mode 100644
index 00000000..86a27ea5
--- /dev/null
+++ b/data/etc/google/64bit/userdebug/arm64/advancedFeatures.ini.tablet
@@ -0,0 +1,28 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+EncryptUserData = on
+VirtioWifi = on
+HostComposition = on
+RefCountPipe = on
+VirtioInput = on
+HardwareDecoder = on
+DynamicPartition = on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+HWCMultiConfigs = on
+VirtioSndCard = on
diff --git a/data/etc/google/user/advancedFeatures.ini b/data/etc/google/user/advancedFeatures.ini
index 6b6310b2..a4b16469 100644
--- a/data/etc/google/user/advancedFeatures.ini
+++ b/data/etc/google/user/advancedFeatures.ini
@@ -24,6 +24,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/user/advancedFeatures.ini.minigbm b/data/etc/google/user/advancedFeatures.ini.minigbm
new file mode 100644
index 00000000..483a1532
--- /dev/null
+++ b/data/etc/google/user/advancedFeatures.ini.minigbm
@@ -0,0 +1,31 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+PlayStoreImage = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+VirtioInput = on
+DynamicPartition = on
+HardwareDecoder = on
+ModemSimulator= on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+SupportPixelFold = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+VirtioSndCard = on
+Minigbm = on
diff --git a/data/etc/google/user/arm64/advancedFeatures.ini b/data/etc/google/user/arm64/advancedFeatures.ini
index bf580716..845ee2a7 100644
--- a/data/etc/google/user/arm64/advancedFeatures.ini
+++ b/data/etc/google/user/arm64/advancedFeatures.ini
@@ -23,6 +23,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/userdebug/advancedFeatures.ini b/data/etc/google/userdebug/advancedFeatures.ini
index bff24445..7c0e94e7 100644
--- a/data/etc/google/userdebug/advancedFeatures.ini
+++ b/data/etc/google/userdebug/advancedFeatures.ini
@@ -23,6 +23,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/google/userdebug/advancedFeatures.ini.minigbm b/data/etc/google/userdebug/advancedFeatures.ini.minigbm
new file mode 100644
index 00000000..b01365ef
--- /dev/null
+++ b/data/etc/google/userdebug/advancedFeatures.ini.minigbm
@@ -0,0 +1,31 @@
+BluetoothEmulation = on
+GrallocSync = on
+GLDMA = on
+LogcatPipe = on
+GLAsyncSwap = on
+GLESDynamicVersion = on
+EncryptUserData = on
+IntelPerformanceMonitoringUnit = on
+VirtioWifi = on
+HostComposition = on
+VirtioInput = on
+DynamicPartition = on
+HardwareDecoder = on
+ModemSimulator= on
+MultiDisplay = on
+YUVCache = on
+GLDirectMem = on
+VulkanNullOptionalStrings = on
+VulkanIgnoredHandles = on
+Mac80211hwsimUserspaceManaged = on
+VirtconsoleLogcat = on
+VirtioVsockPipe = on
+AndroidbootProps2 = on
+DeviceSkinOverlay = on
+SupportPixelFold = on
+VulkanQueueSubmitWithCommands = on
+VulkanBatchedDescriptorSetUpdate = on
+DeviceStateOnBoot = on
+HWCMultiConfigs = on
+VirtioSndCard = on
+Minigbm = on
diff --git a/data/etc/google/userdebug/arm64/advancedFeatures.ini b/data/etc/google/userdebug/arm64/advancedFeatures.ini
index 8504de5e..443ef81a 100644
--- a/data/etc/google/userdebug/arm64/advancedFeatures.ini
+++ b/data/etc/google/userdebug/arm64/advancedFeatures.ini
@@ -22,6 +22,7 @@ VirtconsoleLogcat = on
VirtioVsockPipe = on
AndroidbootProps2 = on
DeviceSkinOverlay = on
+SupportPixelFold = on
VulkanQueueSubmitWithCommands = on
VulkanBatchedDescriptorSetUpdate = on
DeviceStateOnBoot = on
diff --git a/data/etc/handheld_core_hardware.xml b/data/etc/handheld_core_hardware.xml
index ef206276..5c2227fd 100644
--- a/data/etc/handheld_core_hardware.xml
+++ b/data/etc/handheld_core_hardware.xml
@@ -53,6 +53,7 @@
<feature name="android.hardware.sensor.gyroscope" />
<feature name="android.hardware.sensor.hinge_angle" />
<feature name="android.hardware.telephony" />
+ <feature name="android.hardware.telephony.calling" />
<feature name="android.hardware.telephony.data" />
<feature name="android.hardware.telephony.gsm" />
<feature name="android.hardware.telephony.ims" />
diff --git a/data/etc/permissions/privapp-permissions-multidisplay.xml b/data/etc/permissions/privapp-permissions-multidisplay.xml
new file mode 100644
index 00000000..7e79a604
--- /dev/null
+++ b/data/etc/permissions/privapp-permissions-multidisplay.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2023 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
+ -->
+<!--
+This XML file declares which signature|privileged permissions should be granted to privileged
+applications on GMS or Google-branded devices.
+It allows additional grants on top of privapp-permissions-platform.xml
+-->
+<permissions>
+ <privapp-permissions package="com.android.emulator.multidisplay">
+ <permission name="android.permission.HARDWARE_TEST"/>
+ <permission name="android.permission.INTERNAL_SYSTEM_WINDOW"/>
+ <permission name="android.permission.ACCESS_SURFACE_FLINGER"/>
+ </privapp-permissions>
+</permissions>
+
diff --git a/data/etc/tablet_core_hardware.xml b/data/etc/tablet_core_hardware.xml
new file mode 100644
index 00000000..54b7bb88
--- /dev/null
+++ b/data/etc/tablet_core_hardware.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 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.
+-->
+
+<!-- These are the hardware components that all handheld devices
+ must include. Devices with optional hardware must also include extra
+ hardware files, per the comments below.
+
+ Handheld devices include phones, mobile Internet devices (MIDs),
+ Personal Media Players (PMPs), small tablets (7" or less), and similar
+ devices.
+
+ This file is similar to device/generic/goldfish/data/etc/handheld_core_hardware.xml.
+ with out telephony or hinge sensors
+-->
+<permissions>
+ <feature name="android.hardware.audio.output" />
+ <feature name="android.hardware.bluetooth" />
+ <feature name="android.hardware.camera" />
+ <feature name="android.hardware.location" />
+ <feature name="android.hardware.location.gps" />
+ <feature name="android.hardware.location.network" />
+ <feature name="android.hardware.sensor.accelerometer" />
+ <feature name="android.hardware.sensor.ambient_temperature" />
+ <feature name="android.hardware.sensor.compass" />
+ <feature name="android.hardware.sensor.barometer" />
+ <feature name="android.hardware.sensor.light" />
+ <feature name="android.hardware.sensor.proximity" />
+ <feature name="android.hardware.sensor.relative_humidity" />
+ <feature name="android.hardware.sensor.gyroscope" />
+ <feature name="android.hardware.touchscreen" />
+ <feature name="android.hardware.microphone" />
+ <feature name="android.hardware.screen.portrait" />
+ <feature name="android.hardware.screen.landscape" />
+
+ <!-- basic system services -->
+ <feature name="android.software.app_widgets" />
+ <feature name="android.software.voice_recognizers" notLowRam="true" />
+ <feature name="android.software.backup" />
+ <feature name="android.software.home_screen" />
+ <feature name="android.software.input_methods" />
+ <feature name="android.software.midi" />
+ <feature name="android.software.print" />
+ <feature name="android.software.cant_save_state" />
+ <feature name="android.software.secure_lock_screen" />
+ <feature name="android.software.companion_device_setup" />
+ <feature name="android.software.credentials" />
+
+ <!-- Feature to specify if the device supports adding device admins. -->
+ <feature name="android.software.device_admin" />
+
+ <!-- Feature to specify if the device support managed users. -->
+ <feature name="android.software.managed_users" />
+
+ <feature name="android.software.picture_in_picture" />
+ <feature name="android.software.activities_on_secondary_displays" />
+
+ <feature name="android.software.cts" />
+
+ <feature name="android.hardware.security.model.compatible" />
+
+ <!-- Feature to specify if the device supports controls. -->
+ <feature name="android.software.controls" />
+
+ <!-- devices with GPS must include android.hardware.location.gps.xml -->
+ <!-- devices with an autofocus camera and/or flash must include either
+ android.hardware.camera.autofocus.xml or
+ android.hardware.camera.autofocus-flash.xml -->
+ <!-- devices with a front facing camera must include
+ android.hardware.camera.front.xml -->
+ <!-- devices with WiFi must also include android.hardware.wifi.xml -->
+ <!-- devices that support multitouch must include the most appropriate one
+ of these files:
+
+ If only partial (non-independent) pointers are supported:
+ android.hardware.touchscreen.multitouch.xml
+
+ If up to 4 independently tracked pointers are supported:
+ include android.hardware.touchscreen.multitouch.distinct.xml
+
+ If 5 or more independently tracked pointers are supported:
+ include android.hardware.touchscreen.multitouch.jazzhand.xml
+
+ ONLY ONE of the above should be included. -->
+ <!-- devices with an ambient light sensor must also include
+ android.hardware.sensor.light.xml -->
+ <!-- devices with a proximity sensor must also include
+ android.hardware.sensor.proximity.xml -->
+ <!-- GSM phones must also include android.hardware.telephony.gsm.xml -->
+ <!-- CDMA phones must also include android.hardware.telephony.cdma.xml -->
+ <!-- Devices that have low-latency audio stacks suitable for apps like
+ VoIP may include android.hardware.audio.low_latency.xml. ONLY apps
+ that meet the requirements specified in the CDD may include this. -->
+</permissions>
diff --git a/data/media/test/media.adb b/data/media/test/media.adb
deleted file mode 100644
index d860ef15..00000000
--- a/data/media/test/media.adb
+++ /dev/null
@@ -1,5 +0,0 @@
-push media/0/test/CtsMediaTestCases-1.4/swirl_136x144_mpeg4.mp4 /sdcard/test/CtsMediaTestCases-1.4/swirl_136x144_mpeg4.mp4
-push media/0/test/CtsMediaTestCases-1.4/swirl_132x130_mpeg4.mp4 /sdcard/test/CtsMediaTestCases-1.4/swirl_132x130_mpeg4.mp4
-push media/0/test/CtsMediaTestCases-1.4/swirl_130x132_mpeg4.mp4 /sdcard/test/CtsMediaTestCases-1.4/swirl_130x132_mpeg4.mp4
-push media/0/test/CtsMediaTestCases-1.4/swirl_144x136_mpeg4.mp4 /sdcard/test/CtsMediaTestCases-1.4/swirl_144x136_mpeg4.mp4
-push media/0/test/CtsMediaTestCases-1.4/swirl_128x128_mpeg4.mp4 /sdcard/test/CtsMediaTestCases-1.4/swirl_128x128_mpeg4.mp4
diff --git a/data/media/test/swirl_128x128_mpeg4.mp4 b/data/media/test/swirl_128x128_mpeg4.mp4
deleted file mode 100644
index 694ce95c..00000000
--- a/data/media/test/swirl_128x128_mpeg4.mp4
+++ /dev/null
Binary files differ
diff --git a/data/media/test/swirl_130x132_mpeg4.mp4 b/data/media/test/swirl_130x132_mpeg4.mp4
deleted file mode 100644
index ed6b5294..00000000
--- a/data/media/test/swirl_130x132_mpeg4.mp4
+++ /dev/null
Binary files differ
diff --git a/data/media/test/swirl_132x130_mpeg4.mp4 b/data/media/test/swirl_132x130_mpeg4.mp4
deleted file mode 100644
index ed975db9..00000000
--- a/data/media/test/swirl_132x130_mpeg4.mp4
+++ /dev/null
Binary files differ
diff --git a/data/media/test/swirl_136x144_mpeg4.mp4 b/data/media/test/swirl_136x144_mpeg4.mp4
deleted file mode 100644
index c74bd969..00000000
--- a/data/media/test/swirl_136x144_mpeg4.mp4
+++ /dev/null
Binary files differ
diff --git a/data/media/test/swirl_144x136_mpeg4.mp4 b/data/media/test/swirl_144x136_mpeg4.mp4
deleted file mode 100644
index 81c1db3c..00000000
--- a/data/media/test/swirl_144x136_mpeg4.mp4
+++ /dev/null
Binary files differ
diff --git a/emulator64_x86_64/BoardConfig.mk b/emulator64_x86_64/BoardConfig.mk
index fcb97ead..db9f2afa 100644
--- a/emulator64_x86_64/BoardConfig.mk
+++ b/emulator64_x86_64/BoardConfig.mk
@@ -19,8 +19,6 @@ TARGET_ARCH := x86_64
TARGET_ARCH_VARIANT := x86_64
TARGET_2ND_ARCH_VARIANT := x86_64
-BOARD_DO_NOT_STRIP_VENDOR_MODULES := true
-
TARGET_PRELINK_MODULE := false
include build/make/target/board/BoardConfigGsiCommon.mk
include build/make/target/board/BoardConfigEmuCommon.mk
diff --git a/init.ranchu.rc b/init.ranchu.rc
index e7b6c05c..6d6dfb56 100644
--- a/init.ranchu.rc
+++ b/init.ranchu.rc
@@ -27,9 +27,6 @@ on early-init
exec u:r:modprobe:s0 -- /system/bin/modprobe -a -d /system/lib/modules zram.ko
on init
- # set RLIMIT_MEMLOCK to 8MB for BPF network statistics
- setrlimit memlock 8388608 8388608
-
write /sys/block/zram0/comp_algorithm lz4
write /proc/sys/vm/page-cluster 0
@@ -59,7 +56,6 @@ on init
start qemu-props
on post-fs-data
- setprop vold.post_fs_data_done 1
mkdir /data/vendor/adb 0755 root root
mkdir /data/vendor/devicestate 0755 root root
mkdir /data/vendor/var 0755 root root
diff --git a/input/virtio_input_multi_touch_7.idc b/input/virtio_input_multi_touch_7.idc
index 7147fb73..388337f8 100644
--- a/input/virtio_input_multi_touch_7.idc
+++ b/input/virtio_input_multi_touch_7.idc
@@ -9,4 +9,4 @@ cursor.orientationAware = 1
# This displayID matches the unique ID of the virtual display created for Emulator.
# This will indicate to input flinger than it should link this input device
# with the virtual display.
-touch.displayId = virtual:com.android.emulator.multidisplay:1234567
+touch.displayId = local:4619827551948147201
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 0e61b2a2..841bc694 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -27,6 +27,39 @@
<!-- Whether Multiuser UI should be shown -->
<bool name="config_enableMultiUserUI">true</bool>
+ <!-- Map of System DeviceState supplied by DeviceStateManager to WM Jetpack posture. -->
+ <string-array name="config_device_state_postures" translatable="false">
+ <item>0:1</item> <!-- CLOSED -->
+ <item>1:2</item> <!-- HALF_OPENED -->
+ <item>2:3</item> <!-- OPENED -->
+ <item>3:1</item> <!-- FLIPPED -->
+ </string-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as open by the
+ display fold controller. -->
+ <integer-array name="config_openDeviceStates" translatable="false">
+ <item>2</item> <!-- OPEN -->
+ </integer-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as folded by the
+ display fold controller. This also controls the folded bit in CameraServiceProxy. -->
+ <integer-array name="config_foldedDeviceStates" translatable="false">
+ <item>0</item> <!-- CLOSED -->
+ </integer-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as half folded by
+ the display fold controller. This also controls the folded bit in CameraServiceProxy. -->
+ <integer-array name="config_halfFoldedDeviceStates" translatable="false">
+ <item>1</item> <!-- HALF_OPENED -->
+ </integer-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as a rear display
+ state. Default is empty. -->
+ <integer-array name="config_rearDisplayDeviceStates" translatable="false">
+ <item>3</item> <!-- REAR_DISPLAY_STATE -->
+ </integer-array>
+
+
<!-- Set to true to add links to Cell Broadcast app from Settings and MMS app. -->
<bool name="config_cellBroadcastAppLinks">true</bool>
@@ -46,20 +79,7 @@
<item>"wlan\\d"</item>
</string-array>
- <!-- Map of System DeviceState supplied by DeviceStateManager to WM Jetpack posture. -->
- <string-array name="config_device_state_postures" translatable="false">
- <item>1:1</item> <!-- CLOSED -->
- <item>2:2</item> <!-- HALF_OPENED -->
- <item>3:3</item> <!-- OPENED -->
- <item>4:4</item> <!-- FLIPPED -->
- <item>5:5</item> <!-- TENT -->
- </string-array>
- <!-- The device states (supplied by DeviceStateManager) that should be treated as folded by the
- display fold controller. -->
- <integer-array name="config_foldedDeviceStates" translatable="false">
- <item>1</item> <!-- CLOSED -->
- </integer-array>
<!-- This device is able to support the microphone and camera global toggles. -->
<bool name="config_supportsMicToggle">true</bool>
@@ -72,6 +92,13 @@
<item>network</item>
</string-array>
- <bool name="config_supportMicNearUltrasound">false</bool>
- <bool name="config_supportSpeakerNearUltrasound">false</bool>
+ <string-array name="config_perDeviceStateRotationLockDefaults" translatable="false">
+ <item>0:1</item> <!-- CLOSED -> LOCKED -->
+ <item>2:0:1</item> <!-- HALF_OPENED -> IGNORED and fallback to device state OPENED -->
+ <item>1:2</item> <!-- OPENED -> UNLOCKED -->
+ </string-array>
+
+ <bool name="config_supportMicNearUltrasound">true</bool>
+ <bool name="config_supportSpeakerNearUltrasound">true</bool>
+
</resources>
diff --git a/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml b/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml
new file mode 100644
index 00000000..09d7a88b
--- /dev/null
+++ b/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2023, 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.
+*/
+-->
+<irq-device-map>
+ <device name="rtc0">
+ <subsystem>Alarm</subsystem>
+ </device>
+</irq-device-map>
diff --git a/overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/Android.mk b/overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/Android.mk
new file mode 100644
index 00000000..f0d4c55d
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/Android.mk
@@ -0,0 +1,40 @@
+#
+# Copyright 2023, 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.
+#
+
+# create skin related configuration files and symlinks
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := GoldfishSkinConfig
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := ETC
+LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)/misc/
+LOCAL_SRC_FILES := readme.txt
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-BSD
+LOCAL_LICENSE_CONDITIONS := notice
+
+# following is **needed**, as the framework only looks at vendor/etc/displayconfig
+# that may change in the future, such as V or later
+LOCAL_POST_INSTALL_CMD := ln -sf /data/system/displayconfig $(PRODUCT_OUT)/vendor/etc/displayconfig
+
+# following is not needed, but keep a note here, as the framework already
+# take /data/system/devicestate/ before accessing /vendor/etc/devicestate
+# LOCAL_POST_INSTALL_CMD += ln -sf /data/system/devicestate $(PRODUCT_OUT)/vendor/etc/devicestate
+
+include $(BUILD_PREBUILT)
+
diff --git a/overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/readme.txt b/overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/readme.txt
new file mode 100644
index 00000000..5d2ee156
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/GoldfishSkinConfig/readme.txt
@@ -0,0 +1,20 @@
+#
+# Copyright 2023, 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.
+#
+
+This folder contains the skin specific configuration files, and
+they should be arranged by host emulator on first boot, according
+the device type and skin in avd's config.ini file
+
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/Android.mk
new file mode 100644
index 00000000..ddbe7155
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := EmulationPixel7a
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := EmulationPixel7aOverlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..90d27178
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.internal.emulation.pixel_7a"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="android" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/config.xml
new file mode 100644
index 00000000..10e50675
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/config.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Whether the display cutout region of the main built-in display should be forced to
+ black in software (to avoid aliasing or emulate a cutout that is not physically existent).
+ -->
+ <bool name="config_fillMainBuiltInDisplayCutout">true</bool>
+
+ <!-- Display cutout configuration -->
+ <string translatable="false" name="config_mainBuiltInDisplayCutout">
+ M 507,66
+ a 33,33 0 1 0 66,0 33,33 0 1 0 -66,0
+ Z
+ @left
+ </string>
+
+ <string translatable="false" name="config_mainBuiltInDisplayCutoutRectApproximation">
+ M 480,0
+ h 145
+ v 118
+ h -145
+ Z
+ @left
+ </string>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..be8d827a
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/AndroidOverlay/res/values/dimens.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <!-- Radius of the software rounded corners. -->
+ <dimen name="rounded_corner_radius">47px</dimen>
+ <dimen name="rounded_corner_radius_top">47px</dimen>
+ <dimen name="rounded_corner_radius_bottom">48px</dimen>
+
+ <!-- for 20dp of padding at 3.5px/dp at default density -->
+ <dimen name="rounded_corner_content_padding">47px</dimen>
+
+ <!-- Height of the status bar.
+ Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
+ -->
+ <dimen name="status_bar_height_default">28dp</dimen>
+ <dimen name="status_bar_height_portrait">118px</dimen>
+ <dimen name="status_bar_height_landscape">28dp</dimen>
+
+ <!-- Adjustment for software rounded corners since corners aren't perfectly round. -->
+ <dimen name="rounded_corner_radius_adjustment">5px</dimen>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/Android.mk
new file mode 100644
index 00000000..79b53f08
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := SystemUIEmulationPixel7a
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := SystemUIEmulationPixel7aOverlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..4ec829db
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.systemui.emulation.pixel_7a"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="com.android.systemui" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml
new file mode 100644
index 00000000..fd372346
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml
@@ -0,0 +1,25 @@
+<!--
+ Copyright (C) 2022 The Android Open Source Project
+
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="50px"
+ android:height="50px"
+ android:viewportWidth="50"
+ android:viewportHeight="50">
+
+ <path
+ android:pathData="M 0,50 C 0.08303658,43.995271 0.26956077,42.271707 0.70414831,39.50341 1.0543654,37.272548 1.7782723,33.526779 4.1147257,27.960543 5.8269831,24.129607 7.6089696,21.336234 10.012571,18.172837 12.157673,15.498951 14.679237,12.871136 17.460579,10.600699 19.822417,8.7039434 22.788037,6.5492946 27.306398,4.4110174 30.772226,2.7708429 33.051046,2.0752882 37.181125,1.116566 41.654462,0.19593655 43.840716,0.0930927 50,0 H 0 Z"
+ android:fillColor="#000000" />
+
+</vector>
+
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_top.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_top.xml
new file mode 100644
index 00000000..6735ec7e
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/drawable/rounded_corner_top.xml
@@ -0,0 +1,25 @@
+<!--
+ Copyright (C) 2022 The Android Open Source Project
+
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="50px"
+ android:height="50px"
+ android:viewportWidth="50"
+ android:viewportHeight="50">
+
+ <path
+ android:pathData="M 0,50 C 0.09060685,43.961677 0.29312289,41.906213 0.90627324,38.938969 1.4214352,36.445923 1.8152288,33.956753 4.3522215,28.156341 6.0942093,24.386105 7.8938533,21.486328 10.374474,18.316668 12.519576,15.642782 14.896031,13.143223 17.677373,10.872786 20.050666,9.0484831 22.757616,6.7720455 27.52968,4.6936421 31.552671,2.941486 32.881983,2.4984814 36.839765,1.44829 40.383179,0.67047466 42.768284,0.20918885 50,0 H 0 Z"
+ android:fillColor="#000000" />
+
+</vector>
+
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values-land/dimen.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values-land/dimen.xml
new file mode 100644
index 00000000..d52300a9
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values-land/dimen.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2022, 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.
+*/
+-->
+<resources>
+ <!-- Landscape, just use the regular values -->
+ <dimen name="status_bar_padding_start">8dp</dimen>
+ <dimen name="status_bar_padding_end">8dp</dimen>
+
+ <!-- the padding on the top of the statusbar (usually 0) -->
+ <dimen name="status_bar_padding_top">0dp</dimen>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/config.xml
new file mode 100644
index 00000000..9b82fd4a
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/config.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds. -->
+<resources>
+ <!-- Default rounded corner curve (a Bezier). Must match (the curved path in) rounded.xml.
+ Note that while rounded.xml includes the entire path (including the horizontal and vertical
+ corner edges), this pulls out just the curve.
+ -->
+ <string name="config_rounded_mask" translatable="false">M 71,0 C 33,0 22,-1 10,10 -1,22 0,33 0,71</string>
+
+ <!-- Configure 13px of extra protection around the front-facing camera -->
+ <string translatable="false" name="config_frontBuiltInDisplayCutoutProtection">
+ M 494,66
+ a 46,46 0 1 0 92,0
+ a 46,46 0 1 0 -92,0
+ Z
+ </string>
+
+ <!-- Camera 1 is the front camera on barbet -->
+ <string translatable="false" name="config_protectedCameraId">1</string>
+
+ <!-- Comma-separated list of packages to exclude from camera protection. In our case,
+ ignore the gaze detection package -->
+ <string translatable="false" name="config_cameraProtectionExcludedPackages">com.google.android.as</string>
+
+ <bool name="config_enableDisplayCutoutProtection">true</bool>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..f65748bd
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_7a/SystemUIOverlay/res/values/dimens.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <!-- Don't need the left side padding due to being inset from the cutout -->
+ <dimen name="status_bar_padding_start">0dp</dimen>
+
+ <!-- the padding on the top of the statusbar (usually 0) -->
+ <dimen name="status_bar_padding_top">1px</dimen>
+
+ <!-- Height of the status bar header bar when on Keyguard (match status_bar_height) -->
+ <dimen name="status_bar_header_height_keyguard">@*android:dimen/status_bar_height</dimen>
+
+ <!-- Padding for the system icons on the keyguard (when no multi user switch is showing).
+ The icons always have a 4dp padding in the container so we only need 56 extra px of padding
+ for the corners -->
+ <dimen name="system_icons_super_container_avatarless_margin_end">11px</dimen>
+
+ <!-- Multi user switch has some intrinsic padding to it -->
+ <dimen name="multi_user_switch_keyguard_margin">6dp</dimen>
+
+ <dimen name="keyguard_carrier_text_margin">0px</dimen>
+
+ <dimen name="config_rounded_mask_size">47px</dimen>
+ <dimen name="config_rounded_mask_size_top">47px</dimen>
+ <dimen name="config_rounded_mask_size_bottom">46px</dimen>
+
+ <!-- Location on the screen of the center of the physical power button. -->
+ <dimen name="physical_power_button_center_screen_location_y">730px</dimen>
+
+ <!-- Location on the screen of the center of the physical volume up/down buttons. -->
+ <dimen name="physical_volume_up_button_center_screen_location_y">1064px</dimen>
+ <dimen name="physical_volume_down_button_center_screen_location_y">1232px</dimen>
+
+</resources>
+
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/Android.mk
new file mode 100644
index 00000000..1a81d336
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := EmulationPixel8
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := EmulationPixel8Overlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..1090a5ef
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.internal.emulation.pixel_8"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="android" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/config.xml
new file mode 100644
index 00000000..449a3503
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/config.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Whether the display cutout region of the main built-in display should be forced to
+ black in software (to avoid aliasing or emulate a cutout that is not physically existent).
+ -->
+ <bool name="config_fillMainBuiltInDisplayCutout">true</bool>
+
+ <!-- Display cutout configuration -->
+ <string translatable="false" name="config_mainBuiltInDisplayCutout">
+ m 576,65.75 a 36.25,36.25 0 0 0 -72.5,0 36.25,36.25 0 0 0 72.5,0 z
+ @left
+ </string>
+
+ <string translatable="false" name="config_mainBuiltInDisplayCutoutRectApproximation">
+ M 478.5,0
+ h 122
+ v 132
+ h -122
+ Z
+ @left
+ </string>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..295bddf3
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/AndroidOverlay/res/values/dimens.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <!-- Radius of the software rounded corners. -->
+ <dimen name="rounded_corner_radius">102px</dimen>
+ <dimen name="rounded_corner_radius_top">104px</dimen>
+ <dimen name="rounded_corner_radius_bottom">102px</dimen>
+
+ <!-- Height of the status bar.
+ Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
+ -->
+ <dimen name="status_bar_height_default">28dp</dimen>
+ <dimen name="status_bar_height_portrait">132px</dimen>
+ <dimen name="status_bar_height_landscape">28dp</dimen>
+
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/Android.mk
new file mode 100644
index 00000000..a9c333a3
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := SystemUIEmulationPixel8
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := SystemUIEmulationPixel8Overlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..2280d7b0
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.systemui.emulation.pixel_8"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="com.android.systemui" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml
new file mode 100644
index 00000000..229e6ed2
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml
@@ -0,0 +1,23 @@
+<!--
+ Copyright (C) 2023 The Android Open Source Project
+
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="128px"
+ android:height="128px"
+ android:viewportWidth="21.596"
+ android:viewportHeight="21.596">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="m0,21.596C0,18.555 -0.037,15.711 0.702,12.7c0.718,-2.927 2.092,-5.593 4.247,-7.749C7.105,2.796 9.772,1.421 12.699,0.703 15.711,-0.037 18.555,0 21.596,0H0v21.595Z"/>
+</vector>
+
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_top.xml b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_top.xml
new file mode 100644
index 00000000..229e6ed2
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/drawable/rounded_corner_top.xml
@@ -0,0 +1,23 @@
+<!--
+ Copyright (C) 2023 The Android Open Source Project
+
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="128px"
+ android:height="128px"
+ android:viewportWidth="21.596"
+ android:viewportHeight="21.596">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="m0,21.596C0,18.555 -0.037,15.711 0.702,12.7c0.718,-2.927 2.092,-5.593 4.247,-7.749C7.105,2.796 9.772,1.421 12.699,0.703 15.711,-0.037 18.555,0 21.596,0H0v21.595Z"/>
+</vector>
+
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/config.xml
new file mode 100644
index 00000000..5aa8b46f
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/config.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds. -->
+<resources>
+ <!-- Default rounded corner curve (a Bezier). Must match (the curved path in) rounded.xml.
+ Note that while rounded.xml includes the entire path (including the horizontal and vertical
+ corner edges), this pulls out just the curve.
+ -->
+ <!-- Configure 13px of extra protection around the front-facing camera -->
+ <string translatable="false" name="config_frontBuiltInDisplayCutoutProtection">
+ m 589,65.75 a 49.25,49.25 0 0 0 -98.5,0 49.25,49.25 0 0 0 98.5,0 z
+ </string>
+
+ <!-- Camera 1 is the front camera -->
+ <string translatable="false" name="config_protectedCameraId">1</string>
+
+ <!-- Comma-separated list of packages to exclude from camera protection. In our case,
+ ignore the gaze detection package -->
+ <string translatable="false" name="config_cameraProtectionExcludedPackages">com.google.android.as</string>
+
+ <bool name="config_enableDisplayCutoutProtection">true</bool>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..dbb961d1
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8/SystemUIOverlay/res/values/dimens.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <!-- Don't need the left side padding due to being inset from the cutout -->
+ <dimen name="status_bar_padding_start">16dp</dimen>
+
+ <!-- the padding on the top of the statusbar (usually 0) -->
+ <dimen name="status_bar_padding_top">1px</dimen>
+
+ <!-- Height of the status bar header bar when on Keyguard (match status_bar_height) -->
+ <dimen name="status_bar_header_height_keyguard">@*android:dimen/status_bar_height</dimen>
+
+ <!-- Padding for the system icons on the keyguard (when no multi user switch is showing).
+ The icons always have a 4dp padding in the container so we only need 56 extra px of padding
+ for the corners -->
+ <dimen name="system_icons_super_container_avatarless_margin_end">11px</dimen>
+
+ <!-- Multi user switch has some intrinsic padding to it -->
+ <dimen name="multi_user_switch_keyguard_margin">6dp</dimen>
+
+ <dimen name="keyguard_carrier_text_margin">0px</dimen>
+
+ <dimen name="config_rounded_mask_size">47px</dimen>
+ <dimen name="config_rounded_mask_size_top">47px</dimen>
+ <dimen name="config_rounded_mask_size_bottom">46px</dimen>
+
+ <!-- Location on the screen of the center of the physical volume up/down buttons. -->
+ <dimen name="physical_volume_up_button_center_screen_location_y">1000px</dimen>
+ <dimen name="physical_volume_down_button_center_screen_location_y">1160px</dimen>
+
+ <!-- Padding for the lock icon on the keyguard. In pixels - should not scale with
+ display size. -->
+ <dimen name="lock_icon_padding">50px</dimen>
+
+ <!-- Offset should not be more than 1mm -->
+ <dimen name="udfps_burn_in_offset_x">6px</dimen>
+ <dimen name="udfps_burn_in_offset_y">17px</dimen>
+
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/Android.mk
new file mode 100644
index 00000000..51261b33
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := EmulationPixel8Pro
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := EmulationPixel8ProOverlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..9ae38775
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.internal.emulation.pixel_8_pro"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="android" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/config.xml
new file mode 100644
index 00000000..7eb20d74
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/config.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Whether the display cutout region of the main built-in display should be forced to
+ black in software (to avoid aliasing or emulate a cutout that is not physically existent).
+ -->
+ <!-- The stable device width and height in pixels. If these aren't set to a positive number
+ then the device will use the width and height of the default display the first time it's
+ booted. -->
+ <integer name="config_stableDeviceDisplayWidth">1344</integer>
+ <integer name="config_stableDeviceDisplayHeight">2992</integer>
+
+
+ <!-- Whether the display cutout region of the main built-in display should be forced to
+ black in software (to avoid aliasing or emulate a cutout that is not physically existent).
+ -->
+ <bool name="config_fillMainBuiltInDisplayCutout">true</bool>
+
+ <!-- Display cutout configuration -->
+ <string translatable="false" name="config_mainBuiltInDisplayCutout">
+ M 628.75,75
+ a 43.25,43.25 0 1 0 86.5,0
+ a 43.25,43.25 0 1 0 -86.5,0
+ Z
+ @left
+ </string>
+
+ <string translatable="false" name="config_mainBuiltInDisplayCutoutRectApproximation">
+ M 615.5,0
+ h 110
+ v 151
+ h -110
+ Z
+ @left
+ </string>
+
+ <!-- A string config in svg path format for the main display shape.
+ (@see https://www.w3.org/TR/SVG/paths.html#PathData).
+
+ This config must be set unless:
+ 1. {@link Configuration#isScreenRound} is true which means the display shape is circular
+ and the system will auto-generate a circular shape.
+ 2. The display has no rounded corner and the system will auto-generate a rectangular shape.
+ (@see DisplayShape#createDefaultDisplayShape)
+
+ Note: If the display supports multiple resolutions, please define the path config based on
+ the highest resolution so that it can be scaled correctly in each resolution.
+ -->
+ <string name="config_mainDisplayShape" translatable="false">M 119.9999 -3.7795276e-05 C 113.32402 0.34316186 102.8311 1.9200038 98.695215 2.8066029 C 73.98156 8.0987976 62.561448 13.566009 49.605371 22.5859 C 34.411306 33.163789 20.551075 49.59161 12.962793 65.706994 C 7.8660073 76.530983 2.8411097 93.439401 1.4120111 104.32809 C 0.066002501 114.58638 0.28550144 114.76397 -9.8267718e-05 119.99996 L -9.8267718e-05 2877 L 1.9803705 2891.3164 C 8.0676544 2919.9453 16.781085 2937.4625 33.785058 2955.2598 C 51.142521 2973.4268 70.876659 2983.6798 100.6835 2990.0176 L 114.9999 2992 L 1228.9999 2992 L 1243.3163 2990.0176 C 1273.1232 2983.6798 1292.8573 2973.4268 1310.2148 2955.2598 C 1327.2186 2937.4625 1335.9323 2919.9453 1342.0194 2891.3164 L 1343.9999 2877 L 1343.9999 119.99996 C 1343.7143 114.76397 1343.9338 114.58638 1342.5878 104.32809 C 1341.1587 93.439401 1336.1338 76.530983 1331.037 65.706994 C 1323.4487 49.59161 1309.5885 33.163789 1294.3944 22.5859 C 1281.4385 13.566009 1270.0183 8.0987976 1245.3046 2.8066029 C 1241.1687 1.9200038 1230.6758 0.34316186 1223.9999 -3.7795276e-05 L 119.9999 -3.7795276e-05 z</string>
+
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..bc6c6903
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/AndroidOverlay/res/values/dimens.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <!-- Radius of the software rounded corners. -->
+ <dimen name="rounded_corner_radius">91px</dimen>
+ <dimen name="rounded_corner_radius_top">91px</dimen>
+ <dimen name="rounded_corner_radius_bottom">91px</dimen>
+
+ <!-- Height of the status bar.
+ Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
+ -->
+ <dimen name="status_bar_height_default">28dp</dimen>
+ <dimen name="status_bar_height_portrait">151px</dimen>
+ <dimen name="status_bar_height_landscape">28dp</dimen>
+
+
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/Android.mk
new file mode 100644
index 00000000..232491e0
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := SystemUIEmulationPixel8Pro
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := SystemUIEmulationPixel8ProOverlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..2227f301
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.systemui.emulation.pixel_8_pro"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="com.android.systemui" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml
new file mode 100644
index 00000000..379aa25b
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_bottom.xml
@@ -0,0 +1,22 @@
+<!--
+ Copyright (C) 2023 The Android Open Source Project
+
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="146.5px"
+ android:height="146.5px"
+ android:viewportWidth="21.56"
+ android:viewportHeight="21.56">
+ <path
+ android:fillColor="#000000"
+ android:pathData="m0,21.56C0,18.524 -0.037,15.685 0.701,12.679c0.717,-2.922 2.089,-5.584 4.241,-7.736C7.093,2.791 9.755,1.419 12.678,0.701 15.684,-0.037 18.524,0 21.56,0H0v21.559Z"/>
+</vector>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_top.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_top.xml
new file mode 100644
index 00000000..379aa25b
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/drawable/rounded_corner_top.xml
@@ -0,0 +1,22 @@
+<!--
+ Copyright (C) 2023 The Android Open Source Project
+
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="146.5px"
+ android:height="146.5px"
+ android:viewportWidth="21.56"
+ android:viewportHeight="21.56">
+ <path
+ android:fillColor="#000000"
+ android:pathData="m0,21.56C0,18.524 -0.037,15.685 0.701,12.679c0.717,-2.922 2.089,-5.584 4.241,-7.736C7.093,2.791 9.755,1.419 12.678,0.701 15.684,-0.037 18.524,0 21.56,0H0v21.559Z"/>
+</vector>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/config.xml
new file mode 100644
index 00000000..01a30aec
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/config.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds. -->
+<resources>
+ <!-- Configure 13px of extra protection around the front-facing camera -->
+ <string translatable="false" name="config_frontBuiltInDisplayCutoutProtection">
+ M 613.5,75.5
+ a 58,58 0 0 1 116,0
+ a 58,58 0 0 1 -116,0
+ Z
+ </string>
+
+ <!-- Camera 1 is the front camera -->
+ <string translatable="false" name="config_protectedCameraId">1</string>
+
+ <!-- Comma-separated list of packages to exclude from camera protection. In our case,
+ ignore the gaze detection package -->
+ <string translatable="false" name="config_cameraProtectionExcludedPackages">com.google.android.as</string>
+
+ <bool name="config_enableDisplayCutoutProtection">true</bool>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..fe55c16d
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_8_pro/SystemUIOverlay/res/values/dimens.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <dimen name="status_bar_padding_start">16dp</dimen>
+ <!-- Location on the screen of the center of the physical power button. -->
+ <dimen name="physical_power_button_center_screen_location_y">774px</dimen>
+
+ <!-- Location on the screen of the center of the physical volume up/down buttons. -->
+ <dimen name="physical_volume_up_button_center_screen_location_y">1040px</dimen>
+ <dimen name="physical_volume_down_button_center_screen_location_y">1174px</dimen>
+
+ <!-- Padding for the lock icon on the keyguard. In pixels - should not scale with
+ display size. -->
+ <dimen name="lock_icon_padding">57px</dimen>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/Android.mk
new file mode 100644
index 00000000..0cc191ae
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/Android.mk
@@ -0,0 +1,32 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := EmulationPixelFold
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := EmulationPixelFoldOverlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..74fd1c45
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.internal.emulation.pixel_fold"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="android" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/config.xml
new file mode 100644
index 00000000..6d6f0035
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/config.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- this is important so guest knows we have two displays-->
+ <string-array name="config_displayUniqueIdArray" translatable="false">
+ <item>"local:4619827259835644672"</item>
+ <item>"local:4619827551948147201"</item>
+ </string-array>
+
+ <!-- Whether the display cutout region of the secondary built-in display should be forced to
+ black in software (to avoid aliasing or emulate a cutout that is not physically existent).
+ -->
+ <bool name="config_fillSecondaryBuiltInDisplayCutout">true</bool>
+
+ <!-- Display cutout configuration -->
+ <string translatable="false" name="config_secondaryBuiltInDisplayCutout">
+ M 505,61
+ a 35,35 0 1 0 70,0 35,35 0 1 0 -70,0
+ Z
+ @left
+ </string>
+
+ <string translatable="false" name="config_secondaryBuiltInDisplayCutoutRectApproximation">
+ M 480,0
+ h 110
+ v 110
+ h -110
+ Z
+ @left
+ </string>
+
+ <!-- WindowsManager JetPack display features -->
+ <string name="config_display_features" translatable="false">fold-[1104,0,1104,1848]</string>
+
+ <!-- Map of DeviceState to rotation lock setting. Each entry must be in the format "key:value",
+ or "key:value:fallback_key" for example: "0:1" or "2:0:1". The keys are device states, and
+ the values are one of Settings.Secure.DeviceStateRotationLockSetting.
+ The fallback is a key to a device state that can be specified when the value is
+ Settings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORED.
+ -->
+ <string-array name="config_perDeviceStateRotationLockDefaults" translatable="false">
+ <item>0:1</item> <!-- CLOSED -> LOCKED -->
+ <item>2:0:1</item> <!-- HALF_OPENED -> IGNORED and fallback to device state OPENED -->
+ <item>1:2</item> <!-- OPENED -> UNLOCKED -->
+ </string-array>
+
+ <!-- Map of System DeviceState supplied by DeviceStateManager to WM Jetpack posture. -->
+ <string-array name="config_device_state_postures" translatable="false">
+ <item>0:1</item> <!-- CLOSED -->
+ <item>1:2</item> <!-- HALF_OPENED -->
+ <item>2:3</item> <!-- OPENED -->
+ <item>3:1</item> <!-- FLIPPED -->
+ </string-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as open by the
+ display fold controller. -->
+ <integer-array name="config_openDeviceStates" translatable="false">
+ <item>2</item> <!-- OPEN -->
+ </integer-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as folded by the
+ display fold controller. This also controls the folded bit in CameraServiceProxy. -->
+ <integer-array name="config_foldedDeviceStates" translatable="false">
+ <item>0</item> <!-- CLOSED -->
+ </integer-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as half folded by
+ the display fold controller. This also controls the folded bit in CameraServiceProxy. -->
+ <integer-array name="config_halfFoldedDeviceStates" translatable="false">
+ <item>1</item> <!-- HALF_OPENED -->
+ </integer-array>
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as a rear display
+ state. Default is empty. -->
+ <integer-array name="config_rearDisplayDeviceStates" translatable="false">
+ <item>3</item> <!-- REAR_DISPLAY_STATE -->
+ </integer-array>
+
+ <bool name="config_supportsConcurrentInternalDisplays">false</bool>
+ <bool name="config_localDisplaysMirrorContent">false</bool>
+ <!-- Multi Display related -->
+ <!-- Whether the system enables per-display focus. If the system has the input method for each
+ display, this value should be true. -->
+ <bool name="config_perDisplayFocusEnabled">true</bool>
+ <!-- True if the device supports system decorations on secondary displays. -->
+ <bool name="config_supportsSystemDecorsOnSecondaryDisplays">true</bool>
+ <!-- This is the default launcher package with an activity to use on secondary displays that
+ support system decorations.
+ This launcher package must have an activity that supports multiple instances and has
+ corresponding launch mode set in AndroidManifest.
+ {@see android.view.Display#FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS} -->
+
+ <!-- The device states (supplied by DeviceStateManager) that should be treated as folded by the
+ display fold controller. -->
+
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..8cfb06a2
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/AndroidOverlay/res/values/dimens.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+
+ <!-- for 20dp of padding at 3.5px/dp at default density -->
+
+ <!-- Height of the status bar.
+ Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
+ -->
+ <dimen name="status_bar_height_default">28dp</dimen>
+ <dimen name="status_bar_height_portrait">144px</dimen>
+ <dimen name="status_bar_height_landscape">28dp</dimen>
+
+ <!-- Adjustment for software rounded corners since corners aren't perfectly round. -->
+ <bool name="config_persistBrightnessNitsForDefaultDisplay">true</bool>
+
+ <!-- Height of the status bar.
+ Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
+ -->
+
+
+
+ <bool name="config_supportMicNearUltrasound">false</bool>
+ <bool name="config_supportSpeakerNearUltrasound">false</bool>
+
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/Android.mk b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/Android.mk
new file mode 100644
index 00000000..c46c35ee
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/Android.mk
@@ -0,0 +1,31 @@
+#
+# Copyright 2023, 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_RRO_THEME := SystemUIEmulationPixelFold
+
+LOCAL_PRODUCT_MODULE := true
+
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+LOCAL_PACKAGE_NAME := SystemUIEmulationPixelFoldOverlay
+LOCAL_SDK_VERSION := current
+
+LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
+LOCAL_LICENSE_CONDITIONS := notice
+include $(BUILD_RRO_PACKAGE)
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/AndroidManifest.xml b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/AndroidManifest.xml
new file mode 100644
index 00000000..797c72e2
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/AndroidManifest.xml
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright (c) 2023, 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.
+ */
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.systemui.emulation.pixel_fold"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <overlay android:targetPackage="com.android.systemui" android:priority="1"/>
+ <application android:label="Filled" android:hasCode="false"/>
+</manifest>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/config.xml b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/config.xml
new file mode 100644
index 00000000..06edcb5a
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/config.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2023, 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.
+*/
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds. -->
+<resources>
+ <!-- Configure 13px of extra protection around the front-facing camera -->
+ <string translatable="false" name="config_frontBuiltInDisplayCutoutProtection">
+ M 494,65
+ a 46,46 0 1 0 92,0
+ a 46,46 0 1 0 -92,0
+ Z
+ </string>
+
+
+ <!-- Comma-separated list of packages to exclude from camera protection. In our case,
+ ignore the gaze detection package -->
+ <string translatable="false" name="config_cameraProtectionExcludedPackages">com.google.android.as</string>
+
+ <bool name="config_enableDisplayCutoutProtection">true</bool>
+</resources>
diff --git a/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/dimens.xml b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/dimens.xml
new file mode 100644
index 00000000..bef4e8d3
--- /dev/null
+++ b/overlay/frameworks/base/packages/overlays/pixel_fold/SystemUIOverlay/res/values/dimens.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ * Copyright (c) 2023, 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.
+*/
+-->
+<resources>
+ <!-- the padding on the top of the statusbar (usually 0) -->
+ <dimen name="status_bar_padding_top">1px</dimen>
+
+ <!-- Height of the status bar header bar when on Keyguard (match status_bar_height) -->
+ <dimen name="status_bar_header_height_keyguard">@*android:dimen/status_bar_height</dimen>
+
+ <!-- Padding for the system icons on the keyguard (when no multi user switch is showing).
+ The icons always have a 4dp padding in the container so we only need 26 extra px of padding
+ for the corners -->
+ <dimen name="system_icons_super_container_avatarless_margin_end">26px</dimen>
+
+ <!-- Margin on the right side of the system icon group on Keyguard. -->
+ <dimen name="system_icons_keyguard_padding_end">6.5dp</dimen>
+
+ <!-- Camera 1 is the front camera -->
+ <string translatable="false" name="config_protectedCameraId">1</string>
+
+ <!-- Location on the screen of the center of the physical power button. -->
+ <dimen name="physical_power_button_center_screen_location_y">940px</dimen>
+
+ <!-- Location on the screen of the center of the physical volume up/down buttons. -->
+ <dimen name="physical_volume_up_button_center_screen_location_y">1320px</dimen>
+ <dimen name="physical_volume_down_button_center_screen_location_y">1520px</dimen>
+
+ <!-- Padding for the lock icon on the keyguard. In pixels - should not scale with display size. -->
+ <dimen name="lock_icon_padding">60px</dimen>
+</resources>
diff --git a/pc/images_source.prop_template b/pc/images_source.prop_template
index ab63ff77..69a88157 100644
--- a/pc/images_source.prop_template
+++ b/pc/images_source.prop_template
@@ -1,6 +1,6 @@
Pkg.Desc=System Image ${TARGET_CPU_ABI}.
Pkg.Revision=1
-Pkg.Dependencies=emulator#30.7.3
+Pkg.Dependencies=emulator#33.1.19
AndroidVersion.ApiLevel=${PLATFORM_SDK_VERSION}
AndroidVersion.CodeName=${PLATFORM_VERSION_CODENAME}
SystemImage.Abi=${TARGET_CPU_ABI}
diff --git a/pixel_fold/device_state_configuration.xml b/pixel_fold/device_state_configuration.xml
new file mode 100644
index 00000000..8a181431
--- /dev/null
+++ b/pixel_fold/device_state_configuration.xml
@@ -0,0 +1,51 @@
+<device-state-config>
+ <device-state>
+ <identifier>0</identifier>
+ <name>CLOSED</name>
+ <conditions>
+ <sensor>
+ <type>android.sensor.hinge_angle</type>
+ <name>Goldfish hinge sensor0 (in degrees)</name>
+ <value>
+ <min-inclusive>0</min-inclusive>
+ <max-inclusive>30</max-inclusive>
+ </value>
+ </sensor>
+ </conditions>
+ </device-state>
+ <device-state>
+ <identifier>1</identifier>
+ <name>HALF_OPENED</name>
+ <conditions>
+ <sensor>
+ <type>android.sensor.hinge_angle</type>
+ <name>Goldfish hinge sensor0 (in degrees)</name>
+ <value>
+ <min>30</min>
+ <max>150</max>
+ </value>
+ </sensor>
+ </conditions>
+ </device-state>
+ <device-state>
+ <identifier>2</identifier>
+ <name>OPENED</name>
+ <conditions>
+ <sensor>
+ <type>android.sensor.hinge_angle</type>
+ <name>Goldfish hinge sensor0 (in degrees)</name>
+ <value>
+ <min-inclusive>150</min-inclusive>
+ <max-inclusive>180</max-inclusive>
+ </value>
+ </sensor>
+ </conditions>
+ </device-state>
+ <device-state>
+ <identifier>3</identifier>
+ <name>REAR_DISPLAY_MODE</name>
+ <flags>
+ <flag>FLAG_EMULATED_ONLY</flag>
+ </flags>
+ </device-state>
+</device-state-config>
diff --git a/pixel_fold/display_layout_configuration.xml b/pixel_fold/display_layout_configuration.xml
new file mode 100644
index 00000000..2c50e76b
--- /dev/null
+++ b/pixel_fold/display_layout_configuration.xml
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<layouts>
+ <layout>
+ <!-- CLOSED: display0 disabled, display1 enabled -->
+ <state>0</state>
+
+ <display enabled="false">
+ <address>4619827259835644672</address>
+ </display>
+
+ <display enabled="true" defaultDisplay="true">
+ <address>4619827551948147201</address>
+ </display>
+ </layout>
+
+ <layout>
+ <!-- HALF_OPENED: display0 enabled, display1 disabled -->
+ <state>1</state>
+
+ <display enabled="true" defaultDisplay="true">
+ <address>4619827259835644672</address>
+ </display>
+
+ <display enabled="false">
+ <address>4619827551948147201</address>
+ </display>
+ </layout>
+
+ <layout>
+ <!-- OPENED: display0 enabled, display1 disabled -->
+ <state>2</state>
+
+ <display enabled="true" defaultDisplay="true">
+ <address>4619827259835644672</address>
+ </display>
+
+ <display enabled="false">
+ <address>4619827551948147201</address>
+ </display>
+ </layout>
+
+ <layout>
+ <!-- REAR_DISPLAY_MODE: display0 disabled, display1 enabled -->
+ <state>3</state>
+
+ <display enabled="false">
+ <address>4619827259835644672</address>
+ </display>
+
+ <display enabled="true" defaultDisplay="true">
+ <address>4619827551948147201</address>
+ </display>
+ </layout>
+</layouts>
diff --git a/pixel_fold/display_settings.xml b/pixel_fold/display_settings.xml
new file mode 100644
index 00000000..6ad82877
--- /dev/null
+++ b/pixel_fold/display_settings.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<display-settings>
+ <config identifier="0" />
+ <!-- Allow rotation of fixed-orientation activities on the inner screen. -->
+ <display
+ name="local:4619827259835644672"
+ ignoreOrientationRequest="true"/>
+</display-settings>
diff --git a/provision/EmulatorProvisonLib/src/com/android/sdksetup/ProvisionActivity.java b/provision/EmulatorProvisonLib/src/com/android/sdksetup/ProvisionActivity.java
index 30d6c505..7beda576 100644
--- a/provision/EmulatorProvisonLib/src/com/android/sdksetup/ProvisionActivity.java
+++ b/provision/EmulatorProvisonLib/src/com/android/sdksetup/ProvisionActivity.java
@@ -149,6 +149,25 @@ public abstract class ProvisionActivity extends Activity {
} else if (!displaySettingsName.isEmpty()) {
Log.e(TAG(), "Unexpected value `" + displaySettingsName + "` in " + displaySettingsProp);
}
+ final String autoRotateProp = "ro.boot.qemu.autorotate";
+ final String autoRotateSetting = SystemProperties.get(autoRotateProp);
+ if (!autoRotateSetting.isEmpty()) {
+ Settings.System.putString(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, autoRotateSetting);
+ }
+ }
+
+ // required for CTS which uses the mock modem
+ private void provisionMockModem() {
+ String value = SystemProperties.get("ro.boot.radio.allow_mock_modem");
+ if (!value.isEmpty()) {
+ if (value.equals("1")) {
+ value = "true";
+ } else if (value.equals("0")) {
+ value = "false";
+ }
+
+ SystemProperties.set("persist.radio.allow_mock_modem", value);
+ }
}
protected void provisionTelephony() {
@@ -156,6 +175,8 @@ public abstract class ProvisionActivity extends Activity {
// the following blocks, TODO: find out why and fix it. disable this for now.
// TelephonyManager mTelephony = getApplicationContext().getSystemService(TelephonyManager.class);
// mTelephony.setPreferredNetworkTypeBitmask(TelephonyManager.NETWORK_TYPE_BITMASK_NR);
+
+ provisionMockModem();
}
protected void provisionLocation() {
diff --git a/sensors/Android.bp b/sensors/Android.bp
index c86ecebc..e971f8ea 100644
--- a/sensors/Android.bp
+++ b/sensors/Android.bp
@@ -23,17 +23,29 @@ package {
default_applicable_licenses: ["device_generic_goldfish_license"],
}
-cc_library_shared {
- name: "android.hardware.sensors@2.1-impl.ranchu",
- vendor: true,
- relative_install_path: "hw",
- defaults: ["hidl_defaults"],
+filegroup {
+ name: "android.hardware.sensors@2.1-impl.virtual_srcs",
srcs: [
"multihal_sensors.cpp",
"multihal_sensors_epoll.cpp",
"multihal_sensors_qemu.cpp",
"sensor_list.cpp",
- "entry.cpp"
+ ]
+}
+
+cc_library_headers {
+ name: "android.hardware.sensors@2.1-impl.virtual_headers",
+ vendor_available: true,
+ export_include_dirs: ["include"],
+}
+
+cc_defaults {
+ name: "android.hardware.sensors@2.1-impl.virtual.defaults",
+ vendor: true,
+ relative_install_path: "hw",
+ defaults: ["hidl_defaults"],
+ srcs: [
+ ":android.hardware.sensors@2.1-impl.virtual_srcs",
],
shared_libs: [
"android.hardware.sensors@2.0",
@@ -44,8 +56,19 @@ cc_library_shared {
"liblog",
"libutils",
],
+ header_libs: [
+ "android.hardware.sensors@2.X-multihal.header",
+ "android.hardware.sensors@2.1-impl.virtual_headers"
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.sensors@2.1-impl.ranchu",
+ defaults: ["android.hardware.sensors@2.1-impl.virtual.defaults"],
+ srcs: [
+ "entry.cpp"
+ ],
static_libs: ["libqemud.ranchu"],
- header_libs: ["android.hardware.sensors@2.X-multihal.header"],
cflags: [
"-DLOG_TAG=\"android.hardware.sensors@2.1-impl.ranchu\"",
"-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION",
diff --git a/sensors/entry.cpp b/sensors/entry.cpp
index d48c458a..170f3fc2 100644
--- a/sensors/entry.cpp
+++ b/sensors/entry.cpp
@@ -14,14 +14,47 @@
* limitations under the License.
*/
-#include <log/log.h>
-#include "multihal_sensors.h"
+#include <android-base/unique_fd.h>
+#include <qemud.h>
+#include <multihal_sensors.h>
+using ::android::base::unique_fd;
using ::android::hardware::sensors::V2_1::implementation::ISensorsSubHal;
namespace {
-goldfish::MultihalSensors impl;
-}
+
+class QemudSensorsTransport : public goldfish::SensorsTransport {
+ public:
+ QemudSensorsTransport()
+ : m_qemuSensorsFd(qemud_channel_open("sensors")) {}
+
+ int Send(const void* msg, int size) override {
+ return qemud_channel_send(m_qemuSensorsFd.get(), msg, size);
+ }
+
+ int Receive(void* msg, int maxsize) override {
+ return qemud_channel_recv(m_qemuSensorsFd.get(), msg, maxsize);
+ }
+
+ bool Ok() const override {
+ return m_qemuSensorsFd.ok();
+ }
+
+ int Fd() const override {
+ return m_qemuSensorsFd.get();
+ }
+
+ const char* Name() const override {
+ return "qemud_channel";
+ }
+
+ private:
+ const unique_fd m_qemuSensorsFd;
+};
+
+goldfish::MultihalSensors impl([](){ return std::make_unique<QemudSensorsTransport>(); });
+
+} // namespace
extern "C" ISensorsSubHal* sensorsHalGetSubHal_2_1(uint32_t* version) {
*version = SUB_HAL_2_1_VERSION;
diff --git a/sensors/multihal_sensors.h b/sensors/include/multihal_sensors.h
index 3f242f24..1f50b0bc 100644
--- a/sensors/multihal_sensors.h
+++ b/sensors/include/multihal_sensors.h
@@ -18,6 +18,7 @@
#include <android-base/unique_fd.h>
#include <V2_1/SubHal.h>
#include <atomic>
+#include <functional>
#include <condition_variable>
#include <cstdint>
#include <random>
@@ -25,6 +26,8 @@
#include <thread>
#include <vector>
+#include "multihal_sensors_transport.h"
+
namespace goldfish {
namespace ahs = ::android::hardware::sensors;
namespace ahs21 = ahs::V2_1;
@@ -47,7 +50,9 @@ using ::android::hardware::Return;
using ::android::sp;
struct MultihalSensors : public ahs21::implementation::ISensorsSubHal {
- MultihalSensors();
+ using SensorsTransportFactory = std::function<std::unique_ptr<SensorsTransport>()>;
+
+ MultihalSensors(SensorsTransportFactory);
~MultihalSensors();
Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& args) override;
@@ -75,6 +80,7 @@ struct MultihalSensors : public ahs21::implementation::ISensorsSubHal {
private:
struct QemuSensorsProtocolState {
int64_t timeBiasNs = -500000000;
+ int32_t sensorsUpdateIntervalMs = 200;
static constexpr float kSensorNoValue = -1e+30;
@@ -95,24 +101,30 @@ private:
return m_activeSensorsMask & (1u << sensorHandle); // m_mtx required
}
Event activationOnChangeSensorEvent(int32_t sensorHandle, const SensorInfo& sensor) const;
- static bool activateQemuSensorImpl(int pipe, int sensorHandle, bool enabled);
- bool setAllQemuSensors(bool enabled);
- void parseQemuSensorEventLocked(const int pipe, QemuSensorsProtocolState* state);
+ static bool setSensorsReportingImpl(SensorsTransport& st, int sensorHandle, bool enabled);
+ static bool setAllSensorsReporting(SensorsTransport& st,
+ uint32_t availableSensorsMask, bool enabled);
+ static bool setSensorsGuestTime(SensorsTransport& st, int64_t value);
+ static bool setSensorsUpdateIntervalMs(SensorsTransport& st, uint32_t value);
+ void parseQemuSensorEventLocked(QemuSensorsProtocolState* state);
void postSensorEventLocked(const Event& event);
void doPostSensorEventLocked(const SensorInfo& sensor, const Event& event);
void setAdditionalInfoFrames();
void sendAdditionalInfoReport(int sensorHandle);
+ bool qemuSensorListenerThreadImpl(int transportFd);
void qemuSensorListenerThread();
void batchThread();
double randomError(float lo, float hi);
static constexpr char kCMD_QUIT = 'q';
+ static constexpr char kCMD_RESTART = 'r';
bool qemuSensorThreadSendCommand(char cmd) const;
- // set in ctor, never change
- const unique_fd m_qemuSensorsFd;
+ const SensorsTransportFactory m_sensorsTransportFactory;
+ SensorsTransport* m_sensorsTransport;
+
uint32_t m_availableSensorsMask = 0;
// a pair of connected sockets to talk to the worker thread
unique_fd m_callersFd; // a caller writes here
diff --git a/sensors/include/multihal_sensors_transport.h b/sensors/include/multihal_sensors_transport.h
new file mode 100644
index 00000000..d5de1501
--- /dev/null
+++ b/sensors/include/multihal_sensors_transport.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+
+#pragma once
+
+namespace goldfish {
+
+class SensorsTransport {
+ public:
+ virtual int Send(const void* msg, int size) = 0;
+ virtual int Receive(void* msg, int maxsize) = 0;
+ virtual bool Ok() const = 0;
+ virtual int Fd() const = 0;
+ virtual const char* Name() const = 0;
+
+ virtual ~SensorsTransport() = default;
+};
+
+} // namespace goldfish
diff --git a/sensors/multihal_sensors.cpp b/sensors/multihal_sensors.cpp
index 41c7f42f..beb34d92 100644
--- a/sensors/multihal_sensors.cpp
+++ b/sensors/multihal_sensors.cpp
@@ -14,11 +14,10 @@
* limitations under the License.
*/
-#include <cinttypes>
+#include <cstdint>
#include <log/log.h>
-#include <qemud.h>
#include <utils/SystemClock.h>
-#include "multihal_sensors.h"
+#include <multihal_sensors.h>
#include "sensor_list.h"
namespace goldfish {
@@ -31,58 +30,54 @@ using ahs10::AdditionalInfoType;
namespace {
constexpr int64_t kMaxSamplingPeriodNs = 1000000000;
+
+struct SensorsTransportStub : public SensorsTransport {
+ int Send(const void*, int) override { return -1; }
+ int Receive(void*, int) override { return -1; }
+ bool Ok() const override { return false; }
+ int Fd() const override { return -1; }
+ const char* Name() const override { return "stub"; }
+};
+
+const SensorsTransportStub g_sensorsTransportStub;
}
-MultihalSensors::MultihalSensors()
- : m_qemuSensorsFd(qemud_channel_open("sensors"))
+MultihalSensors::MultihalSensors(SensorsTransportFactory stf)
+ : m_sensorsTransportFactory(std::move(stf))
+ , m_sensorsTransport(const_cast<SensorsTransportStub*>(&g_sensorsTransportStub))
, m_batchInfo(getSensorNumber()) {
- if (!m_qemuSensorsFd.ok()) {
- ALOGE("%s:%d: m_qemuSensorsFd is not opened", __func__, __LINE__);
- ::abort();
- }
+ {
+ const auto st = m_sensorsTransportFactory();
- char buffer[64];
- int len = snprintf(buffer, sizeof(buffer),
- "time:%" PRId64, ::android::elapsedRealtimeNano());
- if (qemud_channel_send(m_qemuSensorsFd.get(), buffer, len) < 0) {
- ALOGE("%s:%d: qemud_channel_send failed", __func__, __LINE__);
- ::abort();
- }
+ LOG_ALWAYS_FATAL_IF(!st->Ok(), "%s:%d: sensors transport is not opened",
+ __func__, __LINE__);
- using namespace std::literals;
- const std::string_view kListSensorsCmd = "list-sensors"sv;
+ using namespace std::literals;
+ const std::string_view kListSensorsCmd = "list-sensors"sv;
- if (qemud_channel_send(m_qemuSensorsFd.get(),
- kListSensorsCmd.data(),
- kListSensorsCmd.size()) < 0) {
- ALOGE("%s:%d: qemud_channel_send failed", __func__, __LINE__);
- ::abort();
- }
+ LOG_ALWAYS_FATAL_IF(st->Send(kListSensorsCmd.data(), kListSensorsCmd.size()) < 0,
+ "%s:%d: send for %s failed", __func__, __LINE__, st->Name());
- len = qemud_channel_recv(m_qemuSensorsFd.get(), buffer, sizeof(buffer) - 1);
- if (len < 0) {
- ALOGE("%s:%d: qemud_channel_recv failed", __func__, __LINE__);
- ::abort();
- }
- buffer[len] = 0;
- uint32_t hostSensorsMask = 0;
- if (sscanf(buffer, "%u", &hostSensorsMask) != 1) {
- ALOGE("%s:%d: Can't parse qemud response", __func__, __LINE__);
- ::abort();
- }
+ char buffer[64];
+ const int len = st->Receive(buffer, sizeof(buffer) - 1);
+ LOG_ALWAYS_FATAL_IF(len < 0, "%s:%d: receive for %s failed", __func__, __LINE__,
+ st->Name());
- m_availableSensorsMask = hostSensorsMask
- & ((1u << getSensorNumber()) - 1);
+ buffer[len] = 0;
+ uint32_t hostSensorsMask = 0;
+ LOG_ALWAYS_FATAL_IF(sscanf(buffer, "%u", &hostSensorsMask) != 1,
+ "%s:%d: Can't parse qemud response", __func__, __LINE__);
- ALOGI("%s:%d: host sensors mask=%x, available sensors mask=%x",
- __func__, __LINE__, hostSensorsMask, m_availableSensorsMask);
+ m_availableSensorsMask = hostSensorsMask & ((1u << getSensorNumber()) - 1);
- if (!::android::base::Socketpair(AF_LOCAL, SOCK_STREAM, 0,
- &m_callersFd, &m_sensorThreadFd)) {
- ALOGE("%s:%d: Socketpair failed", __func__, __LINE__);
- ::abort();
+ ALOGI("%s:%d: host sensors mask=%x, available sensors mask=%x",
+ __func__, __LINE__, hostSensorsMask, m_availableSensorsMask);
}
+ LOG_ALWAYS_FATAL_IF(!::android::base::Socketpair(AF_LOCAL, SOCK_STREAM, 0,
+ &m_callersFd, &m_sensorThreadFd),
+ "%s:%d: Socketpair failed", __func__, __LINE__);
+
setAdditionalInfoFrames();
m_sensorThread = std::thread(&MultihalSensors::qemuSensorListenerThread, this);
@@ -90,8 +85,6 @@ MultihalSensors::MultihalSensors()
}
MultihalSensors::~MultihalSensors() {
- setAllQemuSensors(false);
-
m_batchRunning = false;
m_batchUpdated.notify_one();
m_batchThread.join();
@@ -268,14 +261,10 @@ Return<Result> MultihalSensors::batch(const int32_t sensorHandle,
activeSensorsMask >>= 1;
}
- const int delayMs = std::max(1, int(minSamplingPeriodNs / 1000000));
-
- char buffer[64];
- const int len = snprintf(buffer, sizeof(buffer), "set-delay:%d", delayMs);
-
- if (qemud_channel_send(m_qemuSensorsFd.get(), buffer, len) < 0) {
- ALOGE("%s:%d: qemud_channel_send failed", __func__, __LINE__);
- ::abort();
+ const uint32_t sensorsUpdateIntervalMs = std::max(1, int(minSamplingPeriodNs / 1000000));
+ m_protocolState.sensorsUpdateIntervalMs = sensorsUpdateIntervalMs;
+ if (!setSensorsUpdateIntervalMs(*m_sensorsTransport, sensorsUpdateIntervalMs)) {
+ qemuSensorThreadSendCommand(kCMD_RESTART);
}
}
@@ -330,7 +319,6 @@ Return<Result> MultihalSensors::injectSensorData_2_1(const Event& event) {
Return<Result> MultihalSensors::initialize(const sp<IHalProxyCallback>& halProxyCallback) {
std::unique_lock<std::mutex> lock(m_mtx);
- setAllQemuSensors(true); // we need to start sampling sensors for batching
m_opMode = OperationMode::NORMAL;
m_halProxyCallback = halProxyCallback;
return Result::OK;
@@ -418,6 +406,35 @@ bool MultihalSensors::isSensorHandleValid(int sensorHandle) const {
return true;
}
+void MultihalSensors::qemuSensorListenerThread() {
+ while (true) {
+ const auto st = m_sensorsTransportFactory();
+
+ LOG_ALWAYS_FATAL_IF(!setSensorsGuestTime(
+ *st, ::android::elapsedRealtimeNano()));
+ LOG_ALWAYS_FATAL_IF(!setSensorsUpdateIntervalMs(
+ *st, m_protocolState.sensorsUpdateIntervalMs));
+ LOG_ALWAYS_FATAL_IF(!setAllSensorsReporting(
+ *st, m_availableSensorsMask, true));
+
+ {
+ std::unique_lock<std::mutex> lock(m_mtx);
+ m_sensorsTransport = st.get();
+ }
+
+ const bool cont = qemuSensorListenerThreadImpl(st->Fd());
+
+ {
+ std::unique_lock<std::mutex> lock(m_mtx);
+ m_sensorsTransport = const_cast<SensorsTransportStub*>(&g_sensorsTransportStub);
+ }
+
+ if (!cont) {
+ break;
+ }
+ }
+}
+
void MultihalSensors::batchThread() {
while (m_batchRunning) {
std::unique_lock<std::mutex> lock(m_mtx);
diff --git a/sensors/multihal_sensors_epoll.cpp b/sensors/multihal_sensors_epoll.cpp
index 63b978ac..5ce6eb6a 100644
--- a/sensors/multihal_sensors_epoll.cpp
+++ b/sensors/multihal_sensors_epoll.cpp
@@ -38,14 +38,12 @@ int qemuSensortThreadRcvCommand(const int fd) {
}
} // namespace
-void MultihalSensors::qemuSensorListenerThread() {
+bool MultihalSensors::qemuSensorListenerThreadImpl(const int transportFd) {
const unique_fd epollFd(epoll_create1(0));
- if (!epollFd.ok()) {
- ALOGE("%s:%d: epoll_create1 failed", __func__, __LINE__);
- ::abort();
- }
+ LOG_ALWAYS_FATAL_IF(!epollFd.ok(), "%s:%d: epoll_create1 failed",
+ __func__, __LINE__);
- epollCtlAdd(epollFd.get(), m_qemuSensorsFd.get());
+ epollCtlAdd(epollFd.get(), transportFd);
epollCtlAdd(epollFd.get(), m_sensorThreadFd.get());
while (true) {
@@ -55,9 +53,9 @@ void MultihalSensors::qemuSensorListenerThread() {
events, 2,
kTimeoutMs));
if (n < 0) {
- ALOGE("%s:%d: epoll_wait failed with '%s'",
+ ALOGW("%s:%d: epoll_wait failed with '%s'",
__func__, __LINE__, strerror(errno));
- continue;
+ return true;
}
for (int i = 0; i < n; ++i) {
@@ -65,33 +63,35 @@ void MultihalSensors::qemuSensorListenerThread() {
const int fd = ev->data.fd;
const int ev_events = ev->events;
- if (fd == m_qemuSensorsFd.get()) {
+ if (fd == transportFd) {
if (ev_events & (EPOLLERR | EPOLLHUP)) {
- ALOGE("%s:%d: epoll_wait: devFd has an error, ev_events=%x",
- __func__, __LINE__, ev_events);
- ::abort();
+ ALOGW("%s:%d: epoll_wait: transportFd has an error, "
+ "ev_events=%x", __func__, __LINE__, ev_events);
+ return true;
} else if (ev_events & EPOLLIN) {
std::unique_lock<std::mutex> lock(m_mtx);
- parseQemuSensorEventLocked(m_qemuSensorsFd.get(), &m_protocolState);
+ parseQemuSensorEventLocked(&m_protocolState);
}
} else if (fd == m_sensorThreadFd.get()) {
if (ev_events & (EPOLLERR | EPOLLHUP)) {
- ALOGE("%s:%d: epoll_wait: threadsFd has an error, ev_events=%x",
- __func__, __LINE__, ev_events);
- ::abort();
+ LOG_ALWAYS_FATAL("%s:%d: epoll_wait: threadFd has an error, "
+ "ev_events=%x", __func__, __LINE__, ev_events);
} else if (ev_events & EPOLLIN) {
const int cmd = qemuSensortThreadRcvCommand(fd);
- if (cmd == kCMD_QUIT) {
- return;
- } else {
- ALOGE("%s:%d: qemuSensortThreadRcvCommand returned unexpected command, cmd=%d",
+ switch (cmd) {
+ case kCMD_QUIT: return false;
+ case kCMD_RESTART: return true;
+ default:
+ ALOGW("%s:%d: qemuSensortThreadRcvCommand "
+ "returned unexpected command, cmd=%d",
__func__, __LINE__, cmd);
- ::abort();
+ return true;
}
}
} else {
- ALOGE("%s:%d: epoll_wait() returned unexpected fd",
+ ALOGW("%s:%d: epoll_wait() returned unexpected fd",
__func__, __LINE__);
+ return true;
}
}
}
diff --git a/sensors/multihal_sensors_qemu.cpp b/sensors/multihal_sensors_qemu.cpp
index 19df6c5a..985612e0 100644
--- a/sensors/multihal_sensors_qemu.cpp
+++ b/sensors/multihal_sensors_qemu.cpp
@@ -14,12 +14,12 @@
* limitations under the License.
*/
+#include <cinttypes>
#include <log/log.h>
#include <utils/SystemClock.h>
#include <math.h>
-#include <qemud.h>
#include <random>
-#include "multihal_sensors.h"
+#include <multihal_sensors.h>
#include "sensor_list.h"
namespace goldfish {
@@ -53,28 +53,29 @@ int64_t weigthedAverage(const int64_t a, int64_t aw, int64_t b, int64_t bw) {
} // namespace
-bool MultihalSensors::activateQemuSensorImpl(const int pipe,
- const int sensorHandle,
- const bool enabled) {
+bool MultihalSensors::setSensorsReportingImpl(SensorsTransport& st,
+ const int sensorHandle,
+ const bool enabled) {
char buffer[64];
int len = snprintf(buffer, sizeof(buffer),
"set:%s:%d",
getQemuSensorNameByHandle(sensorHandle),
(enabled ? 1 : 0));
- if (qemud_channel_send(pipe, buffer, len) < 0) {
- ALOGE("%s:%d: qemud_channel_send failed", __func__, __LINE__);
+ if (st.Send(buffer, len) < 0) {
+ ALOGE("%s:%d: send for %s failed", __func__, __LINE__, st.Name());
return false;
} else {
return true;
}
}
-bool MultihalSensors::setAllQemuSensors(const bool enabled) {
- uint32_t mask = m_availableSensorsMask;
- for (int i = 0; mask; ++i, mask >>= 1) {
- if (mask & 1) {
- if (!activateQemuSensorImpl(m_qemuSensorsFd.get(), i, enabled)) {
+bool MultihalSensors::setAllSensorsReporting(SensorsTransport& st,
+ uint32_t availableSensorsMask,
+ const bool enabled) {
+ for (int i = 0; availableSensorsMask; ++i, availableSensorsMask >>= 1) {
+ if (availableSensorsMask & 1) {
+ if (!setSensorsReportingImpl(st, i, enabled)) {
return false;
}
}
@@ -83,17 +84,39 @@ bool MultihalSensors::setAllQemuSensors(const bool enabled) {
return true;
}
+bool MultihalSensors::setSensorsGuestTime(SensorsTransport& st, const int64_t value) {
+ char buffer[64];
+ int len = snprintf(buffer, sizeof(buffer), "time:%" PRId64, value);
+ if (st.Send(buffer, len) < 0) {
+ ALOGE("%s:%d: send for %s failed", __func__, __LINE__, st.Name());
+ return false;
+ } else {
+ return true;
+ }
+}
+
+bool MultihalSensors::setSensorsUpdateIntervalMs(SensorsTransport& st,
+ const uint32_t intervalMs) {
+ char buffer[64];
+ const int len = snprintf(buffer, sizeof(buffer), "set-delay:%u", intervalMs);
+ if (st.Send(buffer, len) < 0) {
+ ALOGE("%s:%d: send for %s failed", __func__, __LINE__, st.Name());
+ return false;
+ } else {
+ return true;
+ }
+}
+
double MultihalSensors::randomError(float lo, float hi) {
std::uniform_real_distribution<> distribution(lo, hi);
return distribution(gen);
}
-void MultihalSensors::parseQemuSensorEventLocked(const int pipe,
- QemuSensorsProtocolState* state) {
+void MultihalSensors::parseQemuSensorEventLocked(QemuSensorsProtocolState* state) {
char buf[256];
- const int len = qemud_channel_recv(pipe, buf, sizeof(buf) - 1);
+ const int len = m_sensorsTransport->Receive(buf, sizeof(buf) - 1);
if (len < 0) {
- ALOGE("%s:%d: qemud_channel_recv failed", __func__, __LINE__);
+ ALOGE("%s:%d: receive for %s failed", __func__, __LINE__, m_sensorsTransport->Name());
}
const int64_t nowNs = ::android::elapsedRealtimeNano();
buf[len] = 0;
diff --git a/sepolicy/common/file_contexts b/sepolicy/common/file_contexts
index 5ee3aea5..4333297a 100644
--- a/sepolicy/common/file_contexts
+++ b/sepolicy/common/file_contexts
@@ -70,6 +70,13 @@
/vendor/lib(64)?/libdrm.so u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/hw/android\.hardware\.graphics\.mapper@3\.0-impl-ranchu\.so u:object_r:same_process_hal_file:s0
/vendor/lib(64)?/libGoldfishProfiler\.so u:object_r:same_process_hal_file:s0
+/vendor/lib(64)?/dri/.* u:object_r:same_process_hal_file:s0
+/vendor/lib(64)?/hw/android\.hardware\.graphics\.mapper@4\.0-impl\.minigbm\.so u:object_r:same_process_hal_file:s0
+/vendor/lib(64)?/hw/mapper\.minigbm\.so u:object_r:same_process_hal_file:s0
+/vendor/lib(64)?/libminigbm_gralloc.so u:object_r:same_process_hal_file:s0
+/vendor/lib(64)?/libminigbm_gralloc4_utils.so u:object_r:same_process_hal_file:s0
+/vendor/bin/hw/android\.hardware\.graphics\.allocator-service\.minigbm u:object_r:hal_graphics_allocator_default_exec:s0
+/vendor/bin/hw/android\.hardware\.graphics\.allocator@4\.0-service\.minigbm u:object_r:hal_graphics_allocator_default_exec:s0
# data
/data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0
diff --git a/sepolicy/common/platform_app.te b/sepolicy/common/platform_app.te
index 44c22652..1d9ad7e6 100644
--- a/sepolicy/common/platform_app.te
+++ b/sepolicy/common/platform_app.te
@@ -1,2 +1,3 @@
allow platform_app self:vsock_socket create_socket_perms_no_ioctl;
allow platform_app hal_graphics_allocator_default:vsock_socket { read write getattr };
+set_prop(platform_app, radio_control_prop);
diff --git a/tablet/data/etc/display_settings.xml b/tablet/data/etc/display_settings.xml
new file mode 100644
index 00000000..7808e5a5
--- /dev/null
+++ b/tablet/data/etc/display_settings.xml
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<display-settings>
+ <config identifier="0" />
+ <!-- Allow rotation of fixed-orientation activities on the tablet. -->
+ <display
+ name="local:4619827259835644672"
+ ignoreOrientationRequest="true"/>
+</display-settings>
diff --git a/tablet/data/etc/tablet.xml b/tablet/data/etc/tablet.xml
new file mode 100644
index 00000000..7e93c5cb
--- /dev/null
+++ b/tablet/data/etc/tablet.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2023 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.
+-->
+
+<permissions>
+ <!-- Do not support autofocus in tablet devices. -->
+ <unavailable-feature name="android.hardware.camera.autofocus" />
+ <!-- Do not support hinge angle sensors in tablet devices. -->
+ <unavailable-feature name="android.hardware.sensor.hinge_angle" />
+</permissions>
diff --git a/tablet/overlay/frameworks/base/core/res/res/values/config.xml b/tablet/overlay/frameworks/base/core/res/res/values/config.xml
new file mode 100644
index 00000000..08cbf925
--- /dev/null
+++ b/tablet/overlay/frameworks/base/core/res/res/values/config.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2017, 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.
+*/
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Make this 'true' to allow the Emulator to control
+ the state of the headphone/microphone jack -->
+ <bool name="config_useDevInputEventForAudioJack">true</bool>
+
+ <!-- Maximum number of supported users -->
+ <integer name="config_multiuserMaximumUsers">4</integer>
+ <!-- Whether Multiuser UI should be shown -->
+ <bool name="config_enableMultiUserUI">true</bool>
+
+ <integer name="config_deskDockRotation">0</integer>
+
+
+ <!-- Indicate whether closing the lid causes the device to enter the folded state which means
+ to get a smaller screen and opening the lid causes the device to enter the unfolded state
+ which means to get a larger screen. -->
+ <bool name="config_lidControlsDisplayFold">true</bool>
+
+ <!-- Allow testing SoftAP using the simulated interfaces on the emulator. -->
+ <string-array name="config_tether_wifi_regexs">
+ <item>"wlan\\d"</item>
+ </string-array>
+
+
+
+ <!-- This device is able to support the microphone and camera global toggles. -->
+ <bool name="config_supportsMicToggle">true</bool>
+ <bool name="config_supportsCamToggle">true</bool>
+ <!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
+ take precedence over lower ones.
+ See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
+ <string-array name="config_autoTimeSourcesPriority">
+ <item>telephony</item>
+ <item>network</item>
+ </string-array>
+
+
+ <bool name="config_supportMicNearUltrasound">true</bool>
+ <bool name="config_supportSpeakerNearUltrasound">true</bool>
+
+</resources>
diff --git a/tablet/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml b/tablet/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml
new file mode 100644
index 00000000..09d7a88b
--- /dev/null
+++ b/tablet/overlay/frameworks/base/core/res/res/xml/irq_device_map.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2023, 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.
+*/
+-->
+<irq-device-map>
+ <device name="rtc0">
+ <subsystem>Alarm</subsystem>
+ </device>
+</irq-device-map>
diff --git a/tablet/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/tablet/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
new file mode 100644
index 00000000..7b206e46
--- /dev/null
+++ b/tablet/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2015, 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.
+ */
+-->
+
+<resources>
+ <bool name="def_lockscreen_disabled">true</bool>
+ <bool name="def_wifi_on">true</bool>
+ <!-- Allow scanning even if WiFi is disabled -->
+ <integer name="def_wifi_scan_always_available">1</integer>
+
+ <!-- maximize the timeout to INT_MAX about 500+ hours -->
+ <integer name="def_screen_off_timeout">2147483647</integer>
+
+ <!-- Allow users to use both the on-screen keyboard, as well as a real
+ keyboard -->
+ <bool name="def_show_ime_with_hard_keyboard">true</bool>
+</resources>
diff --git a/tasks/emu_img_zip.mk b/tasks/emu_img_zip.mk
index c973e6ad..dc5e502a 100644
--- a/tasks/emu_img_zip.mk
+++ b/tasks/emu_img_zip.mk
@@ -45,19 +45,29 @@ INTERNAL_EMULATOR_PACKAGE_FILES += device/generic/goldfish/data/etc/encryptionke
INTERNAL_EMULATOR_PACKAGE_FILES += device/generic/goldfish/data/etc/userdata.img
INTERNAL_EMULATOR_FEATURE_DIR := .
-ifneq ($(filter sdk_phone64_% sdk_gphone64_%, $(TARGET_PRODUCT)),)
+ifneq ($(filter sdk_phone64_% sdk_gphone64_% sdk_tablet% sdk_gtablet%, $(TARGET_PRODUCT)),)
INTERNAL_EMULATOR_FEATURE_DIR := 64bit
endif
+ADVANCED_FEATURES_FILENAME := advancedFeatures.ini
+ifneq ($(filter %_minigbm, $(TARGET_PRODUCT)),)
+ADVANCED_FEATURES_FILENAME := advancedFeatures.ini.minigbm
+endif
+
+ifneq ($(filter sdk_tablet% sdk_gtablet%, $(TARGET_PRODUCT)),)
+ADVANCED_FEATURES_FILENAME := advancedFeatures.ini.tablet
+endif
+
+ADVANCED_FEATURES_FILES :=
ifeq ($(TARGET_BUILD_VARIANT),user)
-INTERNAL_EMULATOR_PACKAGE_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/user/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/user/$(ADVANCED_FEATURES_FILENAME)
ifeq ($(TARGET_ARCH),arm64)
-INTERNAL_EMULATOR_PACKAGE_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/user/arm64/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/user/arm64/$(ADVANCED_FEATURES_FILENAME)
endif
else
-INTERNAL_EMULATOR_PACKAGE_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/userdebug/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/userdebug/$(ADVANCED_FEATURES_FILENAME)
ifeq ($(TARGET_ARCH),arm64)
-INTERNAL_EMULATOR_PACKAGE_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/userdebug/arm64/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/google/$(INTERNAL_EMULATOR_FEATURE_DIR)/userdebug/arm64/$(ADVANCED_FEATURES_FILENAME)
endif
endif
@@ -82,10 +92,11 @@ EMULATOR_KERNEL_DIST_NAME := kernel-ranchu
endif # x86
endif # arm
-$(INTERNAL_EMULATOR_PACKAGE_TARGET): $(INTERNAL_EMULATOR_PACKAGE_FILES) $(FINAL_INSTALLED_QEMU_SYSTEMIMAGE) $(FINAL_INSTALLED_QEMU_RAMDISKIMAGE) $(FINAL_INSTALLED_QEMU_VENDORIMAGE) $(EMULATOR_KERNEL_FILE) $(PRODUCT_OUT)/userdata.img
+$(INTERNAL_EMULATOR_PACKAGE_TARGET): $(INTERNAL_EMULATOR_PACKAGE_FILES) $(FINAL_INSTALLED_QEMU_SYSTEMIMAGE) $(FINAL_INSTALLED_QEMU_RAMDISKIMAGE) $(FINAL_INSTALLED_QEMU_VENDORIMAGE) $(EMULATOR_KERNEL_FILE) $(ADVANCED_FEATURES_FILES) $(PRODUCT_OUT)/userdata.img
@echo "Package: $@"
$(hide) mkdir -p $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)
$(hide) $(foreach f,$(INTERNAL_EMULATOR_PACKAGE_FILES), $(ACP) $(f) $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)/$(notdir $(f));)
+ $(hide) $(foreach f,$(ADVANCED_FEATURES_FILES), $(ACP) $(f) $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)/advancedFeatures.ini;)
$(hide) ($(ACP) $(EMULATOR_KERNEL_FILE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)/${EMULATOR_KERNEL_DIST_NAME})
$(hide) $(ACP) -r $(PRODUCT_OUT)/data $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)
$(hide) $(SOONG_ZIP) -o $@ -C $(INTERNAL_EMULATOR_PACKAGE_SOURCE) -D $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)
diff --git a/tools/Android.mk b/tools/Android.mk
index 367be42f..50f3b652 100644
--- a/tools/Android.mk
+++ b/tools/Android.mk
@@ -26,17 +26,23 @@ EMU_EXTRA_FILES := \
$(PRODUCT_OUT)/VerifiedBootParams.textproto \
$(foreach p,$(BOARD_SUPER_PARTITION_PARTITION_LIST),$(PRODUCT_OUT)/$(p).img)
+ADVANCED_FEATURES_FILENAME := advancedFeatures.ini
+ifneq ($(filter %_minigbm, $(TARGET_PRODUCT)),)
+ADVANCED_FEATURES_FILENAME := advancedFeatures.ini.minigbm
+ADVANCED_FEATURES_FILES :=
+
+endif
ifeq ($(filter sdk_gphone_%, $(TARGET_PRODUCT)),)
ifeq ($(TARGET_BUILD_VARIANT),user)
-EMU_EXTRA_FILES += device/generic/goldfish/data/etc/user/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/user/$(ADVANCED_FEATURES_FILENAME)
else
-EMU_EXTRA_FILES += device/generic/goldfish/data/etc/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILENAME)
endif
else
ifeq ($(TARGET_BUILD_VARIANT),user)
-EMU_EXTRA_FILES += device/generic/goldfish/data/etc/google/user/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/google/user/$(ADVANCED_FEATURES_FILENAME)
else
-EMU_EXTRA_FILES += device/generic/goldfish/data/etc/google/userdebug/advancedFeatures.ini
+ADVANCED_FEATURES_FILES += device/generic/goldfish/data/etc/google/userdebug/$(ADVANCED_FEATURES_FILENAME)
endif
endif
@@ -65,10 +71,11 @@ endif # arm
$(EMU_EXTRA_TARGET): PRIVATE_PACKAGE_SRC := \
$(call intermediates-dir-for, PACKAGING, emu_extra_target)
-$(EMU_EXTRA_TARGET): $(EMU_EXTRA_FILES) $(EMULATOR_KERNEL_FILE) $(SOONG_ZIP)
+$(EMU_EXTRA_TARGET): $(EMU_EXTRA_FILES) $(ADVANCED_FEATURES_FILES) $(EMULATOR_KERNEL_FILE) $(SOONG_ZIP)
@echo "Package: $@"
rm -rf $@ $(PRIVATE_PACKAGE_SRC)
$(foreach f,$(EMU_EXTRA_FILES), cp $(f) $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/$(notdir $(f)) &&) true
+ $(foreach f,$(ADVANCED_FEATURES_FILES), cp $(f) $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/advancedFeatures.ini &&) true
cp $(EMULATOR_KERNEL_FILE) $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/${EMULATOR_KERNEL_DIST_NAME}
cp -r $(PRODUCT_OUT)/data $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)
mkdir -p $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/system
diff --git a/vendor.mk b/vendor.mk
index 52df1433..cbc324ab 100644
--- a/vendor.mk
+++ b/vendor.mk
@@ -13,299 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-#
-# This file is to configure vendor/data partitions of emulator-related products
-#
-$(call inherit-product-if-exists, frameworks/native/build/phone-xhdpi-2048-dalvik-heap.mk)
-
-# Enable Scoped Storage related
-$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)
-
-DEVICE_MANIFEST_FILE += device/generic/goldfish/manifest.xml
-
-PRODUCT_SOONG_NAMESPACES += \
- device/generic/goldfish \
- device/generic/goldfish-opengl
-
-PRODUCT_VENDOR_PROPERTIES += \
- ro.control_privapp_permissions=enforce \
- ro.crypto.volume.filenames_mode=aes-256-cts \
- ro.hardware.audio.tinyalsa.period_count=4 \
- ro.hardware.audio.tinyalsa.period_size_multiplier=4 \
- ro.hardware.audio.tinyalsa.host_latency_ms=30 \
- ro.hardware.power=ranchu \
- ro.hardware.vulkan=ranchu \
- ro.incremental.enable=yes \
- ro.logd.size=1M \
- ro.kernel.qemu=1 \
- ro.soc.manufacturer=AOSP \
- ro.soc.model=ranchu \
- ro.surface_flinger.supports_background_blur=1 \
- ro.zygote.disable_gl_preload=1 \
- debug.sf.vsync_reactor_ignore_present_fences=true \
- debug.stagefright.c2inputsurface=-1 \
- debug.stagefright.ccodec=4 \
- graphics.gpu.profiler.support=true \
- persist.sys.zram_enabled=1 \
- wifi.direct.interface=p2p-dev-wlan0 \
- wifi.interface=wlan0 \
-
-# Device modules
-PRODUCT_PACKAGES += \
- android.hardware.drm-service-lazy.clearkey \
- android.hardware.gatekeeper@1.0-service.software \
- android.hardware.usb-service.example \
- vulkan.ranchu \
- libandroidemu \
- libOpenglCodecCommon \
- libOpenglSystemCommon \
- qemu-export-property \
- qemu-props \
- stagefright \
- android.hardware.graphics.allocator@3.0-service.ranchu \
- android.hardware.graphics.mapper@3.0-impl-ranchu \
- android.hardware.graphics.composer3-service.ranchu \
- toybox_vendor \
- android.hardware.wifi-service \
- android.hardware.media.c2@1.0-service-goldfish \
- libcodec2_goldfish_vp8dec \
- libcodec2_goldfish_vp9dec \
- libcodec2_goldfish_avcdec \
- libcodec2_goldfish_hevcdec \
- sh_vendor \
- local_time.default \
- SdkSetup \
- goldfish_overlay_connectivity_gsi \
- MultiDisplayProvider \
- libGoldfishProfiler \
- dlkm_loader
-
-ifneq ($(EMULATOR_DISABLE_RADIO),true)
-PRODUCT_PACKAGES += \
- libcuttlefish-ril-2 \
- libgoldfish-rild \
- EmulatorRadioConfig \
- EmulatorTetheringConfigOverlay
-
-DEVICE_MANIFEST_FILE += device/generic/goldfish/manifest.radio.xml
-DISABLE_RILD_OEM_HOOK := true
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_BIOMETRICS), true)
-PRODUCT_PACKAGES += \
- android.hardware.biometrics.fingerprint-service.ranchu \
- android.hardware.biometrics.face-service.example \
-
-PRODUCT_COPY_FILES += \
- frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml \
- frameworks/native/data/etc/android.hardware.biometrics.face.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.biometrics.face.xml \
-
-endif
-
-ifneq ($(BUILD_EMULATOR_OPENGL),false)
-PRODUCT_PACKAGES += \
- libGLESv1_CM_emulation \
- lib_renderControl_enc \
- libEGL_emulation \
- libGLESv2_enc \
- libvulkan_enc \
- libGLESv2_emulation \
- libGLESv1_enc \
- libEGL_angle \
- libGLESv1_CM_angle \
- libGLESv2_angle
-endif
-
-# Enable bluetooth
-PRODUCT_PACKAGES += \
- android.hardware.bluetooth-service.default \
- android.hardware.bluetooth.audio-impl \
- bt_vhci_forwarder \
-
-# Bluetooth hardware properties.
-ifeq ($(TARGET_PRODUCT_PROP),)
-TARGET_PRODUCT_PROP := $(LOCAL_PATH)/bluetooth.prop
-endif
-
-# Bluetooth se policies
-BOARD_SEPOLICY_DIRS += system/bt/vendor_libs/linux/sepolicy
-
-PRODUCT_PACKAGES += \
- android.hardware.security.keymint-service
-PRODUCT_COPY_FILES += \
- frameworks/native/data/etc/android.hardware.keystore.app_attest_key.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.keystore.app_attest_key.xml
-
-PRODUCT_PACKAGES += \
- DisplayCutoutEmulationEmu01Overlay \
- EmulationPixel7ProOverlay \
- SystemUIEmulationPixel7ProOverlay \
- EmulationPixel7Overlay \
- SystemUIEmulationPixel7Overlay \
- EmulationPixel6ProOverlay \
- SystemUIEmulationPixel6ProOverlay \
- EmulationPixel6Overlay \
- SystemUIEmulationPixel6Overlay \
- EmulationPixel6aOverlay \
- SystemUIEmulationPixel6aOverlay \
- EmulationPixel5Overlay \
- SystemUIEmulationPixel5Overlay \
- EmulationPixel4XLOverlay \
- SystemUIEmulationPixel4XLOverlay \
- EmulationPixel4Overlay \
- SystemUIEmulationPixel4Overlay \
- EmulationPixel4aOverlay \
- SystemUIEmulationPixel4aOverlay \
- EmulationPixel3XLOverlay \
- SystemUIEmulationPixel3XLOverlay \
- EmulationPixel3Overlay \
- SystemUIEmulationPixel3Overlay \
- EmulationPixel3aOverlay \
- SystemUIEmulationPixel3aOverlay \
- EmulationPixel3aXLOverlay \
- SystemUIEmulationPixel3aXLOverlay \
- EmulationPixel2XLOverlay \
- NavigationBarMode2ButtonOverlay \
-
-ifneq ($(EMULATOR_VENDOR_NO_GNSS),true)
-PRODUCT_PACKAGES += android.hardware.gnss-service.ranchu
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_SENSORS),true)
-PRODUCT_PACKAGES += \
- android.hardware.sensors-service.multihal \
- android.hardware.sensors@2.1-impl.ranchu
-# TODO(rkir):
-# add a soong namespace and move this into a.h.sensors@2.1-impl.ranchu
-# as prebuilt_etc. For now soong_namespace causes a build break because the fw
-# refers to our wifi HAL in random places.
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/sensors/hals.conf:$(TARGET_COPY_OUT_VENDOR)/etc/sensors/hals.conf
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_CAMERA),true)
-PRODUCT_SOONG_NAMESPACES += \
- hardware/google/camera \
- hardware/google/camera/devices/EmulatedCamera \
-
-PRODUCT_PACKAGES += \
- android.hardware.camera.provider.ranchu \
- android.hardware.camera.provider@2.7-service-google \
- libgooglecamerahwl_impl \
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/camera/media/profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \
- device/generic/goldfish/camera/media/codecs_google_video_default.xml:${TARGET_COPY_OUT_VENDOR}/etc/media_codecs_google_video.xml \
- device/generic/goldfish/camera/media/codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
- device/generic/goldfish/camera/media/codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
- device/generic/goldfish/camera/media/codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \
- frameworks/native/data/etc/android.hardware.camera.ar.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.ar.xml \
- frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.flash-autofocus.xml \
- frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \
- frameworks/native/data/etc/android.hardware.camera.front.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.front.xml \
- frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml \
- frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml \
- hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_back.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_back.json \
- hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_front.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_front.json \
- hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_depth.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_depth.json \
-
-endif
-
-ifneq ($(EMULATOR_VENDOR_NO_SOUND),true)
-PRODUCT_PACKAGES += \
- android.hardware.audio.service \
- android.hardware.audio@7.1-impl.ranchu \
- android.hardware.audio.effect@7.0-impl \
-
-DEVICE_MANIFEST_FILE += device/generic/goldfish/audio/android.hardware.audio.effects@7.0.xml
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/audio/policy/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \
- device/generic/goldfish/audio/policy/primary_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/primary_audio_policy_configuration.xml \
- frameworks/av/services/audiopolicy/config/bluetooth_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_audio_policy_configuration_7_0.xml \
- frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
- frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
- frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
- frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
-
-endif
-
-# WiFi: vendor side
-PRODUCT_PACKAGES += \
- mac80211_create_radios \
- dhcpclient \
- hostapd \
- wpa_supplicant \
-
-# Window Extensions
-$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
-
-# "Hello, world!" HAL implementations, mostly for compliance
-PRODUCT_PACKAGES += \
- android.hardware.atrace@1.0-service \
- android.hardware.authsecret-service.example \
- android.hardware.contexthub-service.example \
- android.hardware.dumpstate-service.example \
- android.hardware.health-service.example \
- android.hardware.health.storage-service.default \
- android.hardware.identity-service.example \
- android.hardware.lights-service.example \
- android.hardware.neuralnetworks-shim-service-sample \
- android.hardware.neuralnetworks-service-sample-all \
- android.hardware.neuralnetworks-service-sample-limited \
- android.hardware.power-service.example \
- android.hardware.power.stats-service.example \
- android.hardware.rebootescrow-service.default \
- android.hardware.thermal@2.0-service.mock \
- android.hardware.vibrator-service.example
-
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/data/etc/dtb.img:dtb.img \
- device/generic/goldfish/emulator-info.txt:data/misc/emulator/version.txt \
- device/generic/goldfish/data/etc/apns-conf.xml:data/misc/apns/apns-conf.xml \
- device/generic/goldfish/radio/RadioConfig/radioconfig.xml:data/misc/emulator/config/radioconfig.xml \
- device/generic/goldfish/data/etc/iccprofile_for_sim0.xml:data/misc/modem_simulator/iccprofile_for_sim0.xml \
- device/google/cuttlefish/host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml:data/misc/modem_simulator/iccprofile_for_carrierapitests.xml \
- device/generic/goldfish/data/etc/numeric_operator.xml:data/misc/modem_simulator/etc/modem_simulator/files/numeric_operator.xml \
- device/generic/goldfish/data/etc/local.prop:data/local.prop \
- device/generic/goldfish/init.qemu-adb-keys.sh:$(TARGET_COPY_OUT_SYSTEM_EXT)/bin/init.qemu-adb-keys.sh \
- device/generic/goldfish/init.ranchu-core.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-core.sh \
- device/generic/goldfish/init.ranchu-net.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-net.sh \
- device/generic/goldfish/init.ranchu.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.ranchu.rc \
- device/generic/goldfish/init.system_ext.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.system_ext.rc \
- device/generic/goldfish/ueventd.ranchu.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc \
- device/generic/goldfish/input/virtio_input_rotary.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_rotary.idc \
- device/generic/goldfish/input/qwerty2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/qwerty2.idc \
- device/generic/goldfish/input/qwerty.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/qwerty.kl \
- device/generic/goldfish/input/virtio_input_multi_touch_1.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_1.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_2.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_3.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_3.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_4.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_4.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_5.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_5.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_6.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_6.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_7.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_7.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_8.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_8.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_9.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_9.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_10.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_10.idc \
- device/generic/goldfish/input/virtio_input_multi_touch_11.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_11.idc \
- device/generic/goldfish/display_settings_app_compat.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings_app_compat.xml \
- device/generic/goldfish/display_settings_freeform.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings_freeform.xml \
- device/generic/goldfish/display_settings.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings.xml \
- device/generic/goldfish/data/etc/config.ini:config.ini \
- device/generic/goldfish/wifi/wpa_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \
- frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml \
- frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \
- frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
- frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
- frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \
- device/generic/goldfish/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml \
- frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \
- frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \
- frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
- frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \
- frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \
- frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \
- frameworks/native/data/etc/android.software.vulkan.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \
- frameworks/native/data/etc/android.software.opengles.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml \
- frameworks/native/data/etc/android.software.autofill.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.autofill.xml \
- frameworks/native/data/etc/android.software.verified_boot.xml:${TARGET_COPY_OUT_PRODUCT}/etc/permissions/android.software.verified_boot.xml \
- device/generic/goldfish/data/etc/permissions/privapp-permissions-goldfish.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/privapp-permissions-goldfish.xml \
+$(call inherit-product, $(LOCAL_PATH)/vendor_common.mk)
diff --git a/vendor_common.mk b/vendor_common.mk
new file mode 100644
index 00000000..a0d5479f
--- /dev/null
+++ b/vendor_common.mk
@@ -0,0 +1,349 @@
+#
+# Copyright (C) 2023 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.
+
+#
+# This file is to configure vendor/data partitions of emulator-related products
+#
+$(call inherit-product-if-exists, frameworks/native/build/phone-xhdpi-2048-dalvik-heap.mk)
+
+# Enable Scoped Storage related
+$(call inherit-product, $(SRC_TARGET_DIR)/product/emulated_storage.mk)
+
+DEVICE_MANIFEST_FILE += device/generic/goldfish/manifest.xml
+
+PRODUCT_SOONG_NAMESPACES += \
+ device/generic/goldfish \
+ device/generic/goldfish-opengl
+
+# RKPD
+PRODUCT_PRODUCT_PROPERTIES += \
+ remote_provisioning.enable_rkpd=true \
+ remote_provisioning.hostname=remoteprovisioning.googleapis.com
+
+PRODUCT_VENDOR_PROPERTIES += \
+ ro.control_privapp_permissions=enforce \
+ ro.crypto.volume.filenames_mode=aes-256-cts \
+ ro.hardware.audio.tinyalsa.period_count=4 \
+ ro.hardware.audio.tinyalsa.period_size_multiplier=2 \
+ ro.hardware.audio.tinyalsa.host_latency_ms=80 \
+ ro.hardware.power=ranchu \
+ ro.hardware.vulkan=ranchu \
+ ro.incremental.enable=yes \
+ ro.logd.size=1M \
+ ro.kernel.qemu=1 \
+ ro.soc.manufacturer=AOSP \
+ ro.soc.model=ranchu \
+ ro.surface_flinger.supports_background_blur=1 \
+ ro.zygote.disable_gl_preload=1 \
+ debug.sf.vsync_reactor_ignore_present_fences=true \
+ debug.stagefright.c2inputsurface=-1 \
+ debug.stagefright.ccodec=4 \
+ persist.sys.zram_enabled=1 \
+ wifi.direct.interface=p2p-dev-wlan0 \
+ wifi.interface=wlan0 \
+
+# Device modules
+PRODUCT_PACKAGES += \
+ android.hardware.drm-service-lazy.clearkey \
+ android.hardware.gatekeeper@1.0-service.software \
+ android.hardware.usb-service.example \
+ vulkan.ranchu \
+ libandroidemu \
+ libOpenglCodecCommon \
+ libOpenglSystemCommon \
+ qemu-export-property \
+ qemu-props \
+ stagefright \
+ android.hardware.graphics.composer3-service.ranchu \
+ toybox_vendor \
+ android.hardware.wifi-service \
+ android.hardware.media.c2@1.0-service-goldfish \
+ libcodec2_goldfish_vp8dec \
+ libcodec2_goldfish_vp9dec \
+ libcodec2_goldfish_avcdec \
+ libcodec2_goldfish_hevcdec \
+ sh_vendor \
+ local_time.default \
+ SdkSetup \
+ goldfish_overlay_connectivity_gsi \
+ MultiDisplayProvider \
+ libGoldfishProfiler \
+ dlkm_loader
+
+ifneq ($(filter %_minigbm, $(TARGET_PRODUCT)),)
+PRODUCT_VENDOR_PROPERTIES += ro.hardware.gralloc=minigbm
+PRODUCT_PACKAGES += \
+ android.hardware.graphics.allocator-service.minigbm \
+ android.hardware.graphics.mapper@4.0-impl.minigbm \
+ mapper.minigbm
+else
+PRODUCT_VENDOR_PROPERTIES += ro.hardware.gralloc=ranchu
+PRODUCT_PACKAGES += \
+ android.hardware.graphics.allocator@3.0-service.ranchu \
+ android.hardware.graphics.mapper@3.0-impl-ranchu
+endif
+
+ifneq ($(EMULATOR_DISABLE_RADIO),true)
+PRODUCT_PACKAGES += \
+ libcuttlefish-ril-2 \
+ libgoldfish-rild \
+ EmulatorRadioConfig \
+ EmulatorTetheringConfigOverlay
+
+DEVICE_MANIFEST_FILE += device/generic/goldfish/manifest.radio.xml
+DISABLE_RILD_OEM_HOOK := true
+endif
+
+ifneq ($(EMULATOR_VENDOR_NO_BIOMETRICS), true)
+PRODUCT_PACKAGES += \
+ android.hardware.biometrics.fingerprint-service.ranchu \
+ android.hardware.biometrics.face-service.example \
+
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.fingerprint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.fingerprint.xml \
+ frameworks/native/data/etc/android.hardware.biometrics.face.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.biometrics.face.xml \
+
+endif
+
+ifneq ($(BUILD_EMULATOR_OPENGL),false)
+PRODUCT_PACKAGES += \
+ libGLESv1_CM_emulation \
+ lib_renderControl_enc \
+ libEGL_emulation \
+ libGLESv2_enc \
+ libvulkan_enc \
+ libGLESv2_emulation \
+ libGLESv1_enc \
+ libEGL_angle \
+ libGLESv1_CM_angle \
+ libGLESv2_angle
+endif
+
+# Enable bluetooth
+PRODUCT_PACKAGES += \
+ android.hardware.bluetooth-service.default \
+ android.hardware.bluetooth.audio-impl \
+ bt_vhci_forwarder \
+
+# Bluetooth hardware properties.
+ifeq ($(TARGET_PRODUCT_PROP),)
+TARGET_PRODUCT_PROP := $(LOCAL_PATH)/bluetooth.prop
+endif
+
+# Bluetooth se policies
+BOARD_SEPOLICY_DIRS += system/bt/vendor_libs/linux/sepolicy
+
+PRODUCT_PACKAGES += \
+ android.hardware.security.keymint-service
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.keystore.app_attest_key.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.keystore.app_attest_key.xml
+
+PRODUCT_PACKAGES += \
+ DisplayCutoutEmulationEmu01Overlay \
+ EmulationPixelFoldOverlay \
+ SystemUIEmulationPixelFoldOverlay \
+ EmulationPixel8ProOverlay \
+ SystemUIEmulationPixel8ProOverlay \
+ EmulationPixel8Overlay \
+ SystemUIEmulationPixel8Overlay \
+ EmulationPixel7ProOverlay \
+ SystemUIEmulationPixel7ProOverlay \
+ EmulationPixel7Overlay \
+ SystemUIEmulationPixel7Overlay \
+ EmulationPixel7aOverlay \
+ SystemUIEmulationPixel7aOverlay \
+ EmulationPixel6ProOverlay \
+ SystemUIEmulationPixel6ProOverlay \
+ EmulationPixel6Overlay \
+ SystemUIEmulationPixel6Overlay \
+ EmulationPixel6aOverlay \
+ SystemUIEmulationPixel6aOverlay \
+ EmulationPixel5Overlay \
+ SystemUIEmulationPixel5Overlay \
+ EmulationPixel4XLOverlay \
+ SystemUIEmulationPixel4XLOverlay \
+ EmulationPixel4Overlay \
+ SystemUIEmulationPixel4Overlay \
+ EmulationPixel4aOverlay \
+ SystemUIEmulationPixel4aOverlay \
+ EmulationPixel3XLOverlay \
+ SystemUIEmulationPixel3XLOverlay \
+ EmulationPixel3Overlay \
+ SystemUIEmulationPixel3Overlay \
+ EmulationPixel3aOverlay \
+ SystemUIEmulationPixel3aOverlay \
+ EmulationPixel3aXLOverlay \
+ SystemUIEmulationPixel3aXLOverlay \
+ EmulationPixel2XLOverlay \
+ NavigationBarMode2ButtonOverlay \
+
+ifneq ($(EMULATOR_VENDOR_NO_GNSS),true)
+PRODUCT_PACKAGES += android.hardware.gnss-service.ranchu
+endif
+
+ifneq ($(EMULATOR_VENDOR_NO_SENSORS),true)
+PRODUCT_PACKAGES += \
+ android.hardware.sensors-service.multihal \
+ android.hardware.sensors@2.1-impl.ranchu
+# TODO(rkir):
+# add a soong namespace and move this into a.h.sensors@2.1-impl.ranchu
+# as prebuilt_etc. For now soong_namespace causes a build break because the fw
+# refers to our wifi HAL in random places.
+PRODUCT_COPY_FILES += \
+ device/generic/goldfish/sensors/hals.conf:$(TARGET_COPY_OUT_VENDOR)/etc/sensors/hals.conf
+endif
+
+ifneq ($(EMULATOR_VENDOR_NO_CAMERA),true)
+PRODUCT_SOONG_NAMESPACES += \
+ hardware/google/camera \
+ hardware/google/camera/devices/EmulatedCamera \
+
+PRODUCT_PACKAGES += \
+ android.hardware.camera.provider.ranchu \
+ android.hardware.camera.provider@2.7-service-google \
+ libgooglecamerahwl_impl \
+
+PRODUCT_COPY_FILES += \
+ device/generic/goldfish/camera/media/profiles.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_profiles_V1_0.xml \
+ device/generic/goldfish/camera/media/codecs_google_video_default.xml:${TARGET_COPY_OUT_VENDOR}/etc/media_codecs_google_video.xml \
+ device/generic/goldfish/camera/media/codecs.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs.xml \
+ device/generic/goldfish/camera/media/codecs_performance.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance.xml \
+ device/generic/goldfish/camera/media/codecs_performance_c2.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_performance_c2.xml \
+ frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.flash-autofocus.xml \
+ frameworks/native/data/etc/android.hardware.camera.concurrent.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.concurrent.xml \
+ frameworks/native/data/etc/android.hardware.camera.front.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.front.xml \
+ frameworks/native/data/etc/android.hardware.camera.full.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.full.xml \
+ frameworks/native/data/etc/android.hardware.camera.raw.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.raw.xml \
+ hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_back.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_back.json \
+ hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_front.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_front.json \
+ hardware/google/camera/devices/EmulatedCamera/hwl/configs/emu_camera_depth.json:$(TARGET_COPY_OUT_VENDOR)/etc/config/emu_camera_depth.json \
+
+endif
+
+ifneq ($(EMULATOR_VENDOR_NO_SOUND),true)
+PRODUCT_PACKAGES += \
+ android.hardware.audio.service \
+ android.hardware.audio@7.1-impl.ranchu \
+ android.hardware.audio.effect@7.0-impl \
+
+DEVICE_MANIFEST_FILE += device/generic/goldfish/audio/android.hardware.audio.effects@7.0.xml
+
+PRODUCT_COPY_FILES += \
+ device/generic/goldfish/audio/policy/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \
+ device/generic/goldfish/audio/policy/primary_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/primary_audio_policy_configuration.xml \
+ frameworks/av/services/audiopolicy/config/bluetooth_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_audio_policy_configuration_7_0.xml \
+ frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
+ frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
+ frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
+ frameworks/av/media/libeffects/data/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
+
+endif
+
+# WiFi: vendor side
+PRODUCT_PACKAGES += \
+ mac80211_create_radios \
+ dhcpclient \
+ hostapd \
+ wpa_supplicant \
+
+# Window Extensions
+$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
+
+# "Hello, world!" HAL implementations, mostly for compliance
+PRODUCT_PACKAGES += \
+ android.hardware.atrace@1.0-service \
+ android.hardware.authsecret-service.example \
+ android.hardware.contexthub-service.example \
+ android.hardware.dumpstate-service.example \
+ android.hardware.health-service.example \
+ android.hardware.health.storage-service.default \
+ android.hardware.lights-service.example \
+ android.hardware.neuralnetworks-shim-service-sample \
+ android.hardware.neuralnetworks-service-sample-all \
+ android.hardware.neuralnetworks-service-sample-limited \
+ android.hardware.power-service.example \
+ android.hardware.power.stats-service.example \
+ android.hardware.rebootescrow-service.default \
+ android.hardware.thermal@2.0-service.mock \
+ android.hardware.vibrator-service.example
+
+# TVs don't use a hardware identity service.
+ifneq ($(PRODUCT_IS_ATV_SDK),true)
+ PRODUCT_PACKAGES += \
+ android.hardware.identity-service.example
+endif
+
+PRODUCT_COPY_FILES += \
+ device/generic/goldfish/data/etc/dtb.img:dtb.img \
+ device/generic/goldfish/emulator-info.txt:data/misc/emulator/version.txt \
+ device/generic/goldfish/data/etc/apns-conf.xml:data/misc/apns/apns-conf.xml \
+ device/generic/goldfish/radio/RadioConfig/radioconfig.xml:data/misc/emulator/config/radioconfig.xml \
+ device/generic/goldfish/data/etc/iccprofile_for_sim0.xml:data/misc/modem_simulator/iccprofile_for_sim0.xml \
+ device/google/cuttlefish/host/commands/modem_simulator/files/iccprofile_for_sim0_for_CtsCarrierApiTestCases.xml:data/misc/modem_simulator/iccprofile_for_carrierapitests.xml \
+ device/generic/goldfish/data/etc/numeric_operator.xml:data/misc/modem_simulator/etc/modem_simulator/files/numeric_operator.xml \
+ device/generic/goldfish/data/etc/local.prop:data/local.prop \
+ device/generic/goldfish/init.qemu-adb-keys.sh:$(TARGET_COPY_OUT_SYSTEM_EXT)/bin/init.qemu-adb-keys.sh \
+ device/generic/goldfish/init.ranchu-core.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-core.sh \
+ device/generic/goldfish/init.ranchu-net.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.ranchu-net.sh \
+ device/generic/goldfish/init.ranchu.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.ranchu.rc \
+ device/generic/goldfish/init.system_ext.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.system_ext.rc \
+ device/generic/goldfish/ueventd.ranchu.rc:$(TARGET_COPY_OUT_VENDOR)/etc/ueventd.rc \
+ device/generic/goldfish/input/virtio_input_rotary.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_rotary.idc \
+ device/generic/goldfish/input/qwerty2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/qwerty2.idc \
+ device/generic/goldfish/input/qwerty.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/qwerty.kl \
+ device/generic/goldfish/input/virtio_input_multi_touch_1.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_1.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_2.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_2.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_3.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_3.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_4.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_4.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_5.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_5.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_6.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_6.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_7.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_7.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_8.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_8.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_9.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_9.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_10.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_10.idc \
+ device/generic/goldfish/input/virtio_input_multi_touch_11.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_11.idc \
+ device/generic/goldfish/display_settings_app_compat.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings_app_compat.xml \
+ device/generic/goldfish/display_settings_freeform.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings_freeform.xml \
+ device/generic/goldfish/display_settings.xml:$(TARGET_COPY_OUT_VENDOR)/etc/display_settings.xml \
+ device/generic/goldfish/pixel_fold/device_state_configuration.xml:/data/misc/pixel_fold/devicestate/device_state_configuration.xml \
+ device/generic/goldfish/pixel_fold/display_layout_configuration.xml:/data/misc/pixel_fold/displayconfig/display_layout_configuration.xml \
+ device/generic/goldfish/pixel_fold/display_settings.xml:/data/misc/pixel_fold/display_settings.xml \
+ device/generic/goldfish/data/etc/config.ini:config.ini \
+ device/generic/goldfish/wifi/wpa_supplicant.conf:$(TARGET_COPY_OUT_VENDOR)/etc/wifi/wpa_supplicant.conf \
+ frameworks/native/data/etc/android.hardware.bluetooth_le.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth_le.xml \
+ frameworks/native/data/etc/android.hardware.bluetooth.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.bluetooth.xml \
+ frameworks/native/data/etc/android.hardware.wifi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.xml \
+ frameworks/native/data/etc/android.hardware.wifi.passpoint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.passpoint.xml \
+ frameworks/native/data/etc/android.hardware.wifi.direct.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.direct.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_audio.xml \
+ frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:$(TARGET_COPY_OUT_VENDOR)/etc/media_codecs_google_telephony.xml \
+ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.level-1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.version-1_3.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version.xml \
+ frameworks/native/data/etc/android.software.vulkan.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level.xml \
+ frameworks/native/data/etc/android.software.opengles.deqp.level-2023-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml \
+ frameworks/native/data/etc/android.software.autofill.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.autofill.xml \
+ frameworks/native/data/etc/android.software.verified_boot.xml:${TARGET_COPY_OUT_PRODUCT}/etc/permissions/android.software.verified_boot.xml \
+ device/generic/goldfish/data/etc/permissions/privapp-permissions-goldfish.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/privapp-permissions-goldfish.xml \
+ device/generic/goldfish/data/etc/permissions/privapp-permissions-multidisplay.xml:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/permissions/privapp-permissions-multidisplay.xml \
+
+ifneq ($(EMULATOR_DISABLE_RADIO),true)
+# Android TV ingests this file, but declares its own set of hardware permissions.
+ifneq ($(PRODUCT_IS_ATV_SDK),true)
+ PRODUCT_COPY_FILES+= \
+ device/generic/goldfish/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
+endif
+endif
diff --git a/x86-vendor.mk b/x86-vendor.mk
index c1fdd290..8582cfad 100644
--- a/x86-vendor.mk
+++ b/x86-vendor.mk
@@ -1,5 +1,9 @@
include device/generic/goldfish/x86_64-kernel.mk
+ADVANCED_FEATURES_FILE := advancedFeatures.ini
+ifneq ($(filter %_minigbm, $(TARGET_PRODUCT)),)
+ADVANCED_FEATURES_FILE := advancedFeatures.ini.minigbm
+endif
PRODUCT_PROPERTY_OVERRIDES += \
vendor.rild.libpath=/vendor/lib/libgoldfish-ril.so
@@ -9,20 +13,19 @@ PRODUCT_PROPERTY_OVERRIDES += \
# entirely appropriate to inherit from for on-device configurations.
PRODUCT_COPY_FILES += \
device/generic/goldfish/data/etc/config.ini.xl:config.ini \
- device/generic/goldfish/data/etc/advancedFeatures.ini:advancedFeatures.ini \
+ device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILE):advancedFeatures.ini \
device/generic/goldfish/data/etc/encryptionkey.img:encryptionkey.img \
$(EMULATOR_KERNEL_FILE):kernel-ranchu-64
PRODUCT_SDK_ADDON_COPY_FILES += \
- device/generic/goldfish/data/etc/advancedFeatures.ini:images/x86/advancedFeatures.ini \
+ device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILE):images/x86/advancedFeatures.ini \
device/generic/goldfish/data/etc/encryptionkey.img:images/x86/encryptionkey.img \
$(EMULATOR_KERNEL_FILE):images/x86/kernel-ranchu-64
PRODUCT_PROPERTY_OVERRIDES += \
ro.crypto.dm_default_key.options_format.version=2
-PRODUCT_SHIPPING_API_LEVEL := 33
-PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false
+PRODUCT_SHIPPING_API_LEVEL := 34
TARGET_USES_MKE2FS := true
PRODUCT_COPY_FILES += \
diff --git a/x86_64-kernel.mk b/x86_64-kernel.mk
index d57cf6c0..57ccb983 100644
--- a/x86_64-kernel.mk
+++ b/x86_64-kernel.mk
@@ -1,4 +1,5 @@
TARGET_KERNEL_USE ?= 6.1
+PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS ?= false
KERNEL_ARTIFACTS_PATH := kernel/prebuilts/$(TARGET_KERNEL_USE)/x86_64
diff --git a/x86_64-vendor.mk b/x86_64-vendor.mk
index 75ecd9c2..e92c4515 100644
--- a/x86_64-vendor.mk
+++ b/x86_64-vendor.mk
@@ -3,39 +3,33 @@ include device/generic/goldfish/x86_64-kernel.mk
PRODUCT_PROPERTY_OVERRIDES += \
vendor.rild.libpath=/vendor/lib64/libgoldfish-ril.so
+ADVANCED_FEATURES_FILE := advancedFeatures.ini
+ifneq ($(filter %_minigbm, $(TARGET_PRODUCT)),)
+ADVANCED_FEATURES_FILE := advancedFeatures.ini.minigbm
+endif
+
# This is a build configuration for a full-featured build of the
# Open-Source part of the tree. It's geared toward a US-centric
# build quite specifically for the emulator, and might not be
# entirely appropriate to inherit from for on-device configurations.
PRODUCT_COPY_FILES += \
device/generic/goldfish/data/etc/config.ini.xl:config.ini \
- device/generic/goldfish/data/etc/advancedFeatures.ini:advancedFeatures.ini \
+ device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILE):advancedFeatures.ini \
device/generic/goldfish/data/etc/encryptionkey.img:encryptionkey.img \
$(EMULATOR_KERNEL_FILE):kernel-ranchu
PRODUCT_SDK_ADDON_COPY_FILES += \
- device/generic/goldfish/data/etc/advancedFeatures.ini:images/x86_64/advancedFeatures.ini \
+ device/generic/goldfish/data/etc/$(ADVANCED_FEATURES_FILE):images/x86_64/advancedFeatures.ini \
device/generic/goldfish/data/etc/encryptionkey.img:images/x86_64/encryptionkey.img \
$(EMULATOR_KERNEL_FILE):images/x86_64/kernel-ranchu
PRODUCT_COPY_FILES += \
device/generic/goldfish/data/etc/configs/gpu.config:data/misc/gceconfigs/gpu.config
-# a hack to reduce presubmit time where CTS tries to install media files one by one
-# taking more than 30 minutes; following is just the list of files needed by current
-# tests on presubmit
-PRODUCT_COPY_FILES += \
- device/generic/goldfish/data/media/test/swirl_136x144_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_136x144_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_132x130_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_132x130_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_130x132_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_130x132_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_144x136_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_144x136_mpeg4.mp4 \
- device/generic/goldfish/data/media/test/swirl_128x128_mpeg4.mp4:data/media/0/test/CtsMediaTestCases-1.4/swirl_128x128_mpeg4.mp4
-
PRODUCT_PROPERTY_OVERRIDES += \
ro.crypto.dm_default_key.options_format.version=2
-PRODUCT_SHIPPING_API_LEVEL := 33
-PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS := false
+PRODUCT_SHIPPING_API_LEVEL := 34
TARGET_USES_MKE2FS := true
PRODUCT_COPY_FILES += \