diff --git a/common/Android.bp b/common/Android.bp
index 12777b7..b1a220a 100644
--- a/common/Android.bp
+++ b/common/Android.bp
@@ -9,7 +9,7 @@ android_app_import {
name: "MiuiCamera",
owner: "xiaomi",
apk: "proprietary/system/priv-app/MiuiCamera/MiuiCamera.apk",
- overrides: ["Snap", "GoogleCameraGo", "GrapheneCamera", "Camera", "Aperture"],
+ overrides: ["GrapheneCamera", "Camera2", "Aperture"],
certificate: "platform",
dex_preopt: {
enabled: false,
diff --git a/common/common-vendor.mk b/common/common-vendor.mk
index c08dca8..1f80171 100644
--- a/common/common-vendor.mk
+++ b/common/common-vendor.mk
@@ -33,5 +33,11 @@ PRODUCT_COPY_FILES += \
vendor/xiaomi/haydn-miuicamera/common/proprietary/vendor/lib64/vendor.qti.hardware.camera.device@1.0.so:$(TARGET_COPY_OUT_VENDOR)/lib64/vendor.qti.hardware.camera.device@1.0.so \
vendor/xiaomi/haydn-miuicamera/common/proprietary/vendor/lib64/vendor.qti.hardware.camera.device@3.5.so:$(TARGET_COPY_OUT_VENDOR)/lib64/vendor.qti.hardware.camera.device@3.5.so
+TARGET_USE_PREBUILD_CAMERA_SERVICE ?= false
+ifeq ($(TARGET_USE_PREBUILD_CAMERA_SERVİCE),true)
+PRODUCT_COPY_FILES += \
+ vendor/xiaomi/haydn-miuicamera/common/proprietary/system/lib64/libcameraservice.so:$(TARGET_COPY_OUT_SYSTEM)/lib64/libcameraservice.so
+endif
+
PRODUCT_PACKAGES += \
MiuiCamera
diff --git a/common/proprietary/system/lib64/libcameraservice.so b/common/proprietary/system/lib64/libcameraservice.so
new file mode 100644
index 0000000..733ecc4
Binary files /dev/null and b/common/proprietary/system/lib64/libcameraservice.so differ
diff --git a/extract-files.sh b/extract-files.sh
old mode 100755
new mode 100644
diff --git a/init/init.miuicamera.rc b/init/init.miuicamera.rc
new file mode 100644
index 0000000..45787e8
--- /dev/null
+++ b/init/init.miuicamera.rc
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2021 The LineageOS Project
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+# Miui camera
+on boot && property:ro.boot.hwc=CN
+ setprop ro.product.mod_device "haydn"
+
+on boot && property:ro.boot.hwc=CN && property:ro.boot.hardware.sku=haydnpro
+ setprop ro.product.mod_device "haydn"
+
+on boot && property:ro.boot.hwc=GL
+ setprop ro.product.mod_device "haydn_global"
+
+on boot && property:ro.boot.hwc=IN
+ setprop ro.product.mod_device "haydn_in_global"
diff --git a/products/board.mk b/products/board.mk
index c8886a8..7e9d0c8 100644
--- a/products/board.mk
+++ b/products/board.mk
@@ -14,6 +14,8 @@
# limitations under the License.
#
+SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS += vendor/xiaomi/haydn-miuicamera/sepolicy/private
+SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS += vendor/xiaomi/haydn-miuicamera/sepolicy/public
BOARD_VENDOR_SEPOLICY_DIRS += vendor/xiaomi/haydn-miuicamera/sepolicy/vendor
include vendor/xiaomi/haydn-miuicamera/common/BoardConfigVendor.mk
diff --git a/products/miuicamera.mk b/products/miuicamera.mk
index 937db12..0959cd1 100644
--- a/products/miuicamera.mk
+++ b/products/miuicamera.mk
@@ -23,16 +23,26 @@ PRODUCT_COPY_FILES += \
PRODUCT_COPY_FILES += \
vendor/xiaomi/haydn-miuicamera/configs/sysconfig/miuicamera-hiddenapi-package-whitelist.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/sysconfig/miuicamera-hiddenapi-package-whitelist.xml
+# Miui Camera init rc file
+PRODUCT_COPY_FILES += \
+ vendor/xiaomi/haydn-miuicamera/init/init.miuicamera.rc:$(TARGET_COPY_OUT_SYSTEM_EXT)/etc/init/init.miuicamera.rc
+
# Props
PRODUCT_PRODUCT_PROPERTIES += \
ro.com.google.lens.oem_camera_package=com.android.camera
PRODUCT_SYSTEM_PROPERTIES += \
- persist.vendor.camera.privapp.list=com.android.camera \
- vendor.camera.aux.packagelist=com.android.camera,org.pixelexperience.faceunlock
+ vendor.camera.aux.packagelist=com.android.camera,org.pixelexperience.faceunlock \
+ persist.vendor.camera.privapp.list=com.android.camera
+
+PRODUCT_VENDOR_PROPERTIES += \
+ ro.hardware.camera=xiaomi
PRODUCT_PACKAGES += \
DisableCamera2 \
- DisableMiuiCamera
+ DisableMiuiCamera \
+ MiuiCameraOverlayLos \
+ MiuiCameraOverlayAosp
+
$(call inherit-product, vendor/xiaomi/haydn-miuicamera/common/common-vendor.mk)
diff --git a/proprietary-files.txt b/proprietary-files.txt
index 01e5f6c..0fc62d3 100644
--- a/proprietary-files.txt
+++ b/proprietary-files.txt
@@ -1,6 +1,6 @@
# All unpinned blobs below are extracted from miui_HAYDNGlobal_V13.0.1.0.SKKMIXM
--system/priv-app/MiuiCamera/MiuiCamera.apk;OVERRIDES=Snap,GoogleCameraGo
+-system/priv-app/MiuiCamera/MiuiCamera.apk;OVERRIDES=GrapheneCamera,Camera2,Aperture
system/lib64/android.hardware.camera.common@1.0.so
system/lib64/libcamera_algoup_jni.xiaomi.so
system/lib64/libcamera_mianode_jni.xiaomi.so
diff --git a/rro_overlay/MiuiCameraOverlayAosp/Android.bp b/rro_overlay/MiuiCameraOverlayAosp/Android.bp
new file mode 100644
index 0000000..a70a631
--- /dev/null
+++ b/rro_overlay/MiuiCameraOverlayAosp/Android.bp
@@ -0,0 +1,4 @@
+runtime_resource_overlay {
+ name: "MiuiCameraOverlayAosp",
+ product_specific: true,
+}
diff --git a/rro_overlay/MiuiCameraOverlayAosp/AndroidManifest.xml b/rro_overlay/MiuiCameraOverlayAosp/AndroidManifest.xml
new file mode 100644
index 0000000..50663be
--- /dev/null
+++ b/rro_overlay/MiuiCameraOverlayAosp/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/rro_overlay/MiuiCameraOverlayAosp/res/values/config.xml b/rro_overlay/MiuiCameraOverlayAosp/res/values/config.xml
new file mode 100644
index 0000000..ff6ac47
--- /dev/null
+++ b/rro_overlay/MiuiCameraOverlayAosp/res/values/config.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ - com.android.camera
+ - org.lineageos.aperture
+ - org.lineageos.aperture.dev
+ - com.crdroid.faceunlock
+ - org.pixelexperience.faceunlock
+
+
diff --git a/rro_overlay/MiuiCameraOverlayLos/Android.bp b/rro_overlay/MiuiCameraOverlayLos/Android.bp
new file mode 100644
index 0000000..cf6721d
--- /dev/null
+++ b/rro_overlay/MiuiCameraOverlayLos/Android.bp
@@ -0,0 +1,4 @@
+runtime_resource_overlay {
+ name: "MiuiCameraOverlayLos",
+ product_specific: true,
+}
diff --git a/rro_overlay/MiuiCameraOverlayLos/AndroidManifest.xml b/rro_overlay/MiuiCameraOverlayLos/AndroidManifest.xml
new file mode 100644
index 0000000..f6650d6
--- /dev/null
+++ b/rro_overlay/MiuiCameraOverlayLos/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/rro_overlay/MiuiCameraOverlayLos/res/values/config.xml b/rro_overlay/MiuiCameraOverlayLos/res/values/config.xml
new file mode 100644
index 0000000..ff6ac47
--- /dev/null
+++ b/rro_overlay/MiuiCameraOverlayLos/res/values/config.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ - com.android.camera
+ - org.lineageos.aperture
+ - org.lineageos.aperture.dev
+ - com.crdroid.faceunlock
+ - org.pixelexperience.faceunlock
+
+
diff --git a/sepolicy/private/cameraserver.te b/sepolicy/private/cameraserver.te
new file mode 100644
index 0000000..1aca86c
--- /dev/null
+++ b/sepolicy/private/cameraserver.te
@@ -0,0 +1,3 @@
+allow cameraserver property_socket:sock_file write;
+allow cameraserver init:unix_stream_socket connectto;
+set_prop(cameraserver, exported_system_prop)
diff --git a/sepolicy/private/file_contexts b/sepolicy/private/file_contexts
new file mode 100644
index 0000000..81a6f3d
--- /dev/null
+++ b/sepolicy/private/file_contexts
@@ -0,0 +1,2 @@
+# Camera
+/vendor/camera(/.*)? u:object_r:vendor_configs_file:s0
diff --git a/sepolicy/private/platform_app.te b/sepolicy/private/platform_app.te
new file mode 100644
index 0000000..6ad7e7f
--- /dev/null
+++ b/sepolicy/private/platform_app.te
@@ -0,0 +1 @@
+hal_client_domain(platform_app, hal_misys)
diff --git a/sepolicy/private/priv_app.te b/sepolicy/private/priv_app.te
new file mode 100644
index 0000000..315f42d
--- /dev/null
+++ b/sepolicy/private/priv_app.te
@@ -0,0 +1 @@
+hal_client_domain(priv_app, hal_misys)
diff --git a/sepolicy/private/property_contexts b/sepolicy/private/property_contexts
new file mode 100644
index 0000000..0cae346
--- /dev/null
+++ b/sepolicy/private/property_contexts
@@ -0,0 +1,2 @@
+# Miui Camera
+sys.camera.miui.apk u:object_r:exported_system_prop:s0
diff --git a/sepolicy/public/attributes b/sepolicy/public/attributes
new file mode 100644
index 0000000..e7f54f1
--- /dev/null
+++ b/sepolicy/public/attributes
@@ -0,0 +1 @@
+hal_attribute_lineage(misys)
diff --git a/sepolicy/vendor/file_contexts b/sepolicy/vendor/file_contexts
new file mode 100644
index 0000000..80cc738
--- /dev/null
+++ b/sepolicy/vendor/file_contexts
@@ -0,0 +1,3 @@
+/vendor/bin/hw/vendor\.xiaomi\.hardware\.misys@1\.0-service u:object_r:hal_misys_default_exec:s0
+/vendor/bin/hw/vendor\.xiaomi\.hardware\.misys@2\.0-service u:object_r:hal_misys_default_exec:s0
+/vendor/bin/hw/vendor\.xiaomi\.hardware\.misys@3\.0-service u:object_r:hal_misys_default_exec:s0
diff --git a/sepolicy/vendor/hal_camera_default.te b/sepolicy/vendor/hal_camera_default.te
index 18dde02..076dd4b 100644
--- a/sepolicy/vendor/hal_camera_default.te
+++ b/sepolicy/vendor/hal_camera_default.te
@@ -1,7 +1,11 @@
+type hal_camerapostproc_xiaomi_hwservice, hwservice_manager_type;
+
get_prop(hal_camera_default, vendor_fp_prop)
binder_call(hal_camera_default, platform_app)
+add_hwservice(hal_camera_default, hal_camerapostproc_xiaomi_hwservice)
+
allow hal_camera_default mnt_vendor_file:dir { search };
allow hal_camera_default proc_stat:file { open read };
allow hal_camera_default vendor_xdsp_device:chr_file { read };
diff --git a/sepolicy/vendor/hal_misys.te b/sepolicy/vendor/hal_misys.te
new file mode 100644
index 0000000..2072c83
--- /dev/null
+++ b/sepolicy/vendor/hal_misys.te
@@ -0,0 +1,5 @@
+# HwBinder IPC from client to server
+binder_call(hal_misys_client, hal_misys_server)
+
+add_hwservice(hal_misys_server, hal_misys_hwservice)
+allow hal_misys_client hal_misys_hwservice:hwservice_manager find;
diff --git a/sepolicy/vendor/hal_misys_default.te b/sepolicy/vendor/hal_misys_default.te
new file mode 100644
index 0000000..e16dc85
--- /dev/null
+++ b/sepolicy/vendor/hal_misys_default.te
@@ -0,0 +1,15 @@
+type hal_misys_default, domain;
+hal_server_domain(hal_misys_default, hal_misys)
+
+type hal_misys_default_exec, exec_type, vendor_file_type, file_type;
+
+init_daemon_domain(hal_misys_default)
+
+allow hal_misys_default camera_persist_file:file create_file_perms;
+allow hal_misys_default camera_persist_file:dir create_dir_perms;
+
+r_dir_file(hal_misys_default, firmware_file)
+r_dir_file(hal_misys_default, mnt_vendor_file)
+
+get_prop(hal_misys_default, vendor_camera_prop)
+get_prop(hal_misys_default, vendor_camera_sensor_prop);
diff --git a/sepolicy/vendor/hwservice.te b/sepolicy/vendor/hwservice.te
new file mode 100644
index 0000000..d01145c
--- /dev/null
+++ b/sepolicy/vendor/hwservice.te
@@ -0,0 +1 @@
+type hal_misys_hwservice, hwservice_manager_type;
diff --git a/sepolicy/vendor/hwservice_contexts b/sepolicy/vendor/hwservice_contexts
new file mode 100644
index 0000000..e013b96
--- /dev/null
+++ b/sepolicy/vendor/hwservice_contexts
@@ -0,0 +1,3 @@
+# Miui camera
+vendor.xiaomi.hardware.misys::IMiSys u:object_r:hal_misys_hwservice:s0
+vendor.xiaomi.hardware.campostproc::IMiPostProcService u:object_r:hal_camerapostproc_xiaomi_hwservice:s0
diff --git a/sepolicy/vendor/platform_app.te b/sepolicy/vendor/platform_app.te
index 37627b7..7b69320 100644
--- a/sepolicy/vendor/platform_app.te
+++ b/sepolicy/vendor/platform_app.te
@@ -5,3 +5,9 @@ binder_call(platform_app, hal_camera_default)
get_prop(platform_app, vendor_camera_sensor_prop);
get_prop(platform_app, vendor_fp_prop)
+
+allow platform_app cgroup:file r_file_perms;
+
+allow platform_app hal_misys_hwservice:hwservice_manager find;
+
+allow platform_app miui_multi_display:service_manager find;
diff --git a/sepolicy/vendor/priv_app.te b/sepolicy/vendor/priv_app.te
new file mode 100644
index 0000000..f29450f
--- /dev/null
+++ b/sepolicy/vendor/priv_app.te
@@ -0,0 +1 @@
+allow priv_app cgroup:file r_file_perms;
diff --git a/sepolicy/vendor/service.te b/sepolicy/vendor/service.te
new file mode 100644
index 0000000..e8ce1d8
--- /dev/null
+++ b/sepolicy/vendor/service.te
@@ -0,0 +1 @@
+type miui_multi_display, service_manager_type;
diff --git a/sepolicy/vendor/service_contexts b/sepolicy/vendor/service_contexts
new file mode 100644
index 0000000..e952fb5
--- /dev/null
+++ b/sepolicy/vendor/service_contexts
@@ -0,0 +1 @@
+miui_multi_display u:object_r:miui_multi_display:s0
diff --git a/setup-makefiles.sh b/setup-makefiles.sh
old mode 100755
new mode 100644