#
# 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.
#

PRODUCT_RELEASE_CONFIG_MAPS += $(wildcard build/release/automotive/release_config_map.textproto)

# This makefile comprises the minimal system partition content for an
# automotive device.
$(call inherit-product, $(SRC_TARGET_DIR)/product/handheld_system.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_default.mk)
# Add adb keys to debuggable AOSP builds (if they exist)
$(call inherit-product-if-exists, vendor/google/security/adb/vendor_key.mk)

ifneq ($(TARGET_NO_TELEPHONY), true)
$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony_system.mk)
endif

# Enable updating of APEXes
$(call inherit-product, $(SRC_TARGET_DIR)/product/updatable_apex.mk)

# Applications
PRODUCT_PACKAGES += \
    LiveWallpapersPicker \
    PartnerBookmarksProvider \
    preinstalled-packages-platform-generic-system.xml \
    Stk \
    Tag \

# OTA support
PRODUCT_PACKAGES += \
    recovery-refresh \
    update_engine \
    update_verifier \

# Wrapped net utils for /vendor access.
PRODUCT_PACKAGES += netutils-wrapper-1.0

# Charger images
PRODUCT_PACKAGES += charger_res_images

# system_other support
PRODUCT_PACKAGES += \
    cppreopts.sh \
    otapreopt_script \

# For ringtones that rely on forward lock encryption
PRODUCT_PACKAGES += libfwdlockengine

# System libraries commonly depended on by things on the system_ext or product partitions.
# These lists will be pruned periodically.
PRODUCT_PACKAGES += \
    android.hardware.biometrics.fingerprint@2.1 \
    android.hardware.radio@1.0 \
    android.hardware.radio@1.1 \
    android.hardware.radio@1.2 \
    android.hardware.radio@1.3 \
    android.hardware.radio@1.4 \
    android.hardware.radio.config@1.0 \
    android.hardware.radio.deprecated@1.0 \
    android.hardware.secure_element@1.0 \
    android.hardware.wifi \
    libaudio-resampler \
    libaudiohal \
    libdrm \
    liblogwrap \
    liblz4 \
    libminui \
    libnl \
    libprotobuf-cpp-full \

# These libraries are empty and have been combined into libhidlbase, but are still depended
# on by things off /system.
# TODO(b/135686713): remove these
PRODUCT_PACKAGES += \
    libhidltransport \
    libhwbinder \

PRODUCT_HOST_PACKAGES += \
    tinyplay

# Enable configurable audio policy
PRODUCT_PACKAGES += \
    libaudiopolicyengineconfigurable \
    libpolicy-subsystem

# Include all zygote init scripts. "ro.zygote" will select one of them.
PRODUCT_PACKAGES += \
    init.zygote32.rc \
    init.zygote64.rc \
    init.zygote64_32.rc

# Enable dynamic partition size
PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true

PRODUCT_ENFORCE_RRO_TARGETS := *

PRODUCT_PACKAGES += \
    CarActivityResolver \
    CarManagedProvisioning \
    SystemUpdater \
    pppd \
    screenrecord

# Set default Bluetooth profiles
TARGET_SYSTEM_PROP := \
    packages/services/Car/car_product/properties/bluetooth.prop

PRODUCT_SYSTEM_PROPERTIES += \
    config.disable_systemtextclassifier=true

###
### Suggested values for multi-user properties - can be overridden
###

# Enable User HAL integration
# NOTE: when set to true, VHAL must also implement the user-related properties,
# otherwise CarService will ignore it
PRODUCT_SYSTEM_PROPERTIES += \
    android.car.user_hal_enabled?=true

### end of multi-user properties ###

# TODO(b/198516172): Find a better location to add this read only property
# It is added here to check the functionality, will be updated in next CL
PRODUCT_SYSTEM_PROPERTIES += \
    ro.android.car.carservice.overlay.packages?=com.android.car.resources.vendor;com.google.android.car.resources.vendor;

# Vendor layer can override this
PRODUCT_SYSTEM_PROPERTIES += \
    ro.android.car.carservice.package?=com.android.car.updatable

# Update with PLATFORM_VERSION_MINOR_INT update
PRODUCT_SYSTEM_PROPERTIES += ro.android.car.version.platform_minor=0

PRODUCT_PACKAGES += \
    com.android.wifi \
    Home \
    BasicDreams \
    CaptivePortalLogin \
    CertInstaller \
    DownloadProviderUi \
    FusedLocation \
    InputDevices \
    KeyChain \
    Keyguard \
    Launcher2 \
    PacProcessor \
    PrintSpooler \
    ProxyHandler \
    SharedStorageBackup \
    VpnDialogs \
    MmsService \
    ExternalStorageProvider \
    atrace \
    libandroidfw \
    libaudioutils \
    libpowermanager \
    libvariablespeed \
    PackageInstaller \
    carbugreportd \
    vehicle_binding_util \

# Device running Android is a car
PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.type.automotive.xml:system/etc/permissions/android.hardware.type.automotive.xml

# Default permission grant exceptions
PRODUCT_COPY_FILES += \
    packages/services/Car/car_product/build/preinstalled-packages-product-car-base.xml:system/etc/sysconfig/preinstalled-packages-product-car-base.xml

# Required init rc files for car
PRODUCT_COPY_FILES += \
    packages/services/Car/car_product/init/init.bootstat.rc:system/etc/init/init.bootstat.car.rc \
    packages/services/Car/car_product/init/init.car.rc:system/etc/init/init.car.rc

# Device policy management support
PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.software.device_admin.xml:system/etc/permissions/android.software.device_admin.xml

# Enable car watchdog
PRODUCT_PACKAGES += carwatchdogd

# Enable car power policy
PRODUCT_PACKAGES += carpowerpolicyd

PRODUCT_IS_AUTOMOTIVE := true

PRODUCT_PACKAGES += \
    CarDocumentsUI \
    CarFrameworkPackageStubs \
    CarService \
    CarShell \
    CarDialerApp \
    CarRadioApp \
    OverviewApp \
    LocalMediaPlayer \
    CarMediaApp \
    CarMessengerApp \
    CarHTMLViewer \
    CarMapsPlaceholder \
    CarLatinIME \
    CarSettings \
    CarUsbHandler \
    android.car.builtin \
    libcarservicehelperjni \
    car-frameworks-service \
    com.android.car.procfsinspector \
    com.android.permission \

ifeq ($(HAS_SCALABLEUI),true)
    $(call inherit-product, packages/services/Car/car_product/dewd/car_dewd_common.mk)
else # HAS_SCALABLEUI is not set
    PRODUCT_PACKAGES += \
        CarLauncher
endif # HAS_SCALABLEUI

ifeq ($(GSI_SKIP_PROVISIONED),true)
    PRODUCT_PACKAGES += \
        ProvidersSettingsGsiOverlay
endif # GSI_SKIP_PROVISIONED

# CAN bus
PRODUCT_PACKAGES += \
    canhalctrl \
    canhaldump \
    canhalsend

# RROs
PRODUCT_PACKAGES += \
    CarPermissionControllerRRO \
    CarSystemUIRRO

# System Server components
# Order is important: if X depends on Y, then Y should precede X on the list.
PRODUCT_SYSTEM_SERVER_JARS += car-frameworks-service

PRODUCT_BOOT_JARS += \
    android.car.builtin

USE_CAR_FRAMEWORK_APEX ?= false

ifeq ($(USE_CAR_FRAMEWORK_APEX),true)
    PRODUCT_PACKAGES += com.android.car.framework

    PRODUCT_APEX_BOOT_JARS += com.android.car.framework:android.car-module
    PRODUCT_APEX_SYSTEM_SERVER_JARS += com.android.car.framework:car-frameworks-service-module

    $(call soong_config_set,bootclasspath,car_bootclasspath_fragment,true)

    PRODUCT_HIDDENAPI_STUBS := android.car-module.stubs
    PRODUCT_HIDDENAPI_STUBS_SYSTEM := android.car-module.stubs.system
    PRODUCT_HIDDENAPI_STUBS_TEST := android.car-module.stubs.test
else # !USE_CAR_FRAMEWORK_APEX
    PRODUCT_BOOT_JARS += android.car
    PRODUCT_PACKAGES += android.car CarServiceUpdatableNonModule car-frameworks-service-module
    PRODUCT_SYSTEM_SERVER_JARS += car-frameworks-service-module

    PRODUCT_HIDDENAPI_STUBS := android.car-stubs-dex
    PRODUCT_HIDDENAPI_STUBS_SYSTEM := android.car-system-stubs-dex
    PRODUCT_HIDDENAPI_STUBS_TEST := android.car-test-stubs-dex
endif # USE_CAR_FRAMEWORK_APEX

# This is required for android.car.
PRODUCT_PACKAGES += liblargeparcelablejni

# Disable Dynamic System Update for automotive targets
PRODUCT_NO_DYNAMIC_SYSTEM_UPDATE := true


PRODUCT_PROPERTY_OVERRIDES += \
    persist.log.tag.ContCarPropertyEventTracker=D \
    persist.log.tag.SubscriptionManager=D

# Displaycompat
$(call inherit-product, packages/services/Car/car_product/displaycompat/display_compat_system.mk)
