# Copyright (C) 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.

ifneq ($(TARGET_BUILD_PDK), true)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# To avoid build errors, build empty package for non-platform builds
# (for example, projected). See b/30064991
ifeq (,$(TARGET_BUILD_APPS))
  LOCAL_PACKAGE_NAME := CarSettings
  LOCAL_OVERRIDES_PACKAGES := Settings
  LOCAL_PRIVATE_PLATFORM_APIS := true

  LOCAL_SRC_FILES := $(call all-java-files-under, src)

  LOCAL_USE_AAPT2 := true

  LOCAL_JAVA_LIBRARIES := \
      android.car \
      telephony-common

  LOCAL_STATIC_ANDROID_LIBRARIES := \
      androidx.car_car \
      androidx.lifecycle_lifecycle-common-java8 \
      androidx.lifecycle_lifecycle-extensions \
      androidx.preference_preference \
      androidx-constraintlayout_constraintlayout \
      car-apps-common \
      car-settings-lib \
      car-setup-wizard-lib-utils \
      SettingsLib

   # Including the resources for the static android libraries allows this app to pick up their static overlays.
   LOCAL_RESOURCE_DIR += \
       $(LOCAL_PATH)/res \
       $(LOCAL_PATH)/../libs/car-apps-common/res \
       $(LOCAL_PATH)/../libs/car-settings-lib/res \
       $(LOCAL_PATH)/../../../../frameworks/base/packages/SettingsLib/res

  LOCAL_CERTIFICATE := platform

  LOCAL_MODULE_TAGS := optional

  LOCAL_PROGUARD_ENABLED := disabled

  LOCAL_PRIVILEGED_MODULE := true

  LOCAL_DEX_PREOPT := false

  LOCAL_STATIC_JAVA_LIBRARIES := \
      android.car.userlib \
      androidx-constraintlayout_constraintlayout-solver \
      jsr305

  LOCAL_DX_FLAGS := --multi-dex

  include $(BUILD_PACKAGE)
endif

###################################################################################
# Duplicate of CarSettings which includes testing only resources for Robolectric #
###################################################################################
include $(CLEAR_VARS)

# To avoid build errors, build empty package for non-platform builds
# (for example, projected). See b/30064991
ifeq (,$(TARGET_BUILD_APPS))
  LOCAL_PACKAGE_NAME := CarSettingsForTesting
  LOCAL_OVERRIDES_PACKAGES := Settings
  LOCAL_PRIVATE_PLATFORM_APIS := true

  LOCAL_SRC_FILES := $(call all-java-files-under, src)

  LOCAL_USE_AAPT2 := true

  LOCAL_JAVA_LIBRARIES := \
      android.car \
      telephony-common

  LOCAL_STATIC_ANDROID_LIBRARIES := \
      androidx.car_car \
      androidx.lifecycle_lifecycle-common-java8 \
      androidx.lifecycle_lifecycle-extensions \
      androidx.preference_preference \
      androidx-constraintlayout_constraintlayout \
      car-apps-common \
      car-settings-lib \
      car-setup-wizard-lib-utils \
      SettingsLib

  LOCAL_RESOURCE_DIR := \
      $(LOCAL_PATH)/res \
      $(LOCAL_PATH)/tests/robotests/res \
      $(LOCAL_PATH)/../libs/car-apps-common/res \
      $(LOCAL_PATH)/../libs/car-settings-lib/res \
      $(LOCAL_PATH)/../../../../frameworks/base/packages/SettingsLib/res

  LOCAL_CERTIFICATE := platform

  LOCAL_MODULE_TAGS := optional

  LOCAL_PROGUARD_ENABLED := disabled

  LOCAL_PRIVILEGED_MODULE := true

  LOCAL_DEX_PREOPT := false

  LOCAL_STATIC_JAVA_LIBRARIES := \
      android.car.userlib \
      androidx-constraintlayout_constraintlayout-solver \
      jsr305

  LOCAL_DX_FLAGS := --multi-dex

  include $(BUILD_PACKAGE)
endif
###################################################################################

# Use the following include to make our test apk.
ifeq (,$(ONE_SHOT_MAKEFILE))
include $(call first-makefiles-under, $(LOCAL_PATH))
endif

endif
