am b22469a8: am 65259743: Merge "Split [CC|CXX]_WRAPPER from [TARGET|HOST]_[CC|CXX]"
* commit 'b22469a8c50510e141a74932acc3fa17a9dd356c':
Split [CC|CXX]_WRAPPER from [TARGET|HOST]_[CC|CXX]
diff --git a/CleanSpec.mk b/CleanSpec.mk
index edf0179..c95ae05 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -329,6 +329,11 @@
# instead.
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+# On to MNC
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
+
# Adding dalvik.vm.usejit
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/default.prop)
@@ -349,6 +354,16 @@
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/default.prop)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/default.prop)
+# Change PLATFORM_VERSION from MNC to M
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
+
+# 23 is becoming alive!!!
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
+
# ************************************************
# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
# ************************************************
diff --git a/core/Makefile b/core/Makefile
index c35f744..f2bc93b 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -67,7 +67,9 @@
ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \
$(ADDITIONAL_DEFAULT_PROPERTIES),=)
-$(INSTALLED_DEFAULT_PROP_TARGET):
+intermediate_system_build_prop := $(call intermediates-dir-for,ETC,system_build_prop)/build.prop
+
+$(INSTALLED_DEFAULT_PROP_TARGET): $(intermediate_system_build_prop)
@echo Target buildinfo: $@
@mkdir -p $(dir $@)
$(hide) echo "#" > $@; \
@@ -75,7 +77,13 @@
echo "#" >> $@;
$(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES), \
echo "$(line)" >> $@;)
- build/tools/post_process_props.py $@
+ $(hide) echo "#" >> $@; \
+ echo "# BOOTIMAGE_BUILD_PROPERTIES" >> $@; \
+ echo "#" >> $@;
+ $(hide) echo ro.bootimage.build.date=`date`>>$@
+ $(hide) echo ro.bootimage.build.date.utc=`date +%s`>>$@
+ $(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@
+ $(hide) build/tools/post_process_props.py $@
# -----------------------------------------------------------------
# build.prop
@@ -107,7 +115,7 @@
# A human-readable string that descibes this build in detail.
build_desc := $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) $(PLATFORM_VERSION) $(BUILD_ID) $(BUILD_NUMBER_FROM_FILE) $(BUILD_VERSION_TAGS)
-$(INSTALLED_BUILD_PROP_TARGET): PRIVATE_BUILD_DESC := $(build_desc)
+$(intermediate_system_build_prop): PRIVATE_BUILD_DESC := $(build_desc)
# The string used to uniquely identify the combined build and product; used by the OTA server.
ifeq (,$(strip $(BUILD_FINGERPRINT)))
@@ -174,7 +182,7 @@
else
system_prop_file := $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
endif
-$(INSTALLED_BUILD_PROP_TARGET): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET)
+$(intermediate_system_build_prop): $(BUILDINFO_SH) $(INTERNAL_BUILD_ID_MAKEFILE) $(BUILD_SYSTEM)/version_defaults.mk $(system_prop_file) $(INSTALLED_ANDROID_INFO_TXT_TARGET)
@echo Target buildinfo: $@
@mkdir -p $(dir $@)
$(hide) echo > $@
@@ -200,6 +208,7 @@
BUILD_NUMBER="$(BUILD_NUMBER_FROM_FILE)" \
PLATFORM_VERSION="$(PLATFORM_VERSION)" \
PLATFORM_SDK_VERSION="$(PLATFORM_SDK_VERSION)" \
+ PLATFORM_PREVIEW_SDK_VERSION="$(PLATFORM_PREVIEW_SDK_VERSION)" \
PLATFORM_VERSION_CODENAME="$(PLATFORM_VERSION_CODENAME)" \
PLATFORM_VERSION_ALL_CODENAMES="$(PLATFORM_VERSION_ALL_CODENAMES)" \
BUILD_VERSION_TAGS="$(BUILD_VERSION_TAGS)" \
@@ -234,6 +243,19 @@
build_desc :=
+ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY)))
+INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img
+else
+INSTALLED_RECOVERYIMAGE_TARGET :=
+endif
+
+$(INSTALLED_BUILD_PROP_TARGET): $(intermediate_system_build_prop) $(INSTALLED_RECOVERYIMAGE_TARGET)
+ @echo "Target build info: $@"
+ $(hide) cat $(intermediate_system_build_prop) > $@
+ifdef INSTALLED_RECOVERYIMAGE_TARGET
+ $(hide) echo ro.expect.recovery_id=`cat $(RECOVERYIMAGE_ID_FILE)` >> $@
+endif
+
# -----------------------------------------------------------------
# vendor build.prop
#
@@ -251,19 +273,6 @@
endif
# ----------------------------------------------------------------
-# boot.img build.prop
-# as with vendor build.prop above, for verifying that the bootimage
-# build is what we think it is
-
-INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET := $(TARGET_ROOT_OUT)/build.prop
-ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET)
-$(INSTALLED_BOOTIMAGE_BUILD_PROP_TARGET): $(INSTALLED_BUILD_PROP_TARGET)
- @echo Target bootimage buildinfo: $@
- @mkdir -p $(dir $@)
- $(hide) echo > $@
- $(hide) echo ro.bootimage.build.date=`date`>>$@
- $(hide) echo ro.bootimage.build.date.utc=`date +%s`>>$@
- $(hide) echo ro.bootimage.build.fingerprint="$(BUILD_FINGERPRINT_FROM_FILE)">>$@
# -----------------------------------------------------------------
# sdk-build.prop
@@ -454,12 +463,12 @@
INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
$(call pretty,"Target ram disk: $@")
- $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
+ $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
.PHONY: ramdisk-nodeps
ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP)
@echo "make $@: ignoring dependencies"
- $(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
+ $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
@@ -467,8 +476,12 @@
# the boot image, which is a collection of other images.
INTERNAL_BOOTIMAGE_ARGS := \
$(addprefix --second ,$(INSTALLED_2NDBOOTLOADER_TARGET)) \
- --kernel $(INSTALLED_KERNEL_TARGET) \
- --ramdisk $(INSTALLED_RAMDISK_TARGET)
+ --kernel $(INSTALLED_KERNEL_TARGET)
+
+ifneq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
+INTERNAL_BOOTIMAGE_ARGS += --ramdisk $(INSTALLED_RAMDISK_TARGET)
+endif
+
INTERNAL_BOOTIMAGE_FILES := $(filter-out --%,$(INTERNAL_BOOTIMAGE_ARGS))
@@ -491,7 +504,7 @@
ifeq ($(TARGET_BOOTIMAGE_USE_EXT2),true)
$(error TARGET_BOOTIMAGE_USE_EXT2 is not supported anymore)
-else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)) # TARGET_BOOTIMAGE_USE_EXT2 != true
+else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)) # TARGET_BOOTIMAGE_USE_EXT2 != true
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(BOOT_SIGNER)
$(call pretty,"Target boot image: $@")
@@ -506,7 +519,22 @@
$(BOOT_SIGNER) /boot $(INSTALLED_BOOTIMAGE_TARGET) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(INSTALLED_BOOTIMAGE_TARGET)
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
-else # PRODUCT_SUPPORTS_VERITY != true
+else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)) # PRODUCT_SUPPORTS_BOOT_SIGNER != true
+
+$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES) $(VBOOT_SIGNER)
+ $(call pretty,"Target boot image: $@")
+ $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@.unsigned
+ $(VBOOT_SIGNER) $(FUTILITY) $@.unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $@.keyblock $@
+ $(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
+
+.PHONY: bootimage-nodeps
+bootimage-nodeps: $(MKBOOTIMG) $(VBOOT_SIGNER)
+ @echo "make $@: ignoring dependencies"
+ $(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET).unsigned
+ $(VBOOT_SIGNER) $(FUTILITY) $(INSTALLED_BOOTIMAGE_TARGET).unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(INSTALLED_BOOTIMAGE_TARGET).keyblock $(INSTALLED_BOOTIMAGE_TARGET)
+ $(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
+
+else # PRODUCT_SUPPORTS_VBOOT != true
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
$(call pretty,"Target boot image: $@")
@@ -705,6 +733,8 @@
$(if $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "system_fs_type=$(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
$(if $(BOARD_SYSTEMIMAGE_JOURNAL_SIZE),$(hide) echo "system_journal_size=$(BOARD_SYSTEMIMAGE_JOURNAL_SIZE)" >> $(1))
$(if $(BOARD_HAS_EXT4_RESERVED_BLOCKS),$(hide) echo "has_ext4_reserved_blocks=$(BOARD_HAS_EXT4_RESERVED_BLOCKS)" >> $(1))
+$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "system_squashfs_compressor=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR)" >> $(1))
+$(if $(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "system_squashfs_compressor_opt=$(BOARD_SYSTEMIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1))
$(if $(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "userdata_fs_type=$(BOARD_USERDATAIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
$(if $(BOARD_USERDATAIMAGE_PARTITION_SIZE),$(hide) echo "userdata_size=$(BOARD_USERDATAIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cache_fs_type=$(BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
@@ -716,6 +746,7 @@
$(if $(BOARD_OEMIMAGE_JOURNAL_SIZE),$(hide) echo "oem_journal_size=$(BOARD_OEMIMAGE_JOURNAL_SIZE)" >> $(1))
$(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1))
$(hide) echo "selinux_fc=$(SELINUX_FC)" >> $(1)
+$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER),$(hide) echo "boot_signer=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)" >> $(1))
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)" >> $(1))
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity_key=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY)" >> $(1))
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),$(hide) echo "verity_signer_cmd=$(notdir $(VERITY_SIGNER))" >> $(1))
@@ -734,10 +765,7 @@
# -----------------------------------------------------------------
# Recovery image
-# If neither TARGET_NO_KERNEL nor TARGET_NO_RECOVERY are true
-ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY)))
-
-INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img
+ifdef INSTALLED_RECOVERYIMAGE_TARGET
INTERNAL_RECOVERYIMAGE_FILES := $(filter $(TARGET_RECOVERY_OUT)/%, \
$(ALL_DEFAULT_INSTALLED_MODULES))
@@ -746,7 +774,7 @@
recovery_sepolicy := $(call intermediates-dir-for,ETC,sepolicy.recovery)/sepolicy.recovery
recovery_kernel := $(INSTALLED_KERNEL_TARGET) # same as a non-recovery system
recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img
-recovery_build_prop := $(INSTALLED_BUILD_PROP_TARGET)
+recovery_build_prop := $(intermediate_system_build_prop)
recovery_resources_common := $(call include-path-for, recovery)/res
# Set recovery_density to the density bucket of the device.
@@ -830,6 +858,7 @@
@mkdir -p $(dir $@)
java -jar $(DUMPKEY_JAR) $(PRIVATE_OTA_PUBLIC_KEYS) $(extra_keys) > $@
+RECOVERYIMAGE_ID_FILE := $(PRODUCT_OUT)/recovery.id
# $(1): output file
define build-recoveryimage-target
@echo ----- Making recovery image ------
@@ -854,11 +883,11 @@
$(hide) cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys
$(hide) cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \
> $(TARGET_RECOVERY_ROOT_OUT)/default.prop
- $(hide) $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
+ $(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
$(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \
$(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1).unsigned, \
- $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1))
- $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY)),\
+ $(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1) --id > $(RECOVERYIMAGE_ID_FILE))
+ $(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)),\
$(BOOT_SIGNER) /recovery $(1) $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).pk8 $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY).x509.pem $(1))
$(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \
$(VBOOT_SIGNER) $(FUTILITY) $(1).unsigned $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(1).keyblock $(1))
@@ -887,7 +916,6 @@
$(call build-recoveryimage-target, $(INSTALLED_RECOVERYIMAGE_TARGET))
else
-INSTALLED_RECOVERYIMAGE_TARGET :=
RECOVERY_RESOURCE_ZIP :=
endif
@@ -966,7 +994,7 @@
skip_fsck=true)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
./build/tools/releasetools/build_image.py \
- $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) \
+ $(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) $(TARGET_OUT) \
|| ( echo "Out of space? the tree size of $(TARGET_OUT) is (MB): " 1>&2 ;\
du -sm $(TARGET_OUT) 1>&2;\
if [ "$(INTERNAL_USERIMAGES_EXT_VARIANT)" == "ext4" ]; then \
@@ -1033,7 +1061,7 @@
$(call create-system-vendor-symlink)
$(MKTARBALL) $(FS_GET_STATS) \
$(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \
- $(INSTALLED_SYSTEMTARBALL_TARGET)
+ $(INSTALLED_SYSTEMTARBALL_TARGET) $(TARGET_OUT)
endef
ifndef SYSTEM_TARBALL_FORMAT
@@ -1101,7 +1129,7 @@
$(hide) echo $(BOARD_KERNEL_CMDLINE) > $(PRODUCT_OUT)/boot/cmdline
$(hide) $(MKTARBALL) $(FS_GET_STATS) \
$(PRODUCT_OUT) boot $(PRIVATE_BOOT_TAR) \
- $(INSTALLED_BOOTTARBALL_TARGET)
+ $(INSTALLED_BOOTTARBALL_TARGET) $(TARGET_OUT)
endef
ifndef BOOT_TARBALL_FORMAT
@@ -1145,7 +1173,7 @@
$(call generate-userimage-prop-dictionary, $(userdataimage_intermediates)/userdata_image_info.txt, skip_fsck=true)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
./build/tools/releasetools/build_image.py \
- $(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET)
+ $(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET) $(TARGET_OUT)
$(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE))
endef
@@ -1169,7 +1197,7 @@
"$(INSTALLED_USERDATATARBALL_TARGET)")
$(MKTARBALL) $(FS_GET_STATS) \
$(PRODUCT_OUT) data $(PRIVATE_USERDATA_TAR) \
- $(INSTALLED_USERDATATARBALL_TARGET)
+ $(INSTALLED_USERDATATARBALL_TARGET) $(TARGET_OUT)
endef
userdata_tar := $(PRODUCT_OUT)/userdata.tar
@@ -1200,7 +1228,7 @@
$(call generate-userimage-prop-dictionary, $(cacheimage_intermediates)/cache_image_info.txt, skip_fsck=true)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
./build/tools/releasetools/build_image.py \
- $(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET)
+ $(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET) $(TARGET_OUT)
$(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE))
endef
@@ -1238,7 +1266,7 @@
$(call generate-userimage-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt, skip_fsck=true)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
./build/tools/releasetools/build_image.py \
- $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET)
+ $(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT)
$(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE))
endef
@@ -1503,10 +1531,10 @@
$(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)
@# Run fs_config on all the system, vendor, boot ramdisk,
@# and recovery ramdisk files in the zip, and save the output
- $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt
- $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt
- $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt
- $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt
+ $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt
+ $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt
+ $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt
+ $(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt
$(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
./build/tools/releasetools/add_img_to_target_files -v -p $(HOST_OUT) $@
diff --git a/core/android_manifest.mk b/core/android_manifest.mk
index c641b75..582bad4 100644
--- a/core/android_manifest.mk
+++ b/core/android_manifest.mk
@@ -15,6 +15,7 @@
my_full_libs_manifest_deps := $(LOCAL_FULL_LIBS_MANIFEST_FILES)
# Set up dependency on aar libraries
+LOCAL_STATIC_JAVA_AAR_LIBRARIES := $(strip $(LOCAL_STATIC_JAVA_AAR_LIBRARIES))
ifdef LOCAL_STATIC_JAVA_AAR_LIBRARIES
my_full_libs_manifest_deps += $(foreach lib, $(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\
$(call intermediates-dir-for,JAVA_LIBRARIES,$(lib),,COMMON)/aar/classes.jar)
diff --git a/core/base_rules.mk b/core/base_rules.mk
index d4c9a06..ea64cc6 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -382,7 +382,7 @@
# LOCAL_SOURCE_FILES_ALL_GENERATED is set only if the module does not have static source files,
# but generated source files in its LOCAL_INTERMEDIATE_SOURCE_DIR.
# You have to set up the dependency in some other way.
-need_compile_java := $(strip $(all_java_sources)$(all_res_assets))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED))
+need_compile_java := $(strip $(all_java_sources)$(all_res_assets)$(java_resource_sources))$(LOCAL_STATIC_JAVA_LIBRARIES)$(filter true,$(LOCAL_SOURCE_FILES_ALL_GENERATED))
ifdef need_compile_java
full_static_java_libs := \
@@ -420,10 +420,11 @@
# be up-to-date.
ifdef LOCAL_IS_HOST_MODULE
ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true)
-$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-deps,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE))
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH := -bootclasspath $(call java-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE))
full_shared_java_libs := $(call java-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
-full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
+full_java_lib_deps := $(call java-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE)) \
+ $(full_shared_java_libs)
else
$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH :=
@@ -697,6 +698,86 @@
endif
###########################################################
+# JACK
+###########################################################
+ifdef LOCAL_JACK_ENABLED
+ifdef need_compile_java
+
+full_static_jack_libs := \
+ $(foreach lib,$(LOCAL_STATIC_JAVA_LIBRARIES), \
+ $(call intermediates-dir-for, \
+ JAVA_LIBRARIES,$(lib),$(LOCAL_IS_HOST_MODULE),COMMON)/classes.jack)
+
+ifeq ($(my_prefix),TARGET_)
+ifeq ($(LOCAL_SDK_VERSION),)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart)
+else
+ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),current)
+# LOCAL_SDK_VERSION is current and no TARGET_BUILD_APPS.
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_stubs_current)
+else ifeq ($(LOCAL_SDK_VERSION)$(TARGET_BUILD_APPS),system_current)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,android_system_stubs_current)
+else
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,sdk_v$(LOCAL_SDK_VERSION))
+endif # current or system_current
+endif # LOCAL_SDK_VERSION
+endif # TARGET_
+
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_STATIC_JACK_LIBRARIES := $(full_static_jack_libs)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VM_ARGS := $(LOCAL_JACK_VM_ARGS)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_EXTRA_ARGS := $(LOCAL_JACK_EXTRA_ARGS)
+
+ifdef LOCAL_IS_HOST_MODULE
+ifeq ($(USE_CORE_LIB_BOOTCLASSPATH),true)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES := $(call jack-lib-files,core-libart-hostdex,$(LOCAL_IS_HOST_MODULE))
+full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
+full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
+else
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES :=
+full_shared_jack_libs := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
+full_jack_lib_deps := $(full_shared_jack_libs)
+endif # USE_CORE_LIB_BOOTCLASSPATH
+else # !LOCAL_IS_HOST_MODULE
+full_shared_jack_libs := $(call jack-lib-files,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
+full_jack_lib_deps := $(call jack-lib-deps,$(LOCAL_JAVA_LIBRARIES),$(LOCAL_IS_HOST_MODULE))
+endif # !LOCAL_IS_HOST_MODULE
+full_jack_libs := $(full_shared_jack_libs) $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH)
+full_jack_lib_deps += $(full_static_jack_libs) $(LOCAL_JACK_CLASSPATH)
+
+# This is set by packages that are linking to other packages that export
+# shared libraries, allowing them to make use of the code in the linked apk.
+ifneq ($(apk_libraries),)
+ link_apk_jack_libraries := \
+ $(foreach lib,$(apk_libraries), \
+ $(call intermediates-dir-for, \
+ APPS,$(lib),,COMMON)/classes.jack)
+
+ # link against the jar with full original names (before proguard processing).
+ full_shared_jack_libs += $(link_apk_jack_libraries)
+ full_jack_libs += $(link_apk_jack_libraries)
+ full_jack_lib_deps += $(link_apk_jack_libraries)
+endif
+
+# This is set by packages that contain instrumentation, allowing them to
+# link against the package they are instrumenting. Currently only one such
+# package is allowed.
+ifdef LOCAL_INSTRUMENTATION_FOR
+
+ # link against the jar with full original names (before proguard processing).
+ link_instr_classes_jack := $(link_instr_intermediates_dir.COMMON)/classes.noshrob.jack
+ full_jack_libs += $(link_instr_classes_jack)
+ full_jack_lib_deps += $(link_instr_classes_jack)
+endif
+
+endif # need_compile_java
+
+# Propagate local configuration options to this target.
+$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_ALL_JACK_LIBRARIES:= $(full_jack_libs)
+$(LOCAL_INTERMEDIATE_TARGETS) : PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
+
+endif # LOCAL_JACK_ENABLED
+
+###########################################################
## NOTICE files
###########################################################
diff --git a/core/binary.mk b/core/binary.mk
index e18f8c8..b76bc38 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -53,6 +53,7 @@
my_generated_sources := $(LOCAL_GENERATED_SOURCES)
my_native_coverage := $(LOCAL_NATIVE_COVERAGE)
my_additional_dependencies := $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES)
+my_export_c_include_dirs := $(LOCAL_EXPORT_C_INCLUDE_DIRS)
ifdef LOCAL_IS_HOST_MODULE
my_allow_undefined_symbols := true
@@ -399,7 +400,7 @@
## Define arm-vs-thumb-mode flags.
###########################################################
LOCAL_ARM_MODE := $(strip $(LOCAL_ARM_MODE))
-ifeq ($(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH),arm)
+ifeq ($($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH),arm)
arm_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),arm)
normal_objects_mode := $(if $(LOCAL_ARM_MODE),$(LOCAL_ARM_MODE),thumb)
@@ -489,6 +490,7 @@
# This is just a dummy rule to make sure gmake doesn't skip updating the dependents.
$(rs_generated_cpps) : $(RenderScript_file_stamp)
@echo "Updated RS generated cpp file $@."
+ $(hide) touch $@
my_c_includes += $(renderscript_intermediate)
my_generated_sources += $(rs_generated_cpps)
@@ -512,48 +514,69 @@
ALL_GENERATED_SOURCES += $(my_generated_sources)
###########################################################
-## Compile the .proto files to .cc and then to .o
+## Compile the .proto files to .cc (or .c) and then to .o
###########################################################
proto_sources := $(filter %.proto,$(my_src_files))
proto_generated_objects :=
proto_generated_headers :=
ifneq ($(proto_sources),)
-proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources))
-proto_generated_cc_sources_dir := $(generated_sources_dir)/proto
-proto_generated_cc_sources := $(addprefix $(proto_generated_cc_sources_dir)/, \
- $(patsubst %.proto,%.pb.cc,$(proto_sources_fullpath)))
-proto_generated_headers := $(patsubst %.pb.cc,%.pb.h, $(proto_generated_cc_sources))
+proto_generated_sources_dir := $(generated_sources_dir)/proto
proto_generated_obj_dir := $(intermediates)/proto
+
+ifneq (,$(filter nanopb-c nanopb-c-enable_malloc, $(LOCAL_PROTOC_OPTIMIZE_TYPE)))
+my_proto_source_suffix := .c
+my_proto_c_includes := external/nanopb-c
+my_protoc_flags := --nanopb_out=$(proto_generated_sources_dir) \
+ --plugin=external/nanopb-c/generator/protoc-gen-nanopb
+else
+my_proto_source_suffix := .cc
+my_proto_c_includes := external/protobuf/src
+my_cflags += -DGOOGLE_PROTOBUF_NO_RTTI
+my_protoc_flags := --cpp_out=$(proto_generated_sources_dir)
+endif
+my_proto_c_includes += $(proto_generated_sources_dir)
+
+proto_sources_fullpath := $(addprefix $(LOCAL_PATH)/, $(proto_sources))
+proto_generated_sources := $(addprefix $(proto_generated_sources_dir)/, \
+ $(patsubst %.proto,%.pb$(my_proto_source_suffix),$(proto_sources_fullpath)))
+proto_generated_headers := $(patsubst %.pb$(my_proto_source_suffix),%.pb.h, $(proto_generated_sources))
proto_generated_objects := $(addprefix $(proto_generated_obj_dir)/, \
$(patsubst %.proto,%.pb.o,$(proto_sources_fullpath)))
-# Auto-export the generated proto source dir.
-LOCAL_EXPORT_C_INCLUDE_DIRS += $(proto_generated_cc_sources_dir)
-
# Ensure the transform-proto-to-cc rule is only defined once in multilib build.
ifndef $(my_prefix)_$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined
-$(proto_generated_cc_sources): PRIVATE_PROTO_INCLUDES := $(TOP)
-$(proto_generated_cc_sources): PRIVATE_PROTO_CC_OUTPUT_DIR := $(proto_generated_cc_sources_dir)
-$(proto_generated_cc_sources): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS)
-$(proto_generated_cc_sources): $(proto_generated_cc_sources_dir)/%.pb.cc: %.proto $(PROTOC)
+$(proto_generated_sources): PRIVATE_PROTO_INCLUDES := $(TOP)
+$(proto_generated_sources): PRIVATE_PROTOC_FLAGS := $(LOCAL_PROTOC_FLAGS) $(my_protoc_flags)
+$(proto_generated_sources): $(proto_generated_sources_dir)/%.pb$(my_proto_source_suffix): %.proto $(PROTOC)
$(transform-proto-to-cc)
# This is just a dummy rule to make sure gmake doesn't skip updating the dependents.
-$(proto_generated_headers): $(proto_generated_cc_sources_dir)/%.pb.h: $(proto_generated_cc_sources_dir)/%.pb.cc
+$(proto_generated_headers): $(proto_generated_sources_dir)/%.pb.h: $(proto_generated_sources_dir)/%.pb$(my_proto_source_suffix)
@echo "Updated header file $@."
+ $(hide) touch $@
$(my_prefix)_$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_proto_defined := true
endif # transform-proto-to-cc rule included only once
$(proto_generated_objects): PRIVATE_ARM_MODE := $(normal_objects_mode)
$(proto_generated_objects): PRIVATE_ARM_CFLAGS := $(normal_objects_cflags)
-$(proto_generated_objects): $(proto_generated_obj_dir)/%.o: $(proto_generated_cc_sources_dir)/%.cc $(proto_generated_headers)
+$(proto_generated_objects): $(proto_generated_obj_dir)/%.o: $(proto_generated_sources_dir)/%$(my_proto_source_suffix) $(proto_generated_headers)
+ifeq ($(my_proto_source_suffix),.c)
+ $(transform-$(PRIVATE_HOST)c-to-o)
+else
$(transform-$(PRIVATE_HOST)cpp-to-o)
+endif
-include $(proto_generated_objects:%.o=%.P)
-my_c_includes += external/protobuf/src $(proto_generated_cc_sources_dir)
-my_cflags += -DGOOGLE_PROTOBUF_NO_RTTI
-ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),full)
+my_c_includes += $(my_proto_c_includes)
+# Auto-export the generated proto source dir.
+my_export_c_include_dirs += $(my_proto_c_includes)
+
+ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nanopb-c-enable_malloc)
+ my_static_libraries += libprotobuf-c-nano-enable_malloc
+else ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nanopb-c)
+ my_static_libraries += libprotobuf-c-nano
+else ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),full)
ifdef LOCAL_SDK_VERSION
my_static_libraries += libprotobuf-cpp-full
else
@@ -568,7 +591,6 @@
endif
endif # $(proto_sources) non-empty
-
###########################################################
## YACC: Compile .y and .yy files to .cpp and the to .o.
###########################################################
@@ -1103,12 +1125,12 @@
# Export includes
###########################################################
export_includes := $(intermediates)/export_includes
-$(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(LOCAL_EXPORT_C_INCLUDE_DIRS)
+$(export_includes): PRIVATE_EXPORT_C_INCLUDE_DIRS := $(my_export_c_include_dirs)
# Make sure .pb.h are already generated before any dependent source files get compiled.
$(export_includes) : $(LOCAL_MODULE_MAKEFILE) $(proto_generated_headers)
@echo Export includes file: $< -- $@
$(hide) mkdir -p $(dir $@) && rm -f $@
-ifdef LOCAL_EXPORT_C_INCLUDE_DIRS
+ifdef my_export_c_include_dirs
$(hide) for d in $(PRIVATE_EXPORT_C_INCLUDE_DIRS); do \
echo "-I $$d" >> $@; \
done
diff --git a/core/build_id.mk b/core/build_id.mk
index f94b224..0e8e2cf 100644
--- a/core/build_id.mk
+++ b/core/build_id.mk
@@ -18,6 +18,4 @@
# (like "CRB01"). It must be a single word, and is
# capitalized by convention.
-BUILD_ID := AOSP
-
-DISPLAY_BUILD_NUMBER := true
+export BUILD_ID=MASTER
diff --git a/core/clang/config.mk b/core/clang/config.mk
index 4875ea1..90c788c 100644
--- a/core/clang/config.mk
+++ b/core/clang/config.mk
@@ -73,6 +73,8 @@
-fno-tree-sra \
-fprefetch-loop-arrays \
-funswitch-loops \
+ -Werror=unused-but-set-parameter \
+ -Werror=unused-but-set-variable \
-Wmaybe-uninitialized \
-Wno-error=clobbered \
-Wno-error=maybe-uninitialized \
diff --git a/core/cleanspec.mk b/core/cleanspec.mk
index 500ce54..4441e2a 100644
--- a/core/cleanspec.mk
+++ b/core/cleanspec.mk
@@ -64,6 +64,6 @@
# ************************************************
subdir_cleanspecs := \
- $(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git . CleanSpec.mk)
+ $(shell build/tools/findleaves.py $(FIND_LEAVES_EXCLUDES) . CleanSpec.mk)
include $(subdir_cleanspecs)
subdir_cleanspecs :=
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 7ab1baf..6a82ba9 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -20,7 +20,6 @@
LOCAL_MODULE_CLASS:=
LOCAL_MODULE_SUFFIX:=
LOCAL_PACKAGE_NAME:=
-LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES:=
LOCAL_OVERRIDES_PACKAGES:=
LOCAL_EXPORT_PACKAGE_RESOURCES:=
LOCAL_MANIFEST_PACKAGE_NAME:=
@@ -74,6 +73,7 @@
LOCAL_JAVA_LAYERS_FILE:=
LOCAL_NO_STANDARD_LIBRARIES:=
LOCAL_CLASSPATH:=
+LOCAL_JACK_CLASSPATH:=
LOCAL_DROIDDOC_USE_STANDARD_DOCLET:=
LOCAL_DROIDDOC_SOURCE_PATH:=
LOCAL_DROIDDOC_TEMPLATE_DIR:=
@@ -107,6 +107,11 @@
LOCAL_ADDITIONAL_JAVA_DIR:=
LOCAL_ALLOW_UNDEFINED_SYMBOLS:=
LOCAL_DX_FLAGS:=
+LOCAL_JACK_ENABLED:=$(DEFAULT_JACK_ENABLED) # '' (ie disabled), disabled, full, incremental
+LOCAL_JACK_VM_ARGS := $(DEFAULT_JACK_VM_ARGS)
+LOCAL_JACK_EXTRA_ARGS := $(DEFAULT_JACK_EXTRA_ARGS)
+LOCAL_JACK_FLAGS:=
+LOCAL_JILL_FLAGS:=
LOCAL_CERTIFICATE:=
LOCAL_SDK_VERSION:=
LOCAL_SDK_RES_VERSION:=
@@ -114,6 +119,7 @@
LOCAL_EMMA_INSTRUMENT:=
LOCAL_PROGUARD_ENABLED:= # '',full,custom,nosystem,disabled,obfuscation,optimization
LOCAL_PROGUARD_FLAGS:=
+LOCAL_JACK_PROGUARD_FLAGS:=
LOCAL_PROGUARD_FLAG_FILES:=
LOCAL_TEST_MODULE_TO_PROGUARD_WITH:=
LOCAL_EMMA_COVERAGE_FILTER:=
@@ -131,7 +137,7 @@
LOCAL_DEX_PREOPT:= # '',true,false,nostripping
LOCAL_DEX_PREOPT_IMAGE_LOCATION:=
LOCAL_DEX_PREOPT_FLAGS:=
-LOCAL_PROTOC_OPTIMIZE_TYPE:= # lite(default),micro,nano,full
+LOCAL_PROTOC_OPTIMIZE_TYPE:= # lite(default),micro,nano,full,nanopb-c,nanopb-c-enable_malloc
LOCAL_PROTOC_FLAGS:=
LOCAL_PROTO_JAVA_OUTPUT_PARAMS:=
LOCAL_NO_CRT:=
diff --git a/core/combo/arch/arm64/armv8-a.mk b/core/combo/arch/arm64/armv8-a.mk
index edc0497..5e27e5a 100644
--- a/core/combo/arch/arm64/armv8-a.mk
+++ b/core/combo/arch/arm64/armv8-a.mk
@@ -1 +1,5 @@
-arch_variant_cflags :=
+ifneq (,$(filter cortex-a53,$(TARGET_$(combo_2nd_arch_prefix)CPU_VARIANT)))
+ arch_variant_cflags := -mcpu=cortex-a53
+else
+ arch_variant_cflags :=
+endif
diff --git a/core/combo/javac.mk b/core/combo/javac.mk
index fb43ea4..82cbb43 100644
--- a/core/combo/javac.mk
+++ b/core/combo/javac.mk
@@ -9,6 +9,11 @@
# COMMON_JAVAC -- Java compiler command with common arguments
#
+ifndef ANDROID_COMPILE_WITH_JACK
+# Defines if compilation with jack is enabled by default.
+ANDROID_COMPILE_WITH_JACK := true
+endif
+
common_jdk_flags := -source 1.7 -target 1.7 -Xmaxerrs 9999999
# Use the indexer wrapper to index the codebase instead of the javac compiler
diff --git a/core/config.mk b/core/config.mk
index 4bbf3fd..1837491 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -38,6 +38,7 @@
# TODO: See if we can remove most of these from the global list.
SRC_HEADERS := \
$(TOPDIR)system/core/include \
+ $(TOPDIR)system/media/audio/include \
$(TOPDIR)hardware/libhardware/include \
$(TOPDIR)hardware/libhardware_legacy/include \
$(TOPDIR)hardware/ril/include \
@@ -136,6 +137,12 @@
# list of flags to turn specific warnings in to errors
TARGET_ERROR_FLAGS := -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point
+ifdef TMPDIR
+JAVA_TMPDIR_ARG := -Djava.io.tmpdir=$(TMPDIR)
+else
+JAVA_TMPDIR_ARG :=
+endif
+
# ###############################################################
# Include sub-configuration files
# ###############################################################
@@ -155,6 +162,10 @@
# are specific to the user's build configuration.
include $(BUILD_SYSTEM)/envsetup.mk
+# Pruned directory options used when using findleaves.py
+# See envsetup.mk for a description of SCAN_EXCLUDE_DIRS
+FIND_LEAVES_EXCLUDES := $(addprefix --prune=, $(OUT_DIR) $(SCAN_EXCLUDE_DIRS) .repo .git)
+
# The build system exposes several variables for where to find the kernel
# headers:
# TARGET_DEVICE_KERNEL_HEADERS is automatically created for the current
@@ -372,6 +383,11 @@
# ---------------------------------------------------------------
# Generic tools.
+JACK := $(HOST_OUT_EXECUTABLES)/jack
+JACK_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jack.jar
+JACK_LAUNCHER_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jack-launcher.jar
+JILL_JAR := $(HOST_OUT_JAVA_LIBRARIES)/jill.jar
+JACK_MULTIDEX_DEFAULT_PREPROCESSOR := frameworks/multidex/library/resources/JACK-INF/legacyMultidexInstallation.jpp
LEX := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/flex/flex-2.5.39
# The default PKGDATADIR built in the prebuilt bison is a relative path
@@ -416,6 +432,42 @@
TUNE2FS := $(HOST_OUT_EXECUTABLES)/tune2fs$(HOST_EXECUTABLE_SUFFIX)
E2FSCK := $(HOST_OUT_EXECUTABLES)/e2fsck$(HOST_EXECUTABLE_SUFFIX)
JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar
+
+ifeq ($(ANDROID_COMPILE_WITH_JACK),true)
+DEFAULT_JACK_ENABLED:=full
+else
+DEFAULT_JACK_ENABLED:=
+endif
+ifneq ($(strip $(ANDROID_JACK_VM)),)
+JACK_VM := $(ANDROID_JACK_VM)
+else
+JACK_VM := java
+endif
+# call jack
+#
+# $(1): vm arguments
+# $(2): jack perf arguments
+ifneq (,$(strip $(filter dist,$(MAKECMDGOALS))))
+JACK_SERVER_LOG_COMMAND := mkdir -p $(DIST_DIR)/logs/; SERVER_LOG=$(DIST_DIR)/logs/jack-server.log
+endif
+define call-jack
+$(JACK_SERVER_LOG_COMMAND) JACK_VM_COMMAND="$(JACK_VM) $(1) $(JAVA_TMPDIR_ARG) -jar $(JACK_LAUNCHER_JAR) " JACK_JAR="$(JACK_JAR)" $(JACK) $(2)
+endef
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_VM_ARGS := $(DEFAULT_JACK_VM_ARGS)
+ifneq ($(ANDROID_JACK_VM_ARGS),)
+DEFAULT_JACK_VM_ARGS := $(ANDROID_JACK_VM_ARGS)
+else
+DEFAULT_JACK_VM_ARGS := -Dfile.encoding=UTF-8 -Xms2560m -XX:+TieredCompilation
+endif
+ifneq ($(ANDROID_JACK_EXTRA_ARGS),)
+DEFAULT_JACK_EXTRA_ARGS := $(ANDROID_JACK_EXTRA_ARGS)
+else
+DEFAULT_JACK_EXTRA_ARGS := @$(BUILD_SYSTEM)/jack-default.args
+endif
+# Turn off jack warnings by default.
+DEFAULT_JACK_EXTRA_ARGS += --verbose error
+
+JILL := java -Xmx3500m -jar $(JILL_JAR)
PROGUARD := external/proguard/bin/proguard.sh
JAVATAGS := build/tools/java-event-log-tags.py
LLVM_RS_CC := $(HOST_OUT_EXECUTABLES)/llvm-rs-cc$(HOST_EXECUTABLE_SUFFIX)
@@ -426,6 +478,8 @@
VERITY_SIGNER := $(HOST_OUT_EXECUTABLES)/verity_signer
BUILD_VERITY_TREE := $(HOST_OUT_EXECUTABLES)/build_verity_tree
BOOT_SIGNER := $(HOST_OUT_EXECUTABLES)/boot_signer
+FUTILITY := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/futility/futility
+VBOOT_SIGNER := prebuilts/misc/scripts/vboot_signer/vboot_signer.sh
# ACP is always for the build OS, not for the host OS
ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX)
@@ -581,6 +635,13 @@
HISTORICAL_SDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/sdk
HISTORICAL_NDK_VERSIONS_ROOT := $(TOPDIR)prebuilts/ndk
+# The path where app can reference the support library resources.
+ifdef TARGET_BUILD_APPS
+SUPPORT_LIBRARY_ROOT := $(HISTORICAL_SDK_VERSIONS_ROOT)/current/support
+else
+SUPPORT_LIBRARY_ROOT := frameworks/support
+endif
+
# Historical SDK version N is stored in $(HISTORICAL_SDK_VERSIONS_ROOT)/N.
# The 'current' version is whatever this source tree is.
#
diff --git a/core/configure_local_jack.mk b/core/configure_local_jack.mk
new file mode 100644
index 0000000..98b13d2
--- /dev/null
+++ b/core/configure_local_jack.mk
@@ -0,0 +1,30 @@
+#
+# Copyright (C) 2008 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.
+#
+
+ifdef ANDROID_FORCE_JACK_ENABLED
+LOCAL_JACK_ENABLED := $(ANDROID_FORCE_JACK_ENABLED)
+endif
+LOCAL_JACK_ENABLED := $(strip $(LOCAL_JACK_ENABLED))
+ifneq ($(LOCAL_JACK_ENABLED),full)
+ifneq ($(LOCAL_JACK_ENABLED),incremental)
+ifdef LOCAL_JACK_ENABLED
+ifneq ($(LOCAL_JACK_ENABLED),disabled)
+$(error $(LOCAL_PATH): invalid LOCAL_JACK_ENABLED "$(LOCAL_JACK_ENABLED)" for $(LOCAL_MODULE))
+endif
+endif
+LOCAL_JACK_ENABLED :=
+endif
+endif
diff --git a/core/definitions.mk b/core/definitions.mk
index eaaca24..1d9013a 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -150,7 +150,7 @@
# $(1): directory to search under
# Ignores $(1)/Android.mk
define first-makefiles-under
-$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git \
+$(shell build/tools/findleaves.py $(FIND_LEAVES_EXCLUDES) \
--mindepth=2 $(1) Android.mk)
endef
@@ -403,6 +403,14 @@
endef
###########################################################
+## Reverse order of a list
+###########################################################
+
+define reverse-list
+$(if $(1),$(call reverse-list,$(wordlist 2,$(words $(1)),$(1)))) $(firstword $(1))
+endef
+
+###########################################################
## The intermediates directory. Where object files go for
## a given target. We could technically get away without
## the "_intermediates" suffix on the directory, but it's
@@ -602,6 +610,36 @@
endef
###########################################################
+## Convert "core ext framework" to "out/.../classes.jack ..."
+## $(1): library list
+## $(2): Non-empty if IS_HOST_MODULE
+###########################################################
+
+# $(1): library name
+# $(2): Non-empty if IS_HOST_MODULE
+define _jack-lib-full-classes
+$(call _java-lib-dir,$(1),$(2))/classes.jack
+endef
+
+# $(1): library name list
+# $(2): Non-empty if IS_HOST_MODULE
+define jack-lib-files
+$(foreach lib,$(1),$(call _jack-lib-full-classes,$(lib),$(2)))
+endef
+
+# $(1): library name
+# $(2): Non-empty if IS_HOST_MODULE
+define _jack-lib-full-dep
+$(call _jack-lib-full-classes,$(1),$(2))
+endef
+
+# $(1): library name list
+# $(2): Non-empty if IS_HOST_MODULE
+define jack-lib-deps
+$(foreach lib,$(1),$(call _jack-lib-full-dep,$(lib),$(2)))
+endef
+
+###########################################################
## Run rot13 on a string
## $(1): the string. Must be one line.
###########################################################
@@ -956,7 +994,7 @@
endef
######################################################################
-## Commands for running protoc to compile .proto into .pb.cc and .pb.h
+## Commands for running protoc to compile .proto into .pb.cc (or.pb.c) and .pb.h
######################################################################
define transform-proto-to-cc
@echo "Protoc: $@ <= $<"
@@ -964,10 +1002,9 @@
$(hide) $(PROTOC) \
$(addprefix --proto_path=, $(PRIVATE_PROTO_INCLUDES)) \
$(PRIVATE_PROTOC_FLAGS) \
- --cpp_out=$(PRIVATE_PROTO_CC_OUTPUT_DIR) $<
+ $<
endef
-
###########################################################
## Commands for running gcc to compile a C++ file
###########################################################
@@ -1629,7 +1666,8 @@
$(if $(filter --version-code,$(PRIVATE_AAPT_FLAGS)),,--version-code $(PLATFORM_SDK_VERSION)) \
$(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(PLATFORM_VERSION)-$(BUILD_NUMBER_FROM_FILE)) \
$(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
- $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR))
+ $(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
+ --skip-symbols-without-default-localization
endef
ifeq ($(HOST_OS),windows)
@@ -1638,12 +1676,6 @@
xlint_unchecked := -Xlint:unchecked
endif
-ifeq (true, $(ENABLE_INCREMENTALJAVAC))
-incremental_dex := --incremental
-else
-incremental_dex :=
-endif
-
# emit-line, <word list>, <output file>
define emit-line
$(if $(1),echo -n '$(strip $(1)) ' >> $(2))
@@ -1763,68 +1795,146 @@
$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
endef
-# Override the above definitions if we want to do incremetal javac
-ifeq (true, $(ENABLE_INCREMENTALJAVAC))
-define compile-java
-$(hide) mkdir -p $(dir $@)
-$(hide) mkdir -p $(PRIVATE_CLASS_INTERMEDIATES_DIR)
-$(hide) touch $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp
-$(call unzip-jar-files,$(PRIVATE_STATIC_JAVA_LIBRARIES),$(PRIVATE_CLASS_INTERMEDIATES_DIR))
-$(hide) if [ -e $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp ] ; then \
- newerFlag=$$(echo -n "-newer $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp") ; \
- fi ; \
- find $(PRIVATE_JAVA_SOURCES) $$newerFlag > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list ; \
- if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
- find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' $$newerFlag >> $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list; \
- fi
-$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
- | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
-@echo "(Incremental) build source files:"
-@cat $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
-$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
- $(1) -encoding UTF-8 \
- $(strip $(PRIVATE_JAVAC_DEBUG_FLAGS)) \
- $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
- $(2) \
- $(addprefix -classpath ,$(strip \
- $(call normalize-path-list,$(PRIVATE_ALL_JAVA_LIBRARIES) $(PRIVATE_CLASS_INTERMEDIATES_DIR)))) \
- $(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
- -extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
- $(PRIVATE_JAVACFLAGS) \
- \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
- || ( exit 41 ) \
-fi
-$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list
-$(hide) rm -f $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
+# Invoke Jack to compile java from source to dex and jack files.
+#
+# Some historical notes:
+# - below we write the list of java files to java-source-list to avoid argument
+# list length problems with Cygwin
+# - we filter out duplicate java file names because Jack doesn't like them.
+define jack-java-to-dex
$(hide) rm -f $@
-$(if $(PRIVATE_JAR_EXCLUDE_FILES), $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
- -name $(word 1, $(PRIVATE_JAR_EXCLUDE_FILES)) \
- $(addprefix -o -name , $(wordlist 2, 999, $(PRIVATE_JAR_EXCLUDE_FILES))) \
- | xargs rm -rf)
-$(if $(PRIVATE_JAR_PACKAGES), \
- $(hide) find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -mindepth 1 -type f \
- $(foreach pkg, $(PRIVATE_JAR_PACKAGES), \
- -not -path $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))/\*) -delete ; \
- find $(PRIVATE_CLASS_INTERMEDIATES_DIR) -empty -delete)
-$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) rm -rf \
- $(foreach pkg, $(PRIVATE_JAR_EXCLUDE_PACKAGES), \
- $(PRIVATE_CLASS_INTERMEDIATES_DIR)/$(subst .,/,$(pkg))))
-$(if $(PRIVATE_RMTYPEDEFS), $(hide) $(RMTYPEDEFS) -v $(PRIVATE_CLASS_INTERMEDIATES_DIR))
-$(if $(PRIVATE_JAR_MANIFEST), \
- $(hide) sed -e "s/%BUILD_NUMBER%/$(BUILD_NUMBER_FROM_FILE)/" \
- $(PRIVATE_JAR_MANIFEST) > $(dir $@)/manifest.mf && \
- jar -cfm $@ $(dir $@)/manifest.mf \
- -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) ., \
- $(hide) jar -cf $@ -C $(PRIVATE_CLASS_INTERMEDIATES_DIR) .)
-$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
-$(hide) mv $(PRIVATE_CLASS_INTERMEDIATES_DIR)/newstamp $(PRIVATE_CLASS_INTERMEDIATES_DIR)/stamp
+$(hide) rm -f $(PRIVATE_CLASSES_JACK)
+$(hide) rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR)
+$(hide) mkdir -p $(dir $@)
+$(hide) mkdir -p $(dir $(PRIVATE_CLASSES_JACK))
+$(hide) mkdir -p $(PRIVATE_JACK_INTERMEDIATES_DIR)
+$(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR))
+$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list)
+$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
+ find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list; \
+fi
+$(hide) tr ' ' '\n' < $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list \
+ | sort -u > $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq
+$(if $(PRIVATE_JACK_PROGUARD_FLAGS), \
+ $(hide) echo -basedirectory $(CURDIR) > $@.flags; \
+ echo $(PRIVATE_JACK_PROGUARD_FLAGS) >> $@.flags; \
+)
+$(if $(PRIVATE_EXTRA_JAR_ARGS),
+ $(hide) mkdir -p $@.res.tmp
+ $(hide) $(call create-empty-package-at,$@.res.tmp.zip)
+ $(hide) $(call add-java-resources-to,$@.res.tmp.zip)
+ $(hide) $(call unzip-jar-files,$@.res.tmp.zip,$@.res.tmp)
+ $(hide) rm $@.res.tmp.zip)
+$(hide) if [ -s $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
+ export tmpEcjArg="@$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq"; \
+else \
+ export tmpEcjArg=""; \
+fi; \
+$(call call-jack,$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \
+ $(strip $(PRIVATE_JACK_FLAGS)) \
+ $(strip $(PRIVATE_JACK_DEBUG_FLAGS)) \
+ $(if $(NO_OPTIMIZE_DX), \
+ -D jack.dex.optimize="false") \
+ $(if $(PRIVATE_RMTYPEDEFS), \
+ -D jack.android.remove-typedef="true") \
+ $(addprefix --classpath ,$(strip \
+ $(call normalize-path-list,$(PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES) $(PRIVATE_ALL_JACK_LIBRARIES)))) \
+ $(addprefix --import ,$(call reverse-list,$(PRIVATE_STATIC_JACK_LIBRARIES))) \
+ $(if $(PRIVATE_EXTRA_JAR_ARGS),--import-resource $@.res.tmp) \
+ -D jack.import.resource.policy=keep-first \
+ -D jack.import.type.policy=keep-first \
+ --output-jack $(PRIVATE_CLASSES_JACK) \
+ -D jack.java.source.version=1.7 \
+ $(if $(PRIVATE_JACK_INCREMENTAL_DIR),--incremental-folder $(PRIVATE_JACK_INCREMENTAL_DIR)) \
+ --output-dex $(PRIVATE_JACK_INTERMEDIATES_DIR) \
+ $(addprefix --config-jarjar ,$(strip $(PRIVATE_JARJAR_RULES))) \
+ $(if $(PRIVATE_JACK_PROGUARD_FLAGS),--config-proguard $@.flags) \
+ $$tmpEcjArg \
+ || ( rm -rf $(PRIVATE_CLASSES_JACK); rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR); exit 41 )
+$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/classes*.dex $(dir $@)
+$(hide) rm -f $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list
+$(if $(PRIVATE_EXTRA_JAR_ARGS),$(hide) rm -rf $@.res.tmp)
+$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(PRIVATE_JACK_INTERMEDIATES_DIR).java-source-list
+$(if $(PRIVATE_JAR_PACKAGES), $(hide) echo unsupported options PRIVATE_JAR_PACKAGES in $@; exit 53)
+$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) echo unsupported options JAR_EXCLUDE_PACKAGES in $@; exit 53)
+$(if $(PRIVATE_JAR_MANIFEST), $(hide) echo unsupported options JAR_MANIFEST in $@; exit 53)
endef
-define transform-java-to-classes.jar
-@echo "target Java: $(PRIVATE_MODULE) ($(PRIVATE_CLASS_INTERMEDIATES_DIR))"
-$(call compile-java,$(TARGET_JAVAC),$(PRIVATE_BOOTCLASSPATH))
+define transform-jar-to-jack
+ $(hide) mkdir -p $(dir $@)
+ $(JILL) $(PRIVATE_JILL_FLAGS) --output $@.tmpjill.jack $<
+ $(hide) mkdir -p $@.tmpjill.res
+ $(hide) $(call unzip-jar-files,$<,$@.tmpjill.res)
+ $(hide) find $@.tmpjill.res -iname "*.class" -delete
+ $(hide) $(call call-jack,$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \
+ -D jack.import.resource.policy=keep-first \
+ -D jack.import.type.policy=keep-first \
+ --import $@.tmpjill.jack \
+ --import-resource $@.tmpjill.res \
+ --output-jack $@
+ $(hide) rm -rf $@.tmpjill.res
+ $(hide) rm $@.tmpjill.jack
endef
-endif # ENABLE_INCREMENTALJAVAC
+
+
+# Invoke Jack to compile java from source to jack files without shrink or obfuscation.
+#
+# Some historical notes:
+# - below we write the list of java files to java-source-list to avoid argument
+# list length problems with Cygwin
+# - we filter out duplicate java file names because Jack doesn't like them.
+define java-to-jack
+$(hide) rm -f $@
+$(hide) rm -rf $(PRIVATE_JACK_INTERMEDIATES_DIR)
+$(hide) mkdir -p $(dir $@)
+$(hide) mkdir -p $(PRIVATE_JACK_INTERMEDIATES_DIR)
+$(if $(PRIVATE_JACK_INCREMENTAL_DIR),$(hide) mkdir -p $(PRIVATE_JACK_INCREMENTAL_DIR))
+$(call dump-words-to-file,$(PRIVATE_JAVA_SOURCES),$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list)
+$(hide) if [ -d "$(PRIVATE_SOURCE_INTERMEDIATES_DIR)" ]; then \
+ find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name '*.java' >> $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list; \
+fi
+$(hide) tr ' ' '\n' < $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list \
+ | sort -u > $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq
+$(if $(PRIVATE_JACK_PROGUARD_FLAGS), \
+ $(hide) echo -basedirectory $(CURDIR) > $@.flags; \
+ echo $(PRIVATE_JACK_PROGUARD_FLAGS) >> $@.flags; \
+)
+$(if $(PRIVATE_EXTRA_JAR_ARGS),
+ $(hide) mkdir -p $@.res.tmp
+ $(hide) $(call create-empty-package-at,$@.res.tmp.zip)
+ $(hide) $(call add-java-resources-to,$@.res.tmp.zip)
+ $(hide) unzip -qo $@.res.tmp.zip -d $@.res.tmp
+ $(hide) rm $@.res.tmp.zip)
+$(hide) if [ -s $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
+ export tmpEcjArg="@$(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq"; \
+else \
+ export tmpEcjArg=""; \
+fi; \
+$(call call-jack,$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \
+ $(strip $(PRIVATE_JACK_FLAGS)) \
+ $(strip $(PRIVATE_JACK_DEBUG_FLAGS)) \
+ $(if $(NO_OPTIMIZE_DX), \
+ -D jack.dex.optimize="false") \
+ $(addprefix --classpath ,$(strip \
+ $(call normalize-path-list,$(PRIVATE_BOOTCLASSPATH_JAVA_LIBRARIES) $(PRIVATE_ALL_JACK_LIBRARIES)))) \
+ $(addprefix --import ,$(call reverse-list,$(PRIVATE_STATIC_JACK_LIBRARIES))) \
+ $(if $(PRIVATE_EXTRA_JAR_ARGS),--import-resource $@.res.tmp) \
+ -D jack.import.resource.policy=keep-first \
+ -D jack.import.type.policy=keep-first \
+ -D jack.java.source.version=1.7 \
+ $(if $(PRIVATE_JACK_INCREMENTAL_DIR),--incremental-folder $(PRIVATE_JACK_INCREMENTAL_DIR)) \
+ --output-jack $@ \
+ $(addprefix --config-jarjar ,$(strip $(PRIVATE_JARJAR_RULES))) \
+ $(if $(PRIVATE_JACK_PROGUARD_FLAGS),--config-proguard $@.flags) \
+ $$tmpEcjArg \
+ || ( rm -f $@ ; exit 41 )
+$(hide) rm -f $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list
+$(if $(PRIVATE_EXTRA_JAR_ARGS),$(hide) rm -rf $@.res.tmp)
+$(hide) mv $(PRIVATE_JACK_INTERMEDIATES_DIR)/java-source-list-uniq $(PRIVATE_JACK_INTERMEDIATES_DIR).java-source-list
+$(if $(PRIVATE_JAR_PACKAGES), $(hide) echo unsupported options PRIVATE_JAR_PACKAGES in $@; exit 53)
+$(if $(PRIVATE_JAR_EXCLUDE_PACKAGES), $(hide) echo unsupported options JAR_EXCLUDE_PACKAGES in $@; exit 53)
+$(if $(PRIVATE_JAR_MANIFEST), $(hide) echo unsupported options JAR_MANIFEST in $@; exit 53)
+endef
define transform-classes.jar-to-emma
$(hide) java -classpath $(EMMA_JAR) emma instr -outmode fullcopy -outfile \
@@ -1842,7 +1952,6 @@
$(hide) $(DX) \
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx2048M) \
--dex --output=$(dir $@) \
- $(incremental_dex) \
$(if $(NO_OPTIMIZE_DX), \
--no-optimize) \
$(if $(GENERATE_DEX_DEBUG), \
@@ -1856,12 +1965,20 @@
# Create a mostly-empty .jar file that we'll add to later.
# The MacOS jar tool doesn't like creating empty jar files,
# so we need to give it something.
+# $(1) package to create
+define create-empty-package-at
+@mkdir -p $(dir $(1))
+$(hide) touch $(dir $(1))zipdummy
+$(hide) (cd $(dir $(1)) && jar cf $(notdir $(1)) zipdummy)
+$(hide) zip -qd $(1) zipdummy
+$(hide) rm $(dir $(1))zipdummy
+endef
+
+# Create a mostly-empty .jar file that we'll add to later.
+# The MacOS jar tool doesn't like creating empty jar files,
+# so we need to give it something.
define create-empty-package
-@mkdir -p $(dir $@)
-$(hide) touch $(dir $@)zipdummy
-$(hide) (cd $(dir $@) && jar cf $(notdir $@) zipdummy)
-$(hide) zip -qd $@ zipdummy
-$(hide) rm $(dir $@)zipdummy
+$(call create-empty-package-at,$@)
endef
# Copy an arhchive file and delete any class files and empty folders inside.
@@ -1899,6 +2016,7 @@
$(if $(filter --version-name,$(PRIVATE_AAPT_FLAGS)),,--version-name $(PLATFORM_VERSION)-$(BUILD_NUMBER_FROM_FILE)) \
$(addprefix --rename-manifest-package , $(PRIVATE_MANIFEST_PACKAGE_NAME)) \
$(addprefix --rename-instrumentation-target-package , $(PRIVATE_MANIFEST_INSTRUMENTATION_FOR)) \
+ --skip-symbols-without-default-localization \
-F $@
endef
@@ -1910,14 +2028,23 @@
endef
+# For apps_only build, don't uncompress/page-align the jni libraries,
+# because the apk may be run on older platforms that don't support loading jni directly from apk.
+ifdef TARGET_BUILD_APPS
+JNI_COMPRESS_FLAGS :=
+ZIPALIGN_PAGE_ALIGN_FLAGS :=
+else
+JNI_COMPRESS_FLAGS := -0
+ZIPALIGN_PAGE_ALIGN_FLAGS := -p
+endif
+
define add-jni-shared-libs-to-package
$(hide) rm -rf $(dir $@)lib
$(hide) mkdir -p $(addprefix $(dir $@)lib/,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI))
$(foreach abi,$(PRIVATE_JNI_SHARED_LIBRARIES_ABI),\
$(call _add-jni-shared-libs-to-package-per-abi,$(abi),\
$(patsubst $(abi):%,%,$(filter $(abi):%,$(PRIVATE_JNI_SHARED_LIBRARIES)))))
-$(hide) (cd $(dir $@) && zip -r \
- $(if $(filter true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-0,) $(notdir $@) lib)
+$(hide) (cd $(dir $@) && zip -r $(JNI_COMPRESS_FLAGS) $(notdir $@) lib)
$(hide) rm -rf $(dir $@)lib
endef
@@ -1935,6 +2062,19 @@
@rm -f $(1).jar-arg-list
endef
+# Add resources carried by static Jack libraries.
+#
+define add-carried-jack-resources
+ $(hide) if [ -d $(PRIVATE_JACK_INTERMEDIATES_DIR) ] ; then \
+ jack_res_jar_flags=$$(find $(PRIVATE_JACK_INTERMEDIATES_DIR) -type f \
+ | sed -e "s?^$(PRIVATE_JACK_INTERMEDIATES_DIR)/? -C $(PRIVATE_JACK_INTERMEDIATES_DIR) ?"); \
+ if [ -n "$$jack_res_jar_flags" ] ; then \
+ echo $$jack_res_jar_flags >$(dir $@)jack_res_jar_flags; \
+ jar uf $@ $$jack_res_jar_flags; \
+ fi; \
+fi
+endef
+
# Sign a package using the specified key/cert.
#
define sign-package
@@ -1951,20 +2091,22 @@
$(hide) mv $@ $@.unaligned
$(hide) $(ZIPALIGN) \
-f \
- $(if $(filter true, $(PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES)),-p,) \
+ $(ZIPALIGN_PAGE_ALIGN_FLAGS) \
4 \
$@.unaligned $@.aligned
$(hide) mv $@.aligned $@
endef
+# Uncompress shared libraries embedded in an apk.
+#
define uncompress-shared-libs
-$(hide) rm -rf $(dir $@)/tmpworkdir
-$(hide) mv $@ $@.compressed
-$(hide) mkdir $(dir $@)/tmpworkdir
-$(hide) unzip $@.compressed 'lib/*.so' -d $(dir $@)/tmpworkdir
-$(hide) ( cd $(dir $@)/tmpworkdir && zip -D -r -0 ../$(notdir $@).compressed lib )
-$(hide) mv $@.compressed $@
-$(hide) rm -rf $(dir $@)/tmpworkdir
+$(hide) if unzip -l $@ $(PRIVATE_EMBEDDED_JNI_LIBS) >/dev/null ; then \
+ rm -rf $(dir $@)uncompressedlibs && mkdir $(dir $@)uncompressedlibs; \
+ unzip $@ $(PRIVATE_EMBEDDED_JNI_LIBS) -d $(dir $@)uncompressedlibs && \
+ zip -d $@ 'lib/*.so' && \
+ ( cd $(dir $@)uncompressedlibs && zip -D -r -0 ../$(notdir $@) lib ) && \
+ rm -rf $(dir $@)uncompressedlibs; \
+ fi
endef
define install-dex-debug
diff --git a/core/dpi_specific_apk.mk b/core/dpi_specific_apk.mk
index 06e498d..5d0b5bf 100644
--- a/core/dpi_specific_apk.mk
+++ b/core/dpi_specific_apk.mk
@@ -25,24 +25,35 @@
$(built_dpi_apk): PRIVATE_MANIFEST_INSTRUMENTATION_FOR := $(LOCAL_INSTRUMENTATION_FOR)
$(built_dpi_apk): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis)
$(built_dpi_apk): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis)
-$(built_dpi_apk): PRIVATE_DEX_FILE := $(built_dex)
-# Note that PRIVATE_CLASS_INTERMEDIATES_DIR points to the base apk's intermediate dir.
-$(built_dpi_apk): PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates)/classes
-$(built_dpi_apk): PRIVATE_EXTRA_JAR_ARGS := $(extra_jar_args)
$(built_dpi_apk): PRIVATE_PRIVATE_KEY := $(private_key)
$(built_dpi_apk): PRIVATE_CERTIFICATE := $(certificate)
$(built_dpi_apk): PRIVATE_ADDITIONAL_CERTIFICATES := $(foreach c,\
$(LOCAL_ADDITIONAL_CERTIFICATES), $(c).x509.pem $(c).pk8)
+$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE :=
+ifneq ($(full_classes_jar),)
+$(built_dpi_apk): PRIVATE_DEX_FILE := $(built_dex)
+ifndef LOCAL_JACK_ENABLED
+# Use the jarjar processed arhive as the initial package file.
+$(built_dpi_apk): PRIVATE_SOURCE_ARCHIVE := $(full_classes_jarjar_jar)
+else
+$(built_dpi_apk): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc
+endif # LOCAL_JACK_ENABLED
+$(built_dpi_apk): $(built_dex)
+else
+$(built_dpi_apk): PRIVATE_DEX_FILE :=
+endif # full_classes_jar
+
# Set up dependenncies and the build recipe.
$(built_dpi_apk) : $(R_file_stamp)
$(built_dpi_apk) : $(all_library_res_package_export_deps)
-$(built_dpi_apk) : $(built_dex)
$(built_dpi_apk) : $(private_key) $(certificate) $(SIGNAPK_JAR)
$(built_dpi_apk) : $(AAPT) | $(ZIPALIGN)
$(built_dpi_apk) : $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest)
@echo "target Package: $(PRIVATE_MODULE) ($@)"
- $(create-empty-package)
+ $(if $(PRIVATE_SOURCE_ARCHIVE),\
+ $(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@),\
+ $(create-empty-package))
$(add-assets-to-package)
ifneq ($(jni_shared_libraries),)
$(add-jni-shared-libs-to-package)
@@ -52,10 +63,9 @@
$(if $(PRIVATE_EXTRA_JAR_ARGS),$(call add-java-resources-to,$@))
else
$(add-dex-to-package)
+ifdef LOCAL_JACK_ENABLED
+ $(add-carried-jack-resources)
endif
- $(add-carried-java-resources)
-ifneq ($(extra_jar_args),)
- $(add-java-resources-to-package)
endif
$(sign-package)
$(align-package)
diff --git a/core/envsetup.mk b/core/envsetup.mk
index 962d269..7881160 100644
--- a/core/envsetup.mk
+++ b/core/envsetup.mk
@@ -5,6 +5,11 @@
# the bottom for the full list
# OUT_DIR is also set to "out" if it's not already set.
# this allows you to set it to somewhere else if you like
+# SCAN_EXCLUDE_DIRS is an optional, whitespace separated list of
+# directories that will also be excluded from full checkout tree
+# searches for source or make files, in addition to OUT_DIR.
+# This can be useful if you set OUT_DIR to be a different directory
+# than other outputs of your build system.
# Set up version information.
include $(BUILD_SYSTEM)/version_defaults.mk
diff --git a/core/executable_prefer_symlink.mk b/core/executable_prefer_symlink.mk
index 2326e83..fc97ad3 100644
--- a/core/executable_prefer_symlink.mk
+++ b/core/executable_prefer_symlink.mk
@@ -39,7 +39,10 @@
endif
endif
-$(my_symlink): $(LOCAL_INSTALLED_MODULE) $(LOCAL_MODULE_MAKEFILE)
+# $(my_symlink) doesn't need to depend on $(PRIVATE_SRC_BINARY_NAME): we can generate symlink to nonexistent file.
+# If you add the dependency, make would compare the timestamp of a file against that of its symlink:
+# they are always equal, because make follows symlink.
+$(my_symlink): $(LOCAL_MODULE_MAKEFILE)
@echo "Symlink: $@ -> $(PRIVATE_SRC_BINARY_NAME)"
@mkdir -p $(dir $@)
@rm -rf $@
diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk
index f8264ee..4814d70 100644
--- a/core/host_dalvik_java_library.mk
+++ b/core/host_dalvik_java_library.mk
@@ -34,11 +34,13 @@
full_classes_compiled_jar := $(intermediates.COMMON)/classes-full-debug.jar
full_classes_jarjar_jar := $(intermediates.COMMON)/classes-jarjar.jar
full_classes_jar := $(intermediates.COMMON)/classes.jar
+full_classes_jack := $(intermediates.COMMON)/classes.jack
built_dex := $(intermediates.COMMON)/classes.dex
LOCAL_INTERMEDIATE_TARGETS += \
$(full_classes_compiled_jar) \
$(full_classes_jarjar_jar) \
+ $(full_classes_jack) \
$(full_classes_jar) \
$(built_dex)
@@ -61,6 +63,7 @@
PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes
$(LOCAL_INTERMEDIATE_TARGETS): \
PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS :=
$(cleantarget): PRIVATE_CLEAN_FILES += $(intermediates.COMMON)
@@ -69,7 +72,6 @@
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES :=
$(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES :=
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES :=
-$(full_classes_compiled_jar): PRIVATE_RMTYPEDEFS :=
$(full_classes_compiled_jar): \
$(java_sources) \
$(java_resource_sources) \
@@ -96,6 +98,7 @@
@echo Copying: $@
$(hide) $(ACP) -fp $< $@
+ifndef LOCAL_JACK_ENABLED
$(built_dex): PRIVATE_INTERMEDIATES_DIR := $(intermediates.COMMON)
$(built_dex): PRIVATE_DX_FLAGS := $(LOCAL_DX_FLAGS)
$(built_dex): $(full_classes_jar) $(DX)
@@ -109,6 +112,42 @@
$(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@)
$(add-dex-to-package)
+else # LOCAL_JACK_ENABLED
+$(LOCAL_INTERMEDIATE_TARGETS): \
+ PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc
+
+ifeq ($(LOCAL_JACK_ENABLED),incremental)
+$(LOCAL_INTERMEDIATE_TARGETS): \
+ PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-incremental
+else
+$(LOCAL_INTERMEDIATE_TARGETS): \
+ PRIVATE_JACK_INCREMENTAL_DIR :=
+endif
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_DEBUG_FLAGS := -g
+
+$(built_dex): PRIVATE_CLASSES_JACK := $(full_classes_jack)
+$(built_dex): PRIVATE_JACK_FLAGS := $(LOCAL_JACK_FLAGS)
+$(built_dex): $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \
+ $(jar_manifest_file) $(proto_java_sources_file_stamp) $(LOCAL_MODULE_MAKEFILE) \
+ $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES) $(JACK_JAR) $(JACK_LAUNCHER_JAR)
+ @echo Building with Jack: $@
+ $(jack-java-to-dex)
+
+# $(full_classes_jack) is just by-product of $(built_dex).
+# The dummy command was added because, without it, make misses the fact the $(built_dex) also
+# change $(full_classes_jack).
+$(full_classes_jack): $(built_dex)
+ $(hide) touch $@
+
+$(LOCAL_BUILT_MODULE): PRIVATE_DEX_FILE := $(built_dex)
+$(LOCAL_BUILT_MODULE): $(built_dex) $(java_resource_sources)
+ @echo "Host Jar: $(PRIVATE_MODULE) ($@)"
+ $(create-empty-package)
+ $(add-dex-to-package)
+ $(add-carried-jack-resources)
+
+endif # LOCAL_JACK_ENABLED
+
USE_CORE_LIB_BOOTCLASSPATH :=
endif
diff --git a/core/host_dalvik_static_java_library.mk b/core/host_dalvik_static_java_library.mk
index 9e5aaa3..90bcc12 100644
--- a/core/host_dalvik_static_java_library.mk
+++ b/core/host_dalvik_static_java_library.mk
@@ -21,11 +21,37 @@
#
ifeq ($(HOST_OS),linux)
+LOCAL_UNINSTALLABLE_MODULE := true
+LOCAL_IS_STATIC_JAVA_LIBRARY := true
USE_CORE_LIB_BOOTCLASSPATH := true
LOCAL_JAVA_LIBRARIES += core-libart-hostdex
+intermediates.COMMON := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MODULE),true,COMMON,)
+full_classes_jack := $(intermediates.COMMON)/classes.jack
+LOCAL_INTERMEDIATE_TARGETS += \
+ $(full_classes_jack)
+
include $(BUILD_SYSTEM)/host_java_library.mk
+# proguard is not supported
+# *.proto files are not supported
+$(full_classes_jack): PRIVATE_JACK_FLAGS := $(LOCAL_JACK_FLAGS)
+$(full_classes_jack): PRIVATE_JARJAR_RULES := $(LOCAL_JARJAR_RULES)
+$(full_classes_jack): \
+ PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc
+ifeq ($(LOCAL_JACK_ENABLED),incremental)
+$(full_classes_jack): \
+ PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-incremental
+else
+$(full_classes_jack): \
+ PRIVATE_JACK_INCREMENTAL_DIR :=
+endif
+$(full_classes_jack): $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \
+ $(jar_manifest_file) $(layers_file) $(LOCAL_MODULE_MAKEFILE) \
+ $(LOCAL_ADDITIONAL_DEPENDENCIES) $(LOCAL_JARJAR_RULES) \
+ $(JACK_JAR) $(JACK_LAUNCHER_JAR)
+ @echo Building with Jack: $@
+ $(java-to-jack)
USE_CORE_LIB_BOOTCLASSPATH :=
-
+LOCAL_IS_STATIC_JAVA_LIBRARY :=
endif
diff --git a/core/host_java_library.mk b/core/host_java_library.mk
index b751c5f..47189d7 100644
--- a/core/host_java_library.mk
+++ b/core/host_java_library.mk
@@ -43,6 +43,8 @@
include $(BUILD_SYSTEM)/base_rules.mk
#######################################
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS :=
+
ifeq (true,$(LOCAL_EMMA_INSTRUMENT))
$(full_classes_emma_jar): PRIVATE_EMMA_COVERAGE_FILE := $(intermediates.COMMON)/coverage.em
$(full_classes_emma_jar): PRIVATE_EMMA_INTERMEDIATES_DIR := $(emma_intermediates_dir)
@@ -58,13 +60,13 @@
$(full_classes_emma_jar) : $(full_classes_compiled_jar) | $(EMMA_JAR)
$(transform-classes.jar-to-emma)
-$(LOCAL_BUILT_MODULE) : $(full_classes_emma_jar)
+$(built_javalib_jar) : $(full_classes_emma_jar)
@echo Copying: $@
$(hide) $(ACP) -fp $< $@
else # LOCAL_EMMA_INSTRUMENT
-# Directly build into LOCAL_BUILT_MODULE.
-full_classes_compiled_jar := $(LOCAL_BUILT_MODULE)
+# Directly build into $(built_javalib_jar).
+full_classes_compiled_jar := $(built_javalib_jar)
endif # LOCAL_EMMA_INSTRUMENT
$(full_classes_compiled_jar): PRIVATE_JAVAC_DEBUG_FLAGS := -g
@@ -78,7 +80,6 @@
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES :=
$(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES :=
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES :=
-$(full_classes_compiled_jar): PRIVATE_RMTYPEDEFS :=
$(full_classes_compiled_jar): \
$(java_sources) \
$(java_resource_sources) \
diff --git a/core/host_java_library_common.mk b/core/host_java_library_common.mk
index cd9e679..35a6e28 100644
--- a/core/host_java_library_common.mk
+++ b/core/host_java_library_common.mk
@@ -23,6 +23,22 @@
LOCAL_IS_HOST_MODULE := true
LOCAL_BUILT_MODULE_STEM := javalib.jar
+intermediates := $(call local-intermediates-dir)
+intermediates.COMMON := $(call local-intermediates-dir,COMMON)
+
+built_javalib_jar := $(intermediates)/javalib.jar
+
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+ifdef LOCAL_IS_STATIC_JAVA_LIBRARY
+LOCAL_BUILT_MODULE_STEM := classes.jack
+LOCAL_INTERMEDIATE_TARGETS += $(built_javalib_jar)
+endif
+endif
+
# base_rules.mk looks at this
all_res_assets :=
@@ -34,14 +50,15 @@
ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),nano)
LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-nano
else
- LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-lite
+ ifeq ($(LOCAL_PROTOC_OPTIMIZE_TYPE),full)
+ LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-full
+ else
+ LOCAL_JAVA_LIBRARIES += host-libprotobuf-java-lite
+ endif
endif
endif
endif
-intermediates := $(call local-intermediates-dir)
-intermediates.COMMON := $(call local-intermediates-dir,COMMON)
-
LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
LOCAL_JAVA_LIBRARIES := $(sort $(LOCAL_JAVA_LIBRARIES))
diff --git a/core/install_jni_libs.mk b/core/install_jni_libs.mk
index da3032d..625a8a2 100644
--- a/core/install_jni_libs.mk
+++ b/core/install_jni_libs.mk
@@ -8,7 +8,7 @@
#
# Output variables:
# jni_shared_libraries, jni_shared_libraries_abi, jni_shared_libraries_with_abis if we are going to embed the libraries into the apk;
-# extracted_jni_libs, if we extract jni libs from prebuilt apk.
+# embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk.
#
my_embed_jni :=
@@ -27,7 +27,7 @@
jni_shared_libraries_abis :=
# jni_shared_libraries_with_abis is a list of <abi>:<path-to-the-built-jni-lib>
jni_shared_libraries_with_abis :=
-extracted_jni_libs :=
+embedded_prebuilt_jni_libs :=
#######################################
# For TARGET_ARCH
@@ -51,7 +51,7 @@
jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
$(my_jni_shared_libraries))
-extracted_jni_libs += $(my_extracted_jni_libs)
+embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
# Include RS dynamically-generated libraries as well
# TODO: Add multilib support once RS supports generating multilib libraries.
@@ -83,11 +83,11 @@
jni_shared_libraries_abis += $(my_jni_shared_libraries_abi)
jni_shared_libraries_with_abis += $(addprefix $(my_jni_shared_libraries_abi):,\
$(my_jni_shared_libraries))
-extracted_jni_libs += $(my_extracted_jni_libs)
+embedded_prebuilt_jni_libs += $(my_embedded_prebuilt_jni_libs)
endif # my_add_jni
endif # TARGET_2ND_ARCH
jni_shared_libraries := $(strip $(jni_shared_libraries))
jni_shared_libraries_abis := $(sort $(jni_shared_libraries_abis))
jni_shared_libraries_with_abis := $(strip $(jni_shared_libraries_with_abis))
-extracted_jni_libs := $(strip $(extracted_jni_libs))
+embedded_prebuilt_jni_libs := $(strip $(embedded_prebuilt_jni_libs))
diff --git a/core/install_jni_libs_internal.mk b/core/install_jni_libs_internal.mk
index c28bb15..16d0962 100644
--- a/core/install_jni_libs_internal.mk
+++ b/core/install_jni_libs_internal.mk
@@ -9,7 +9,7 @@
#
# Output variables:
# my_jni_shared_libraries, my_jni_shared_libraries_abi, if we are going to embed the libraries into the apk;
-# my_extracted_jni_libs, if we extract jni libs from prebuilt apk.
+# my_embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk.
#
my_jni_shared_libraries := \
@@ -19,7 +19,7 @@
# App-specific lib path.
my_app_lib_path := $(dir $(LOCAL_INSTALLED_MODULE))lib/$(TARGET_$(my_2nd_arch_prefix)ARCH)
-my_extracted_jni_libs :=
+my_embedded_prebuilt_jni_libs :=
ifdef my_embed_jni
# App explicitly requires the prebuilt NDK stl shared libraies.
@@ -76,25 +76,10 @@
endif # my_embed_jni
ifdef my_prebuilt_jni_libs
-# Install prebuilt JNI libs to the app specific lib path.
-# Files like @path/to/libfoo.so (path inside the apk) are JNI libs extracted from the prebuilt apk;
+# Files like @lib/<abi>/libfoo.so (path inside the apk) are JNI libs embedded prebuilt apk;
# Files like path/to/libfoo.so (path relative to LOCAL_PATH) are prebuilts in the source tree.
-my_extracted_jni_libs := $(patsubst @%,%, \
+my_embedded_prebuilt_jni_libs := $(patsubst @%,%, \
$(filter @%, $(my_prebuilt_jni_libs)))
-ifdef my_extracted_jni_libs
-ifndef my_prebuilt_src_file
-$(error No prebuilt apk to extract prebuilt jni libraries $(my_extracted_jni_libs))
-endif
-# We use the first jni lib file as dependency.
-my_installed_prebuilt_jni := $(my_app_lib_path)/$(notdir $(firstword $(my_extracted_jni_libs)))
-$(my_installed_prebuilt_jni): PRIVATE_JNI_LIBS := $(my_extracted_jni_libs)
-$(my_installed_prebuilt_jni): $(my_prebuilt_src_file)
- @echo "Extract JNI libs ($@ <- $<)"
- @mkdir -p $(dir $@)
- $(hide) unzip -j -o -d $(dir $@) $< $(PRIVATE_JNI_LIBS) && touch $@
-
-$(LOCAL_INSTALLED_MODULE) : | $(my_installed_prebuilt_jni)
-endif
# prebuilt JNI exsiting as separate source files.
my_prebuilt_jni_libs := $(addprefix $(LOCAL_PATH)/, \
diff --git a/core/jack-default.args b/core/jack-default.args
new file mode 100644
index 0000000..8d70a82
--- /dev/null
+++ b/core/jack-default.args
@@ -0,0 +1,5 @@
+-D sched.runner=multi-threaded
+-D sched.runner.thread.kind=fixed
+-D sched.runner.thread.fixed.count=4
+--sanity-checks off
+-D jack.reporter.level.file=error=--,warning=-
\ No newline at end of file
diff --git a/core/java.mk b/core/java.mk
index babefd4..0ff59fc 100644
--- a/core/java.mk
+++ b/core/java.mk
@@ -7,7 +7,9 @@
ifeq ($(TARGET_BUILD_PDK_JAVA_PLATFORM),)
# LOCAL_SDK not defined or set to current
ifeq ($(filter-out current,$(LOCAL_SDK_VERSION)),)
+ifneq ($(LOCAL_NO_STANDARD_LIBRARIES),true)
LOCAL_SDK_VERSION := $(PDK_BUILD_SDK_VERSION)
+endif #!LOCAL_NO_STANDARD_LIBRARIES
endif
endif # !PDK_JAVA
endif #PDK
@@ -112,6 +114,10 @@
full_classes_jar := $(intermediates.COMMON)/classes.jar
built_dex := $(intermediates.COMMON)/classes.dex
endif
+# final Jack library, shrinked and obfuscated if it must be
+full_classes_jack := $(intermediates.COMMON)/classes.jack
+# intermediate Jack library without shrink and obfuscation
+noshrob_classes_jack := $(intermediates.COMMON)/classes.noshrob.jack
LOCAL_INTERMEDIATE_TARGETS += \
$(full_classes_compiled_jar) \
@@ -120,6 +126,8 @@
$(full_classes_jar) \
$(full_classes_proguard_jar) \
$(built_dex_intermediate) \
+ $(full_classes_jack) \
+ $(noshrob_classes_jack) \
$(built_dex) \
$(full_classes_stubs_jar)
@@ -322,6 +330,7 @@
PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes
$(LOCAL_INTERMEDIATE_TARGETS): \
PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS)
# Since we're using intermediates.COMMON, make sure that it gets cleaned
# properly.
@@ -338,7 +347,7 @@
# - This extra copy, with the dependency on LOCAL_BUILT_MODULE allows the
# PRIVATE_ vars to be preserved.
$(full_classes_stubs_jar): PRIVATE_SOURCE_FILE := $(full_classes_jar)
-$(full_classes_stubs_jar) : $(LOCAL_BUILT_MODULE) | $(ACP)
+$(full_classes_stubs_jar) : $(full_classes_jar) | $(ACP)
@echo Copying $(PRIVATE_SOURCE_FILE)
$(hide) $(ACP) -fp $(PRIVATE_SOURCE_FILE) $@
ALL_MODULES.$(LOCAL_MODULE).STUBS := $(full_classes_stubs_jar)
@@ -361,7 +370,6 @@
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_FILES := $(LOCAL_JAR_EXCLUDE_FILES)
$(full_classes_compiled_jar): PRIVATE_JAR_PACKAGES := $(LOCAL_JAR_PACKAGES)
$(full_classes_compiled_jar): PRIVATE_JAR_EXCLUDE_PACKAGES := $(LOCAL_JAR_EXCLUDE_PACKAGES)
-$(full_classes_compiled_jar): PRIVATE_RMTYPEDEFS := $(LOCAL_RMTYPEDEFS)
$(full_classes_compiled_jar): PRIVATE_DONT_DELETE_JAR_META_INF := $(LOCAL_DONT_DELETE_JAR_META_INF)
$(full_classes_compiled_jar): \
$(java_sources) \
@@ -424,50 +432,78 @@
$(error invalid value for LOCAL_PROGUARD_ENABLED: $(LOCAL_PROGUARD_ENABLED))
endif
proguard_dictionary := $(intermediates.COMMON)/proguard_dictionary
-proguard_flags := $(addprefix -libraryjars ,$(full_shared_java_libs)) \
+
+# Hack: see b/20667396
+# When an app's LOCAL_SDK_VERSION is lower than the support library's LOCAL_SDK_VERSION,
+# we artifically raises the "SDK version" "linked" by ProGuard, to
+# - suppress ProGuard warnings of referencing symbols unknown to the lower SDK version.
+# - prevent ProGuard stripping subclass in the support library that extends class added in the higher SDK version.
+my_support_library_sdk_raise :=
+ifneq (,$(filter android-support-%,$(LOCAL_STATIC_JAVA_LIBRARIES)))
+ifdef LOCAL_SDK_VERSION
+ifdef TARGET_BUILD_APPS
+ifeq (,$(filter current system_current, $(LOCAL_SDK_VERSION)))
+ my_support_library_sdk_raise := $(call java-lib-files, sdk_vcurrent)
+endif
+else
+ # For platform build, we can't just raise to the "current" SDK,
+ # that would break apps that use APIs removed from the current SDK.
+ my_support_library_sdk_raise := $(call java-lib-files,$(TARGET_DEFAULT_JAVA_LIBRARIES))
+endif
+endif
+endif
+
+# jack already has the libraries in its classpath and doesn't support jars
+legacy_proguard_flags := $(addprefix -libraryjars ,$(my_support_library_sdk_raise) $(full_shared_java_libs))
+common_proguard_flags := \
-forceprocessing \
-printmapping $(proguard_dictionary)
ifeq ($(filter nosystem,$(LOCAL_PROGUARD_ENABLED)),)
-proguard_flags += -include $(BUILD_SYSTEM)/proguard.flags
+common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.flags
ifeq ($(LOCAL_EMMA_INSTRUMENT),true)
-proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags
+common_proguard_flags += -include $(BUILD_SYSTEM)/proguard.emma.flags
endif
# If this is a test package, add proguard keep flags for tests.
ifneq ($(LOCAL_INSTRUMENTATION_FOR)$(filter tests,$(LOCAL_MODULE_TAGS)),)
-proguard_flags += -include $(BUILD_SYSTEM)/proguard_tests.flags
+common_proguard_flags += -include $(BUILD_SYSTEM)/proguard_tests.flags
ifeq ($(filter shrinktests,$(LOCAL_PROGUARD_ENABLED)),)
-proguard_flags += -dontshrink # don't shrink tests by default
+common_proguard_flags += -dontshrink # don't shrink tests by default
endif # shrinktests
endif # test package
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
-proguard_flags += -dontobfuscate
+common_proguard_flags += -dontobfuscate
endif # No obfuscation
ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
# By default no optimization
-proguard_flags += -dontoptimize
+common_proguard_flags += -dontoptimize
endif # No optimization
ifdef LOCAL_INSTRUMENTATION_FOR
ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# If no obfuscation, link in the instrmented package's classes.jar as a library.
# link_instr_classes_jar is defined in base_rule.mk
-proguard_flags += -libraryjars $(link_instr_classes_jar)
+# jack already has this library in its classpath and doesn't support jars
+legacy_proguard_flags += -libraryjars $(link_instr_classes_jar)
else # obfuscation
# If obfuscation is enabled, the main app must be obfuscated too.
# We need to run obfuscation using the main app's dictionary,
# and treat the main app's class.jar as injars instead of libraryjars.
-proguard_flags := -injars $(link_instr_classes_jar) \
+legacy_proguard_flags := -injars $(link_instr_classes_jar) \
-outjars $(intermediates.COMMON)/proguard.$(LOCAL_INSTRUMENTATION_FOR).jar \
-include $(link_instr_intermediates_dir.COMMON)/proguard_options \
-applymapping $(link_instr_intermediates_dir.COMMON)/proguard_dictionary \
-verbose \
- $(proguard_flags)
+ $(legacy_proguard_flags)
+# not supported with jack
+ifdef LOCAL_JACK_ENABLED
+ $(error $(LOCAL_MODULE): Build with jack of instrumentation when obfuscating is not yet supported)
+endif
# Sometimes (test + main app) uses different keep rules from the main app -
# apply the main app's dictionary anyway.
-proguard_flags += -ignorewarnings
+legacy_proguard_flags += -ignorewarnings
# Make sure we run Proguard on the main app first
$(full_classes_proguard_jar) : $(link_instr_intermediates_dir.COMMON)/proguard.classes.jar
@@ -485,8 +521,8 @@
extra_input_jar :=
endif
$(full_classes_proguard_jar): PRIVATE_EXTRA_INPUT_JAR := $(extra_input_jar)
-$(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(proguard_flags) $(LOCAL_PROGUARD_FLAGS)
-$(full_classes_proguard_jar) : $(full_classes_jar) $(extra_input_jar) $(proguard_flag_files) | $(ACP) $(PROGUARD)
+$(full_classes_proguard_jar): PRIVATE_PROGUARD_FLAGS := $(legacy_proguard_flags) $(common_proguard_flags) $(LOCAL_PROGUARD_FLAGS)
+$(full_classes_proguard_jar) : $(full_classes_jar) $(extra_input_jar) $(my_support_library_sdk_raise) $(proguard_flag_files) | $(ACP) $(PROGUARD)
$(call transform-jar-to-proguard)
else # LOCAL_PROGUARD_ENABLED not defined
@@ -496,7 +532,7 @@
endif # LOCAL_PROGUARD_ENABLED defined
-
+ifndef LOCAL_JACK_ENABLED
# Override PRIVATE_INTERMEDIATES_DIR so that install-dex-debug
# will work even when intermediates != intermediates.COMMON.
$(built_dex_intermediate): PRIVATE_INTERMEDIATES_DIR := $(intermediates.COMMON)
@@ -512,6 +548,8 @@
endif
$(built_dex_intermediate): $(full_classes_proguard_jar) $(DX)
$(transform-classes.jar-to-dex)
+endif # LOCAL_JACK_ENABLED is disabled
+
$(built_dex): $(built_dex_intermediate) | $(ACP)
@echo Copying: $@
$(hide) mkdir -p $(dir $@)
@@ -522,17 +560,14 @@
endif
findbugs_xml := $(intermediates.COMMON)/findbugs.xml
-$(findbugs_xml) : PRIVATE_JAR_FILE := $(full_classes_jar)
$(findbugs_xml) : PRIVATE_AUXCLASSPATH := $(addprefix -auxclasspath ,$(strip \
$(call normalize-path-list,$(filter %.jar,\
$(full_java_libs)))))
-# We can't depend directly on full_classes_jar because the PRIVATE_
-# vars won't be set up correctly.
-$(findbugs_xml) : $(LOCAL_BUILT_MODULE)
+$(findbugs_xml) : $(full_classes_jar)
@echo Findbugs: $@
$(hide) $(FINDBUGS) -textui -effort:min -xml:withMessages \
$(PRIVATE_AUXCLASSPATH) \
- $(PRIVATE_JAR_FILE) \
+ $< \
> $@
ALL_FINDBUGS_FILES += $(findbugs_xml)
@@ -549,3 +584,72 @@
$(LOCAL_MODULE)-findbugs : $(findbugs_html)
endif # full_classes_jar is defined
+
+ifdef LOCAL_JACK_ENABLED
+$(LOCAL_INTERMEDIATE_TARGETS): \
+ PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-rsc
+ifeq ($(LOCAL_JACK_ENABLED),incremental)
+$(LOCAL_INTERMEDIATE_TARGETS): \
+ PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-incremental
+else
+$(LOCAL_INTERMEDIATE_TARGETS): \
+ PRIVATE_JACK_INCREMENTAL_DIR :=
+endif
+
+ifdef full_classes_jar
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_DEBUG_FLAGS := -g
+
+ifdef LOCAL_PROGUARD_ENABLED
+
+ifndef LOCAL_JACK_PROGUARD_FLAGS
+ LOCAL_JACK_PROGUARD_FLAGS := $(LOCAL_PROGUARD_FLAGS)
+endif
+LOCAL_JACK_PROGUARD_FLAGS += $(addprefix -include , $(proguard_flag_files))
+ifdef LOCAL_TEST_MODULE_TO_PROGUARD_WITH
+ $(error $(LOCAL_MODULE): Build with jack when LOCAL_TEST_MODULE_TO_PROGUARD_WITH is defined is not yet implemented)
+endif
+
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_PROGUARD_FLAGS := $(common_proguard_flags) $(LOCAL_JACK_PROGUARD_FLAGS)
+else # LOCAL_PROGUARD_ENABLED not defined
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_PROGUARD_FLAGS :=
+endif # LOCAL_PROGUARD_ENABLED defined
+
+$(LOCAL_INTERMEDIATE_TARGETS): PRIVATE_JACK_FLAGS := $(LOCAL_JACK_FLAGS)
+
+jack_all_deps := $(java_sources) $(java_resource_sources) $(full_jack_lib_deps) \
+ $(jar_manifest_file) $(layers_file) $(RenderScript_file_stamp) $(proguard_flag_files) \
+ $(proto_java_sources_file_stamp) $(LOCAL_ADDITIONAL_DEPENDENCIES) $(LOCAL_JARJAR_RULES) \
+ $(LOCAL_MODULE_MAKEFILE) $(JACK_JAR) $(JACK_LAUNCHER_JAR)
+
+ifeq ($(LOCAL_IS_STATIC_JAVA_LIBRARY),true)
+$(full_classes_jack): $(jack_all_deps)
+ @echo Building with Jack: $@
+ $(java-to-jack)
+
+else #LOCAL_IS_STATIC_JAVA_LIBRARY
+$(built_dex_intermediate): PRIVATE_CLASSES_JACK := $(full_classes_jack)
+
+$(built_dex_intermediate): $(jack_all_deps)
+ @echo Building with Jack: $@
+ $(jack-java-to-dex)
+
+# $(full_classes_jack) is just by-product of $(built_dex_intermediate).
+# The dummy command was added because, without it, make misses the fact the $(built_dex) also
+# change $(full_classes_jack).
+$(full_classes_jack): $(built_dex_intermediate)
+ $(hide) touch $@
+
+endif #LOCAL_IS_STATIC_JAVA_LIBRARY
+
+$(noshrob_classes_jack): PRIVATE_JACK_INTERMEDIATES_DIR := $(intermediates.COMMON)/jack-noshrob-rsc
+ifeq ($(LOCAL_JACK_ENABLED),incremental)
+$(noshrob_classes_jack): PRIVATE_JACK_INCREMENTAL_DIR := $(intermediates.COMMON)/jack-noshrob-incremental
+else
+$(noshrob_classes_jack): PRIVATE_JACK_INCREMENTAL_DIR :=
+endif
+$(noshrob_classes_jack): PRIVATE_JACK_PROGUARD_FLAGS :=
+$(noshrob_classes_jack): $(jack_all_deps)
+ @echo Building with Jack: $@
+ $(java-to-jack)
+endif # full_classes_jar is defined
+endif # LOCAL_JACK_ENABLED
diff --git a/core/java_library.mk b/core/java_library.mk
index b4e3eaa..5a2d19b 100644
--- a/core/java_library.mk
+++ b/core/java_library.mk
@@ -24,10 +24,20 @@
LOCAL_BUILT_MODULE_STEM := javalib.jar
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+ifdef LOCAL_IS_STATIC_JAVA_LIBRARY
+LOCAL_BUILT_MODULE_STEM := classes.jack
+endif
+endif
+
intermediates.COMMON := $(call local-intermediates-dir,COMMON)
# This file will be the one that other modules should depend on.
-common_javalib.jar := $(intermediates.COMMON)/$(LOCAL_BUILT_MODULE_STEM)
+common_javalib.jar := $(intermediates.COMMON)/javalib.jar
LOCAL_INTERMEDIATE_TARGETS += $(common_javalib.jar)
ifeq ($(LOCAL_PROGUARD_ENABLED),disabled)
@@ -59,7 +69,11 @@
@echo "target Static Jar: $(PRIVATE_MODULE) ($@)"
$(copy-file-to-target)
-$(LOCAL_BUILT_MODULE): $(common_javalib.jar)
+ifdef LOCAL_JACK_ENABLED
+$(LOCAL_BUILT_MODULE) : $(full_classes_jack)
+else
+$(LOCAL_BUILT_MODULE) : $(common_javalib.jar)
+endif
$(copy-file-to-target)
else # !LOCAL_IS_STATIC_JAVA_LIBRARY
@@ -69,8 +83,15 @@
$(common_javalib.jar): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS)
$(common_javalib.jar) : $(built_dex) $(java_resource_sources)
@echo "target Jar: $(PRIVATE_MODULE) ($@)"
+ifdef LOCAL_JACK_ENABLED
+ $(create-empty-package)
+else
$(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@)
+endif
$(add-dex-to-package)
+ifdef LOCAL_JACK_ENABLED
+ $(add-carried-jack-resources)
+endif
ifdef LOCAL_DEX_PREOPT
ifneq ($(dexpreopt_boot_jar_module),) # boot jar
diff --git a/core/main.mk b/core/main.mk
index 7f22d76..e1b0fd2 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -240,23 +240,7 @@
# These are the modifier targets that don't do anything themselves, but
# change the behavior of the build.
# (must be defined before including definitions.make)
-INTERNAL_MODIFIER_TARGETS := showcommands all incrementaljavac
-
-.PHONY: incrementaljavac
-incrementaljavac: ;
-
-# WARNING:
-# ENABLE_INCREMENTALJAVAC should NOT be enabled by default, because change of
-# a Java source file won't trigger rebuild of its dependent Java files.
-# You can only enable it by adding "incrementaljavac" to your make command line.
-# You are responsible for the correctness of the incremental build.
-# This may decrease incremental build time dramatically for large Java libraries,
-# such as core.jar, framework.jar, etc.
-ENABLE_INCREMENTALJAVAC :=
-ifneq (,$(filter incrementaljavac, $(MAKECMDGOALS)))
-ENABLE_INCREMENTALJAVAC := true
-MAKECMDGOALS := $(filter-out incrementaljavac, $(MAKECMDGOALS))
-endif
+INTERNAL_MODIFIER_TARGETS := showcommands all
# EMMA_INSTRUMENT_STATIC merges the static emma library to each emma-enabled module.
ifeq (true,$(EMMA_INSTRUMENT_STATIC))
@@ -519,7 +503,7 @@
# Can't use first-makefiles-under here because
# --mindepth=2 makes the prunes not work.
subdir_makefiles := \
- $(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git $(subdirs) Android.mk)
+ $(shell build/tools/findleaves.py $(FIND_LEAVES_EXCLUDES) $(subdirs) Android.mk)
$(foreach mk, $(subdir_makefiles), $(info including $(mk) ...)$(eval include $(mk)))
@@ -757,9 +741,14 @@
#$(error filtered out
# $(filter-out $(modules_to_install),$(old_modules_to_install)))
-# Don't include any GNU targets in the SDK. It's ok (and necessary)
-# to build the host tools, but nothing that's going to be installed
-# on the target (including static libraries).
+# Don't include any GNU General Public License shared objects or static
+# libraries in SDK images. GPL executables (not static/dynamic libraries)
+# are okay if they don't link against any closed source libraries (directly
+# or indirectly)
+
+# It's ok (and necessary) to build the host tools, but nothing that's
+# going to be installed on the target (including static libraries).
+
ifdef is_sdk_build
target_gnu_MODULES := \
$(filter \
@@ -767,6 +756,7 @@
$(TARGET_OUT)/% \
$(TARGET_OUT_DATA)/%, \
$(sort $(call get-tagged-modules,gnu)))
+ target_gnu_MODULES := $(filter-out $(TARGET_OUT_EXECUTABLES)/%,$(target_gnu_MODULES))
$(info Removing from sdk:)$(foreach d,$(target_gnu_MODULES),$(info : $(d)))
modules_to_install := \
$(filter-out $(target_gnu_MODULES),$(modules_to_install))
@@ -920,7 +910,9 @@
# For uninstallable modules such as static Java library, we have to dist the built file,
# as <module_name>.<suffix>
apps_only_dist_built_files := $(foreach m,$(unbundled_build_modules),$(if $(ALL_MODULES.$(m).INSTALLED),,\
- $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))))
+ $(if $(ALL_MODULES.$(m).BUILT),$(ALL_MODULES.$(m).BUILT):$(m)$(suffix $(ALL_MODULES.$(m).BUILT)))\
+ $(if $(ALL_MODULES.$(m).AAR),$(ALL_MODULES.$(m).AAR):$(m).aar)\
+ ))
$(call dist-for-goals,apps_only, $(apps_only_dist_built_files))
ifeq ($(EMMA_INSTRUMENT),true)
diff --git a/core/notice_files.mk b/core/notice_files.mk
index e63cd84..43a5435 100644
--- a/core/notice_files.mk
+++ b/core/notice_files.mk
@@ -43,7 +43,7 @@
# javalib.jar is the default name for the build module (and isn't meaningful)
# If that's what we have, substitute the module name instead. These files
# aren't included on the device, so this name is synthetic anyway.
- ifeq ($(module_leaf),javalib.jar)
+ ifneq ($(filter javalib.jar classes.jack,$(module_leaf)),)
module_leaf := $(LOCAL_MODULE).jar
endif
module_installed_filename := \
diff --git a/core/package_internal.mk b/core/package_internal.mk
index d52997b..23648c1 100644
--- a/core/package_internal.mk
+++ b/core/package_internal.mk
@@ -57,6 +57,10 @@
endif
LOCAL_MODULE_CLASS := APPS
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
# Package LOCAL_MODULE_TAGS default to optional
LOCAL_MODULE_TAGS := $(strip $(LOCAL_MODULE_TAGS))
ifeq ($(LOCAL_MODULE_TAGS),)
@@ -162,6 +166,13 @@
endif # !custom
LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS)
+ifdef LOCAL_JACK_ENABLED
+ifndef LOCAL_JACK_PROGUARD_FLAGS
+ LOCAL_JACK_PROGUARD_FLAGS := $(LOCAL_PROGUARD_FLAGS)
+endif
+LOCAL_JACK_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_JACK_PROGUARD_FLAGS)
+endif # LOCAL_JACK_ENABLED
+
ifeq (true,$(EMMA_INSTRUMENT))
ifndef LOCAL_EMMA_INSTRUMENT
# No emma for test apks.
@@ -271,6 +282,18 @@
# they want to use this module's R.java file.
$(LOCAL_BUILT_MODULE): $(R_file_stamp)
+ifdef LOCAL_JACK_ENABLED
+ifneq ($(built_dex_intermediate),)
+$(built_dex_intermediate): $(R_file_stamp)
+endif
+ifneq ($(noshrob_classes_jack),)
+$(noshrob_classes_jack): $(R_file_stamp)
+endif
+ifneq ($(full_classes_jack),)
+$(full_classes_jack): $(R_file_stamp)
+endif
+endif # LOCAL_JACK_ENABLED
+
ifneq ($(full_classes_jar),)
# If full_classes_jar is non-empty, we're building sources.
# If we're building sources, the initial javac step (which
@@ -369,7 +392,6 @@
$(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries_with_abis)
# PRIVATE_JNI_SHARED_LIBRARIES_ABI is a list of ABI names.
$(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES_ABI := $(jni_shared_libraries_abis)
-$(LOCAL_BUILT_MODULE): PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES := $(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES)
ifneq ($(TARGET_BUILD_APPS),)
# Include all resources for unbundled apps.
LOCAL_AAPT_INCLUDE_ALL_RESOURCES := true
@@ -388,9 +410,13 @@
$(LOCAL_BUILT_MODULE): PRIVATE_DONT_DELETE_JAR_DIRS := $(LOCAL_DONT_DELETE_JAR_DIRS)
$(LOCAL_BUILT_MODULE): $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest)
@echo "target Package: $(PRIVATE_MODULE) ($@)"
+ifdef LOCAL_JACK_ENABLED
+ $(create-empty-package)
+else
$(if $(PRIVATE_SOURCE_ARCHIVE),\
$(call initialize-package-file,$(PRIVATE_SOURCE_ARCHIVE),$@),\
$(create-empty-package))
+endif
$(add-assets-to-package)
ifneq ($(jni_shared_libraries),)
$(add-jni-shared-libs-to-package)
@@ -401,6 +427,9 @@
else
$(add-dex-to-package)
endif
+ifdef LOCAL_JACK_ENABLED
+ $(add-carried-jack-resources)
+endif
ifdef LOCAL_DEX_PREOPT
ifneq (nostripping,$(LOCAL_DEX_PREOPT))
$(call dexpreopt-remove-classes.dex,$@)
diff --git a/core/pathmap.mk b/core/pathmap.mk
index 38306f4..c5b6e5e 100644
--- a/core/pathmap.mk
+++ b/core/pathmap.mk
@@ -46,6 +46,7 @@
opengl-tests-includes:frameworks/native/opengl/tests/include \
recovery:bootable/recovery \
system-core:system/core/include \
+ audio:system/media/audio/include \
audio-effects:system/media/audio_effects/include \
audio-utils:system/media/audio_utils/include \
audio-route:system/media/audio_route/include \
@@ -114,10 +115,12 @@
v7/cardview \
v7/mediarouter \
v7/palette \
- v7/recyclerview \
v8/renderscript \
v13 \
- v17/leanback
+ v17/leanback \
+ design \
+ percent \
+ recommendation
#
# A list of all source roots under frameworks/multidex.
@@ -132,13 +135,30 @@
#
FRAMEWORKS_SUPPORT_JAVA_SRC_DIRS := \
$(addprefix frameworks/support/,$(FRAMEWORKS_SUPPORT_SUBDIRS)) \
- $(addprefix frameworks/,$(FRAMEWORKS_MULTIDEX_SUBDIRS))
+ $(addprefix frameworks/,$(FRAMEWORKS_MULTIDEX_SUBDIRS)) \
+ frameworks/support/v7/recyclerview/src
#
# A list of support library modules.
#
FRAMEWORKS_SUPPORT_JAVA_LIBRARIES := \
$(foreach dir,$(FRAMEWORKS_SUPPORT_SUBDIRS),android-support-$(subst /,-,$(dir))) \
+ android-support-v7-recyclerview \
android-support-multidex \
android-support-multidex-instrumentation
+#
+# A list of all documented source roots under frameworks/data-binding.
+#
+FRAMEWORKS_DATA_BINDING_SUBDIRS := \
+ baseLibrary/src/main \
+ library/src/main \
+ library/src/doc
+
+#
+# A version of FRAMEWORKS_DATA_BINDING_SUBDIRS that is expanded to full paths from
+# the root of the tree.
+#
+FRAMEWORKS_DATA_BINDING_JAVA_SRC_DIRS := \
+ $(addprefix frameworks/data-binding/,$(FRAMEWORKS_DATA_BINDING_SUBDIRS))
+
diff --git a/core/pdk_config.mk b/core/pdk_config.mk
index 838754f..262b50e 100644
--- a/core/pdk_config.mk
+++ b/core/pdk_config.mk
@@ -52,18 +52,20 @@
# For these dirs, add classes.jar and javalib.jar from the dir to platform.zip
# all paths under out dir
PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \
- target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \
- target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
- target/common/obj/JAVA_LIBRARIES/core-junit_intermediates \
- target/common/obj/JAVA_LIBRARIES/ext_intermediates \
- target/common/obj/JAVA_LIBRARIES/framework_intermediates \
- target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \
- target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \
- target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \
- target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \
- target/common/obj/JAVA_LIBRARIES/mms-common_intermediates \
- target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates \
- target/common/obj/JAVA_LIBRARIES/android-common_intermediates \
+ target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \
+ target/common/obj/JAVA_LIBRARIES/android-common_intermediates \
+ target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates \
+ target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \
+ target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates \
+ target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates \
+ target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
+ target/common/obj/JAVA_LIBRARIES/core-junit_intermediates \
+ target/common/obj/JAVA_LIBRARIES/ext_intermediates \
+ target/common/obj/JAVA_LIBRARIES/framework_intermediates \
+ target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \
+ target/common/obj/JAVA_LIBRARIES/okhttp_intermediates \
+ target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \
+ target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \
# not java libraries
PDK_PLATFORM_JAVA_ZIP_CONTENTS += \
@@ -76,7 +78,7 @@
$(PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR)
PDK_PLATFORM_JAVA_ZIP_CONTENTS += $(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR),\
- $(lib_dir)/classes.jar $(lib_dir)/javalib.jar)
+ $(lib_dir)/classes.jack $(lib_dir)/classes.jar $(lib_dir)/javalib.jar)
# check and override java support level
ifneq ($(TARGET_BUILD_PDK)$(PDK_FUSION_PLATFORM_ZIP),)
diff --git a/core/prebuilt_internal.mk b/core/prebuilt_internal.mk
index f85b0b8..0406353 100644
--- a/core/prebuilt_internal.mk
+++ b/core/prebuilt_internal.mk
@@ -122,7 +122,7 @@
endif
endif
-# We need to enclose the above export_includes and built_shared_libraries in
+# We need to enclose the above export_includes and my_built_shared_libraries in
# "LOCAL_STRIP_MODULE not true" because otherwise the rules are defined in dynamic_binary.mk.
endif # LOCAL_STRIP_MODULE not true
@@ -195,14 +195,25 @@
include $(BUILD_SYSTEM)/dex_preopt_odex_install.mk
#######################################
# Sign and align non-presigned .apks.
-$(built_module) : PRIVATE_PAGE_ALIGN_JNI_SHARED_LIBRARIES := $(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES)
+
+# The embedded prebuilt jni to uncompress.
+ifeq ($(LOCAL_CERTIFICATE),PRESIGNED)
+# For PRESIGNED apks we must uncompress every .so file:
+# even if the .so file isn't for the current TARGET_ARCH,
+# we can't strip the file.
+embedded_prebuilt_jni_libs := 'lib/*.so'
+endif
+ifndef embedded_prebuilt_jni_libs
+# No LOCAL_PREBUILT_JNI_LIBS, uncompress all.
+embedded_prebuilt_jni_libs := 'lib/*.so'
+endif
+$(built_module): PRIVATE_EMBEDDED_JNI_LIBS := $(embedded_prebuilt_jni_libs)
+
$(built_module) : $(my_prebuilt_src_file) | $(ACP) $(ZIPALIGN) $(SIGNAPK_JAR)
$(transform-prebuilt-to-target)
+ $(uncompress-shared-libs)
ifneq ($(LOCAL_CERTIFICATE),PRESIGNED)
@# Only strip out files if we can re-sign the package.
-ifdef extracted_jni_libs
- $(hide) zip -d $@ 'lib/*.so' # strip embedded JNI libraries.
-endif
ifdef LOCAL_DEX_PREOPT
ifneq (nostripping,$(LOCAL_DEX_PREOPT))
$(call dexpreopt-remove-classes.dex,$@)
@@ -210,9 +221,6 @@
endif
$(sign-package)
endif
-ifeq ($(LOCAL_PAGE_ALIGN_JNI_SHARED_LIBRARIES),true)
- $(uncompress-shared-libs)
-endif
$(align-package)
###############################
@@ -302,6 +310,14 @@
$(built_module) : $(common_javalib_jar)
endif # TARGET JAVA_LIBRARIES
+ifeq ($(LOCAL_MODULE_CLASS),JAVA_LIBRARIES)
+$(intermediates.COMMON)/classes.jack : PRIVATE_JILL_FLAGS:=$(LOCAL_JILL_FLAGS)
+$(intermediates.COMMON)/classes.jack : $(my_src_jar) $(LOCAL_MODULE_MAKEFILE) \
+ $(LOCAL_ADDITIONAL_DEPENDENCIES) $(JILL_JAR) $(JACK_JAR) $(JACK_LAUNCHER_JAR)
+ $(transform-jar-to-jack)
+
+endif # JAVA_LIBRARIES
+
$(built_module) : $(LOCAL_MODULE_MAKEFILE) $(LOCAL_ADDITIONAL_DEPENDENCIES)
my_prebuilt_src_file :=
diff --git a/core/product.mk b/core/product.mk
index ac5f854..657f343 100644
--- a/core/product.mk
+++ b/core/product.mk
@@ -97,10 +97,13 @@
PRODUCT_RESTRICT_VENDOR_FILES \
PRODUCT_VENDOR_KERNEL_HEADERS \
PRODUCT_BOOT_JARS \
+ PRODUCT_SUPPORTS_BOOT_SIGNER \
+ PRODUCT_SUPPORTS_VBOOT \
PRODUCT_SUPPORTS_VERITY \
PRODUCT_OEM_PROPERTIES \
PRODUCT_SYSTEM_PROPERTY_BLACKLIST \
PRODUCT_SYSTEM_SERVER_JARS \
+ PRODUCT_VBOOT_SIGNING_KEY \
PRODUCT_VERITY_SIGNING_KEY \
PRODUCT_SYSTEM_VERITY_PARTITION \
PRODUCT_VENDOR_VERITY_PARTITION \
diff --git a/core/proguard_basic_keeps.flags b/core/proguard_basic_keeps.flags
index 4a85db0..4de5221 100644
--- a/core/proguard_basic_keeps.flags
+++ b/core/proguard_basic_keeps.flags
@@ -40,6 +40,11 @@
java.lang.Object readResolve();
}
+# Keep Throwable's constructor that takes a String argument.
+-keepclassmembers class * extends java.lang.Throwable {
+ <init>(java.lang.String);
+}
+
# Please specify classes to be kept explicitly in your package's configuration.
# -keep class * extends android.app.Activity
# -keep class * extends android.view.View
@@ -58,7 +63,12 @@
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
# See proguard-android.txt in the SDK package.
--dontwarn android.support.**
+#
+# DO NOT USE THIS: We figured it's dangerous to blindly ignore all support library warnings.
+# ProGuard may strip members of subclass of unknown super classes, in case an app is linking against
+# LOCAL_SDK_VERSION lower than the support library's LOCAL_SDK_VERSION.
+# See bug/20658265.
+# -dontwarn android.support.**
# Less spammy.
-dontnote
diff --git a/core/static_java_library.mk b/core/static_java_library.mk
index 02078e0..9b7b46a 100644
--- a/core/static_java_library.mk
+++ b/core/static_java_library.mk
@@ -56,8 +56,20 @@
ifneq ($(LOCAL_PROGUARD_ENABLED),custom)
proguard_options_file := $(intermediates.COMMON)/proguard_options
endif
+
LOCAL_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_PROGUARD_FLAGS)
+#################################
+include $(BUILD_SYSTEM)/configure_local_jack.mk
+#################################
+
+ifdef LOCAL_JACK_ENABLED
+ifndef LOCAL_JACK_PROGUARD_FLAGS
+ LOCAL_JACK_PROGUARD_FLAGS := $(LOCAL_PROGUARD_FLAGS)
+endif
+LOCAL_JACK_PROGUARD_FLAGS := $(addprefix -include ,$(proguard_options_file)) $(LOCAL_JACK_PROGUARD_FLAGS)
+endif # LOCAL_JACK_ENABLED
+
endif # LOCAL_RESOURCE_DIR
all_res_assets := $(all_resources)
@@ -92,7 +104,8 @@
$(R_file_stamp): PRIVATE_MODULE := $(LOCAL_MODULE)
# add --non-constant-id to prevent inlining constants.
-$(R_file_stamp): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id
+# AAR needs text symbol file R.txt.
+$(R_file_stamp): PRIVATE_AAPT_FLAGS := $(LOCAL_AAPT_FLAGS) --non-constant-id --output-text-symbols $(LOCAL_INTERMEDIATE_SOURCE_DIR)
$(R_file_stamp): PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)
$(R_file_stamp): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest)
$(R_file_stamp): PRIVATE_RESOURCE_PUBLICS_OUTPUT := $(intermediates.COMMON)/public_resources.xml
@@ -114,9 +127,32 @@
$(hide) find $(PRIVATE_SOURCE_INTERMEDIATES_DIR) -name R.java | xargs cat > $@
$(LOCAL_BUILT_MODULE): $(R_file_stamp)
-ifneq ($(full_classes_jar),)
+ifdef LOCAL_JACK_ENABLED
+$(noshrob_classes_jack): $(R_file_stamp)
+$(full_classes_jack): $(R_file_stamp)
+endif # LOCAL_JACK_ENABLED
$(full_classes_compiled_jar): $(R_file_stamp)
-endif
+
+# Rule to build AAR, archive including classes.jar, resource, etc.
+built_aar := $(intermediates.COMMON)/javalib.aar
+$(built_aar): PRIVATE_MODULE := $(LOCAL_MODULE)
+$(built_aar): PRIVATE_ANDROID_MANIFEST := $(full_android_manifest)
+$(built_aar): PRIVATE_CLASSES_JAR := $(LOCAL_BUILT_MODULE)
+$(built_aar): PRIVATE_RESOURCE_DIR := $(LOCAL_RESOURCE_DIR)
+$(built_aar): PRIVATE_R_TXT := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/R.txt
+$(built_aar) : $(LOCAL_BUILT_MODULE)
+ @echo "target AAR: $(PRIVATE_MODULE) ($@)"
+ $(hide) rm -rf $(dir $@)aar && mkdir -p $(dir $@)aar/res
+ $(hide) cp $(PRIVATE_ANDROID_MANIFEST) $(dir $@)aar/AndroidManifest.xml
+ $(hide) cp $(PRIVATE_CLASSES_JAR) $(dir $@)aar/classes.jar
+ # Note: Use "cp -n" to honor the resource overlay rules, if multiple res dirs exist.
+ $(hide) $(foreach res,$(PRIVATE_RESOURCE_DIR),cp -Rfn $(res)/* $(dir $@)aar/res;)
+ $(hide) cp $(PRIVATE_R_TXT) $(dir $@)aar/R.txt
+ $(hide) jar -cMf $@ \
+ -C $(dir $@)aar .
+
+# Register the aar file.
+ALL_MODULES.$(LOCAL_MODULE).AAR := $(built_aar)
endif # need_compile_res
diff --git a/core/tasks/cts.mk b/core/tasks/cts.mk
index 4c82ada..56a7f6f 100644
--- a/core/tasks/cts.mk
+++ b/core/tasks/cts.mk
@@ -21,7 +21,7 @@
HOSTTESTLIB_JAR := $(HOST_OUT_JAVA_LIBRARIES)/hosttestlib.jar
TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/tradefed-prebuilt.jar
CTS_TF_JAR := $(HOST_OUT_JAVA_LIBRARIES)/cts-tradefed.jar
-CTS_TF_EXEC_PATH := $(HOST_OUT_EXECUTABLES)/cts-tradefed
+CTS_TF_EXEC_PATH ?= $(HOST_OUT_EXECUTABLES)/cts-tradefed
CTS_TF_README_PATH := $(cts_tools_src_dir)/tradefed-host/README
VMTESTSTF_INTERMEDIATES :=$(call intermediates-dir-for,JAVA_LIBRARIES,vm-tests-tf,HOST)
@@ -64,8 +64,8 @@
CTS_TEST_JAR_LIST := \
- cts-junit \
- CtsJdwp
+ cts-junit \
+ CtsJdwp
# Depend on the full package paths rather than the phony targets to avoid
# rebuilding the packages every time.
@@ -73,23 +73,30 @@
CTS_TEST_JAR_FILES := $(foreach c,$(CTS_TEST_JAR_LIST),$(call intermediates-dir-for,JAVA_LIBRARIES,$(c))/javalib.jar)
-include cts/CtsTestCaseList.mk
-CTS_CASE_LIST := $(CTS_CORE_CASE_LIST) $(CTS_TEST_CASE_LIST)
# A module may have mutliple installed files (e.g. split apks)
CTS_CASE_LIST_APKS :=
-CTS_CASE_LIST_APKS_DIR := $(cts_dir)/$(cts_name)/repository/testcases/
-$(foreach m, $(CTS_CASE_LIST),\
+$(foreach m, $(CTS_TEST_CASE_LIST),\
+ $(foreach fp, $(ALL_MODULES.$(m).BUILT_INSTALLED),\
+ $(eval pair := $(subst :,$(space),$(fp)))\
+ $(eval CTS_CASE_LIST_APKS += $(CTS_TESTCASES_OUT)/$(notdir $(word 2,$(pair))))))\
+$(foreach m, $(CTS_CORE_CASE_LIST),\
$(foreach fp, $(ALL_MODULES.$(m).BUILT_INSTALLED),\
$(eval pair := $(subst :,$(space),$(fp)))\
$(eval built := $(word 1,$(pair)))\
- $(eval installed := $(CTS_CASE_LIST_APKS_DIR)/$(notdir $(word 2,$(pair))))\
+ $(eval installed := $(CTS_TESTCASES_OUT)/$(notdir $(word 2,$(pair))))\
$(eval $(call copy-one-file, $(built), $(installed)))\
$(eval CTS_CASE_LIST_APKS += $(installed))))
+CTS_CASE_LIST_JARS :=
+$(foreach m, $(CTS_TEST_JAR_LIST),\
+ $(eval CTS_CASE_LIST_JARS += $(CTS_TESTCASES_OUT)/$(m).jar))
+
CTS_SHARED_LIBS :=
DEFAULT_TEST_PLAN := $(cts_dir)/$(cts_name)/resource/plans
-$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_CASES) $(CTS_CASE_LIST_APKS) $(JUNIT_HOST_JAR) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ACP) $(CTS_TEST_JAR_FILES) $(CTS_SHARED_LIBS)
+$(cts_dir)/all_cts_files_stamp: $(CTS_CORE_CASES) $(CTS_TEST_JAR_FILES) $(CTS_TEST_CASES) $(CTS_CASE_LIST_APKS) $(CTS_CASE_LIST_JARS) $(JUNIT_HOST_JAR) $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(VMTESTSTF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(ADDITIONAL_TF_JARS) $(ACP) $(CTS_SHARED_LIBS)
+
# Make necessary directory for CTS
$(hide) mkdir -p $(TMP_DIR)
$(hide) mkdir -p $(PRIVATE_DIR)/docs
@@ -97,12 +104,9 @@
$(hide) mkdir -p $(PRIVATE_DIR)/repository/testcases
$(hide) mkdir -p $(PRIVATE_DIR)/repository/plans
# Copy executable and JARs to CTS directory
- $(hide) $(ACP) -fp $(VMTESTSTF_JAR) $(PRIVATE_DIR)/repository/testcases
- $(hide) $(ACP) -fp $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(CTS_TF_README_PATH) $(PRIVATE_DIR)/tools
+ $(hide) $(ACP) -fp $(VMTESTSTF_JAR) $(CTS_TESTCASES_OUT)
+ $(hide) $(ACP) -fp $(HOSTTESTLIB_JAR) $(CTS_HOST_LIBRARY_JARS) $(TF_JAR) $(CTS_TF_JAR) $(CTS_TF_EXEC_PATH) $(ADDITIONAL_TF_JARS) $(CTS_TF_README_PATH) $(PRIVATE_DIR)/tools
$(hide) $(call copy-files-with-structure, $(CTS_SHARED_LIBS),$(HOST_OUT)/,$(PRIVATE_DIR))
-# Change mode of the executables
- $(foreach jar,$(CTS_TEST_JAR_LIST),$(call copy-testcase-jar,$(jar)))
- $(foreach testcase,$(CTS_TEST_CASES),$(call copy-testcase,$(testcase)))
$(hide) touch $@
# Generate the test descriptions for the core-tests
@@ -367,8 +371,7 @@
# Generate the default test plan for User.
# Usage: buildCts.py <testRoot> <ctsOutputDir> <tempDir> <androidRootDir> <docletPath>
-$(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_tools_src_dir)/utils/buildCts.py $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) | $(ACP)
- $(hide) $(ACP) -fp $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC) $(PRIVATE_DIR)/repository/testcases
+$(DEFAULT_TEST_PLAN): $(cts_dir)/all_cts_files_stamp $(cts_tools_src_dir)/utils/buildCts.py $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar $(CTS_CORE_XMLS) $(CTS_TEST_XMLS) $(CORE_VM_TEST_TF_DESC)
$(hide) $(cts_tools_src_dir)/utils/buildCts.py cts/tests/tests/ $(PRIVATE_DIR) $(TMP_DIR) \
$(TOP) $(HOST_OUT_JAVA_LIBRARIES)/descGen.jar
$(hide) mkdir -p $(dir $@) && touch $@
@@ -390,16 +393,3 @@
cts: $(INTERNAL_CTS_TARGET) adb
$(call dist-for-goals,cts,$(INTERNAL_CTS_TARGET))
-
-define copy-testcase
-
-$(hide) $(ACP) -fp $(1) $(PRIVATE_DIR)/repository/testcases/$(notdir $1)
-
-endef
-
-define copy-testcase-jar
-
-$(hide) $(ACP) -fp $(call intermediates-dir-for,JAVA_LIBRARIES,$(1))/javalib.jar \
- $(PRIVATE_DIR)/repository/testcases/$(1).jar
-
-endef
diff --git a/core/tasks/oem_image.mk b/core/tasks/oem_image.mk
index 26b9aba..32d56a7 100644
--- a/core/tasks/oem_image.mk
+++ b/core/tasks/oem_image.mk
@@ -36,7 +36,7 @@
$(call generate-userimage-prop-dictionary, $(oemimage_intermediates)/oem_image_info.txt, skip_fsck=true)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
./build/tools/releasetools/build_image.py \
- $(TARGET_OUT_OEM) $(oemimage_intermediates)/oem_image_info.txt $@
+ $(TARGET_OUT_OEM) $(oemimage_intermediates)/oem_image_info.txt $@ $(TARGET_OUT)
$(hide) $(call assert-max-image-size,$@,$(BOARD_OEMIMAGE_PARTITION_SIZE))
.PHONY: oem_image
diff --git a/core/tasks/tools/build_custom_image.mk b/core/tasks/tools/build_custom_image.mk
index e59ed42..ec491fa 100644
--- a/core/tasks/tools/build_custom_image.mk
+++ b/core/tasks/tools/build_custom_image.mk
@@ -100,9 +100,11 @@
$(hide) echo "# Properties from $(PRIVATE_DICT_FILE)" >> $(PRIVATE_INTERMEDIATES)/image_info.txt;\
cat $(PRIVATE_DICT_FILE) >> $(PRIVATE_INTERMEDIATES)/image_info.txt)
# Generate the image.
+ $(if $(filter oem,$(PRIVATE_MOUNT_POINT)), \
+ $(hide) echo "oem.buildnumber=$(BUILD_NUMBER)" >> $(PRIVATE_STAGING_DIR)/oem.prop)
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
./build/tools/releasetools/build_image.py \
- $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@
+ $(PRIVATE_STAGING_DIR) $(PRIVATE_INTERMEDIATES)/image_info.txt $@ $(TARGET_OUT)
my_installed_custom_image := $(PRODUCT_OUT)/$(notdir $(my_built_custom_image))
$(my_installed_custom_image) : $(my_built_custom_image)
diff --git a/core/tasks/tools/package-modules.mk b/core/tasks/tools/package-modules.mk
index bd9cf57..a70e644 100644
--- a/core/tasks/tools/package-modules.mk
+++ b/core/tasks/tools/package-modules.mk
@@ -41,7 +41,7 @@
$(hide) $(foreach p, $(1),\
$(eval pair := $(subst :,$(space),$(p)))\
mkdir -p $(dir $(word 2,$(pair)));\
- cp -rf $(word 1,$(pair)) $(word 2,$(pair));)
+ cp -Rf $(word 1,$(pair)) $(word 2,$(pair));)
endef
my_package_zip := $(my_staging_dir)/$(my_package_name).zip
@@ -58,5 +58,5 @@
$(call copy-tests-in-batch,$(wordlist 1001,1200,$(PRIVATE_COPY_PAIRS)))
$(call copy-tests-in-batch,$(wordlist 1201,9999,$(PRIVATE_COPY_PAIRS)))
$(hide) $(foreach f, $(PRIVATE_PICKUP_FILES),\
- cp -rf $(f) $(dir $@);)
+ cp -RfL $(f) $(dir $@);)
$(hide) cd $(dir $@) && zip -rq $(notdir $@) *
diff --git a/core/tasks/vendor_module_check.mk b/core/tasks/vendor_module_check.mk
index d8e8ec7..910c8b7 100644
--- a/core/tasks/vendor_module_check.mk
+++ b/core/tasks/vendor_module_check.mk
@@ -22,8 +22,10 @@
broadcom \
csr \
elan \
+ fpc \
google \
htc \
+ huawei \
imgtec \
invensense \
intel \
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index f3b2297..e384526 100644
--- a/core/version_defaults.mk
+++ b/core/version_defaults.mk
@@ -41,7 +41,7 @@
# which is the version that we reveal to the end user.
# Update this value when the platform version changes (rather
# than overriding it somewhere else). Can be an arbitrary string.
- PLATFORM_VERSION := 5.1.51
+ PLATFORM_VERSION := M
endif
ifeq "" "$(PLATFORM_SDK_VERSION)"
@@ -53,13 +53,13 @@
# intermediate builds). During development, this number remains at the
# SDK version the branch is based on and PLATFORM_VERSION_CODENAME holds
# the code-name of the new development work.
- PLATFORM_SDK_VERSION := 22
+ PLATFORM_SDK_VERSION := 23
endif
ifeq "" "$(PLATFORM_VERSION_CODENAME)"
# This is the current development code-name, if the build is not a final
# release build. If this is a final release build, it is simply "REL".
- PLATFORM_VERSION_CODENAME := REL
+ PLATFORM_VERSION_CODENAME := MNC
# This is all of the development codenames that are active. Should be either
# the same as PLATFORM_VERSION_CODENAME or a comma-separated list of additional
@@ -67,6 +67,23 @@
PLATFORM_VERSION_ALL_CODENAMES := $(PLATFORM_VERSION_CODENAME)
endif
+ifeq "REL" "$(PLATFORM_VERSION_CODENAME)"
+ PLATFORM_PREVIEW_SDK_VERSION := 0
+else
+ ifeq "" "$(PLATFORM_PREVIEW_SDK_VERSION)"
+ # This is the definition of a preview SDK version over and above the current
+ # platform SDK version. Unlike the platform SDK version, a higher value
+ # for preview SDK version does NOT mean that all prior preview APIs are
+ # included. Packages reading this value to determine compatibility with
+ # known APIs should check that this value is precisely equal to the preview
+ # SDK version the package was built for, otherwise it should fall back to
+ # assuming the device can only support APIs as of the previous official
+ # public release.
+ # This value will always be 0 for release builds.
+ PLATFORM_PREVIEW_SDK_VERSION := 2
+ endif
+endif
+
ifeq "" "$(DEFAULT_APP_TARGET_SDK)"
# This is the default minSdkVersion and targetSdkVersion to use for
# all .apks created by the build system. It can be overridden by explicitly
diff --git a/envsetup.sh b/envsetup.sh
index 62802df..3ed4144 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -765,7 +765,7 @@
MAKEFILE="$MAKEFILE $MFILE"
else
case $DIR in
- showcommands | snod | dist | incrementaljavac) ARGS="$ARGS $DIR";;
+ showcommands | snod | dist | incrementaljavac | *=*) ARGS="$ARGS $DIR";;
GET-INSTALL-PATH) GET_INSTALL_PATH=$DIR;;
*) echo "No Android.mk in $DIR."; return 1;;
esac
@@ -823,7 +823,7 @@
fi
else
case $DIR in
- showcommands | snod | dist | incrementaljavac) ARGS="$ARGS $DIR";;
+ showcommands | snod | dist | incrementaljavac | *=*) ARGS="$ARGS $DIR";;
*) echo "Couldn't find directory $DIR"; return 1;;
esac
fi
@@ -1109,6 +1109,11 @@
find . -name .repo -prune -o -name .git -prune -o -path ./out -prune -o -name sepolicy -type d -print0 | xargs -0 grep --color -n -r --exclude-dir=\.git "$@"
}
+function rcgrep()
+{
+ find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f -name "*\.rc*" -print0 | xargs -0 grep --color -n "$@"
+}
+
case `uname -s` in
Darwin)
function mgrep()
diff --git a/target/board/generic/BoardConfig.mk b/target/board/generic/BoardConfig.mk
index 393492b..fb6c920 100644
--- a/target/board/generic/BoardConfig.mk
+++ b/target/board/generic/BoardConfig.mk
@@ -68,7 +68,7 @@
VSYNC_EVENT_PHASE_OFFSET_NS := 0
TARGET_USERIMAGES_USE_EXT4 := true
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 576716800
+BOARD_SYSTEMIMAGE_PARTITION_SIZE := 786432000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800
BOARD_CACHEIMAGE_PARTITION_SIZE := 69206016
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
diff --git a/target/board/generic/sepolicy/init.te b/target/board/generic/sepolicy/init.te
new file mode 100644
index 0000000..3aa81d1
--- /dev/null
+++ b/target/board/generic/sepolicy/init.te
@@ -0,0 +1 @@
+allow init tmpfs:lnk_file create_file_perms;
diff --git a/target/board/generic_x86/sepolicy/init.te b/target/board/generic_x86/sepolicy/init.te
new file mode 100644
index 0000000..3aa81d1
--- /dev/null
+++ b/target/board/generic_x86/sepolicy/init.te
@@ -0,0 +1 @@
+allow init tmpfs:lnk_file create_file_perms;
diff --git a/target/board/generic_x86_64/BoardConfig.mk b/target/board/generic_x86_64/BoardConfig.mk
index 62753a2..5105161 100755
--- a/target/board/generic_x86_64/BoardConfig.mk
+++ b/target/board/generic_x86_64/BoardConfig.mk
@@ -41,7 +41,7 @@
USE_OPENGL_RENDERER := true
TARGET_USERIMAGES_USE_EXT4 := true
-BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1073741824 # 1GB
+BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1342177280 # 1.25 GB
BOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800
BOARD_CACHEIMAGE_PARTITION_SIZE := 69206016
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
diff --git a/target/product/base.mk b/target/product/base.mk
index 85c01a2..4c49e86 100644
--- a/target/product/base.mk
+++ b/target/product/base.mk
@@ -18,6 +18,7 @@
PRODUCT_PACKAGES += \
20-dns.conf \
95-configured \
+ org.apache.http.legacy.boot \
appwidget \
appops \
am \
@@ -35,6 +36,7 @@
dpm \
framework \
fsck_msdos \
+ hid \
ime \
input \
javax.obex \
@@ -65,12 +67,16 @@
libnetlink \
libnetutils \
libpdfium \
+ libradio \
+ libradioservice \
+ libradio_metadata \
libreference-ril \
libreverbwrapper \
libril \
librtp_jni \
libsensorservice \
libskia \
+ libsonic \
libsonivox \
libsoundpool \
libsoundtrigger \
@@ -105,10 +111,14 @@
run-as \
schedtest \
sdcard \
+ secdiscard \
services \
settings \
+ sgdisk \
+ sm \
svc \
tc \
+ telecom \
vdc \
vold \
wm
diff --git a/target/product/core_minimal.mk b/target/product/core_minimal.mk
index 33b49a6..27c10af 100644
--- a/target/product/core_minimal.mk
+++ b/target/product/core_minimal.mk
@@ -30,6 +30,7 @@
PackageInstaller \
SettingsProvider \
Shell \
+ StatementService \
bcc \
bu \
com.android.future.usb.accessory \
@@ -49,6 +50,7 @@
ip-up-vpn \
ip6tables \
iptables \
+ gatekeeperd \
keystore \
keystore.default \
ld.mc \
@@ -60,13 +62,13 @@
libdrmframework_jni \
libfilterfw \
libkeystore \
+ libgatekeeper \
libsqlite_jni \
libwilhelm \
logd \
make_ext4fs \
e2fsck \
resize2fs \
- mms-common \
screencap \
sensorservice \
telephony-common \
@@ -91,9 +93,8 @@
telephony-common \
voip-common \
ims-common \
- mms-common \
- android.policy \
apache-xml \
+ org.apache.http.legacy.boot
# The order of PRODUCT_SYSTEM_SERVER_JARS matters.
PRODUCT_SYSTEM_SERVER_JARS := \
@@ -101,6 +102,13 @@
ethernet-service \
wifi-service
+# Adoptable external storage supports both ext4 and f2fs
+PRODUCT_PACKAGES += \
+ e2fsck \
+ make_ext4fs \
+ fsck.f2fs \
+ make_f2fs \
+
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
ro.zygote=zygote32
PRODUCT_COPY_FILES += \
diff --git a/target/product/core_tiny.mk b/target/product/core_tiny.mk
index 39789d9..0a92275 100644
--- a/target/product/core_tiny.mk
+++ b/target/product/core_tiny.mk
@@ -54,12 +54,14 @@
ip-up-vpn \
ip6tables \
iptables \
+ gatekeeperd \
keystore \
keystore.default \
libOpenMAXAL \
libOpenSLES \
libdownmix \
libfilterfw \
+ libgatekeeper \
libkeystore \
libsqlite_jni \
libwilhelm \
@@ -76,7 +78,6 @@
telephony-common \
voip-common \
logd \
- mms-common \
wifi-service
# The order matters
@@ -91,10 +92,9 @@
telephony-common \
voip-common \
ims-common \
- mms-common \
- android.policy \
apache-xml \
nullwebview \
+ org.apache.http.legacy.boot
# The order of PRODUCT_SYSTEM_SERVER_JARS matters.
PRODUCT_SYSTEM_SERVER_JARS := \
@@ -112,6 +112,7 @@
$(call inherit-product, $(SRC_TARGET_DIR)/product/runtime_libart.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)
+$(call inherit-product-if-exists, external/roboto-fonts/fonts.mk)
# Overrides
PRODUCT_BRAND := tiny
diff --git a/target/product/emulator.mk b/target/product/emulator.mk
index 3a8a4aa..982f7da 100644
--- a/target/product/emulator.mk
+++ b/target/product/emulator.mk
@@ -40,14 +40,15 @@
camera.goldfish.jpeg \
lights.goldfish \
gps.goldfish \
+ fingerprint.goldfish \
sensors.goldfish \
- e2fsck \
audio.primary.goldfish \
vibrator.goldfish \
power.goldfish \
+ fingerprint.ranchu \
+ fingerprintd \
sensors.ranchu
-
PRODUCT_COPY_FILES += \
device/generic/goldfish/fstab.goldfish:root/fstab.goldfish \
device/generic/goldfish/init.goldfish.rc:root/init.goldfish.rc \
diff --git a/target/product/generic_no_telephony.mk b/target/product/generic_no_telephony.mk
index dd18fab..f6ccd2a 100644
--- a/target/product/generic_no_telephony.mk
+++ b/target/product/generic_no_telephony.mk
@@ -19,6 +19,7 @@
PRODUCT_PACKAGES := \
Bluetooth \
+ BluetoothMidiService \
Camera2 \
Gallery2 \
Music \
@@ -60,9 +61,10 @@
$(call inherit-product-if-exists, external/google-fonts/carrois-gothic-sc/fonts.mk)
$(call inherit-product-if-exists, external/google-fonts/coming-soon/fonts.mk)
$(call inherit-product-if-exists, external/google-fonts/cutive-mono/fonts.mk)
-$(call inherit-product-if-exists, external/lohit-fonts/fonts.mk)
$(call inherit-product-if-exists, external/noto-fonts/fonts.mk)
$(call inherit-product-if-exists, external/naver-fonts/fonts.mk)
+$(call inherit-product-if-exists, external/roboto-fonts/fonts.mk)
+$(call inherit-product-if-exists, external/hyphenation-patterns/patterns.mk)
$(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
$(call inherit-product-if-exists, frameworks/webview/chromium/chromium.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)
diff --git a/target/product/languages_full.mk b/target/product/languages_full.mk
index 6d77cde..9d80b0e 100644
--- a/target/product/languages_full.mk
+++ b/target/product/languages_full.mk
@@ -21,4 +21,4 @@
# These are all the locales that have translations and are displayable
# by TextView in this branch.
-PRODUCT_LOCALES := en_US en_AU en_IN fr_FR it_IT es_ES et_EE de_DE nl_NL cs_CZ pl_PL ja_JP zh_TW zh_CN zh_HK ru_RU ko_KR nb_NO es_US da_DK el_GR tr_TR pt_PT pt_BR rm_CH sv_SE bg_BG ca_ES en_GB fi_FI hi_IN hr_HR hu_HU in_ID iw_IL lt_LT lv_LV ro_RO sk_SK sl_SI sr_RS uk_UA vi_VN tl_PH ar_EG fa_IR th_TH sw_TZ ms_MY af_ZA zu_ZA am_ET hi_IN en_XA ar_XB fr_CA km_KH lo_LA ne_NP si_LK mn_MN hy_AM az_AZ ka_GE my_MM mr_IN ml_IN is_IS mk_MK ky_KG eu_ES gl_ES bn_BD ta_IN kn_IN te_IN uz_UZ ur_PK kk_KZ
+PRODUCT_LOCALES := en_US en_AU en_IN fr_FR it_IT es_ES et_EE de_DE nl_NL cs_CZ pl_PL ja_JP zh_TW zh_CN zh_HK ru_RU ko_KR nb_NO es_US da_DK el_GR tr_TR pt_PT pt_BR rm_CH sv_SE bg_BG ca_ES en_GB fi_FI hi_IN hr_HR hu_HU in_ID iw_IL lt_LT lv_LV ro_RO sk_SK sl_SI sr_RS uk_UA vi_VN tl_PH ar_EG fa_IR th_TH sw_TZ ms_MY af_ZA zu_ZA am_ET hi_IN en_XA ar_XB fr_CA km_KH lo_LA ne_NP si_LK mn_MN hy_AM az_AZ ka_GE my_MM mr_IN ml_IN is_IS mk_MK ky_KG eu_ES gl_ES bn_BD ta_IN kn_IN te_IN uz_UZ ur_PK kk_KZ sq_AL gu_IN pa_IN
diff --git a/target/product/sdk_base.mk b/target/product/sdk_base.mk
index 451c0b7..73c2524 100644
--- a/target/product/sdk_base.mk
+++ b/target/product/sdk_base.mk
@@ -27,6 +27,7 @@
Fallback \
Gallery \
GestureBuilder \
+ Launcher3 \
LegacyCamera \
librs_jni \
libwnndict \
@@ -62,7 +63,7 @@
device/generic/goldfish/data/etc/apns-conf.xml:system/etc/apns-conf.xml \
frameworks/base/data/sounds/effects/camera_click.ogg:system/media/audio/ui/camera_click.ogg \
frameworks/base/data/sounds/effects/VideoRecord.ogg:system/media/audio/ui/VideoRecord.ogg \
- frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml \
+ device/generic/goldfish/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml \
device/generic/goldfish/camera/media_profiles.xml:system/etc/media_profiles.xml \
frameworks/av/media/libstagefright/data/media_codecs_google_audio.xml:system/etc/media_codecs_google_audio.xml \
frameworks/av/media/libstagefright/data/media_codecs_google_telephony.xml:system/etc/media_codecs_google_telephony.xml \
@@ -83,6 +84,7 @@
$(call inherit-product-if-exists, external/google-fonts/cutive-mono/fonts.mk)
$(call inherit-product-if-exists, external/noto-fonts/fonts.mk)
$(call inherit-product-if-exists, external/naver-fonts/fonts.mk)
+$(call inherit-product-if-exists, external/roboto-fonts/fonts.mk)
$(call inherit-product-if-exists, frameworks/base/data/keyboards/keyboards.mk)
$(call inherit-product-if-exists, frameworks/webview/chromium/chromium.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)
diff --git a/target/product/telephony.mk b/target/product/telephony.mk
index da1497d..084f86c 100644
--- a/target/product/telephony.mk
+++ b/target/product/telephony.mk
@@ -18,7 +18,9 @@
# to products that have telephony hardware.
PRODUCT_PACKAGES := \
+ CarrierConfig \
Dialer \
+ CallLogBackup \
Mms \
rild
diff --git a/target/product/vboot.mk b/target/product/vboot.mk
new file mode 100644
index 0000000..e4b1144
--- /dev/null
+++ b/target/product/vboot.mk
@@ -0,0 +1,24 @@
+#
+# 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.
+#
+
+# Provides dependencies necessary for verified boot
+
+PRODUCT_SUPPORTS_VBOOT := true
+
+# The dev key is used to sign boot and recovery images.
+# We expect this file to exist with the suffixes ".vbprivk" and ".vbpupk".
+# TODO: find a proper location for this
+PRODUCT_VBOOT_SIGNING_KEY := external/vboot_reference/tests/devkeys/kernel_data_key
diff --git a/target/product/verity.mk b/target/product/verity.mk
index 0361b64..3e00b49 100644
--- a/target/product/verity.mk
+++ b/target/product/verity.mk
@@ -16,6 +16,7 @@
# Provides dependencies necessary for verified boot
+PRODUCT_SUPPORTS_BOOT_SIGNER := true
PRODUCT_SUPPORTS_VERITY := true
# The dev key is used to sign boot and recovery images, and the verity
diff --git a/tools/buildinfo.sh b/tools/buildinfo.sh
index dcd9ab5..6cd9499 100755
--- a/tools/buildinfo.sh
+++ b/tools/buildinfo.sh
@@ -7,6 +7,7 @@
echo "ro.build.display.id=$BUILD_DISPLAY_ID"
echo "ro.build.version.incremental=$BUILD_NUMBER"
echo "ro.build.version.sdk=$PLATFORM_SDK_VERSION"
+echo "ro.build.version.preview_sdk=$PLATFORM_PREVIEW_SDK_VERSION"
echo "ro.build.version.codename=$PLATFORM_VERSION_CODENAME"
echo "ro.build.version.all_codenames=$PLATFORM_VERSION_ALL_CODENAMES"
echo "ro.build.version.release=$PLATFORM_VERSION"
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/GPL-LICENSE.txt b/tools/droiddoc/templates-ndk/assets/GPL-LICENSE.txt
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/GPL-LICENSE.txt
copy to tools/droiddoc/templates-ndk/assets/GPL-LICENSE.txt
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/LICENSE.txt b/tools/droiddoc/templates-ndk/assets/LICENSE.txt
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/LICENSE.txt
copy to tools/droiddoc/templates-ndk/assets/LICENSE.txt
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/android-developer-docs.css b/tools/droiddoc/templates-ndk/assets/android-developer-docs.css
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/android-developer-docs.css
copy to tools/droiddoc/templates-ndk/assets/android-developer-docs.css
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/css/default.css b/tools/droiddoc/templates-ndk/assets/css/default.css
similarity index 84%
copy from tools/droiddoc/templates-sdk-dyn/assets/css/default.css
copy to tools/droiddoc/templates-ndk/assets/css/default.css
index e26aec6..f411d93 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/css/default.css
+++ b/tools/droiddoc/templates-ndk/assets/css/default.css
@@ -158,12 +158,6 @@
.layout-content-row {
display: inline-block;
margin-bottom: 10px; }
- .layout-content-row:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
* html .layout-content-row {
height: 1px; }
@@ -430,20 +424,19 @@
/* content header */
.content-header {
height: 30px;
- margin:20px 0 25px;
- padding:0 0 10px;}
+ margin:36px 0 23px; /* same as h1 */
+ padding:0 0 10px;} /* same as h1 */
.content-header.just-links {
margin-bottom:0;
padding-bottom:0;}
.content-header h1 {
- color:#000;
margin:0;
- border-bottom:0;
padding:0;
+ width: 700px;
}
.content-header > div:first-child {
- height:55px; /* set fixed height for the header div to ensure the
+ height:1px; /* set fixed height for the header div to ensure the
next/prev links align with toc on training classes */
}
@@ -451,7 +444,7 @@
border-top: 1px solid #ccc;
margin-top: 10px;
padding-top:10px;
- height: 30px; }
+ width:100%; }
.content-footer .col-9 {
margin-left:0;
@@ -462,20 +455,33 @@
.content-footer.wrap {
width:940px;
}
+.content-footer .plus-container {
+ margin:5px 0 0;
+ text-align:right;
+ float:right;
+}
+a.back-link {
+ text-decoration: none;
+ text-transform: uppercase;
+}
+
+.content-header .paging-links {
+ margin-top:-25px;
+}
.paging-links {
- position: relative; }
+ position: relative;
+ height:30px; }
.paging-links a {
position: absolute; }
.paging-links a,
.training-nav-top a {
- font-size: 14px;
- line-height: 30px;
color: #555555;
text-decoration: none;
text-transform: uppercase; }
.paging-links .prev-page-link:before,
- .training-nav-top .prev-page-link:before {
+ .training-nav-top .prev-page-link:before,
+ a.back-link:before {
content: '';
background: transparent url(../images/styles/disclosure_left.png) no-repeat scroll 50% 50%;
width: 10px;
@@ -489,7 +495,7 @@
.paging-links .prev-page-link {
left: -15px; }
.paging-links .next-page-link {
- right: 0px; }
+ right: 0; }
.next-page-link:after,
.start-class-link:after,
.start-course-link:after,
@@ -506,6 +512,9 @@
.next-page-link.inline:after {
content: none; }
+ .content-footer .paging-links .next-page-link {
+ left:0;
+ }
.training-nav-top a {
display:block;
@@ -544,7 +553,6 @@
.paging-links a.start-class-link {
width:100%;
- text-align:right;
}
/* list of classes on course landing page */
@@ -623,19 +631,6 @@
display:none !important;
}
- .content-footer.next-class {
- display:block;
- border:0;
- margin-top:0;
- padding-top:0;
- }
-
- .content-footer.next-class a.next-class-link {
- display:block;
- float:right;
- text-transform:uppercase;
- }
-
/* inner-doc tabs w/ title */
@@ -713,6 +708,7 @@
color: #33b5e5;
border-bottom-color: #33b5e5; } }
+h1:target,
h2:target,
h3:target {
-webkit-animation-name: glowheader;
@@ -894,7 +890,7 @@
.framed-nexus4-port-216 img {
width: 216px;
height: 360px; }
-
+
.framed-nexus5-port-span-5 {
background: transparent url(../images/styles/device_nexus5_blank_port_span5.png) no-repeat
scroll top left;
@@ -929,6 +925,47 @@
height: 384px;
}
+/* wear device frames */
+
+.framed-wear-square {
+ background: transparent url(../images/styles/device_wear_square.png) no-repeat scroll top left;
+ background-size: 302px 302px;
+ height:222px;
+ width:222px;
+ padding:40px;
+ overflow:hidden;
+}
+
+.framed-wear-square-small {
+ background: transparent url(../images/styles/device_wear_square_small.png) no-repeat scroll top left;
+ background-size: 169px 200px;
+ height:147px;
+ width:147px;
+ padding:27px 11px;
+ overflow:hidden;
+}
+
+#jd-content
+.framed-wear-square img {
+ height:222px;
+ width: 222px;
+ padding:0;
+ margin:0;
+}
+
+#jd-content
+.framed-wear-square-small img {
+ height:147px;
+ width: 147px;
+ padding:0;
+ margin:0;
+}
+
+
+
+
+
+
/* landing page disclosures */
.landing-page-link {
text-decoration: none;
@@ -1102,12 +1139,13 @@
}
h1 {
color:#333;
- font-size: 22px;
- margin: 20px 0 20px;
+ font-size: 34px;
+ margin: 36px 0 27px;
padding:0 0 10px;
+ font-weight:300;
}
h1, h2 {
- line-height: 32px;
+ line-height: 30px;
}
h1.short {
margin-right:320px;
@@ -1120,21 +1158,24 @@
}
h2 {
color:#333;
- font-size: 20px;
- margin: 20px 0 20px;
+ font-size: 26px;
+ margin: 32px 0 20px;
padding:0;
+ font-weight:300;
}
h3 {
color:#333;
- font-size: 18px;
+ font-size: 21px;
+ font-weight:400;
+ margin:21px 0 14px 0;
}
h3, h4 {
- color:#333;
- line-height: 20px;
- margin: 10px 0;
+ line-height: 21px;
}
h4 {
- font-size: 16px;
+ font-size: 18px;
+ margin: 12px 0;
+ font-weight:500;
}
h5 {
font-size: 14px;
@@ -1147,7 +1188,7 @@
}
hr { /* applied to the bottom of h2 elements */
height: 1px;
- margin: 5px 0 20px;
+ margin: 3px 0 12px;
border: 0;
background: #ccc;
}
@@ -1208,7 +1249,7 @@
legend {
display: none;
}
-a:link, a:visited {
+a:link, a:visited, .link-color {
color: #258aaf;
text-decoration: none;
}
@@ -1216,6 +1257,13 @@
color: #33B5E5;
text-decoration: none;
}
+a.white {
+ color: #fff;
+ text-decoration:underline;
+}
+a.white:hover, a.white:active {
+ color: #ccc !important;
+}
strong, b {
font-weight:bold;
color: #222;
@@ -1249,6 +1297,7 @@
tr:first-of-type th:first-of-type:empty {
visibility: hidden;
}
+
/* --------------------------------------------------------------------------
Footer
*/
@@ -1523,6 +1572,9 @@
color: #333;
font-size: 16px;
}
+.about a.selected {
+ color: #9933CC;
+}
.design a.selected {
color: #33b5e5;
}
@@ -1834,6 +1886,11 @@
margin:0 0 0 20px;
}
+.training-nav-top {
+ position:relative;
+ top:73px;
+}
+
.training-nav-bottom {
padding:0 0 20px;
}
@@ -1842,12 +1899,12 @@
#qv-wrapper {
float:right;
clear:right;
- margin:0 0 0 30px; /* negative top-margin to counter the content-header bottom margin */
+ margin:6px 0 0 30px; /* negative top-margin to counter the content-header bottom margin */
padding:0 0 30px;
}
#tb-wrapper {
- margin:-29px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
+ margin:51px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
}
#tb,
@@ -1931,6 +1988,10 @@
margin:0 15px 10px 35px;
}
+#tb p {
+ margin:0 15px 10px;
+}
+
#qv ol {
list-style:none;
margin:0 15px 15px;
@@ -1959,28 +2020,12 @@
/* related resources blocks in checklists */
-.rel-resources {
- margin:10px 0px;
- border:1px solid #ccc;
- background-color:rgba(0, 0, 0, 0.027451);
- border:1px solid #ccc;
- font-size:13px;
- color:#6f6f6f;
-}
+/* related resources sections that have dynamic content */
-.rel-resources ul {
-padding: .5em 1em 0 1em;
-}
-.rel-resources a {
-font-weight:500;
-}
-.rel-resources h3 {
- margin:4px 15px 0px 15px;
- font-size:13px;
- font-weight:600;
- text-transform:uppercase;
+h3.rel-resources {
+margin:1.25em auto;
}
/* --------------------------------------------------------------------------
@@ -2360,6 +2405,13 @@
#doc-col {
margin-right:0;
}
+
+/* Uncomment this for preview release watermark
+#doc-col {
+ background: url('../images/preview.png') repeat;
+}
+*/
+
#doc-content-container {
margin-left: 291px
}
@@ -2725,19 +2777,22 @@
width:100%;
}
#butterbar {
- width:940px;
+ width:100%;
margin:0 auto;
}
#butterbar-message {
- background-color:#f80;
- float:right;
- font-size:12px;
- font-weight:bold;
- padding:0 10px;
- border-radius: 0 0 5px 5px;
+ background-color:rgba(255, 187, 51, .4);
+ font-size:13px;
+ padding: 5px 0;
+ text-align:center;
}
-#butterbar-message a {color:#fff !important}
-#butterbar-message a:hover {text-decoration:underline;}
+a#butterbar-message {
+ cursor:pointer;
+ display:block;
+}
+a#butterbar-message:hover {
+ text-decoration:underline;
+}
/* --------------------------------------------------------------------------
Misc
@@ -2761,7 +2816,7 @@
.caption {
margin: 0.5em 0 2em 0;
color: #000;
- font-size: 11.5px;
+ font-size: 11.5px;
}
.nolist, .nolist ul, .nolist ol {
@@ -2994,6 +3049,34 @@
}
+/* for IDE instruction toggle (Studio/Eclipse/Other) */
+select.ide {
+ background: transparent;
+ border: 1px solid #bbb;
+ border-left: 0;
+ border-right: 0;
+ margin: 10px 0;
+ padding: 10px 0;
+ color:#666;
+}
+select.ide,
+select.ide option {
+ font-family: inherit;
+ font-size:16px;
+ font-weight:500;
+}
+/* hide all except studio by default */
+.select-ide.eclipse,
+.select-ide.other {
+ display:none;
+}
+/* ... unless studio also includes one of the others */
+.select-ide.studio.eclipse,
+.select-ide.studio.other {
+ display:none;
+}
+
+
/* -----------------------------------------------
good/bad example containers
*/
@@ -3072,6 +3155,7 @@
-webkit-box-shadow:-5px 5px 10px #ccc;
}
+div#langMessage,
div#naMessage {
display:none;
width:555px;
@@ -3079,6 +3163,8 @@
margin:0 auto;
}
+
+div#langMessage>div,
div#naMessage div {
z-index:99;
width:450px;
@@ -3092,12 +3178,16 @@
-webkit-box-shadow:-10px 10px 40px #888;
}
/* IE6 can't position fixed */
+* html div#langMessage>div,
* html div#naMessage div { position:absolute; }
div#naMessage strong {
font-size:1.1em;
}
+div#langMessage .lang {
+ display:none;
+}
/* --------------------------------------------------------------------------
Slideshow Controls & Next/Prev
@@ -3346,28 +3436,37 @@
}
#jd-header {
- padding: 0 0 5px;
- margin: 20px 0 10px;
- font-size:13px;
+ padding: 0 0 12px;
+ margin: 20px 0 12px;
+ font-size:12px;
+ padding-bottom:12px;
border-bottom:solid 1px #ccc;
}
#jd-header h1 {
margin:0;
- padding:0;
+ padding:0 0 6px 0;
}
+/* not sure if this is needed in the ref docs, disabling for now
+.jd-descr h2 {
+ margin:16px 0;
+}
+*/
+
/* page-top-right container for reference pages (holds
links to summary tables) */
#api-info-block {
- font-size:13px;
+ font-size:12px;
margin:20px 0 0;
padding:0 10px 6px;
font-weight:normal;
float:right;
text-align:right;
color:#999;
- max-width:70%;
+ max-width:80%;
+ font-size: 12px;
+ line-height:14px;
}
#api-info-block div.api-level {
@@ -3384,7 +3483,8 @@
border-spacing:0;
margin:0;
padding:0;
- font-size:13px;
+ font-size:12px;
+ line-height:14px;
background-color:transparent;
}
.jd-inheritance-table tr td {
@@ -3966,7 +4066,7 @@
height: 38px;
}
#header-wrapper #nav-x ul.nav-x li {
- margin-right: 36px !important;
+ margin-right: 31px !important;
margin-top: 5px;
margin-bottom: 0px;
height: 30px;
@@ -4093,6 +4193,7 @@
width: 26px;
height: 25px;
background: url(../images/dac_logo.png);
+ background-image: -webkit-image-set(url(../images/dac_logo.png) 1x, url(../images/dac_logo@2x.png) 2x);
z-index: 52;
position: relative;
}
@@ -4115,6 +4216,14 @@
z-index: 52;
}
+/* offset the <a name=""> tags to account for sticky nav */
+body.reference a[name] {
+ visibility: hidden;
+ display: block;
+ position: relative;
+ top: -56px;
+}
+
}
@@ -4168,13 +4277,13 @@
}
-#header-wrap .logo.wear-logo {
+#header-wrap .logo.landing-logo {
width:220px;
margin:0;
padding:0;
margin-bottom:22px;
}
-#header-wrap .logo.wear-logo img {
+#header-wrap .logo.landing-logo img {
padding:0 0 0 10px;
}
@@ -4246,7 +4355,7 @@
#quicknav {
float:none;
clear:both;
- margin-left:180px;
+ margin-left:0;
margin-top:-30px;
display:none;
overflow:hidden;
@@ -4261,6 +4370,10 @@
padding:0;
}
+#quicknav ul li.about {
+ border-top:1px solid #9933CC;
+}
+
#quicknav ul li.design {
border-top:1px solid #33b5e5;
}
@@ -4311,7 +4424,7 @@
}
#header-wrap.quicknav {
- height:196px;
+ height:216px;
}
@@ -4590,7 +4703,9 @@
}
-
+#landing h1 {
+ margin:17px 0 20px 0 !important;
+}
a.download-sdk {
float:right;
@@ -4761,14 +4876,14 @@
/* Slideshow */
.slideshow-develop {
- height: 300px;
+ height: 316px;
width: 940px;
position: relative;
overflow:hidden;
}
.slideshow-develop .frame {
width: 940px;
- height: 300px;
+ height: 316px;
}
.slideshow-develop img.play {
max-width:350px;
@@ -4800,6 +4915,7 @@
padding:0;
margin-bottom:10px;
border:none;
+ font-size:24px;
}
.slideshow-develop .item {
height: 300px;
@@ -4972,7 +5088,8 @@
margin-bottom:0;
}
.landing-banner h1 {
- margin-top:0;
+ margin-top:16px;
+ padding-bottom:24px;
}
.landing-docs,
.landing-banner {
@@ -5127,22 +5244,6 @@
/************ DISTRIBUTE PAGES ******************/
-/* Article page header line fix */
-.headerLine {
- overflow: hidden;
-}
-.headerLine h1 {
- float: left;
- padding-right: 20px;
- margin-bottom: 0px;
- font-size: 20px;
- color: #363636;
-}
-.headerLine hr {
- overflow: hidden;
- margin: 42px 0 0 0;
-}
-
.article-detail #body-content {
padding-top: 10px;
}
@@ -5155,7 +5256,7 @@
text-transform:uppercase;
border-bottom:1px solid #CCC;
padding:8px 0 0 1px;
- margin-bottom:10px;
+ margin-bottom:14px;
clear:both;
}
@@ -5191,7 +5292,7 @@
/* Basic card-styling with shadow */
.resource-card {
border-radius: 1px;
- box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.14);
+ box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.12);
background: #fefefe;
}
@@ -5220,6 +5321,9 @@
-o-transition: opacity 0.5s;
transition: opacity 0.5s;
}
+.static .card-bg:after {
+ display:none;
+}
.card-bg .card-section-icon {
position: absolute;
top: 50%;
@@ -5366,18 +5470,21 @@
content: ".";
display: block;
height: 0;
+ position:relative;
clear: both;
visibility: hidden;
}
-
.resource-card:hover {
cursor: pointer;
}
+.static .resource-card:hover {
+ cursor: auto;
+}
.resource-card:hover .card-bg:after {
opacity: 0;
}
/* disabled to make way for fade/ellipsis truncation,
- and the plusone moves up.
+ and the plusone moves up.
.resource-card:hover .card-info .description .text {
padding-right: 70px;
} */
@@ -6289,6 +6396,17 @@
display: none;
}
+
+/* Override to show the description instead of the content section */
+.no-section .resource-card-3x2 > .card-info .section,
+.no-section .resource-card-6x2 > .card-info .section {
+ display: none;
+}
+.no-section .resource-card-3x2 > .card-info .description,
+.no-section .resource-card-6x2 > .card-info .description {
+ display: block;
+}
+
/* 1/2 row items */
.resource-card-3x3 > .card-bg, .resource-card-6x3 > .card-bg, .resource-card-9x3 > .card-bg, .resource-card-12x3 > .card-bg, .resource-card-15x3 > .card-bg, .resource-card-18x3 > .card-bg {
left: 0;
@@ -6383,4 +6501,940 @@
div.jd-descr > .resource-widget[data-section=distribute\/tools]
.section-card-menu .card-info ul li {
border-top-color: #7e3794 !important;
-}
\ No newline at end of file
+}
+
+
+
+/**
+ * UTILITIES
+ */
+
+
+.border-box {
+ box-sizing: border-box;
+}
+
+.vertical-center-outer {
+ display: table;
+ height: 100%;
+ width: 100%;
+}
+
+.vertical-center-inner {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+/**
+ * TYPE STYLES
+ */
+
+.landing-h1 {
+ font-weight: 100;
+ font-size: 60px;
+ line-height: 78px;
+ text-align: center;
+ letter-spacing: -1px;
+}
+
+.landing-pre-h1 {
+ font-weight: 400;
+ font-size: 28px;
+ color: #93B73F;
+ line-height: 36px;
+ text-align: center;
+ letter-spacing: -1px;
+ text-transform: uppercase;
+
+}
+
+.landing-h1.hero {
+ text-align: left;
+}
+
+.landing-h2 {
+ font-weight: 300;
+ font-size: 42px;
+ line-height: 64px;
+ text-align: center;
+}
+
+.landing-subhead {
+ color: #999999;
+ font-size: 20px;
+ line-height: 28px;
+ font-weight:300;
+ text-align: center;
+}
+.landing-subhead.hero {
+ text-align: left;
+ color: white;
+}
+
+.landing-hero-description {
+ text-align: left;
+ margin: 1em 0;
+}
+
+.landing-hero-description p {
+ font-weight: 300;
+ margin: 0;
+ font-size: 18px;
+ line-height: 24px;
+}
+
+.landing-body .landing-small {
+ font-size: 14px;
+ line-height: 19px;
+}
+
+.landing-body.landing-align-center {
+ text-align: center;
+}
+
+.landing-align-left {
+ text-align: left;
+}
+
+/**
+ * LAYOUT
+ */
+
+#body-content,
+.fullpage,
+#jd-content,
+.jd-descr,
+.landing-body-content {
+ height: 100%;
+}
+
+.landing-section {
+ padding: 80px 10px 80px;
+ width: 100%;
+ margin-left: -10px;
+ text-rendering: optimizeLegibility;
+}
+
+#extending-android-to-wearables {
+ padding-top: 30px;
+}
+
+.landing-short-section {
+ padding: 40px 10px 28px;
+}
+
+.landing-gray-background {
+ background-color: #e9e9e9;
+}
+
+.landing-white-background {
+ background-color: white;
+}
+
+.landing-red-background {
+ color: white;
+ background-color: hsl(8, 70%, 54%);
+}
+
+.landing-subhead-red {
+ color: hsl(8, 71%, 84%);
+ text-align: left;
+}
+
+.landing-subhead-red p {
+ margin-top: 20px;
+}
+
+.landing-hero-container {
+ height: 100%;
+}
+
+
+.preview-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../preview/images/hero.jpg);
+ background-size: cover;
+ background-position: right center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.wear-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../wear/images/hero.jpg);
+ background-size: cover;
+ background-position: top center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.tv-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../tv/images/hero.jpg);
+ background-size: cover;
+ background-position: right center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.auto-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../auto/images/hero.jpg);
+ background-size: cover;
+ background-position: right center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.landing-hero-scrim {
+ background: black;
+ opacity: .2;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ margin-left: -10px;
+}
+
+.landing-hero-wrap {
+ margin: 0 auto;
+ width: 940px;
+ clear: both;
+ height: 100%;
+ position: relative;
+}
+
+.landing-section-header {
+ margin-bottom: 40px;
+}
+
+.landing-hero-wrap .landing-section-header {
+ margin-bottom: 16px;
+}
+
+.landing-body {
+ font-size: 18px;
+ line-height: 24px;
+}
+
+.landing-button {
+ white-space: nowrap;
+ display: inline-block;
+ padding: 16px 32px;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ cursor: pointer;
+ color: white;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+ -webkit-transition: .2s background-color ease-in-out;
+ -moz-transition: .2s background-color ease-in-out;
+ -o-transition: .2s background-color ease-in-out;
+ transition: .2s background-color ease-in-out;
+}
+
+.landing-primary {
+ background-color: hsl(8, 70%, 44%);
+ color: #f8f8f8;
+}
+
+.landing-button.landing-primary:hover {
+ background-color: hsl(8, 70%, 36%);
+}
+
+.landing-button.landing-primary:active {
+ background-color: hsl(8, 70%, 30%);
+}
+
+.landing-button.landing-secondary {
+ background-color: #2faddb;
+}
+
+.landing-button.landing-secondary:hover {
+ background-color: #09c;
+}
+
+.landing-button.landing-secondary:active {
+ background-color: #3990ab;
+}
+
+a.landing-button,
+a.landing-button:hover,
+a.landing-button:visited {
+ color: white !important;
+}
+
+.landing-video-link {
+ white-space: nowrap;
+ display: inline-block;
+ padding: 16px 32px 16px 82px;
+ font-size: 18px;
+ font-weight: 400;
+ line-height: 24px;
+ cursor: pointer;
+ color: hsla(0, 0%, 100%, .8);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+ -webkit-transition: .2s color ease-in-out;
+ -moz-transition: .2s color ease-in-out;
+ -o-transition: .2s color ease-in-out;
+ transition: .2s color ease-in-out;
+}
+
+.landing-video-link:before {
+ height: 64px;
+ width: 64px;
+ display: inline-block;
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAFuklEQVR42u2dXWgcVRSAV9LWtBBTTZVWUhNqEQtq1QeroDRKFRFsROqTYPuo+JCiIoJKFC0USqlUfCiowRcfrBgVUUElefAPkW5T8aeaGn9aRbFsjP0x2cx8PuRMvFxmdjeb2Z17Z8+B85DsZPbO+eaec3/OPSkABdXsVI2gABSAqgJQAKoKQAGoKgAFoKoAFICqAlAAqgpAAai6DqDRAiwDeoFtwB7gPaAInABKwKToCWAMeB/YDdwJrAWWNLh9+QMAXABsBQ4A3wFTwAxQBmaBAAhjNJDPy3L938BXwAvArUCHAkh+kCXAVcA+YBw4bRg7MngtkgTlDPA98CywHmhTAP8/xCbgVeAvMZZpwDQllN7xB/AysKGlAQAXAvuBkzW85UVgCBgENlfQQbmuWAXELPAnsAvoaikAQBtwh/j3coLhS2LIfqCzzu/plL8fkvvFgZiR4L2lHrfkHQBgpQTFUwmGnwC212v0KjC2y/3jQPwDPA+05xYAcBHwubx1YZzhC02QBBBRbxgBzssdAOBy4JgRZE0ZTPuNr7FHDCbEhqNAd24AAN0yUbID7QSwsZChABut3hANXY8Bq70HIMb/Ocb4w81+66v0hmGrN0QQ1ngLQJYRvpWHMWWo4KDIaMnuCcVKgdlZAGL8t2J8vpPGrwChDLyWBMFlAA8D0z4ZvwKEs8D93gCQEc9Jy/jFgkdizaRDGUSs8wXAu1bQLQE9ngHosWbPAXDQeQAypT9rBd3+gociyxi2K9riLABZUj5iuZ6RgsciM2OzFxw2A7JrAO6VwGtKTwpG+Anoy9AVmb3gDHCPcwCAFcChRox6jPu9CazMeFQUAKNRL3AJwE2yopjq228BQPZ/d2bcCyaBTa4BeNGa8Q6naIA4GQWubiKEYWvBbp8zAGQt5VfL/fQ3GEAkTzXDLVkjokA2k5a7AuA2GaLNj/tTfvhq0pQgbcwLQtlQusYVALtlzSR191MjADNI9zbJDZWBR10BMGr5/4GMADQ0SAMDlht62xUAxy0AmzMEEMnhtIO0ZF2YAH5wITd0hQw/5wE04M1bjDyXZpC2hqMlYGnWAHqBf40APOEYgChI35VSWyasWfGqrAH0WVkOIw4CSC1IG2tDoSy7XJE1gPs8ArDoIG0BmJGk30wBDHgGYFFBOgbAtqwB7GxxAHerC8rOBU0Dt2gQzjYIb8gawDor+6HVhqFdrkzEwhabiAVOTMSkUb+06FLEUVfWgj5q0cW4g64AeNo66ZLlcnTDNmesBN4y8KArAG6QU42ttCEzBVzpCoAO4EfLDeV5SzIEvgHaXdqUP2BlQud1Ux55zj2uZUX02cPRnKalRLmu17qYmPWF5YbymJgVAh8Ay5wCII3ZEZOYm6fURGT2u9X43Mnk3CDHybmfmRVYXExPv9nKEcpLejqSC3SjdY2TBzTesHqB7wc0onTEV2KucxLApXKkJy9HlAI5anuJFwCkYQ/EuCJfD+mdBnYkXOssgHY53un7MdVZ4CVgqVcADAhjMafkfTioHc14P04yvvMApIEXy5F/+7S8y6UKolPyR4BVVf7Wi2IdawwIPhTrmAW+rmZ8bwBIQ7vloXwoVzNWS6UUrwAYy9YfOlqwKZDkgneA5Qu4l3cly84F9sqGhislywLmaozuYoGFXr0DII1ukxP1hxJ6QzR7HqLxRfumZaRzXZ3f4XXZyi7gCeB3kqsnzs+kSb9s5XHgMeD8RTxDLgq3rmeuYuFvNYCoR8wqujNi+L3UWBcu9wAMt3QZ8LiMlk5RuU50teq6kcEDgTolveIRYHUQBOek1O5cFu/ukLz7/ZJgNSm+OirebWpgaPS7slxfAr4EngGuX8jopqUBxGzyrAVuB54EXgc+lV4yLhO8cfn5E+ZqUD8kBu9sQvv0Hzj4rmoEBaAAVBWAAlBVAApAVQEoAFUFoABUFYACUFUACkC1CfofXVRJocowZVYAAAAASUVORK5CYII=);
+ background-size: contain;
+ position: absolute;
+ content: "";
+ opacity: .7;
+ margin-top: -19px;
+ margin-left: -64px;
+ -webkit-transition: .2s opacity ease-in-out;
+ -moz-transition: .2s opacity ease-in-out;
+ -o-transition: .2s opacity ease-in-out;
+ transition: .2s opacity ease-in-out;
+}
+
+.landing-video-link:hover {
+ color: hsla(0, 0%, 100%, 1);
+}
+
+.landing-video-link:hover:before {
+ opacity: 1;
+}
+
+.landing-social-image {
+ float: left;
+ margin-right: 14px;
+ height: 64px;
+ width: 64px;
+}
+
+.landing-social-copy {
+ padding-left: 78px;
+}
+
+.landing-scroll-down-affordance {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ text-align: center;
+ z-index: 10;
+}
+
+.landing-down-arrow {
+ padding: 24px;
+ display: inline-block;
+ opacity: .5;
+ -webkit-transition: .2s opacity ease-in-out;
+ -moz-transition: .2s opacity ease-in-out;
+ -o-transition: .2s opacity ease-in-out;
+ transition: .2s opacity ease-in-out;
+
+ -webkit-animation-name: pulse-opacity;
+ -webkit-animation-duration: 4s;
+}
+
+.landing-down-arrow:hover {
+ opacity: 1;
+}
+
+.landing-down-arrow img {
+ height: 28px;
+ width: 28px;
+ margin: 0 auto;
+ display: block;
+}
+
+.landing-divider {
+ display: inline-block;
+ height: 2px;
+ background-color: white;
+ position: relative;
+ margin: 10px 0;
+}
+
+/* 3 CLOLUMN LAYOUT */
+
+.landing-breakout {
+ margin-top: 40px;
+ margin-bottom: 40px;
+}
+
+.landing-breakout img {
+ margin-bottom: 20px;
+}
+
+.landing-partners img {
+ margin-bottom: 20px;
+}
+
+.landing-breakout p {
+ padding: 0 23px;
+}
+
+.landing-breakout.landing-partners img {
+ margin-bottom: 20px;
+}
+
+.col-3-wide {
+ display: inline;
+ float: left;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.col-3-wide {
+ width: 302px;
+}
+
+/**
+ * ANIMATION
+ */
+
+@-webkit-keyframes pulse-opacity {
+ 0% {
+ opacity: .5;
+ }
+ 20% {
+ opacity: .5;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: .5;
+ }
+ 80% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: .5;
+ }
+}
+
+
+
+/**
+ * VIDEO
+ */
+
+#video-container {
+ display:none;
+ position:fixed;
+ top:0;
+ left:0;
+ width:100%;
+ height:100%;
+ background-color:rgba(0,0,0,0.8);
+ z-index:9999;
+}
+
+#video-frame {
+ width:940px;
+ height:100%;
+ margin:72px auto;
+ display:none;
+ position:relative;
+}
+
+.video-close {
+ cursor: pointer;
+ position: absolute;
+ right: -49px;
+ top: -49px;
+ pointer-events: all;
+}
+
+#icon-video-close {
+ background-image: url("../images/close-white.png");
+ background-image: -webkit-image-set(url(../images/close-white.png) 1x, url(../images/close-white_2x.png) 2x);
+ background-repeat: no-repeat;
+ background-position: 0 0;
+ background-size: 36px 36px;
+ height: 36px;
+ width: 36px;
+ display:block;
+}
+
+#icon-video-close:hover {
+ background-image: url("../images/close-grey.png");
+ background-image: -webkit-image-set(url(../images/close-grey.png) 1x, url(../images/close-grey_2x.png) 2x);
+}
+
+/* Preload the hover images */
+a.video-shadowbox-button.white:after {
+ display:none;
+ content:url("../images/close-grey.png") url("../images/close-grey_2x.png");
+}
+
+a.video-shadowbox-button.white {
+ background-image: url("../images/play-circle-white.png");
+ background-image: -webkit-image-set(url(../images/play-circle-white.png) 1x, url(../images/play-circle-white_2x.png) 2x);
+ background-size: 36px 36px;
+ background-repeat: no-repeat;
+ background-position: right;
+ padding: 16px 42px 16px 8px;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ color: #fff;
+ text-decoration:none;
+}
+
+a.video-shadowbox-button.white:hover {
+ color:#bababa !important;
+ background-image: url("../images/play-circle-grey.png");
+ background-image: -webkit-image-set(url(../images/play-circle-grey.png) 1x, url(../images/play-circle-grey_2x.png) 2x);
+}
+
+/* Preload the hover images */
+a.video-shadowbox-button.white:after {
+ display:none;
+ content:url("../images/play-circle-grey.png") url("../images/play-circle-grey_2x.png");
+}
+
+/******************
+Styles for d.a.c/index:
+*******************/
+
+
+
+/* Generic full screen carousel styling to be used across pages. */
+.fullscreen-carousel {
+ margin: 0 -10px;
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+}
+
+.fullscreen-carousel-content {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: table; /* For vertical centering */
+}
+
+.fullscreen-carousel .vcenter {
+ display: table-cell;
+ vertical-align: middle;
+ position: relative;
+}
+
+.fullscreen-carousel .vcenter > div {
+ margin: 10px auto;
+}
+
+/* Styles for the full-bleed hero image type. */
+.fullscreen-carousel .hero, .fullscreen-carousel .hero h1 {
+ color: #fff;
+}
+
+.fullscreen-carousel .hero h1 {
+ font-weight: 300;
+ font-size: 60px;
+ line-height: 68px;
+ letter-spacing: -1px;
+ margin-top: 0;
+}
+
+.fullscreen-carousel .hero p {
+ font-weight: 300;
+ font-size: 18px;
+ line-height: 24px;
+ -webkit-font-smoothing: antialiased;
+}
+
+.fullscreen-carousel .hero .hero-bg {
+ background-size: cover;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+/* Full screen carousel styling for the resource flow layout type of content */
+.fullscreen-carousel .resource-flow-layout:after {
+ height: 0; /* Dont know why this is set at 10 in default.css */
+}
+
+.fullscreen-carousel .resource-flow-layout {
+ margin-bottom: 20px;
+}
+
+
+
+/* Generic Tab carousel styling to be used across multiple pages. */
+
+.tab-carousel .tab-nav {
+ list-style: none;
+ position: relative;
+ text-align: center;
+}
+
+.tab-carousel .tab-nav li {
+ display: inline-block;
+ font-size: 22px;
+ font-weight: 400;
+ line-height: 50px;
+ list-style: none;
+ margin: 0;
+ padding: 0 25px;
+ position: relative;
+}
+
+.tab-carousel .tab-nav li a,
+.tab-carousel .tab-nav li a:hover {
+ color: #333 !important;
+ padding: 10px 10px 13px 10px;
+ position: relative;
+ z-index: 1000;
+}
+
+.tab-carousel .tab-nav li:after {
+ background: #ddd;
+ bottom: 0;
+ content: '';
+ height: 4px;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ z-index: 0;
+}
+
+.tab-carousel .tab-nav .highlight {
+ position: absolute;
+ height: 4px;
+ width: 100px;
+ bottom: 0;
+ background: #33b5e5;
+}
+
+.tab-carousel .tab-carousel-content {
+ position: relative;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.tab-carousel .tab-carousel-content [data-tab] {
+ display: inline-block;
+ white-space: normal;
+}
+
+
+
+/*
+ Resource styling for the tab carousel. The tab carousel contains either
+ a 3 column layout of resources or a single full-width resource. The
+ latter has the 18x12 class applied to it and can be styled differently
+ that way.
+*/
+
+.tab-carousel .resource .image {
+ width: 100%;
+ height: 250px;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: 50% 50%;
+}
+
+.tab-carousel .resource .info .title {
+ font-size: 18px;
+ line-height: 24px;
+}
+
+.tab-carousel .resource .info .summary,
+.tab-carousel .resource .info .cta {
+ line-height: 24px;
+ font-size: 16px;
+}
+
+.tab-carousel .resource-card-18x12 {
+ position: relative;
+ padding-left: 450px;
+ box-sizing: border-box;
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.tab-carousel .resource-card-18x12 .image {
+ position: absolute;
+ width: 420px;
+ height: 100%;
+ left: 0;
+ top: 0;
+}
+
+.tab-carousel .resource-card-18x12 .info {
+ display: inline-block;
+}
+
+.tab-carousel .resource-card-18x12 .info .title {
+ margin-bottom: 26px;
+}
+
+
+
+
+
+/*
+ Styles for the entity link used in the actions bar and in the cta of
+ the resources that appear in the tab carousel.
+*/
+.actions-bar a:after,
+.resource .cta:after {
+ content: '›';
+ font-weight: 400;
+ font-size: 22px;
+ left: 5px;
+ line-height: 1;
+ position: relative;
+ top: 1px;
+ transition: left 190ms ease-out;
+}
+
+.actions-bar a:hover:after,
+.resource .cta:hover:after {
+ left: 10px;
+}
+
+
+
+
+/*
+ Styles for the actions bar.
+*/
+.actions-bar {
+ background: #9acd00;
+ margin: 0 -10px;
+ text-align: center;
+}
+
+.actions-bar .actions {
+ padding: 30px 0 30px;
+ text-align: justify;
+ font-size: 0.1px;
+ line-height: 0.1px;
+ margin: 0 10px 0 0;
+}
+
+.actions-bar .actions:after {
+ content: '';
+ width: 100%;
+ display: inline-block;
+}
+
+.actions-bar .actions > div {
+ display: inline-block;
+}
+
+.actions-bar a {
+ font-size: 21px;
+ line-height: 27px;
+ color: #fff;
+ font-weight: 300;
+ -webkit-font-smoothing: antialiased;
+}
+
+.actions-bar a:after {
+ top: 0px;
+ font-size: 22px;
+}
+
+.actions-bar a:hover {
+ color: #fff !important;
+}
+
+
+
+
+
+/*
+ Specific styles for new home page layout of the carousels.
+*/
+
+/* Big blue button */
+a.home-new-cta-btn,
+.home-new-carousel-1 .resource-card-18x6 .cta {
+ white-space: nowrap;
+ display: inline-block;
+ padding: 14px 32px;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ cursor: pointer;
+ background: #33b5e6;
+ border-radius: 4px;
+ margin-top: 20px;
+ color: #fff;
+ transition: 0.2s background-color ease-in-out;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .cta:after {
+ display: none; /* Hide the entity for this button */
+}
+
+a.home-new-cta-btn:hover,
+.home-new-carousel-1 .resource-card-18x6 .cta:hover {
+ color: #fff !important;
+ background: #2d9fca;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .cta {
+ position: absolute;
+ bottom: 20px;
+ left: 16px;
+}
+
+/* Fullscreen carousel. */
+.home-new-carousel-1 {
+ max-height: 700px; /* Set max height so doesn't get too long */
+}
+
+.home-new-carousel-1 .fullscreen-carousel-content {
+ min-height: 450px; /* Set min height for all content */
+}
+
+.home-new-carousel-1 .hero {
+ background: #000;
+}
+
+.home-new-carousel-1 .hero-bg {
+ background-image: url(/home-new/images/hero.jpg);
+ background-position: right center;
+ opacity: 0.85;
+}
+
+/*
+ Styling for special top card of full screen layout resource layout.
+ We need to specifically style the 18x6 card to adjust its size and layout,
+ since it's not a standard card, not sure if this is unique to the home page
+ layout or should be namespaced within the fullscreen-carousel container.
+*/
+.home-new-carousel-1 .resource-flow-layout.col-16 .resource-card-18x6 {
+ height: 320px;
+ background-color:#F9F9F9;
+ border-radius: 0px;
+ box-shadow: 0px 0px 0px rgba(0, 0, 0, 0);
+
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-bg {
+ width: 636px;
+ height: 100%;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info {
+ right: 0px;
+ left: 636px;
+ height: 100%;
+ top: 0px;
+ padding: 15px 22px;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info .util {
+ display: none;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info .title {
+ font-size: 20px;
+ font-weight: 500;
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info .text {
+ font-size: 15px;
+ line-height: 21px;
+}
+
+
+/* Tabbed carousel. */
+.home-new-carousel-2 {
+ margin: 35px auto 100px auto;
+}
+
+.home-new-carousel-2 h1 {
+ font-size: 47px;
+ font-weight: 100;
+ line-height: 54px;
+ text-align: center;
+}
+
+.annotation-message {
+ display: block;
+ font-style: italic;
+ color: #F80;
+}
+
+
+
+/* Helpouts widget */
+.resource-card-6x2.helpouts-card {
+ width: 255px;
+ height: 40px;
+ position:absolute;
+ z-index:999;
+ top:-8px;
+ right:1px;
+}
+
+.resource-card-6x2.helpouts-card > .card-info {
+ left:35px;
+ height:35px;
+ padding:4px 8px 4px 0;
+}
+
+.resource-card-6x2.helpouts-card > .card-info .helpouts-description {
+ display:block;
+ overflow:visible;
+ font-size:12px;
+ line-height:12px;
+ text-align:right;
+ color:#666;
+}
+
+.helpouts-description .link-color {
+ text-transform: uppercase;
+}
+
+.resource-card-6x2 > .card-bg.helpouts-card-bg {
+ width:35px;
+ height:35px;
+ margin:2px 0 0 0;
+ background-image: url(../images/styles/helpouts-logo-35_2x.png);
+ background-image: -webkit-image-set(url(../images/styles/helpouts-logo-35.png) 1x, url(../images/styles/helpouts-logo-35_2x.png) 2x);
+}
+
+.resource-card-6x2 > .card-bg.helpouts-card-bg:after {
+ display:none;
+}
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css b/tools/droiddoc/templates-ndk/assets/css/fullscreen.css
similarity index 99%
rename from tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
rename to tools/droiddoc/templates-ndk/assets/css/fullscreen.css
index 53d9a64..7912e34 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
+++ b/tools/droiddoc/templates-ndk/assets/css/fullscreen.css
@@ -197,9 +197,6 @@
left:-20px;
}
-
-}
-
.col-right {
margin-right:0px;
}
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/design/default.js b/tools/droiddoc/templates-ndk/assets/design/default.js
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/design/default.js
copy to tools/droiddoc/templates-ndk/assets/design/default.js
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_more.png b/tools/droiddoc/templates-ndk/assets/images/icon_more.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/icon_more.png
copy to tools/droiddoc/templates-ndk/assets/images/icon_more.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_search.png b/tools/droiddoc/templates-ndk/assets/images/icon_search.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/icon_search.png
copy to tools/droiddoc/templates-ndk/assets/images/icon_search.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_bottom.png b/tools/droiddoc/templates-ndk/assets/images/more_bottom.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/more_bottom.png
copy to tools/droiddoc/templates-ndk/assets/images/more_bottom.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_mid.png b/tools/droiddoc/templates-ndk/assets/images/more_mid.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/more_mid.png
copy to tools/droiddoc/templates-ndk/assets/images/more_mid.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_top.png b/tools/droiddoc/templates-ndk/assets/images/more_top.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/more_top.png
copy to tools/droiddoc/templates-ndk/assets/images/more_top.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/android_3p-bundle.js b/tools/droiddoc/templates-ndk/assets/js/android_3p-bundle.js
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/js/android_3p-bundle.js
copy to tools/droiddoc/templates-ndk/assets/js/android_3p-bundle.js
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js b/tools/droiddoc/templates-ndk/assets/js/docs.js
similarity index 83%
rename from tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
rename to tools/droiddoc/templates-ndk/assets/js/docs.js
index e6befe3..192d219 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
+++ b/tools/droiddoc/templates-ndk/assets/js/docs.js
@@ -19,9 +19,19 @@
/****** ON LOAD SET UP STUFF *********/
-var navBarIsFixed = false;
$(document).ready(function() {
+ // show lang dialog if the URL includes /intl/
+ //if (location.pathname.substring(0,6) == "/intl/") {
+ // var lang = location.pathname.split('/')[2];
+ // if (lang != getLangPref()) {
+ // $("#langMessage a.yes").attr("onclick","changeLangPref('" + lang
+ // + "', true); $('#langMessage').hide(); return false;");
+ // $("#langMessage .lang." + lang).show();
+ // $("#langMessage").show();
+ // }
+ //}
+
// load json file for JD doc search suggestions
$.getScript(toRoot + 'jd_lists_unified.js');
// load json file for Android API search suggestions
@@ -64,7 +74,12 @@
$('.scroll-pane').jScrollPane( {verticalGutter:0} );
// add HRs below all H2s (except for a few other h2 variants)
- $('h2').not('#qv h2').not('#tb h2').not('.sidebox h2').not('#devdoc-nav h2').not('h2.norule').css({marginBottom:0}).after('<hr/>');
+ $('h2').not('#qv h2')
+ .not('#tb h2')
+ .not('.sidebox h2')
+ .not('#devdoc-nav h2')
+ .not('h2.norule').css({marginBottom:0})
+ .after('<hr/>');
// set up the search close button
$('.search .close').click(function() {
@@ -169,6 +184,18 @@
$("#header li.design a").addClass("selected");
$("#sticky-header").addClass("design");
+ // highlight About tabs
+ } else if ($("body").hasClass("about")) {
+ var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
+ if (rootDir == "about") {
+ $("#nav-x li.about a").addClass("selected");
+ } else if (rootDir == "wear") {
+ $("#nav-x li.wear a").addClass("selected");
+ } else if (rootDir == "tv") {
+ $("#nav-x li.tv a").addClass("selected");
+ } else if (rootDir == "auto") {
+ $("#nav-x li.auto a").addClass("selected");
+ }
// highlight Develop tab
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
$("#header li.develop a").addClass("selected");
@@ -192,6 +219,16 @@
$("#nav-x li.google a").addClass("selected");
} else if ($("body").hasClass("samples")) {
$("#nav-x li.samples a").addClass("selected");
+ } else if (rootDir == "ndk") {
+ if ($("body").hasClass("guide")) {
+ $("#nav-x li.guide a").addClass("selected");
+ } else if ($("body").hasClass("samples")) {
+ $("#nav-x li.samples a").addClass("selected");
+ } else if ($("body").hasClass("downloads")) {
+ $("#nav-x li.downloads a").addClass("selected");
+ } else if ($("body").hasClass("reference")) {
+ $("#nav-x li.reference a").addClass("selected");
+ }
}
// highlight Distribute tab
@@ -207,6 +244,8 @@
$("#nav-x li.engage a").addClass("selected");
} else if (secondFrag == "monetize") {
$("#nav-x li.monetize a").addClass("selected");
+ } else if (secondFrag == "analyze") {
+ $("#nav-x li.analyze a").addClass("selected");
} else if (secondFrag == "tools") {
$("#nav-x li.disttools a").addClass("selected");
} else if (secondFrag == "stories") {
@@ -218,7 +257,7 @@
}
} else if ($("body").hasClass("about")) {
$("#sticky-header").addClass("about");
- }
+ }
// set global variable so we can highlight the sidenav a bit later (such as for google reference)
// and highlight the sidenav
@@ -239,7 +278,7 @@
var crossBoundaries = ($("body.design").length > 0) || ($("body.guide").length > 0) ? true :
false; // navigate across topic boundaries only in design docs
if ($prevListItem.length) {
- if ($prevListItem.hasClass('nav-section')) {
+ if ($prevListItem.hasClass('nav-section') || crossBoundaries) {
// jump to last topic of previous section
$prevLink = $prevListItem.find('a:last');
} else if (!$selListItem.hasClass('nav-section')) {
@@ -262,7 +301,6 @@
// set up next links
var $nextLink = [];
var startClass = false;
- var training = $(".next-class-link").length; // decides whether to provide "next class" link
var isCrossingBoundary = false;
if ($selListItem.hasClass('nav-section') && $selListItem.children('div.empty').length == 0) {
@@ -289,13 +327,15 @@
if ($nextLink.length == 0) {
isCrossingBoundary = true;
// no more topics in this section, jump to the first topic in the next section
- $nextLink = $selListItem.parents('li:eq(0)').next('li.nav-section').find('a:eq(0)');
+ $nextLink = $selListItem.parents('li:eq(0)').next('li').find('a:eq(0)');
if (!$nextLink.length) { // Go up another layer to look for next page (lesson > class > course)
$nextLink = $selListItem.parents('li:eq(1)').next('li.nav-section').find('a:eq(0)');
if ($nextLink.length == 0) {
// if that doesn't work, we're at the end of the list, so disable NEXT link
$('.next-page-link').attr('href','').addClass("disabled")
.click(function() { return false; });
+ // and completely hide the one in the footer
+ $('.content-footer .next-page-link').hide();
}
}
}
@@ -314,13 +354,19 @@
$('.next-page-link').attr('href','')
.removeClass("hide").addClass("disabled")
.click(function() { return false; });
+ // and completely hide the one in the footer
+ $('.content-footer .next-page-link').hide();
if ($nextLink.length) {
$('.next-class-link').attr('href',$nextLink.attr('href'))
- .removeClass("hide").append($nextLink.html());
+ .removeClass("hide")
+ .append(": " + $nextLink.html());
$('.next-class-link').find('.new').empty();
}
} else {
- $('.next-page-link').attr('href', $nextLink.attr('href')).removeClass("hide");
+ $('.next-page-link').attr('href', $nextLink.attr('href'))
+ .removeClass("hide");
+ // for the footer link, also add the next page title
+ $('.content-footer .next-page-link').append(": " + $nextLink.html());
}
if (!startClass && $prevLink.length) {
@@ -332,14 +378,6 @@
}
}
- // If this is a training 'article', there should be no prev/next nav
- // ... if the grandparent is the "nav" ... and it has no child list items...
- if (training && $selListItem.parents('ul').eq(1).is('[id="nav"]') &&
- !$selListItem.find('li').length) {
- $('.next-page-link,.prev-page-link').attr('href','').addClass("disabled")
- .click(function() { return false; });
- }
-
}
@@ -347,7 +385,20 @@
// Set up the course landing pages for Training with class names and descriptions
if ($('body.trainingcourse').length) {
var $classLinks = $selListItem.find('ul li a').not('#nav .nav-section .nav-section ul a');
- var $classDescriptions = $classLinks.attr('description');
+
+ // create an array for all the class descriptions
+ var $classDescriptions = new Array($classLinks.length);
+ var lang = getLangPref();
+ $classLinks.each(function(index) {
+ var langDescr = $(this).attr(lang + "-description");
+ if (typeof langDescr !== 'undefined' && langDescr !== false) {
+ // if there's a class description in the selected language, use that
+ $classDescriptions[index] = langDescr;
+ } else {
+ // otherwise, use the default english description
+ $classDescriptions[index] = $(this).attr("description");
+ }
+ });
var $olClasses = $('<ol class="class-list"></ol>');
var $liClass;
@@ -359,7 +410,7 @@
$classLinks.each(function(index) {
$liClass = $('<li></li>');
$h2Title = $('<a class="title" href="'+$(this).attr('href')+'"><h2>' + $(this).html()+'</h2><span></span></a>');
- $pSummary = $('<p class="description">' + $(this).attr('description') + '</p>');
+ $pSummary = $('<p class="description">' + $classDescriptions[index] + '</p>');
$olLessons = $('<ol class="lesson-list"></ol>');
@@ -398,7 +449,7 @@
var stylesheet = $('link[rel="stylesheet"][class="fullscreen"]');
setNavBarLeftPos(); // do this even if sidenav isn't fixed because it could become fixed
// make sidenav behave when resizing the window and side-scolling is a concern
- if (navBarIsFixed) {
+ if (sticky) {
if ((stylesheet.attr("disabled") == "disabled") || stylesheet.length == 0) {
updateSideNavPosition();
} else {
@@ -482,7 +533,11 @@
}
}
+ // Resize once loading is finished
resizeNav();
+ // Check if there's an anchor that we need to scroll into view.
+ // A delay is needed, because some browsers do not immediately scroll down to the anchor
+ window.setTimeout(offsetScrollForSticky, 100);
/* init the language selector based on user cookie for lang */
loadLangPref();
@@ -515,10 +570,147 @@
cookiePath = "distribute_";
}
+
+ /* setup shadowbox for any videos that want it */
+ var $videoLinks = $("a.video-shadowbox-button, a.notice-developers-video");
+ if ($videoLinks.length) {
+ // if there's at least one, add the shadowbox HTML to the body
+ $('body').prepend(
+'<div id="video-container">'+
+ '<div id="video-frame">'+
+ '<div class="video-close">'+
+ '<span id="icon-video-close" onclick="closeVideo()"> </span>'+
+ '</div>'+
+ '<div id="youTubePlayer"></div>'+
+ '</div>'+
+'</div>');
+
+ // loads the IFrame Player API code asynchronously.
+ $.getScript("https://www.youtube.com/iframe_api");
+
+ $videoLinks.each(function() {
+ var videoId = $(this).attr('href').split('?v=')[1];
+ $(this).click(function(event) {
+ event.preventDefault();
+ startYouTubePlayer(videoId);
+ });
+ });
+ }
});
// END of the onload event
+var youTubePlayer;
+function onYouTubeIframeAPIReady() {
+}
+
+/* Returns the height the shadowbox video should be. It's based on the current
+ height of the "video-frame" element, which is 100% height for the window.
+ Then minus the margin so the video isn't actually the full window height. */
+function getVideoHeight() {
+ var frameHeight = $("#video-frame").height();
+ var marginTop = $("#video-frame").css('margin-top').split('px')[0];
+ return frameHeight - (marginTop * 2);
+}
+
+var mPlayerPaused = false;
+
+function startYouTubePlayer(videoId) {
+ $("#video-container").show();
+ $("#video-frame").show();
+ mPlayerPaused = false;
+
+ // compute the size of the player so it's centered in window
+ var maxWidth = 940; // the width of the web site content
+ var videoAspect = .5625; // based on 1280x720 resolution
+ var maxHeight = maxWidth * videoAspect;
+ var videoHeight = getVideoHeight();
+ var videoWidth = videoHeight / videoAspect;
+ if (videoWidth > maxWidth) {
+ videoWidth = maxWidth;
+ videoHeight = maxHeight;
+ }
+ $("#video-frame").css('width', videoWidth);
+
+ // check if we've already created this player
+ if (youTubePlayer == null) {
+ // check if there's a start time specified
+ var idAndHash = videoId.split("#");
+ var startTime = 0;
+ if (idAndHash.length > 1) {
+ startTime = idAndHash[1].split("t=")[1] != undefined ? idAndHash[1].split("t=")[1] : 0;
+ }
+ // enable localized player
+ var lang = getLangPref();
+ var captionsOn = lang == 'en' ? 0 : 1;
+
+ youTubePlayer = new YT.Player('youTubePlayer', {
+ height: videoHeight,
+ width: videoWidth,
+ videoId: idAndHash[0],
+ playerVars: {start: startTime, hl: lang, cc_load_policy: captionsOn},
+ events: {
+ 'onReady': onPlayerReady,
+ 'onStateChange': onPlayerStateChange
+ }
+ });
+ } else {
+ // reset the size in case the user adjusted the window since last play
+ youTubePlayer.setSize(videoWidth, videoHeight);
+ // if a video different from the one already playing was requested, cue it up
+ if (videoId != youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0]) {
+ youTubePlayer.cueVideoById(videoId);
+ }
+ youTubePlayer.playVideo();
+ }
+}
+
+function onPlayerReady(event) {
+ event.target.playVideo();
+ mPlayerPaused = false;
+}
+
+function closeVideo() {
+ try {
+ youTubePlayer.pauseVideo();
+ } catch(e) {
+ }
+ $("#video-container").fadeOut(200);
+}
+
+/* Track youtube playback for analytics */
+function onPlayerStateChange(event) {
+ // Video starts, send the video ID
+ if (event.data == YT.PlayerState.PLAYING) {
+ if (mPlayerPaused) {
+ ga('send', 'event', 'Videos', 'Resume',
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0]);
+ } else {
+ // track the start playing event so we know from which page the video was selected
+ ga('send', 'event', 'Videos', 'Start: ' +
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0],
+ 'on: ' + document.location.href);
+ }
+ mPlayerPaused = false;
+ }
+ // Video paused, send video ID and video elapsed time
+ if (event.data == YT.PlayerState.PAUSED) {
+ ga('send', 'event', 'Videos', 'Paused',
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0],
+ youTubePlayer.getCurrentTime());
+ mPlayerPaused = true;
+ }
+ // Video finished, send video ID and video elapsed time
+ if (event.data == YT.PlayerState.ENDED) {
+ ga('send', 'event', 'Videos', 'Finished',
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0],
+ youTubePlayer.getCurrentTime());
+ mPlayerPaused = true;
+ }
+}
+
+
+
function initExpandableNavItems(rootTag) {
$(rootTag + ' li.nav-section .nav-section-header').click(function() {
var section = $(this).closest('li.nav-section');
@@ -626,7 +818,7 @@
setTimeout(updateSidenavFixedWidth,delay); // need to wait a moment for css to switch
enabled = false;
}
- writeCookie("fullscreen", enabled, null, null);
+ writeCookie("fullscreen", enabled, null);
setNavBarLeftPos();
resizeNav(delay);
updateSideNavPosition();
@@ -787,7 +979,7 @@
function saveNavPanels() {
var basePath = getBaseUri(location.pathname);
var section = basePath.substring(1,basePath.indexOf("/",1));
- writeCookie("height", resizePackagesNav.css("height"), section, null);
+ writeCookie("height", resizePackagesNav.css("height"), section);
}
@@ -868,119 +1060,111 @@
return 0;
}
-function writeCookie(cookie, val, section, expiration) {
+function writeCookie(cookie, val, section) {
if (val==undefined) return;
section = section == null ? "_" : "_"+section+"_";
- if (expiration == null) {
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
- expiration = date.toGMTString();
- }
+ var age = 2*365*24*60*60; // set max-age to 2 years
var cookieValue = cookie_namespace + section + cookie + "=" + val
- + "; expires=" + expiration+"; path=/";
+ + "; max-age=" + age +"; path=/";
document.cookie = cookieValue;
}
/* ######### END COOKIES! ########## */
-
-
+var sticky = false;
var stickyTop;
+var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
/* Sets the vertical scoll position at which the sticky bar should appear.
This method is called to reset the position when search results appear or hide */
function setStickyTop() {
stickyTop = $('#header-wrapper').outerHeight() - $('#sticky-header').outerHeight();
}
+/*
+ * Displays sticky nav bar on pages when dac header scrolls out of view
+ */
+$(window).scroll(function(event) {
-/*
- * Displays sticky nav bar on pages when dac header scrolls out of view
+ setStickyTop();
+ var hiding = false;
+ var $stickyEl = $('#sticky-header');
+ var $menuEl = $('.menu-container');
+ // Exit if there's no sidenav
+ if ($('#side-nav').length == 0) return;
+ // Exit if the mouse target is a DIV, because that means the event is coming
+ // from a scrollable div and so there's no need to make adjustments to our layout
+ if ($(event.target).nodeName == "DIV") {
+ return;
+ }
+
+ var top = $(window).scrollTop();
+ // we set the navbar fixed when the scroll position is beyond the height of the site header...
+ var shouldBeSticky = top >= stickyTop;
+ // ... except if the document content is shorter than the sidenav height.
+ // (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
+ if ($("#doc-col").height() < $("#side-nav").height()) {
+ shouldBeSticky = false;
+ }
+ // Account for horizontal scroll
+ var scrollLeft = $(window).scrollLeft();
+ // When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
+ if (sticky && (scrollLeft != prevScrollLeft)) {
+ updateSideNavPosition();
+ prevScrollLeft = scrollLeft;
+ }
+
+ // Don't continue if the header is sufficently far away
+ // (to avoid intensive resizing that slows scrolling)
+ if (sticky == shouldBeSticky) {
+ return;
+ }
+
+ // If sticky header visible and position is now near top, hide sticky
+ if (sticky && !shouldBeSticky) {
+ sticky = false;
+ hiding = true;
+ // make the sidenav static again
+ $('#devdoc-nav')
+ .removeClass('fixed')
+ .css({'width':'auto','margin':''})
+ .prependTo('#side-nav');
+ // delay hide the sticky
+ $menuEl.removeClass('sticky-menu');
+ $stickyEl.fadeOut(250);
+ hiding = false;
+
+ // update the sidenaav position for side scrolling
+ updateSideNavPosition();
+ } else if (!sticky && shouldBeSticky) {
+ sticky = true;
+ $stickyEl.fadeIn(10);
+ $menuEl.addClass('sticky-menu');
+
+ // make the sidenav fixed
+ var width = $('#devdoc-nav').width();
+ $('#devdoc-nav')
+ .addClass('fixed')
+ .css({'width':width+'px'})
+ .prependTo('#body-content');
+
+ // update the sidenaav position for side scrolling
+ updateSideNavPosition();
+
+ } else if (hiding && top < 15) {
+ $menuEl.removeClass('sticky-menu');
+ $stickyEl.hide();
+ hiding = false;
+ }
+ resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
+});
+
+/*
+ * Manages secion card states and nav resize to conclude loading
*/
(function() {
$(document).ready(function() {
- setStickyTop();
- var sticky = false;
- var hiding = false;
- var $stickyEl = $('#sticky-header');
- var $menuEl = $('.menu-container');
-
- var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
-
- $(window).scroll(function() {
- // Exit if there's no sidenav
- if ($('#side-nav').length == 0) return;
- // Exit if the mouse target is a DIV, because that means the event is coming
- // from a scrollable div and so there's no need to make adjustments to our layout
- if (event.target.nodeName == "DIV") {
- return;
- }
-
-
- var top = $(window).scrollTop();
- // we set the navbar fixed when the scroll position is beyond the height of the site header...
- var shouldBeSticky = top >= stickyTop;
- // ... except if the document content is shorter than the sidenav height.
- // (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
- if ($("#doc-col").height() < $("#side-nav").height()) {
- shouldBeSticky = false;
- }
-
- // Don't continue if the header is sufficently far away
- // (to avoid intensive resizing that slows scrolling)
- if (sticky && shouldBeSticky) {
- return;
- }
-
- // Account for horizontal scroll
- var scrollLeft = $(window).scrollLeft();
- // When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
- if (navBarIsFixed && (scrollLeft != prevScrollLeft)) {
- updateSideNavPosition();
- prevScrollLeft = scrollLeft;
- }
-
- // If sticky header visible and position is now near top, hide sticky
- if (sticky && !shouldBeSticky) {
- sticky = false;
- hiding = true;
- // make the sidenav static again
- $('#devdoc-nav')
- .removeClass('fixed')
- .css({'width':'auto','margin':''})
- .prependTo('#side-nav');
- // delay hide the sticky
- $menuEl.removeClass('sticky-menu');
- $stickyEl.fadeOut(250);
- hiding = false;
-
- // update the sidenaav position for side scrolling
- updateSideNavPosition();
- } else if (!sticky && shouldBeSticky) {
- sticky = true;
- $stickyEl.fadeIn(10);
- $menuEl.addClass('sticky-menu');
-
- // make the sidenav fixed
- var width = $('#devdoc-nav').width();
- $('#devdoc-nav')
- .addClass('fixed')
- .css({'width':width+'px'})
- .prependTo('#body-content');
-
- // update the sidenaav position for side scrolling
- updateSideNavPosition();
-
- } else if (hiding && top < 15) {
- $menuEl.removeClass('sticky-menu');
- $stickyEl.hide();
- hiding = false;
- }
-
- resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
- });
-
// Stack hover states
$('.section-card-menu').each(function(index, el) {
var height = $(el).height();
@@ -990,7 +1174,6 @@
$cardInfo.css({position: 'absolute', bottom:'0px', left:'0px', right:'0px', overflow:'visible'});
});
- resizeNav(); // must resize once loading is finished
});
})();
@@ -1060,8 +1243,16 @@
}
+/* Call this to add listeners to a <select> element for Studio/Eclipse/Other docs */
+function setupIdeDocToggle() {
+ $( "select.ide" ).change(function() {
+ var selected = $(this).find("option:selected").attr("value");
+ $(".select-ide").hide();
+ $(".select-ide."+selected).show();
-
+ $("select.ide").val(selected);
+ });
+}
@@ -1114,9 +1305,7 @@
nav_pref = NAV_PREF_TREE;
init_default_navtree(toRoot);
}
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
- writeCookie("nav", nav_pref, "reference", date.toGMTString());
+ writeCookie("nav", nav_pref, "reference");
$("#nav-panels").toggle();
$("#panel-link").toggle();
@@ -1184,11 +1373,7 @@
}
function changeLangPref(lang, submit) {
- var date = new Date();
- expires = date.toGMTString(date.setTime(date.getTime()+(10*365*24*60*60*1000)));
- // keep this for 50 years
- //alert("expires: " + expires)
- writeCookie("pref_lang", lang, null, expires);
+ writeCookie("pref_lang", lang, null);
// ####### TODO: Remove this condition once we're stable on devsite #######
// This condition is only needed if we still need to support legacy GAE server
@@ -1607,8 +1792,8 @@
function onSuggestionClick(link) {
// When user clicks a suggested document, track it
- _gaq.push(['_trackEvent', 'Suggestion Click', 'clicked: ' + $(link).text(),
- 'from: ' + $("#search_autocomplete").val()]);
+ ga('send', 'event', 'Suggestion Click', 'clicked: ' + $(link).attr('href'),
+ 'query: ' + $("#search_autocomplete").val().toLowerCase());
}
function set_item_selected($li, selected)
@@ -1825,8 +2010,12 @@
return false;
}
}
- // Stop here if Google results are showing
+ // If Google results are showing, return true to allow ajax search to execute
else if ($("#searchResults").is(":visible")) {
+ // Also, if search_results is scrolled out of view, scroll to top to make results visible
+ if ((sticky ) && (search.value != "")) {
+ $('body,html').animate({scrollTop:0}, '500', 'swing');
+ }
return true;
}
// 38 UP ARROW
@@ -1949,7 +2138,7 @@
// Search for matching JD docs
- if (text.length >= 3) {
+ if (text.length >= 2) {
// Regex to match only the beginning of a word
var textRegex = new RegExp("\\b" + text.toLowerCase(), "g");
@@ -2496,8 +2685,29 @@
}
}, true);
+/* Adjust the scroll position to account for sticky header, only if the hash matches an id.
+ This does not handle <a name=""> tags. Some CSS fixes those, but only for reference docs. */
+function offsetScrollForSticky() {
+ // Ignore if there's no search bar (some special pages have no header)
+ if ($("#search-container").length < 1) return;
+
+ var hash = escape(location.hash.substr(1));
+ var $matchingElement = $("#"+hash);
+ // Sanity check that there's an element with that ID on the page
+ if ($matchingElement.length) {
+ // If the position of the target element is near the top of the page (<20px, where we expect it
+ // to be because we need to move it down 60px to become in view), then move it down 60px
+ if (Math.abs($matchingElement.offset().top - $(window).scrollTop()) < 20) {
+ $(window).scrollTop($(window).scrollTop() - 60);
+ }
+ }
+}
+
// when an event on the browser history occurs (back, forward, load) requery hash and do search
$(window).hashchange( function(){
+ // Ignore if there's no search bar (some special pages have no header)
+ if ($("#search-container").length < 1) return;
+
// If the hash isn't a search query or there's an error in the query,
// then adjust the scroll position to account for sticky header, then exit.
if ((location.hash.indexOf("q=") == -1) || (query == "undefined")) {
@@ -2505,8 +2715,7 @@
if (!$("#searchResults").is(":hidden")) {
hideResults();
}
- // Adjust the scroll position to account for sticky header
- $(window).scrollTop($(window).scrollTop() - 60);
+ offsetScrollForSticky();
return;
}
@@ -2557,8 +2766,8 @@
$("#searchResults a.gs-title").each(function(index, link) {
// When user clicks enter for Google search results, track it
$(link).click(function() {
- _gaq.push(['_trackEvent', 'Google Click', 'clicked: ' + $(this).text(),
- 'from: ' + $("#search_autocomplete").val()]);
+ ga('send', 'event', 'Google Click', 'clicked: ' + $(this).attr('href'),
+ 'query: ' + $("#search_autocomplete").val().toLowerCase());
});
});
}
@@ -2621,7 +2830,7 @@
}
function updateSidenavFixedWidth() {
- if (!navBarIsFixed) return;
+ if (!sticky) return;
$('#devdoc-nav').css({
'width' : $('#side-nav').css('width'),
'margin' : $('#side-nav').css('margin')
@@ -2632,7 +2841,7 @@
}
function updateSidenavFullscreenWidth() {
- if (!navBarIsFixed) return;
+ if (!sticky) return;
$('#devdoc-nav').css({
'width' : $('#side-nav').css('width'),
'margin' : $('#side-nav').css('margin')
@@ -2673,10 +2882,7 @@
selectedLevel = parseInt($("#apiLevelSelector option:selected").val());
toggleVisisbleApis(selectedLevel, "body");
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
- var expiration = date.toGMTString();
- writeCookie(API_LEVEL_COOKIE, selectedLevel, null, expiration);
+ writeCookie(API_LEVEL_COOKIE, selectedLevel, null);
if (selectedLevel < minLevel) {
var thing = ($("#jd-header").html().indexOf("package") != -1) ? "package" : "class";
@@ -3349,7 +3555,7 @@
showing lines that are cut off. This works with the css ellipsis
classes to fade last text line and apply an ellipsis char. */
- //card text currently uses 15px line height.
+ //card text currently uses 15px line height.
var lineHeight = 15;
$('.card-info .text').ellipsisfade(lineHeight);
});
@@ -3380,7 +3586,10 @@
sortOrder: $widget.data('sortorder'),
query: $widget.data('query'),
section: $widget.data('section'),
- sizeCols: sizeCols
+ sizeCols: sizeCols,
+ /* Added by LFL 6/6/14 */
+ resourceStyle: $widget.data('resourcestyle') || 'card',
+ stackSort: $widget.data('stacksort') || 'true'
};
// run the search for the set of resources to show
@@ -3392,9 +3601,13 @@
} else if (isCarousel) {
drawResourcesCarouselWidget($widget, opts, resources);
} else if (isStack) {
- var sections = buildSectionList(opts);
+ /* Looks like this got removed and is not used, so repurposing for the
+ homepage style layout.
+ Modified by LFL 6/6/14
+ */
+ //var sections = buildSectionList(opts);
opts['numStacks'] = $widget.data('numstacks');
- drawResourcesStackWidget($widget, opts, resources, sections);
+ drawResourcesStackWidget($widget, opts, resources/*, sections*/);
}
}
@@ -3413,10 +3626,8 @@
var $ul = $('<ul>');
for (var i = 0; i < resources.length; ++i) {
- //keep url clean for matching and offline mode handling
- var urlPrefix = resources[i].url.indexOf("//") > -1 ? "" : toRoot;
var $card = $('<a>')
- .attr('href', urlPrefix + resources[i].url)
+ .attr('href', cleanUrl(resources[i].url))
.decorateResourceCard(resources[i],plusone);
$('<li>').css(css)
@@ -3435,7 +3646,9 @@
});
};
- /* Initializes a Resource Card Stack Widget (column-based layout) */
+ /* Initializes a Resource Card Stack Widget (column-based layout)
+ Modified by LFL 6/6/14
+ */
function drawResourcesStackWidget($widget, opts, resources, sections) {
// Don't empty widget, grab all items inside since they will be the first
// items stacked, followed by the resource query
@@ -3453,60 +3666,88 @@
var sectionResources = [];
// Extract any subsections that are actually resource cards
- for (var i = 0; i < sections.length; ++i) {
- if (!sections[i].sections || !sections[i].sections.length) {
- //keep url clean for matching and offline mode handling
- urlPrefix = sections[i].url.indexOf("//") > -1 ? "" : toRoot;
- // Render it as a resource card
+ if (sections) {
+ for (var i = 0; i < sections.length; ++i) {
+ if (!sections[i].sections || !sections[i].sections.length) {
+ // Render it as a resource card
+ sectionResources.push(
+ $('<a>')
+ .addClass('resource-card section-card')
+ .attr('href', cleanUrl(sections[i].resource.url))
+ .decorateResourceCard(sections[i].resource,plusone)[0]
+ );
- sectionResources.push(
- $('<a>')
- .addClass('resource-card section-card')
- .attr('href', urlPrefix + sections[i].resource.url)
- .decorateResourceCard(sections[i].resource,plusone)[0]
- );
-
- } else {
- cards.push(
- $('<div>')
- .addClass('resource-card section-card-menu')
- .decorateResourceSection(sections[i],plusone)[0]
- );
+ } else {
+ cards.push(
+ $('<div>')
+ .addClass('resource-card section-card-menu')
+ .decorateResourceSection(sections[i],plusone)[0]
+ );
+ }
}
}
cards = cards.concat(sectionResources);
for (var i = 0; i < resources.length; ++i) {
- //keep url clean for matching and offline mode handling
- urlPrefix = resources[i].url.indexOf("//") > -1 ? "" : toRoot;
- var $card = $('<a>')
- .addClass('resource-card related-card')
- .attr('href', urlPrefix + resources[i].url)
- .decorateResourceCard(resources[i],plusone);
+ var $card = createResourceElement(resources[i], opts);
+
+ if (opts.resourceStyle.indexOf('related') > -1) {
+ $card.addClass('related-card');
+ }
cards.push($card[0]);
}
- for (var i = 0; i < cards.length; ++i) {
- // Find the stack with the shortest height, but give preference to
- // left to right order.
- var minHeight = $stacks[0].height();
- var minIndex = 0;
+ if (opts.stackSort != 'false') {
+ for (var i = 0; i < cards.length; ++i) {
+ // Find the stack with the shortest height, but give preference to
+ // left to right order.
+ var minHeight = $stacks[0].height();
+ var minIndex = 0;
- for (var j = 1; j < numStacks; ++j) {
- var height = $stacks[j].height();
- if (height < minHeight - 45) {
- minHeight = height;
- minIndex = j;
+ for (var j = 1; j < numStacks; ++j) {
+ var height = $stacks[j].height();
+ if (height < minHeight - 45) {
+ minHeight = height;
+ minIndex = j;
+ }
}
- }
- $stacks[minIndex].append($(cards[i]));
+ $stacks[minIndex].append($(cards[i]));
+ }
}
};
+ /*
+ Create a resource card using the given resource object and a list of html
+ configured options. Returns a jquery object containing the element.
+ */
+ function createResourceElement(resource, opts, plusone) {
+ var $el;
+
+ // The difference here is that generic cards are not entirely clickable
+ // so its a div instead of an a tag, also the generic one is not given
+ // the resource-card class so it appears with a transparent background
+ // and can be styled in whatever way the css setup.
+ if (opts.resourceStyle == 'generic') {
+ $el = $('<div>')
+ .addClass('resource')
+ .attr('href', cleanUrl(resource.url))
+ .decorateResource(resource, opts);
+ } else {
+ var cls = 'resource resource-card';
+
+ $el = $('<a>')
+ .addClass(cls)
+ .attr('href', cleanUrl(resource.url))
+ .decorateResourceCard(resource, plusone);
+ }
+
+ return $el;
+ }
+
/* Initializes a flow widget, see distribute.scss for generating accompanying css */
function drawResourcesFlowWidget($widget, opts, resources) {
$widget.empty();
@@ -3517,7 +3758,6 @@
while (i < resources.length) {
var cardSize = cardSizes[j++ % cardSizes.length];
cardSize = cardSize.replace(/^\s+|\s+$/,'');
- console.log("cardsize is " + cardSize);
// Some card sizes do not get a plusone button, such as where space is constrained
// or for cards commonly embedded in docs (to improve overall page speed).
plusone = !((cardSize == "6x2") || (cardSize == "6x3") ||
@@ -3539,11 +3779,11 @@
// Build each stack item or just a single item
do {
var resource = resources[i];
- //keep url clean for matching and offline mode handling
- urlPrefix = resource.url.indexOf("//") > -1 ? "" : toRoot;
- var $card = $('<a>')
- .addClass('resource-card resource-card-' + cardSize + ' resource-card-' + resource.type)
- .attr('href', urlPrefix + resource.url);
+
+ var $card = createResourceElement(resources[i], opts, plusone);
+
+ $card.addClass('resource-card-' + cardSize +
+ ' resource-card-' + resource.type);
if (isStack) {
$card.addClass('resource-card-' + isStack[1] + 'x' + isStack[2]);
@@ -3555,8 +3795,7 @@
stackCount = 0;
}
- $card.decorateResourceCard(resource,plusone)
- .appendTo($stackDiv || $widget);
+ $card.appendTo($stackDiv || $widget);
} while (++i < resources.length && stackCount > 0);
}
@@ -3696,6 +3935,15 @@
return true;
}
+ function cleanUrl(url)
+ {
+ if (url && url.indexOf('//') === -1) {
+ url = toRoot + url;
+ }
+
+ return url;
+ }
+
function parseResourceQuery(query) {
// Parse query into array of expressions (expression e.g. 'tag:foo + type:video')
@@ -3743,41 +3991,55 @@
})();
(function($) {
+
+ /*
+ Utility method for creating dom for the description area of a card.
+ Used in decorateResourceCard and decorateResource.
+ */
+ function buildResourceCardDescription(resource, plusone) {
+ var $description = $('<div>').addClass('description ellipsis');
+
+ $description.append($('<div>').addClass('text').html(resource.summary));
+
+ if (resource.cta) {
+ $description.append($('<a>').addClass('cta').html(resource.cta));
+ }
+
+ if (plusone) {
+ var plusurl = resource.url.indexOf("//") > -1 ? resource.url :
+ "//developer.android.com/" + resource.url;
+
+ $description.append($('<div>').addClass('util')
+ .append($('<div>').addClass('g-plusone')
+ .attr('data-size', 'small')
+ .attr('data-align', 'right')
+ .attr('data-href', plusurl)));
+ }
+
+ return $description;
+ }
+
+
/* Simple jquery function to create dom for a standard resource card */
$.fn.decorateResourceCard = function(resource,plusone) {
var section = resource.group || resource.type;
- var imgUrl;
- if (resource.image) {
- //keep url clean for matching and offline mode handling
- var urlPrefix = resource.image.indexOf("//") > -1 ? "" : toRoot;
- imgUrl = urlPrefix + resource.image;
+ var imgUrl = resource.image ||
+ 'assets/images/resource-card-default-android.jpg';
+
+ if (imgUrl.indexOf('//') === -1) {
+ imgUrl = toRoot + imgUrl;
}
- //add linkout logic here. check url or type, assign a class, map to css :after
- $('<div>')
- .addClass('card-bg')
- .css('background-image', 'url(' + (imgUrl || toRoot + 'assets/images/resource-card-default-android.jpg') + ')')
+
+ $('<div>').addClass('card-bg')
+ .css('background-image', 'url(' + (imgUrl || toRoot +
+ 'assets/images/resource-card-default-android.jpg') + ')')
.appendTo(this);
- if (!plusone) {
- $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
- .append($('<div>').addClass('section').text(section))
- .append($('<div>').addClass('title').html(resource.title))
- .append($('<div>').addClass('description ellipsis')
- .append($('<div>').addClass('text').html(resource.summary))
- .append($('<div>').addClass('util')))
- .appendTo(this);
- } else {
- $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
- .append($('<div>').addClass('section').text(section))
- .append($('<div>').addClass('title').html(resource.title))
- .append($('<div>').addClass('description ellipsis')
- .append($('<div>').addClass('text').html(resource.summary))
- .append($('<div>').addClass('util')
- .append($('<div>').addClass('g-plusone')
- .attr('data-size', 'small')
- .attr('data-align', 'right')
- .attr('data-href', resource.url))))
- .appendTo(this);
- }
+
+ $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
+ .append($('<div>').addClass('section').text(section))
+ .append($('<div>').addClass('title').html(resource.title))
+ .append(buildResourceCardDescription(resource, plusone))
+ .appendTo(this);
return this;
};
@@ -3860,7 +4122,39 @@
return this;
};
+
+
+
+
+ /* Render other types of resource styles that are not cards. */
+ $.fn.decorateResource = function(resource, opts) {
+ var imgUrl = resource.image ||
+ 'assets/images/resource-card-default-android.jpg';
+ var linkUrl = resource.url;
+
+ if (imgUrl.indexOf('//') === -1) {
+ imgUrl = toRoot + imgUrl;
+ }
+
+ if (linkUrl && linkUrl.indexOf('//') === -1) {
+ linkUrl = toRoot + linkUrl;
+ }
+
+ $(this).append(
+ $('<div>').addClass('image')
+ .css('background-image', 'url(' + imgUrl + ')'),
+ $('<div>').addClass('info').append(
+ $('<h4>').addClass('title').html(resource.title),
+ $('<p>').addClass('summary').html(resource.summary),
+ $('<a>').attr('href', linkUrl).addClass('cta').html('Learn More')
+ )
+ );
+
+ return this;
+ };
})(jQuery);
+
+
/* Calculate the vertical area remaining */
(function($) {
$.fn.ellipsisfade= function(lineHeight) {
@@ -3870,8 +4164,10 @@
var remainingHeight = $this.parent().parent().height();
$this.parent().siblings().each(function ()
{
- var h = $(this).height();
- remainingHeight = remainingHeight - h;
+ if ($(this).is(":visible")) {
+ var h = $(this).height();
+ remainingHeight = remainingHeight - h;
+ }
});
adjustedRemainingHeight = ((remainingHeight)/lineHeight>>0)*lineHeight
@@ -3882,3 +4178,189 @@
return this;
};
}) (jQuery);
+
+/*
+ Fullscreen Carousel
+
+ The following allows for an area at the top of the page that takes over the
+ entire browser height except for its top offset and an optional bottom
+ padding specified as a data attribute.
+
+ HTML:
+
+ <div class="fullscreen-carousel">
+ <div class="fullscreen-carousel-content">
+ <!-- content here -->
+ </div>
+ <div class="fullscreen-carousel-content">
+ <!-- content here -->
+ </div>
+
+ etc ...
+
+ </div>
+
+ Control over how the carousel takes over the screen can mostly be defined in
+ a css file. Setting min-height on the .fullscreen-carousel-content elements
+ will prevent them from shrinking to far vertically when the browser is very
+ short, and setting max-height on the .fullscreen-carousel itself will prevent
+ the area from becoming to long in the case that the browser is stretched very
+ tall.
+
+ There is limited functionality for having multiple sections since that request
+ was removed, but it is possible to add .next-arrow and .prev-arrow elements to
+ scroll between multiple content areas.
+*/
+
+(function() {
+ $(document).ready(function() {
+ $('.fullscreen-carousel').each(function() {
+ initWidget(this);
+ });
+ });
+
+ function initWidget(widget) {
+ var $widget = $(widget);
+
+ var topOffset = $widget.offset().top;
+ var padBottom = parseInt($widget.data('paddingbottom')) || 0;
+ var maxHeight = 0;
+ var minHeight = 0;
+ var $content = $widget.find('.fullscreen-carousel-content');
+ var $nextArrow = $widget.find('.next-arrow');
+ var $prevArrow = $widget.find('.prev-arrow');
+ var $curSection = $($content[0]);
+
+ if ($content.length <= 1) {
+ $nextArrow.hide();
+ $prevArrow.hide();
+ } else {
+ $nextArrow.click(function() {
+ var index = ($content.index($curSection) + 1);
+ $curSection.hide();
+ $curSection = $($content[index >= $content.length ? 0 : index]);
+ $curSection.show();
+ });
+
+ $prevArrow.click(function() {
+ var index = ($content.index($curSection) - 1);
+ $curSection.hide();
+ $curSection = $($content[index < 0 ? $content.length - 1 : 0]);
+ $curSection.show();
+ });
+ }
+
+ // Just hide all content sections except first.
+ $content.each(function(index) {
+ if ($(this).height() > minHeight) minHeight = $(this).height();
+ $(this).css({position: 'absolute', display: index > 0 ? 'none' : ''});
+ });
+
+ // Register for changes to window size, and trigger.
+ $(window).resize(resizeWidget);
+ resizeWidget();
+
+ function resizeWidget() {
+ var height = $(window).height() - topOffset - padBottom;
+ $widget.width($(window).width());
+ $widget.height(height < minHeight ? minHeight :
+ (maxHeight && height > maxHeight ? maxHeight : height));
+ }
+ }
+})();
+
+
+
+
+
+/*
+ Tab Carousel
+
+ The following allows tab widgets to be installed via the html below. Each
+ tab content section should have a data-tab attribute matching one of the
+ nav items'. Also each tab content section should have a width matching the
+ tab carousel.
+
+ HTML:
+
+ <div class="tab-carousel">
+ <ul class="tab-nav">
+ <li><a href="#" data-tab="handsets">Handsets</a>
+ <li><a href="#" data-tab="wearable">Wearable</a>
+ <li><a href="#" data-tab="tv">TV</a>
+ </ul>
+
+ <div class="tab-carousel-content">
+ <div data-tab="handsets">
+ <!--Full width content here-->
+ </div>
+
+ <div data-tab="wearable">
+ <!--Full width content here-->
+ </div>
+
+ <div data-tab="tv">
+ <!--Full width content here-->
+ </div>
+ </div>
+ </div>
+
+*/
+(function() {
+ $(document).ready(function() {
+ $('.tab-carousel').each(function() {
+ initWidget(this);
+ });
+ });
+
+ function initWidget(widget) {
+ var $widget = $(widget);
+ var $nav = $widget.find('.tab-nav');
+ var $anchors = $nav.find('[data-tab]');
+ var $li = $nav.find('li');
+ var $contentContainer = $widget.find('.tab-carousel-content');
+ var $tabs = $contentContainer.find('[data-tab]');
+ var $curTab = $($tabs[0]); // Current tab is first tab.
+ var width = $widget.width();
+
+ // Setup nav interactivity.
+ $anchors.click(function(evt) {
+ evt.preventDefault();
+ var query = '[data-tab=' + $(this).data('tab') + ']';
+ transitionWidget($tabs.filter(query));
+ });
+
+ // Add highlight for navigation on first item.
+ var $highlight = $('<div>').addClass('highlight')
+ .css({left:$li.position().left + 'px', width:$li.outerWidth() + 'px'})
+ .appendTo($nav);
+
+ // Store height since we will change contents to absolute.
+ $contentContainer.height($contentContainer.height());
+
+ // Absolutely position tabs so they're ready for transition.
+ $tabs.each(function(index) {
+ $(this).css({position: 'absolute', left: index > 0 ? width + 'px' : '0'});
+ });
+
+ function transitionWidget($toTab) {
+ if (!$curTab.is($toTab)) {
+ var curIndex = $tabs.index($curTab[0]);
+ var toIndex = $tabs.index($toTab[0]);
+ var dir = toIndex > curIndex ? 1 : -1;
+
+ // Animate content sections.
+ $toTab.css({left:(width * dir) + 'px'});
+ $curTab.animate({left:(width * -dir) + 'px'});
+ $toTab.animate({left:'0'});
+
+ // Animate navigation highlight.
+ $highlight.animate({left:$($li[toIndex]).position().left + 'px',
+ width:$($li[toIndex]).outerWidth() + 'px'})
+
+ // Store new current section.
+ $curTab = $toTab;
+ }
+ }
+ }
+})();
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/prettify.js b/tools/droiddoc/templates-ndk/assets/js/prettify.js
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/js/prettify.js
copy to tools/droiddoc/templates-ndk/assets/js/prettify.js
diff --git a/tools/droiddoc/templates-sdk-dyn/class.cs b/tools/droiddoc/templates-ndk/class.cs
similarity index 94%
rename from tools/droiddoc/templates-sdk-dyn/class.cs
rename to tools/droiddoc/templates-ndk/class.cs
index 0461af6..7aa99f9 100644
--- a/tools/droiddoc/templates-sdk-dyn/class.cs
+++ b/tools/droiddoc/templates-ndk/class.cs
@@ -1,9 +1,12 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"macros_override.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>" itemscope itemtype="http://schema.org/Article">
@@ -123,6 +126,7 @@
<?cs /if ?>
<?cs set:colspan = colspan-1 ?>
<?cs /each ?>
+<?cs call:show_annotations_list(class) ?>
</div><!-- end header -->
@@ -193,7 +197,10 @@
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><?cs call:cond_link(method.name, toroot, method.href, included) ?></span>(<?cs call:parameter_list(method.params) ?>)</nobr>
<?cs if:subcount(method.shortDescr) || subcount(method.deprecated) ?>
- <div class="jd-descrdiv"><?cs call:short_descr(method) ?></div>
+ <div class="jd-descrdiv">
+ <?cs call:short_descr(method) ?>
+ <?cs call:show_annotations_list(method) ?>
+ </div>
<?cs /if ?>
</td></tr>
<?cs set:count = count + #1 ?>
@@ -210,7 +217,10 @@
<?cs var:field.final ?>
<?cs call:type_link(field.type) ?></nobr></td>
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?></td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(field) ?>
+ <?cs call:show_annotations_list(field) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -222,7 +232,10 @@
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
<td class="jd-typecol"><?cs call:type_link(field.type) ?></td>
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?></td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(field) ?>
+ <?cs call:show_annotations_list(field) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -242,7 +255,10 @@
<?cs call:cond_link(m.name, toroot, m.href, included) ?>
<?cs /each ?>
</td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(attr) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(attr) ?>
+ <?cs call:show_annotations_list(attr) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -259,7 +275,10 @@
<?cs var:cl.abstract ?>
<?cs var:cl.kind ?></nobr></td>
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(cl) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(cl) ?>
+ <?cs call:show_annotations_list(cl) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -335,7 +354,10 @@
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
<td class="jd-descrcol"><?cs call:type_link(field.type) ?> </td>
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, cl.included) ?> </td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(field) ?>
+ <?cs call:show_annotations_list(field) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -504,6 +526,7 @@
<?cs call:federated_refs(field) ?>
</div>
<div class="jd-details-descr">
+ <?cs call:show_annotations_list(field) ?>
<?cs call:description(field) ?>
<?cs if:subcount(field.constantValue) ?>
<div class="jd-tagdata">
@@ -546,6 +569,7 @@
<?cs call:federated_refs(method) ?>
</div>
<div class="jd-details-descr">
+ <?cs call:show_annotations_list(method) ?>
<?cs call:description(method) ?>
</div>
</div>
@@ -560,6 +584,7 @@
<h4 class="jd-details-title"><?cs var:attr.name ?>
</h4>
<div class="jd-details-descr">
+ <?cs call:show_annotations_list(attr) ?>
<?cs call:description(attr) ?>
<div class="jd-tagdata">
diff --git a/tools/droiddoc/templates-sdk-dyn/classes.cs b/tools/droiddoc/templates-ndk/classes.cs
similarity index 84%
rename from tools/droiddoc/templates-sdk-dyn/classes.cs
rename to tools/droiddoc/templates-ndk/classes.cs
index 6769f47..405892d 100644
--- a/tools/droiddoc/templates-sdk-dyn/classes.cs
+++ b/tools/droiddoc/templates-ndk/classes.cs
@@ -1,9 +1,12 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"macros_override.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>" itemscope itemtype="http://schema.org/Article">
@@ -30,7 +33,10 @@
<?cs each:cl = letter ?>
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.since ?>" >
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(cl) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(cl) ?>
+ <?cs call:show_annotations_list(cl) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
diff --git a/tools/droiddoc/templates-ndk/components/masthead.cs b/tools/droiddoc/templates-ndk/components/masthead.cs
new file mode 100644
index 0000000..01d0e55
--- /dev/null
+++ b/tools/droiddoc/templates-ndk/components/masthead.cs
@@ -0,0 +1,180 @@
+<?cs def:custom_masthead() ?>
+<?cs if:preview ?>
+ <?cs call:preview_masthead() ?>
+<?cs else ?>
+<a name="top"></a>
+
+<!-- dialog to prompt lang pref change when loaded from hardcoded URL
+<div id="langMessage" style="display:none">
+ <div>
+ <div class="lang en">
+ <p>You requested a page in English, would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang es">
+ <p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang ja">
+ <p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang ko">
+ <p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang ru">
+ <p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang zh-cn">
+ <p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang zh-tw">
+ <p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p>
+ </div>
+ <a href="#" class="button yes" onclick="return false;">
+ <span class="lang en">Yes</span>
+ <span class="lang es">Sí</span>
+ <span class="lang ja">Yes</span>
+ <span class="lang ko">Yes</span>
+ <span class="lang ru">Yes</span>
+ <span class="lang zh-cn">是的</span>
+ <span class="lang zh-tw">没有</span>
+ </a>
+ <a href="#" class="button" onclick="$('#langMessage').hide();return false;">
+ <span class="lang en">No</span>
+ <span class="lang es">No</span>
+ <span class="lang ja">No</span>
+ <span class="lang ko">No</span>
+ <span class="lang ru">No</span>
+ <span class="lang zh-cn">没有</span>
+ <span class="lang zh-tw">没有</span>
+ </a>
+ </div>
+</div> -->
+
+<?cs if:!devsite ?><?cs # leave out the global header for devsite; it is in devsite template ?>
+ <!-- Header -->
+ <div id="header-wrapper">
+ <div id="header"><?cs call:butter_bar() ?>
+ <div class="wrap" id="header-wrap">
+ <div class="col-3 logo">
+ <a href="<?cs var:toroot ?>index.html">
+ <img src="<?cs var:toroot ?>assets/images/dac_logo.png"
+ srcset="<?cs var:toroot ?>assets/images/dac_logo@2x.png 2x"
+ width="123" height="25" alt="Android Developers" />
+ </a>
+ <div class="btn-quicknav" id="btn-quicknav">
+ <a href="#" class="arrow-inactive">Quicknav</a>
+ <a href="#" class="arrow-active">Quicknav</a>
+ </div>
+ </div>
+
+ <?cs # design/dev/dist tabs usually here ?>
+
+ <?cs # call:header_search_widget() ?>
+
+ </div><!-- end header-wrap.wrap -->
+ </div><!-- end header -->
+
+
+ <!-- Secondary x-nav -->
+ <div id="nav-x">
+ <div class="wrap" style="position:relative;z-index:1">
+
+ <ul class="nav-x col-9 develop" style="width:100%">
+ <li class="guide"><a href="<?cs var:toroot ?>ndk/guides/index.html">
+ Guides</a></li>
+ <li class="reference"><a href="<?cs var:toroot ?>ndk/reference/index.html">
+ Reference</a></li>
+ <li class="samples"><a href="<?cs var:toroot ?>ndk/samples/index.html">
+ Samples</a></li>
+ <li class="downloads"><a href="<?cs var:toroot ?>ndk/downloads/index.html">
+ Downloads</a></li>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+
+ <div id="searchResults" class="wrap" style="display:none;">
+ <h2 id="searchTitle">Results</h2>
+ <div id="leftSearchControl" class="search-control">Loading...</div>
+ </div>
+ </div> <!--end header-wrapper -->
+
+ <div id="sticky-header">
+ <div>
+ <a class="logo" href="#top"></a>
+ <a class="top" href="#top"></a>
+ <ul class="breadcrumb">
+ <?cs # More <li> elements added here with javascript ?>
+ <?cs if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
+ /if ?>
+ </ul>
+ </div>
+ </div>
+
+<?cs /if ?><?cs # end if/else !devsite ?>
+<?cs /if ?><?cs # end if/else preview ?><?cs
+/def ?>
+
+<?cs def:preview_masthead() ?>
+<a name="top"></a>
+
+
+<!-- Header -->
+<div id="header-wrapper">
+ <div id="header"><?cs call:butter_bar() ?>
+ <div class="wrap" id="header-wrap">
+ <div class="col_3 logo landing-logo" style="width:240px">
+ <a href="<?cs var:toroot ?>preview/index.html">
+ <img src="<?cs var:toroot ?>assets/images/android.png" height="25" alt="Android"
+ style="margin:-3px 0 0" />
+ </a>
+ </div>
+ <div class="col-8" style="margin:0"><h1 style="margin: 4px 0 0 0px;padding:0;line-height:16px;
+color:#666;font-weight:100;font-size:27px;">L Developer Preview</h1></div>
+
+ <?cs # ADD SEARCH AND MENU ?>
+ <?cs # call:header_search_widget() ?>
+
+ </div><!-- end header-wrap -->
+ </div><!-- /Header -->
+
+
+ <div id="searchResults" class="wrap" style="display:none;">
+ <h2 id="searchTitle">Results</h2>
+ <div id="leftSearchControl" class="search-control">Loading...</div>
+ </div>
+</div> <!--end header-wrapper -->
+
+<div id="sticky-header">
+ <div>
+ <a class="logo" href="#top"></a>
+ <a class="top" href="#top"></a>
+ <ul class="breadcrumb">
+ <?cs # More <li> elements added here with javascript ?>
+ <?cs if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
+ /if ?>
+ </ul>
+ </div>
+</div>
+
+ <?cs
+/def ?>
+
+
+<?cs # (UN)COMMENT THE INSIDE OF THIS METHOD TO TOGGLE VISIBILITY ?>
+<?cs def:butter_bar() ?>
+
+<?cs # HIDE THE BUTTER BAR
+
+ <div style="height:20px"><!-- spacer to bump header down --></div>
+ <div id="butterbar-wrapper">
+ <div id="butterbar">
+ <a href="http://googleblog.blogspot.com/" id="butterbar-message">
+ The Android 5.0 SDK will be available on October 17th!
+ </a>
+ </div>
+ </div>
+
+?>
+
+<?cs /def ?>
diff --git a/tools/droiddoc/templates-sdk-dyn/customizations.cs b/tools/droiddoc/templates-ndk/customizations.cs
similarity index 79%
copy from tools/droiddoc/templates-sdk-dyn/customizations.cs
copy to tools/droiddoc/templates-ndk/customizations.cs
index 27822d5..0c640de 100644
--- a/tools/droiddoc/templates-sdk-dyn/customizations.cs
+++ b/tools/droiddoc/templates-ndk/customizations.cs
@@ -1,14 +1,14 @@
-<?cs
+<?cs
def:fullpage() ?>
<div id="body-content">
<?cs /def ?>
-<?cs
+<?cs
def:sdk_nav() ?>
<div class="wrap clearfix" id="body-content">
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
-<?cs
+<?cs
include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
@@ -24,10 +24,10 @@
<div class="wrap clearfix" id="body-content">
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
-<?cs
+<?cs
include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
-
-
+
+
</div>
</div> <!-- end side-nav -->
<script>
@@ -37,15 +37,91 @@
</script>
<?cs /def ?>
<?cs
+
+def:ndk_guides_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs
+ include:"../../../../frameworks/base/docs/html-ndk/ndk/guides/guides_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs
+
+def:ndk_reference_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs
+ include:"../../../../frameworks/base/docs/html-ndk/ndk/reference/reference_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs
+
+def:ndk_samples_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs
+ include:"../../../../frameworks/base/docs/html-ndk/ndk/samples/samples_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs
+
+def:ndk_downloads_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs
+ include:"../../../../frameworks/base/docs/html-ndk/ndk/downloads/downloads_toc.cs" ?>
+
+
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs
def:training_nav() ?>
<div class="wrap clearfix" id="body-content">
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
-<?cs
+<?cs
include:"../../../../frameworks/base/docs/html/training/training_toc.cs" ?>
-
+
</div>
</div> <!-- end side-nav -->
@@ -112,6 +188,20 @@
</script>
<?cs /def ?><?cs
+def:analyze_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/analyze/analyze_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?><?cs
+
def:monetize_nav() ?>
<div class="wrap clearfix" id="body-content">
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
@@ -159,9 +249,9 @@
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
-<?cs
+<?cs
include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
-
+
</div>
</div> <!-- end side-nav -->
@@ -180,7 +270,7 @@
<?cs
include:"../../../../frameworks/base/docs/html/design/design_toc.cs" ?>
-
+
</div>
</div> <!-- end side-nav -->
@@ -198,7 +288,7 @@
<?cs
include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
-
+
</div>
</div> <!-- end side-nav -->
@@ -236,12 +326,12 @@
<?cs
include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
-
+
</div>
<script type="text/javascript">
showGoogleRefTree();
-
+
</script>
</div> <!-- end side-nav -->
<script>
@@ -259,7 +349,7 @@
<?cs
include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
-
+
</div>
</div> <!-- end side-nav -->
@@ -290,7 +380,23 @@
</script>
<?cs /def ?>
-<?cs # The default side navigation for the reference docs ?><?cs
+<?cs
+def:preview_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+ <?cs
+ include:"../../../../frameworks/base/docs/html/preview/preview_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
+<?cs # The default side navigation for the reference docs ?><?cs
def:default_left_nav() ?>
<?cs if:reference.gcm || reference.gms ?>
<?cs call:google_nav() ?>
@@ -311,15 +417,15 @@
<div id="api-nav-title">Android APIs</div>
</div><!-- end nav header -->
<script>
- var SINCE_DATA = [ <?cs
- each:since = since ?>'<?cs
- var:since.name ?>'<?cs
+ var SINCE_DATA = [ <?cs
+ each:since = since ?>'<?cs
+ var:since.name ?>'<?cs
if:!last(since) ?>, <?cs /if ?><?cs
- /each
+ /each
?> ];
buildApiLevelSelector();
</script>
-
+
<div id="swapper">
<div id="nav-panels">
<div id="resize-packages-nav">
@@ -334,27 +440,29 @@
<div id="classes-nav" class="scroll-pane">
-<?cs
+<?cs
if:subcount(class.package) ?>
<ul>
+ <?cs call:list("Annotations", class.package.annotations) ?>
<?cs call:list("Interfaces", class.package.interfaces) ?>
<?cs call:list("Classes", class.package.classes) ?>
<?cs call:list("Enums", class.package.enums) ?>
<?cs call:list("Exceptions", class.package.exceptions) ?>
<?cs call:list("Errors", class.package.errors) ?>
- </ul><?cs
+ </ul><?cs
elif:subcount(package) ?>
<ul>
+ <?cs call:class_link_list("Annotations", package.annotations) ?>
<?cs call:class_link_list("Interfaces", package.interfaces) ?>
<?cs call:class_link_list("Classes", package.classes) ?>
<?cs call:class_link_list("Enums", package.enums) ?>
<?cs call:class_link_list("Exceptions", package.exceptions) ?>
<?cs call:class_link_list("Errors", package.errors) ?>
- </ul><?cs
+ </ul><?cs
else ?>
- <p style="padding:10px">Select a package to view its members</p><?cs
+ <p style="padding:10px">Select a package to view its members</p><?cs
/if ?><br/>
-
+
</div><!-- end classes -->
</div><!-- end nav-panels -->
@@ -395,7 +503,7 @@
});
</script>
<?cs /if ?>
- <?cs
+ <?cs
/def ?>
@@ -431,8 +539,8 @@
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="ru">Русский</option>
- <option value="zh-cn">中文 (中国)</option>
- <option value="zh-tw">中文 (台灣)</option>
+ <option value="zh-cn">中文(简体)</option>
+ <option value="zh-tw">中文(繁體)</option>
</select>
</div>
<script type="text/javascript">
@@ -497,25 +605,35 @@
-<?cs
+<?cs
def:custom_left_nav() ?><?cs
if:fullpage ?><?cs
call:fullpage() ?><?cs
elif:nonavpage ?><?cs
call:no_nav() ?><?cs
- elif:guide ?><?cs
- call:guide_nav() ?><?cs
+ elif:ndk ?><?cs
+ if:guide ?><?cs
+ call:ndk_guides_nav() ?><?cs
+ elif:reference ?><?cs
+ call:ndk_reference_nav() ?><?cs
+ elif:samples ?><?cs
+ call:ndk_samples_nav() ?><?cs
+ elif:downloads ?><?cs
+ call:ndk_downloads_nav() ?><?cs
+ /if ?><?cs
+ elif:guide ?><?cs
+ call:guide_nav() ?><?cs
elif:design ?><?cs
- call:design_nav() ?><?cs
- elif:training ?><?cs
- call:training_nav() ?><?cs
- elif:tools ?><?cs
+ call:design_nav() ?><?cs
+ elif:training ?><?cs
+ call:training_nav() ?><?cs
+ elif:tools ?><?cs
call:tools_nav() ?><?cs
- elif:google ?><?cs
- call:google_nav() ?><?cs
+ elif:google ?><?cs
+ call:google_nav() ?><?cs
elif:samples ?><?cs
call:samples_nav() ?><?cs
- elif:distribute ?><?cs
+ elif:distribute ?><?cs
if:googleplay ?><?cs
call:googleplay_nav() ?><?cs
elif:essentials ?><?cs
@@ -526,6 +644,8 @@
call:engage_nav() ?><?cs
elif:monetize ?><?cs
call:monetize_nav() ?><?cs
+ elif:analyze ?><?cs
+ call:analyze_nav() ?><?cs
elif:disttools ?><?cs
call:disttools_nav() ?><?cs
elif:stories ?><?cs
@@ -537,38 +657,40 @@
call:distribute_nav() ?><?cs
elif:wear ?><?cs
call:wear_nav() ?><?cs
+ elif:preview ?><?cs
+ call:preview_nav() ?><?cs
else ?><?cs
call:default_left_nav() ?> <?cs
/if ?><?cs
/def ?>
-<?cs # appears at the bottom of every page ?><?cs
+<?cs # appears at the bottom of every page ?><?cs
def:custom_cc_copyright() ?>
- Except as noted, this content is
+ Except as noted, this content is
licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
- Creative Commons Attribution 2.5</a>. For details and
- restrictions, see the <a href="<?cs var:toroot ?>license.html">Content
- License</a>.<?cs
+ Creative Commons Attribution 2.5</a>. For details and
+ restrictions, see the <a href="<?cs var:toroot ?>license.html">Content
+ License</a>.<?cs
/def ?>
-<?cs
+<?cs
def:custom_copyright() ?>
Except as noted, this content is licensed under <a
- href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
+ href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
For details and restrictions, see the <a href="<?cs var:toroot ?>license.html">
- Content License</a>.<?cs
+ Content License</a>.<?cs
/def ?>
-<?cs
+<?cs
def:custom_footerlinks() ?>
<p>
<a href="<?cs var:toroot ?>about/index.html">About Android</a> |
<a href="<?cs var:toroot ?>legal.html">Legal</a> |
<a href="<?cs var:toroot ?>support.html">Support</a>
- </p><?cs
+ </p><?cs
/def ?>
-<?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs
+<?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs
def:custom_buildinfo() ?><?cs
if:!google && !reference.gcm && !reference.gms ?>
Android <?cs var:sdk.version ?> r<?cs var:sdk.rel.id ?> — <?cs
diff --git a/tools/droiddoc/templates-sdk-dyn/data.hdf b/tools/droiddoc/templates-ndk/data.hdf
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/data.hdf
copy to tools/droiddoc/templates-ndk/data.hdf
diff --git a/tools/droiddoc/templates-sdk-dyn/designpage.cs b/tools/droiddoc/templates-ndk/designpage.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/designpage.cs
copy to tools/droiddoc/templates-ndk/designpage.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/docpage.cs b/tools/droiddoc/templates-ndk/docpage.cs
similarity index 71%
copy from tools/droiddoc/templates-sdk-dyn/docpage.cs
copy to tools/droiddoc/templates-ndk/docpage.cs
index 7eae405..fa6dde6 100644
--- a/tools/droiddoc/templates-sdk-dyn/docpage.cs
+++ b/tools/droiddoc/templates-ndk/docpage.cs
@@ -2,27 +2,11 @@
<?cs include:"macros.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
-<body class="gc-documentation
-
-<?cs
-if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?><?cs
- if:(guide||develop||training||reference||tools||sdk||samples) ?>develop<?cs
+<body class="gc-documentation develop <?cs
if:guide ?> guide<?cs /if ?><?cs
+ if:reference ?> reference<?cs /if ?><?cs
if:samples ?> samples<?cs /if ?><?cs
- elif:(distribute||googleplay||essentials||users||engage||monetize||disttools||stories)
- ?>distribute<?cs
- if:googleplay ?> googleplay<?cs /if ?><?cs
- if:essentials ?> essentials<?cs /if ?><?cs
- if:users ?> users<?cs /if ?><?cs
- if:engage ?> engage<?cs /if ?><?cs
- if:monetize ?> monetize<?cs /if ?><?cs
- if:disttools ?> disttools<?cs /if ?><?cs
- if:stories ?> stories<?cs /if ?><?cs
- elif:about ?>about<?cs
- elif:design ?>design<?cs
-/if ?><?cs
-if:page.trainingcourse ?> trainingcourse<?cs
-/if ?>" itemscope itemtype="http://schema.org/Article"><?cs
+ if:downloads ?> downloads<?cs /if ?>" itemscope itemtype="http://schema.org/Article"><?cs
include:"header.cs" ?>
<div <?cs
@@ -90,7 +74,7 @@
</div>
<?cs /if ?><?cs # end if training ?>
</div>
- <?cs /if ?>
+ <?cs /if ?><?cs # end if header.hide ?>
<?cs elif:samplesProjectIndex ?>
<div id="api-info-block">
@@ -103,7 +87,14 @@
<h1 itemprop="name"><?cs var:projectDir ?></h1>
<?cs else ?>
-
+ <?cs if:training ?>
+<?cs # horrible horrible hack to move TOC up when the next/prev links are not there ?>
+<style>
+ #tb-wrapper {
+ margin-top:6px;
+ }
+</style>
+ <?cs /if ?>
<?cs if:(!fullpage && !header.hide) ?>
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
@@ -150,25 +141,9 @@
if:fullpage ?>wrap<?cs
else ?>layout-content-row<?cs /if ?>"
itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div class="layout-content-col <?cs
- if:fullpage ?>col-16<?cs
- elif:training||guide ?>col-8<?cs
- else ?>col-9<?cs /if ?>" style="padding-top:4px">
- <?cs if:!page.noplus ?><?cs if:fullpage ?><style>#___plusone_0 {float:right !important;}</style><?cs /if ?>
- <div class="g-plusone" data-size="medium"></div>
- <?cs /if ?>
- </div>
<?cs if:!fullscreen ?>
- <div class="paging-links layout-content-col col-4">
+ <div class="paging-links layout-content-col col-10">
<?cs if:(design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
- <a href="#" class="prev-page-link hide"
- zh-tw-lang="上一堂課"
- zh-cn-lang="上一课"
- ru-lang="Предыдущий"
- ko-lang="이전"
- ja-lang="前へ"
- es-lang="Anterior"
- >Previous</a>
<a href="#" class="next-page-link hide"
zh-tw-lang="下一堂課"
zh-cn-lang="下一课"
@@ -185,41 +160,28 @@
ja-lang="開始する"
es-lang="Empezar"
>Get started</a>
+ <a href="#" class="next-class-link hide">Next class</a>
+ <?cs /if ?>
+ </div>
+ <div class="layout-content-col plus-container col-2" >
+ <?cs if:!page.noplus ?><?cs if:fullpage ?><style>#___plusone_0 {float:right !important;}</style><?cs /if ?>
+ <div class="g-plusone" data-size="medium"></div>
<?cs /if ?>
</div>
<?cs /if ?>
</div>
- <?cs # for training classes, provide a different kind of link when the next page is a different class ?>
- <?cs if:training && !page.article ?>
- <div class="layout-content-row content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <a href="#" class="next-class-link hide">Next class: </a>
- </div>
- <?cs /if ?>
-
</div> <!-- end jd-content -->
<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
-<!-- Start of Tag -->
-<script type="text/javascript">
-var axel = Math.random() + "";
-var a = axel * 10000000000000;
-document.write('<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>');
-</script>
-<noscript>
-<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=1?" width="1" height="1" frameborder="0" style="display:none"></iframe>
-</noscript>
-<!-- End of Tag -->
-
-
<?cs include:"trailer.cs" ?>
<script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_lists_unified.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_extras.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_collections.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_tag_helpers.js" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_lists_unified.js?v=8" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_extras.js?v=10" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_collections.js?v=10" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_tag_helpers.js?v=5" type="text/javascript"></script>
</body>
</html>
diff --git a/tools/droiddoc/templates-sdk-dyn/footer.cs b/tools/droiddoc/templates-ndk/footer.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/footer.cs
copy to tools/droiddoc/templates-ndk/footer.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/gcm_navtree_data.cs b/tools/droiddoc/templates-ndk/gcm_navtree_data.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/gcm_navtree_data.cs
copy to tools/droiddoc/templates-ndk/gcm_navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/gms_navtree_data.cs b/tools/droiddoc/templates-ndk/gms_navtree_data.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/gms_navtree_data.cs
copy to tools/droiddoc/templates-ndk/gms_navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/head_tag.cs b/tools/droiddoc/templates-ndk/head_tag.cs
similarity index 65%
copy from tools/droiddoc/templates-sdk-dyn/head_tag.cs
copy to tools/droiddoc/templates-ndk/head_tag.cs
index 732118f..d9dca8b 100644
--- a/tools/droiddoc/templates-sdk-dyn/head_tag.cs
+++ b/tools/droiddoc/templates-ndk/head_tag.cs
@@ -24,8 +24,8 @@
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
/if ?>
<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>favicon.ico" />
-<title><?cs
- if:page.title ?><?cs
+<title><?cs
+ if:page.title ?><?cs
var:page.title ?> | <?cs
/if ?>Android Developers</title>
@@ -38,13 +38,7 @@
if:android.whichdoc != 'online' ?>http:<?cs
/if ?>//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
title="roboto">
-<link href="<?cs var:toroot ?>assets/css/default.css" rel="stylesheet" type="text/css">
-
-<?cs if:reference && !(reference.gms || reference.gcm || wear) ?>
-<!-- FULLSCREEN STYLESHEET -->
-<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
-type="text/css">
-<?cs /if ?>
+<link href="<?cs var:toroot ?>assets/css/default.css?v=5" rel="stylesheet" type="text/css">
<!-- JAVASCRIPT -->
<script src="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//www.google.com/jsapi" type="text/javascript"></script>
@@ -62,17 +56,25 @@
var metaTags = [<?cs var:meta.tags ?>];
var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
</script>
-<script src="<?cs var:toroot ?>assets/js/docs.js" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>assets/js/docs.js?v=3" type="text/javascript"></script>
-<script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-5831155-1']);
- _gaq.push(['_trackPageview']);
+<?cs if:helpoutsWidget ?>
+<script type="text/javascript" src="https://helpouts.google.com/ps/res/embed.js" defer async
+ data-helpouts-embed data-helpouts-vertical="programming"
+ data-helpouts-tags="<?cs var:page.tags ?>" data-helpouts-prefix="android"
+ data-helpouts-standalone="true"></script>
+<?cs /if ?>
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-5831155-1', 'android.com');
+ ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker);
+ ga('send', 'pageview');
+ ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>
+
</head>
diff --git a/tools/droiddoc/templates-sdk-dyn/header.cs b/tools/droiddoc/templates-ndk/header.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/header.cs
copy to tools/droiddoc/templates-ndk/header.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/header_tabs.cs b/tools/droiddoc/templates-ndk/header_tabs.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/header_tabs.cs
copy to tools/droiddoc/templates-ndk/header_tabs.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/jd_lists_unified.cs b/tools/droiddoc/templates-ndk/jd_lists_unified.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/jd_lists_unified.cs
copy to tools/droiddoc/templates-ndk/jd_lists_unified.cs
diff --git a/tools/droiddoc/templates-ndk/macros_override.cs b/tools/droiddoc/templates-ndk/macros_override.cs
new file mode 100644
index 0000000..0a94598
--- /dev/null
+++ b/tools/droiddoc/templates-ndk/macros_override.cs
@@ -0,0 +1,36 @@
+<?cs # Create a comma separated list of annotations on obj that were in showAnnotations in Doclava ?>
+<?cs # pre is an HTML string to start the list, post is an HTML string to close the list ?>
+<?cs # for example call:show_annotations_list(cl, "<td>Annotations: ", "</td>") ?>
+<?cs # if obj has nothing on obj.showAnnotations, nothing will be output ?>
+<?cs def:show_annotations_list(obj) ?>
+ <?cs each:anno = obj.showAnnotations ?>
+ <?cs if:first(anno) ?>
+ <span class='annotation-message'>
+ Included in documentation by the annotations:
+ <?cs /if ?>
+ @<?cs var:anno.type.label ?>
+ <?cs if:last(anno) == 0 ?>
+ ,
+ <?cs /if ?>
+ <?cs if:last(anno)?>
+ </span>
+ <?cs /if ?>
+ <?cs /each ?>
+<?cs /def ?>
+
+<?cs # Override default class_link_table to display annotations ?>
+<?cs def:class_link_table(classes) ?>
+ <?cs set:count = #1 ?>
+ <table class="jd-sumtable-expando">
+ <?cs each:cl=classes ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.type.since ?>" >
+ <td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(cl) ?>
+ <?cs call:show_annotations_list(cl) ?>
+ </td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+ </table>
+<?cs /def ?>
\ No newline at end of file
diff --git a/tools/droiddoc/templates-sdk-dyn/navtree_data.cs b/tools/droiddoc/templates-ndk/navtree_data.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/navtree_data.cs
copy to tools/droiddoc/templates-ndk/navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/nosidenavpage.cs b/tools/droiddoc/templates-ndk/nosidenavpage.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/nosidenavpage.cs
copy to tools/droiddoc/templates-ndk/nosidenavpage.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/package.cs b/tools/droiddoc/templates-ndk/package.cs
similarity index 91%
rename from tools/droiddoc/templates-sdk-dyn/package.cs
rename to tools/droiddoc/templates-ndk/package.cs
index 99eaff2..2225565 100644
--- a/tools/droiddoc/templates-sdk-dyn/package.cs
+++ b/tools/droiddoc/templates-ndk/package.cs
@@ -1,10 +1,13 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"macros_override.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>">
@@ -45,6 +48,7 @@
<?cs /if ?>
<?cs /def ?>
+<?cs call:class_table("Annotations", package.annotations) ?>
<?cs call:class_table("Interfaces", package.interfaces) ?>
<?cs call:class_table("Classes", package.classes) ?>
<?cs call:class_table("Enums", package.enums) ?>
diff --git a/tools/droiddoc/templates-sdk-dyn/packages.cs b/tools/droiddoc/templates-ndk/packages.cs
similarity index 95%
rename from tools/droiddoc/templates-sdk-dyn/packages.cs
rename to tools/droiddoc/templates-ndk/packages.cs
index 44680c3..5056d3a 100644
--- a/tools/droiddoc/templates-sdk-dyn/packages.cs
+++ b/tools/droiddoc/templates-ndk/packages.cs
@@ -4,6 +4,8 @@
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>">
diff --git a/tools/droiddoc/templates-sdk-dyn/sample.cs b/tools/droiddoc/templates-ndk/sample.cs
similarity index 97%
rename from tools/droiddoc/templates-sdk-dyn/sample.cs
rename to tools/droiddoc/templates-ndk/sample.cs
index c6f28f8..32a0788 100644
--- a/tools/droiddoc/templates-sdk-dyn/sample.cs
+++ b/tools/droiddoc/templates-ndk/sample.cs
@@ -18,7 +18,7 @@
<a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/index.html">Overview</a>
| <a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/project.html">Project</a>
| <a href="<?cs var:toroot ?>downloads/samples/<?cs var:projectDir ?>.zip"
- onclick="_gaq.push(['_trackEvent', 'Samples', 'Download', <?cs var:projectDir ?>]);"
+ onclick="ga('send', 'event', 'Samples', 'Download', <?cs var:projectDir ?>);"
>Download</a>
</div><!-- end sum-details-links -->
diff --git a/tools/droiddoc/templates-sdk-dyn/sampleindex.cs b/tools/droiddoc/templates-ndk/sampleindex.cs
similarity index 97%
rename from tools/droiddoc/templates-sdk-dyn/sampleindex.cs
rename to tools/droiddoc/templates-ndk/sampleindex.cs
index 98767b1..1bacb53 100644
--- a/tools/droiddoc/templates-sdk-dyn/sampleindex.cs
+++ b/tools/droiddoc/templates-ndk/sampleindex.cs
@@ -21,7 +21,7 @@
| <a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/project.html">Project</a>
<?cs /if ?>
| <a href="<?cs var:toroot ?>downloads/samples/<?cs var:projectDir ?>.zip"
- onclick="_gaq.push(['_trackEvent', 'Samples', 'Download', <?cs var:projectDir ?>]);"
+ onclick="ga('send', 'event', 'Samples', 'Download', <?cs var:projectDir ?>);"
>Download</a>
</div><!-- end sum-details-links -->
diff --git a/tools/droiddoc/templates-sdk-dyn/samples_navtree_data.cs b/tools/droiddoc/templates-ndk/samples_navtree_data.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/samples_navtree_data.cs
copy to tools/droiddoc/templates-ndk/samples_navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/sdkpage.cs b/tools/droiddoc/templates-ndk/sdkpage.cs
similarity index 69%
rename from tools/droiddoc/templates-sdk-dyn/sdkpage.cs
rename to tools/droiddoc/templates-ndk/sdkpage.cs
index 95f6596..817ac47 100644
--- a/tools/droiddoc/templates-sdk-dyn/sdkpage.cs
+++ b/tools/droiddoc/templates-ndk/sdkpage.cs
@@ -183,21 +183,7 @@
<td><?cs var:ndk.linux64.legacy_bytes ?></td>
<td><?cs var:ndk.linux64.legacy_checksum ?></td>
</tr> -->
- <tr>
- <th>Additional Download</th>
- <th>Package</th>
- <th style="white-space:nowrap">Size (Bytes)</th>
- <th>MD5 Checksum</th>
- </tr>
- <tr>
- <td>STL debug info</td>
- <td>
- <a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.debug_info_download ?>"><?cs var:ndk.debug_info_download ?></a>
- </td>
- <td><?cs var:ndk.debug_info_bytes ?></td>
- <td><?cs var:ndk.debug_info_checksum ?></td>
- </tr>
+
</table>
<?cs ######## HERE IS THE JD DOC CONTENT ######### ?>
@@ -278,89 +264,25 @@
-<h4><a href='' class="expandable"
- onclick="toggleExpandable(this,'.pax');hideExpandable('.myide,.reqs');return false;"
- >DOWNLOAD FOR OTHER PLATFORMS</a></h4>
+<div class="pax col-13 online" style="margin:0;">
-<div class="pax col-13 online" style="display:none;margin:0;">
+<h3>SDK Tools Only</h3>
+<p>If you prefer to use a different IDE or run the tools from the
+command line or with build scripts, you can instead download the stand-alone Android SDK Tools.
+These packages provide the basic SDK tools for app development, without an IDE.
+Also see the <a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">SDK tools release notes</a>.</p>
-<p class="table-caption"><strong>ADT Bundle</strong></p>
<table class="download">
<tr>
<th>Platform</th>
<th>Package</th>
<th>Size</th>
- <th>MD5 Checksum</th>
+ <th>SHA-1 Checksum</th>
</tr>
<tr>
- <td>Windows 32-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="win-bundle32"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.win32_bundle_download ?>"><?cs var:sdk.win32_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.win32_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.win32_bundle_checksum ?></td>
- </tr>
- <tr>
- <td>Windows 64-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="win-bundle64"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.win64_bundle_download ?>"><?cs var:sdk.win64_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.win64_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.win64_bundle_checksum ?></td>
- </tr>
- <tr>
- <td><nobr>Mac OS X 64-bit</nobr></td>
- <td>
- <a onClick="return onDownload(this)" id="mac-bundle64"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.mac64_bundle_download ?>"><?cs var:sdk.mac64_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.mac64_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.mac64_bundle_checksum ?></td>
- </tr>
- <tr>
- <td>Linux 32-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="linux-bundle32"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.linux32_bundle_download ?>"><?cs var:sdk.linux32_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.linux32_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.linux32_bundle_checksum ?></td>
- </tr>
- <tr>
- <td>Linux 64-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="linux-bundle64"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.linux64_bundle_download ?>"><?cs var:sdk.linux64_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.linux64_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.linux64_bundle_checksum ?></td>
- </tr>
- </table>
-
-
-<p class="table-caption"><strong>SDK Tools Only</strong></p>
- <table class="download">
- <tr>
- <th>Platform</th>
- <th>Package</th>
- <th>Size</th>
- <th>MD5 Checksum</th>
- </tr>
- <tr>
- <td rowspan="2">Windows<br>32 & 64-bit</td>
- <td>
- <a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
-?>"><?cs var:sdk.win_download ?></a>
- </td>
- <td><?cs var:sdk.win_bytes ?> bytes</td>
- <td><?cs var:sdk.win_checksum ?></td>
- </tr>
- <tr>
- <!-- blank TD from Windows rowspan -->
+ <td rowspan="2">Windows</td>
<td>
<a onclick="return onDownload(this)" id="win-tools" href="http://dl.google.com/android/<?cs
var:sdk.win_installer
@@ -370,7 +292,16 @@
<td><?cs var:sdk.win_installer_checksum ?></td>
</tr>
<tr>
- <td><nobr>Mac OS X</nobr><br>32 & 64-bit</td>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
+?>"><?cs var:sdk.win_download ?></a>
+ </td>
+ <td><?cs var:sdk.win_bytes ?> bytes</td>
+ <td><?cs var:sdk.win_checksum ?></td>
+ </tr>
+ <tr>
+ <td><nobr>Mac OS X</nobr></td>
<td>
<a onclick="return onDownload(this)" id="mac-tools" href="http://dl.google.com/android/<?cs
var:sdk.mac_download
@@ -380,7 +311,7 @@
<td><?cs var:sdk.mac_checksum ?></td>
</tr>
<tr>
- <td>Linux<br>32 & 64-bit</td>
+ <td>Linux</td>
<td>
<a onclick="return onDownload(this)" id="linux-tools" href="http://dl.google.com/android/<?cs
var:sdk.linux_download
@@ -391,6 +322,79 @@
</tr>
</table>
+
+
+<h3>All Android Studio Packages</h3>
+
+<p>Select a specific Android Studio package for your platform. Also see the
+<a href="<?cs var:toroot ?>tools/revisions/studio.html">Android Studio release notes</a>.</p>
+
+ <table class="download">
+ <tr>
+ <th>Platform</th>
+ <th>Package</th>
+ <th>Size</th>
+ <th>SHA-1 Checksum</th>
+ </tr>
+
+ <tr>
+ <td rowspan="3">Windows</td>
+ <td>
+ <a onclick="return onDownload(this)" id="win-bundle"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_exe_download ?>"
+ ><?cs var:studio.win_bundle_exe_download ?></a><br>(Recommended)
+ </td>
+ <td><?cs var:studio.win_bundle_exe_bytes ?> bytes</td>
+ <td><?cs var:studio.win_bundle_exe_checksum ?></td>
+ </tr>
+
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_notools_exe_download ?>"
+ ><?cs var:studio.win_notools_exe_download ?></a><br>(No SDK tools included)
+ </td>
+ <td><?cs var:studio.win_notools_exe_bytes ?> bytes</td>
+ <td><?cs var:studio.win_notools_exe_checksum ?></td>
+ </tr>
+
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)"
+ href="https://dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_download ?>"
+ ><?cs var:studio.win_bundle_download ?></a>
+ </td>
+ <td><?cs var:studio.win_bundle_bytes ?> bytes</td>
+ <td><?cs var:studio.win_bundle_checksum ?></td>
+ </tr>
+
+ <tr>
+ <td><nobr>Mac OS X</nobr></td>
+ <td>
+ <a onclick="return onDownload(this)" id="mac-bundle"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.mac_bundle_download ?>"
+ ><?cs var:studio.mac_bundle_download ?></a>
+ </td>
+ <td><?cs var:studio.mac_bundle_bytes ?> bytes</td>
+ <td><?cs var:studio.mac_bundle_checksum ?></td>
+ </tr>
+
+ <tr>
+ <td>Linux</td>
+ <td>
+ <a onclick="return onDownload(this)" id="linux-bundle"
+ href="https://dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.linux_bundle_download ?>"
+ ><?cs var:studio.linux_bundle_download ?></a>
+ </td>
+ <td><?cs var:studio.linux_bundle_bytes ?> bytes</td>
+ <td><?cs var:studio.linux_bundle_checksum ?></td>
+ </tr>
+ </table>
+
+
+
</div><!-- end pax -->
@@ -411,7 +415,9 @@
var bundlename;
var $toolslink;
- if (navigator.appVersion.indexOf("Win")!=-1) {
+ if (navigator.appVersion.indexOf("Mobile")!=-1) {
+ // Do nothing for any "mobile" user agent
+ } else if (navigator.appVersion.indexOf("Win")!=-1) {
os = "Windows";
bundlename = '#win-bundle';
$toolslink = $('#win-tools');
@@ -419,26 +425,18 @@
os = "Mac";
bundlename = '#mac-bundle';
$toolslink = $('#mac-tools');
- } else if (navigator.appVersion.indexOf("Linux")!=-1) {
+ } else if (navigator.appVersion.indexOf("Linux")!=-1 && navigator.appVersion.indexOf("Android")==-1) {
os = "Linux";
bundlename = '#linux-bundle';
$toolslink = $('#linux-tools');
}
- if (os) {
+ if (os != undefined) {
$('#not-supported').hide();
- /* set up primary adt download button */
- $('#download-bundle-button').show();
- $('#download-bundle-button').append("Download the SDK <br/><span class='small'>ADT Bundle for " + os + "</span>");
- $('#download-bundle-button').click(function() {return onDownload(this,true,true);}).attr('href', bundlename);
-
- /* set up sdk tools only button */
- $('#download-tools-button').show();
- $('#download-tools-button').append("Download the SDK Tools for " + os);
- $('#download-tools-button').click(function() {return onDownload(this,true);}).attr('href', $toolslink.attr('href'));
- } else {
- $('.pax').show();
+ /* set up primary Android Studio download button */
+ $('.download-bundle-button').append(" <br/><span class='small'>for " + os + "</span>");
+ $('.download-bundle-button').click(function() {return onDownload(this,true,true);}).attr('href', bundlename);
}
@@ -451,44 +449,29 @@
$("#downloadForRealz").html("Download " + $(link).text());
}
- /* if it's a bundle, show the 32/64-bit picker */
- if (bundle) {
- $("#downloadForRealz").attr('bundle','true');
- if ($("#downloadForRealz").text().indexOf("Mac") == -1) {
- $("p#bitpicker").show();
- } else {
- /* mac is always 64 bit, so set it checked */
- $("p#bitpicker input[value=64]").attr('checked', true);
- }
- /* save link name until the bit version is chosen */
- $("#downloadForRealz").attr('name',$(link).attr('href'));
- } else {
- /* if not using bundle, set download button to ignore bitpicker and set url */
- $("#downloadForRealz").attr('bundle','false');
- $("#downloadForRealz").attr('href',$(link).attr('href'));
- /* set picker checked as a fake default */
- $("p#bitpicker input[value=64]").attr('checked', true);
- $("a#next-link").html("Setting Up an Existing IDE").attr('href',toRoot + 'sdk/installing/index.html');
- }
+ $("#downloadForRealz").attr('bundle', bundle);
+ $("a#downloadForRealz").attr("name", $(link).attr('href'));
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
+ $("#tos").show();
+ $("#landing").hide();
- location.hash = "download";
+ location.hash = "top";
return false;
}
function onAgreeChecked() {
- /* verify that the TOS is agreed and a bit version is chosen */
- if ($("input#agree").is(":checked") && $("#bitpicker input:checked").length) {
+ /* verify that the TOS is agreed */
+ if ($("input#agree").is(":checked")) {
/* if downloading the bundle */
if ($("#downloadForRealz").attr('bundle')) {
- /* construct the name of the link we want based on the bit version */
- linkId = $("a#downloadForRealz").attr("name") + $("#bitpicker input:checked").val();
+ /* construct the name of the link we want */
+ linkId = $("a#downloadForRealz").attr("name");
/* set the real url for download */
$("a#downloadForRealz").attr("href", $(linkId).attr("href"));
+ } else {
+ $("a#downloadForRealz").attr("href", $("a#downloadForRealz").attr("name"));
}
/* reveal the download button */
@@ -499,16 +482,28 @@
}
function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked') && $("#bitpicker input:checked").length) {
+ if ($("input#agree").is(':checked')) {
+ location.hash = "";
+ location.hash = "top";
$("div.sdk-terms").slideUp();
- $("#sdk-terms-form,.sdk-terms-intro").fadeOut('slow');
- $("#next-steps").fadeIn('slow');
- $("h1#tos-header").text('Get Ready to Code!');
- _gaq.push(['_trackEvent', 'SDK', 'ADT and Tools', $("#downloadForRealz").html()]);
+ $("h1#tos-header").text('Now downloading...');
+ $(".sdk-terms-intro").text('You\'ll be redirected to the install instructions in a moment.');
+ $("#sdk-terms-form").fadeOut('slow', function() {
+ setTimeout(function() {
+ if ($("#downloadForRealz").attr('bundle') == 'true') {
+ // User downloaded the studio Bundle
+ window.location = "/sdk/installing/index.html?pkg=studio";
+ } else {
+ // User downloaded the SDK Tools
+ window.location = "/sdk/installing/index.html?pkg=tools";
+ }
+ }, 3000);
+ });
+ ga('send', 'event', 'SDK', 'IDE and Tools', $("#downloadForRealz").html());
return true;
} else {
- $("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#258AAF"}, 200,
- function() {$("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#222"}, 200)}
+ $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
+ function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
);
return false;
}
diff --git a/tools/droiddoc/templates-sdk-dyn/timestamp.cs b/tools/droiddoc/templates-ndk/timestamp.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/timestamp.cs
copy to tools/droiddoc/templates-ndk/timestamp.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/trailer.cs b/tools/droiddoc/templates-ndk/trailer.cs
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/trailer.cs
copy to tools/droiddoc/templates-ndk/trailer.cs
diff --git a/tools/droiddoc/templates-pdk/assets/images/android_logo.png b/tools/droiddoc/templates-pdk/assets/images/android_logo.png
new file mode 100644
index 0000000..4040f3f
--- /dev/null
+++ b/tools/droiddoc/templates-pdk/assets/images/android_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-pdk/components/masthead.cs b/tools/droiddoc/templates-pdk/components/masthead.cs
index 05437f3..874c11c 100644
--- a/tools/droiddoc/templates-pdk/components/masthead.cs
+++ b/tools/droiddoc/templates-pdk/components/masthead.cs
@@ -1,10 +1,9 @@
-<?cs
+<?cs
def:custom_masthead() ?>
<div id="header">
<div id="headerLeft">
<a href="<?cs var:toroot ?>guide/index.html"><img
- src="<?cs var:toroot ?>assets/images/android-partner-logo.png" alt="Android Platform Development Kit" /></a>
-
+ src="<?cs var:toroot ?>assets/images/android_logo.png" alt="Android Platform Development Kit" /></a>
</div>
<div id="headerRight">
<div id="headerLinks">
diff --git a/tools/droiddoc/templates-sac/assets/css/default.css b/tools/droiddoc/templates-sac/assets/css/default.css
index c1a0c19..ca998f1 100644
--- a/tools/droiddoc/templates-sac/assets/css/default.css
+++ b/tools/droiddoc/templates-sac/assets/css/default.css
@@ -1093,8 +1093,12 @@
li {
margin:0 0 5px;
}
+dt {
+ font-weight:bold;
+}
dd {
margin:0 0 10px 30px;
+ padding: 5px;
}
dd p,
dd pre,
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/GPL-LICENSE.txt b/tools/droiddoc/templates-sdk-dev/assets/GPL-LICENSE.txt
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/GPL-LICENSE.txt
rename to tools/droiddoc/templates-sdk-dev/assets/GPL-LICENSE.txt
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/LICENSE.txt b/tools/droiddoc/templates-sdk-dev/assets/LICENSE.txt
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/LICENSE.txt
rename to tools/droiddoc/templates-sdk-dev/assets/LICENSE.txt
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/android-developer-docs.css b/tools/droiddoc/templates-sdk-dev/assets/android-developer-docs.css
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/android-developer-docs.css
rename to tools/droiddoc/templates-sdk-dev/assets/android-developer-docs.css
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/css/default.css b/tools/droiddoc/templates-sdk-dev/assets/css/default.css
similarity index 84%
rename from tools/droiddoc/templates-sdk-dyn/assets/css/default.css
rename to tools/droiddoc/templates-sdk-dev/assets/css/default.css
index e26aec6..cc4dce7 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk-dev/assets/css/default.css
@@ -158,12 +158,6 @@
.layout-content-row {
display: inline-block;
margin-bottom: 10px; }
- .layout-content-row:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden; }
* html .layout-content-row {
height: 1px; }
@@ -430,20 +424,19 @@
/* content header */
.content-header {
height: 30px;
- margin:20px 0 25px;
- padding:0 0 10px;}
+ margin:36px 0 23px; /* same as h1 */
+ padding:0 0 10px;} /* same as h1 */
.content-header.just-links {
margin-bottom:0;
padding-bottom:0;}
.content-header h1 {
- color:#000;
margin:0;
- border-bottom:0;
padding:0;
+ width: 700px;
}
.content-header > div:first-child {
- height:55px; /* set fixed height for the header div to ensure the
+ height:1px; /* set fixed height for the header div to ensure the
next/prev links align with toc on training classes */
}
@@ -451,7 +444,7 @@
border-top: 1px solid #ccc;
margin-top: 10px;
padding-top:10px;
- height: 30px; }
+ width:100%; }
.content-footer .col-9 {
margin-left:0;
@@ -462,20 +455,33 @@
.content-footer.wrap {
width:940px;
}
+.content-footer .plus-container {
+ margin:5px 0 0;
+ text-align:right;
+ float:right;
+}
+a.back-link {
+ text-decoration: none;
+ text-transform: uppercase;
+}
+
+.content-header .paging-links {
+ margin-top:-25px;
+}
.paging-links {
- position: relative; }
+ position: relative;
+ height:30px; }
.paging-links a {
position: absolute; }
.paging-links a,
.training-nav-top a {
- font-size: 14px;
- line-height: 30px;
color: #555555;
text-decoration: none;
text-transform: uppercase; }
.paging-links .prev-page-link:before,
- .training-nav-top .prev-page-link:before {
+ .training-nav-top .prev-page-link:before,
+ a.back-link:before {
content: '';
background: transparent url(../images/styles/disclosure_left.png) no-repeat scroll 50% 50%;
width: 10px;
@@ -489,7 +495,7 @@
.paging-links .prev-page-link {
left: -15px; }
.paging-links .next-page-link {
- right: 0px; }
+ right: 0; }
.next-page-link:after,
.start-class-link:after,
.start-course-link:after,
@@ -506,6 +512,9 @@
.next-page-link.inline:after {
content: none; }
+ .content-footer .paging-links .next-page-link {
+ left:0;
+ }
.training-nav-top a {
display:block;
@@ -544,7 +553,6 @@
.paging-links a.start-class-link {
width:100%;
- text-align:right;
}
/* list of classes on course landing page */
@@ -623,19 +631,6 @@
display:none !important;
}
- .content-footer.next-class {
- display:block;
- border:0;
- margin-top:0;
- padding-top:0;
- }
-
- .content-footer.next-class a.next-class-link {
- display:block;
- float:right;
- text-transform:uppercase;
- }
-
/* inner-doc tabs w/ title */
@@ -713,6 +708,7 @@
color: #33b5e5;
border-bottom-color: #33b5e5; } }
+h1:target,
h2:target,
h3:target {
-webkit-animation-name: glowheader;
@@ -894,7 +890,7 @@
.framed-nexus4-port-216 img {
width: 216px;
height: 360px; }
-
+
.framed-nexus5-port-span-5 {
background: transparent url(../images/styles/device_nexus5_blank_port_span5.png) no-repeat
scroll top left;
@@ -929,6 +925,47 @@
height: 384px;
}
+/* wear device frames */
+
+.framed-wear-square {
+ background: transparent url(../images/styles/device_wear_square.png) no-repeat scroll top left;
+ background-size: 302px 302px;
+ height:222px;
+ width:222px;
+ padding:40px;
+ overflow:hidden;
+}
+
+.framed-wear-square-small {
+ background: transparent url(../images/styles/device_wear_square_small.png) no-repeat scroll top left;
+ background-size: 169px 200px;
+ height:147px;
+ width:147px;
+ padding:27px 11px;
+ overflow:hidden;
+}
+
+#jd-content
+.framed-wear-square img {
+ height:222px;
+ width: 222px;
+ padding:0;
+ margin:0;
+}
+
+#jd-content
+.framed-wear-square-small img {
+ height:147px;
+ width: 147px;
+ padding:0;
+ margin:0;
+}
+
+
+
+
+
+
/* landing page disclosures */
.landing-page-link {
text-decoration: none;
@@ -1102,12 +1139,13 @@
}
h1 {
color:#333;
- font-size: 22px;
- margin: 20px 0 20px;
+ font-size: 34px;
+ margin: 36px 0 27px;
padding:0 0 10px;
+ font-weight:300;
}
h1, h2 {
- line-height: 32px;
+ line-height: 30px;
}
h1.short {
margin-right:320px;
@@ -1120,21 +1158,24 @@
}
h2 {
color:#333;
- font-size: 20px;
- margin: 20px 0 20px;
+ font-size: 26px;
+ margin: 32px 0 20px;
padding:0;
+ font-weight:300;
}
h3 {
color:#333;
- font-size: 18px;
+ font-size: 21px;
+ font-weight:400;
+ margin:21px 0 14px 0;
}
h3, h4 {
- color:#333;
- line-height: 20px;
- margin: 10px 0;
+ line-height: 21px;
}
h4 {
- font-size: 16px;
+ font-size: 18px;
+ margin: 12px 0;
+ font-weight:500;
}
h5 {
font-size: 14px;
@@ -1147,7 +1188,7 @@
}
hr { /* applied to the bottom of h2 elements */
height: 1px;
- margin: 5px 0 20px;
+ margin: 3px 0 12px;
border: 0;
background: #ccc;
}
@@ -1208,7 +1249,7 @@
legend {
display: none;
}
-a:link, a:visited {
+a:link, a:visited, .link-color {
color: #258aaf;
text-decoration: none;
}
@@ -1216,6 +1257,13 @@
color: #33B5E5;
text-decoration: none;
}
+a.white {
+ color: #fff;
+ text-decoration:underline;
+}
+a.white:hover, a.white:active {
+ color: #ccc !important;
+}
strong, b {
font-weight:bold;
color: #222;
@@ -1249,6 +1297,7 @@
tr:first-of-type th:first-of-type:empty {
visibility: hidden;
}
+
/* --------------------------------------------------------------------------
Footer
*/
@@ -1523,6 +1572,9 @@
color: #333;
font-size: 16px;
}
+.about a.selected {
+ color: #9933CC;
+}
.design a.selected {
color: #33b5e5;
}
@@ -1834,6 +1886,11 @@
margin:0 0 0 20px;
}
+.training-nav-top {
+ position:relative;
+ top:73px;
+}
+
.training-nav-bottom {
padding:0 0 20px;
}
@@ -1842,12 +1899,12 @@
#qv-wrapper {
float:right;
clear:right;
- margin:0 0 0 30px; /* negative top-margin to counter the content-header bottom margin */
+ margin:6px 0 0 30px; /* negative top-margin to counter the content-header bottom margin */
padding:0 0 30px;
}
#tb-wrapper {
- margin:-29px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
+ margin:51px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
}
#tb,
@@ -1931,6 +1988,10 @@
margin:0 15px 10px 35px;
}
+#tb p {
+ margin:0 15px 10px;
+}
+
#qv ol {
list-style:none;
margin:0 15px 15px;
@@ -1959,28 +2020,12 @@
/* related resources blocks in checklists */
-.rel-resources {
- margin:10px 0px;
- border:1px solid #ccc;
- background-color:rgba(0, 0, 0, 0.027451);
- border:1px solid #ccc;
- font-size:13px;
- color:#6f6f6f;
-}
+/* related resources sections that have dynamic content */
-.rel-resources ul {
-padding: .5em 1em 0 1em;
-}
-.rel-resources a {
-font-weight:500;
-}
-.rel-resources h3 {
- margin:4px 15px 0px 15px;
- font-size:13px;
- font-weight:600;
- text-transform:uppercase;
+h3.rel-resources {
+margin:1.25em auto;
}
/* --------------------------------------------------------------------------
@@ -2360,6 +2405,13 @@
#doc-col {
margin-right:0;
}
+
+/* Uncomment this for preview release watermark
+#doc-col {
+ background: url('../images/preview.png') repeat;
+}
+*/
+
#doc-content-container {
margin-left: 291px
}
@@ -2725,19 +2777,22 @@
width:100%;
}
#butterbar {
- width:940px;
+ width:100%;
margin:0 auto;
}
#butterbar-message {
- background-color:#f80;
- float:right;
- font-size:12px;
- font-weight:bold;
- padding:0 10px;
- border-radius: 0 0 5px 5px;
+ background-color:rgba(255, 187, 51, .4);
+ font-size:13px;
+ padding: 5px 0;
+ text-align:center;
}
-#butterbar-message a {color:#fff !important}
-#butterbar-message a:hover {text-decoration:underline;}
+a#butterbar-message {
+ cursor:pointer;
+ display:block;
+}
+a#butterbar-message:hover {
+ text-decoration:underline;
+}
/* --------------------------------------------------------------------------
Misc
@@ -2761,7 +2816,7 @@
.caption {
margin: 0.5em 0 2em 0;
color: #000;
- font-size: 11.5px;
+ font-size: 11.5px;
}
.nolist, .nolist ul, .nolist ol {
@@ -2910,7 +2965,8 @@
a.notice-developers-video,
a.notice-developers,
a.notice-designers-video,
-a.notice-designers {
+a.notice-designers,
+a.notice-designers-material {
float:right;
clear:right;
width:238px;
@@ -2921,13 +2977,15 @@
a.notice-developers-video.wide,
a.notice-developers.wide,
a.notice-designers-video.wide,
-a.notice-designers.wide {
+a.notice-designers.wide,
+a.notice-designers-material.wide {
width:278px;
}
a.notice-developers-video div,
a.notice-developers div,
a.notice-designers-video div,
-a.notice-designers div {
+a.notice-designers div,
+a.notice-designers-material div {
min-height:40px;
background:url('../images/styles/notice-developers@2x.png') no-repeat 10px 10px;
background-size:40px 40px;
@@ -2945,16 +3003,22 @@
background:url('../images/styles/notice-developers-video@2x.png') no-repeat 10px 10px;
background-size:40px 40px;
}
+a.notice-designers-material div {
+ background:url('../images/styles/notice-designers-material@2x.png') no-repeat 10px 10px;
+ background-size:40px 40px;
+}
a.notice-developers-video:hover,
a.notice-developers:hover,
a.notice-designers-video:hover,
-a.notice-designers:hover {
+a.notice-designers:hover,
+a.notice-designers-material:hover {
background:#eee;
}
a.notice-developers-video h3,
a.notice-developers h3,
a.notice-designers-video h3,
-a.notice-designers h3 {
+a.notice-designers h3,
+a.notice-designers-material h3 {
font-size:13px;
line-height:18px;
font-weight:bold;
@@ -2965,14 +3029,16 @@
a.notice-developers-video p,
a.notice-developers p,
a.notice-designers-video p,
-a.notice-designers p {
+a.notice-designers p,
+a.notice-designers-material p {
margin:0;
line-height:14px;
}
a.notice-developers-video.left,
a.notice-developers.left,
a.notice-designers-video.left,
-a.notice-designers.left {
+a.notice-designers.left,
+a.notice-designers-material.left {
margin-left:0;
float:left;
}
@@ -2994,6 +3060,34 @@
}
+/* for IDE instruction toggle (Studio/Eclipse/Other) */
+select.ide {
+ background: transparent;
+ border: 1px solid #bbb;
+ border-left: 0;
+ border-right: 0;
+ margin: 10px 0;
+ padding: 10px 0;
+ color:#666;
+}
+select.ide,
+select.ide option {
+ font-family: inherit;
+ font-size:16px;
+ font-weight:500;
+}
+/* hide all except studio by default */
+.select-ide.eclipse,
+.select-ide.other {
+ display:none;
+}
+/* ... unless studio also includes one of the others */
+.select-ide.studio.eclipse,
+.select-ide.studio.other {
+ display:none;
+}
+
+
/* -----------------------------------------------
good/bad example containers
*/
@@ -3072,6 +3166,7 @@
-webkit-box-shadow:-5px 5px 10px #ccc;
}
+div#langMessage,
div#naMessage {
display:none;
width:555px;
@@ -3079,6 +3174,8 @@
margin:0 auto;
}
+
+div#langMessage>div,
div#naMessage div {
z-index:99;
width:450px;
@@ -3092,12 +3189,16 @@
-webkit-box-shadow:-10px 10px 40px #888;
}
/* IE6 can't position fixed */
+* html div#langMessage>div,
* html div#naMessage div { position:absolute; }
div#naMessage strong {
font-size:1.1em;
}
+div#langMessage .lang {
+ display:none;
+}
/* --------------------------------------------------------------------------
Slideshow Controls & Next/Prev
@@ -3346,28 +3447,37 @@
}
#jd-header {
- padding: 0 0 5px;
- margin: 20px 0 10px;
- font-size:13px;
+ padding: 0 0 12px;
+ margin: 20px 0 12px;
+ font-size:12px;
+ padding-bottom:12px;
border-bottom:solid 1px #ccc;
}
#jd-header h1 {
margin:0;
- padding:0;
+ padding:0 0 6px 0;
}
+/* not sure if this is needed in the ref docs, disabling for now
+.jd-descr h2 {
+ margin:16px 0;
+}
+*/
+
/* page-top-right container for reference pages (holds
links to summary tables) */
#api-info-block {
- font-size:13px;
+ font-size:12px;
margin:20px 0 0;
padding:0 10px 6px;
font-weight:normal;
float:right;
text-align:right;
color:#999;
- max-width:70%;
+ max-width:80%;
+ font-size: 12px;
+ line-height:14px;
}
#api-info-block div.api-level {
@@ -3384,7 +3494,8 @@
border-spacing:0;
margin:0;
padding:0;
- font-size:13px;
+ font-size:12px;
+ line-height:14px;
background-color:transparent;
}
.jd-inheritance-table tr td {
@@ -3966,7 +4077,7 @@
height: 38px;
}
#header-wrapper #nav-x ul.nav-x li {
- margin-right: 36px !important;
+ margin-right: 31px !important;
margin-top: 5px;
margin-bottom: 0px;
height: 30px;
@@ -4093,6 +4204,7 @@
width: 26px;
height: 25px;
background: url(../images/dac_logo.png);
+ background-image: -webkit-image-set(url(../images/dac_logo.png) 1x, url(../images/dac_logo@2x.png) 2x);
z-index: 52;
position: relative;
}
@@ -4115,6 +4227,15 @@
z-index: 52;
}
+/* offset the <a name=""> tags to account for sticky nav */
+body.reference a[name],
+div.renderscript a[name] {
+ visibility: hidden;
+ display: block;
+ position: relative;
+ top: -56px;
+}
+
}
@@ -4168,13 +4289,13 @@
}
-#header-wrap .logo.wear-logo {
+#header-wrap .logo.landing-logo {
width:220px;
margin:0;
padding:0;
margin-bottom:22px;
}
-#header-wrap .logo.wear-logo img {
+#header-wrap .logo.landing-logo img {
padding:0 0 0 10px;
}
@@ -4246,7 +4367,7 @@
#quicknav {
float:none;
clear:both;
- margin-left:180px;
+ margin-left:0;
margin-top:-30px;
display:none;
overflow:hidden;
@@ -4261,6 +4382,10 @@
padding:0;
}
+#quicknav ul li.about {
+ border-top:1px solid #9933CC;
+}
+
#quicknav ul li.design {
border-top:1px solid #33b5e5;
}
@@ -4311,7 +4436,7 @@
}
#header-wrap.quicknav {
- height:196px;
+ height:216px;
}
@@ -4590,7 +4715,9 @@
}
-
+#landing h1 {
+ margin:17px 0 20px 0 !important;
+}
a.download-sdk {
float:right;
@@ -4761,14 +4888,14 @@
/* Slideshow */
.slideshow-develop {
- height: 300px;
+ height: 316px;
width: 940px;
position: relative;
overflow:hidden;
}
.slideshow-develop .frame {
width: 940px;
- height: 300px;
+ height: 316px;
}
.slideshow-develop img.play {
max-width:350px;
@@ -4800,6 +4927,7 @@
padding:0;
margin-bottom:10px;
border:none;
+ font-size:24px;
}
.slideshow-develop .item {
height: 300px;
@@ -4972,7 +5100,8 @@
margin-bottom:0;
}
.landing-banner h1 {
- margin-top:0;
+ margin-top:16px;
+ padding-bottom:24px;
}
.landing-docs,
.landing-banner {
@@ -5127,22 +5256,6 @@
/************ DISTRIBUTE PAGES ******************/
-/* Article page header line fix */
-.headerLine {
- overflow: hidden;
-}
-.headerLine h1 {
- float: left;
- padding-right: 20px;
- margin-bottom: 0px;
- font-size: 20px;
- color: #363636;
-}
-.headerLine hr {
- overflow: hidden;
- margin: 42px 0 0 0;
-}
-
.article-detail #body-content {
padding-top: 10px;
}
@@ -5155,7 +5268,7 @@
text-transform:uppercase;
border-bottom:1px solid #CCC;
padding:8px 0 0 1px;
- margin-bottom:10px;
+ margin-bottom:14px;
clear:both;
}
@@ -5191,7 +5304,7 @@
/* Basic card-styling with shadow */
.resource-card {
border-radius: 1px;
- box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.14);
+ box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.12);
background: #fefefe;
}
@@ -5220,6 +5333,9 @@
-o-transition: opacity 0.5s;
transition: opacity 0.5s;
}
+.static .card-bg:after {
+ display:none;
+}
.card-bg .card-section-icon {
position: absolute;
top: 50%;
@@ -5366,18 +5482,21 @@
content: ".";
display: block;
height: 0;
+ position:relative;
clear: both;
visibility: hidden;
}
-
.resource-card:hover {
cursor: pointer;
}
+.static .resource-card:hover {
+ cursor: auto;
+}
.resource-card:hover .card-bg:after {
opacity: 0;
}
/* disabled to make way for fade/ellipsis truncation,
- and the plusone moves up.
+ and the plusone moves up.
.resource-card:hover .card-info .description .text {
padding-right: 70px;
} */
@@ -6289,6 +6408,17 @@
display: none;
}
+
+/* Override to show the description instead of the content section */
+.no-section .resource-card-3x2 > .card-info .section,
+.no-section .resource-card-6x2 > .card-info .section {
+ display: none;
+}
+.no-section .resource-card-3x2 > .card-info .description,
+.no-section .resource-card-6x2 > .card-info .description {
+ display: block;
+}
+
/* 1/2 row items */
.resource-card-3x3 > .card-bg, .resource-card-6x3 > .card-bg, .resource-card-9x3 > .card-bg, .resource-card-12x3 > .card-bg, .resource-card-15x3 > .card-bg, .resource-card-18x3 > .card-bg {
left: 0;
@@ -6383,4 +6513,940 @@
div.jd-descr > .resource-widget[data-section=distribute\/tools]
.section-card-menu .card-info ul li {
border-top-color: #7e3794 !important;
-}
\ No newline at end of file
+}
+
+
+
+/**
+ * UTILITIES
+ */
+
+
+.border-box {
+ box-sizing: border-box;
+}
+
+.vertical-center-outer {
+ display: table;
+ height: 100%;
+ width: 100%;
+}
+
+.vertical-center-inner {
+ display: table-cell;
+ vertical-align: middle;
+}
+
+/**
+ * TYPE STYLES
+ */
+
+.landing-h1 {
+ font-weight: 100;
+ font-size: 60px;
+ line-height: 78px;
+ text-align: center;
+ letter-spacing: -1px;
+}
+
+.landing-pre-h1 {
+ font-weight: 400;
+ font-size: 28px;
+ color: #93B73F;
+ line-height: 36px;
+ text-align: center;
+ letter-spacing: -1px;
+ text-transform: uppercase;
+
+}
+
+.landing-h1.hero {
+ text-align: left;
+}
+
+.landing-h2 {
+ font-weight: 300;
+ font-size: 42px;
+ line-height: 64px;
+ text-align: center;
+}
+
+.landing-subhead {
+ color: #999999;
+ font-size: 20px;
+ line-height: 28px;
+ font-weight:300;
+ text-align: center;
+}
+.landing-subhead.hero {
+ text-align: left;
+ color: white;
+}
+
+.landing-hero-description {
+ text-align: left;
+ margin: 1em 0;
+}
+
+.landing-hero-description p {
+ font-weight: 300;
+ margin: 0;
+ font-size: 18px;
+ line-height: 24px;
+}
+
+.landing-body .landing-small {
+ font-size: 14px;
+ line-height: 19px;
+}
+
+.landing-body.landing-align-center {
+ text-align: center;
+}
+
+.landing-align-left {
+ text-align: left;
+}
+
+/**
+ * LAYOUT
+ */
+
+#body-content,
+.fullpage,
+#jd-content,
+.jd-descr,
+.landing-body-content {
+ height: 100%;
+}
+
+.landing-section {
+ padding: 80px 10px 80px;
+ width: 100%;
+ margin-left: -10px;
+ text-rendering: optimizeLegibility;
+}
+
+#extending-android-to-wearables {
+ padding-top: 30px;
+}
+
+.landing-short-section {
+ padding: 40px 10px 28px;
+}
+
+.landing-gray-background {
+ background-color: #e9e9e9;
+}
+
+.landing-white-background {
+ background-color: white;
+}
+
+.landing-red-background {
+ color: white;
+ background-color: hsl(8, 70%, 54%);
+}
+
+.landing-subhead-red {
+ color: hsl(8, 71%, 84%);
+ text-align: left;
+}
+
+.landing-subhead-red p {
+ margin-top: 20px;
+}
+
+.landing-hero-container {
+ height: 100%;
+}
+
+
+.preview-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../preview/images/hero.jpg);
+ background-size: cover;
+ background-position: right center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.wear-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../wear/images/hero.jpg);
+ background-size: cover;
+ background-position: top center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.tv-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../tv/images/hero.jpg);
+ background-size: cover;
+ background-position: right center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.auto-hero {
+ height: calc(100% - 110px);
+ min-height: 504px;
+ margin-top: -5px;
+ padding-top: 0;
+ padding-bottom: 0;
+ background-image: url(../../auto/images/hero.jpg);
+ background-size: cover;
+ background-position: right center;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.landing-hero-scrim {
+ background: black;
+ opacity: .2;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ margin-left: -10px;
+}
+
+.landing-hero-wrap {
+ margin: 0 auto;
+ width: 940px;
+ clear: both;
+ height: 100%;
+ position: relative;
+}
+
+.landing-section-header {
+ margin-bottom: 40px;
+}
+
+.landing-hero-wrap .landing-section-header {
+ margin-bottom: 16px;
+}
+
+.landing-body {
+ font-size: 18px;
+ line-height: 24px;
+}
+
+.landing-button {
+ white-space: nowrap;
+ display: inline-block;
+ padding: 16px 32px;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ cursor: pointer;
+ color: white;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+ -webkit-transition: .2s background-color ease-in-out;
+ -moz-transition: .2s background-color ease-in-out;
+ -o-transition: .2s background-color ease-in-out;
+ transition: .2s background-color ease-in-out;
+}
+
+.landing-primary {
+ background-color: hsl(8, 70%, 44%);
+ color: #f8f8f8;
+}
+
+.landing-button.landing-primary:hover {
+ background-color: hsl(8, 70%, 36%);
+}
+
+.landing-button.landing-primary:active {
+ background-color: hsl(8, 70%, 30%);
+}
+
+.landing-button.landing-secondary {
+ background-color: #2faddb;
+}
+
+.landing-button.landing-secondary:hover {
+ background-color: #09c;
+}
+
+.landing-button.landing-secondary:active {
+ background-color: #3990ab;
+}
+
+a.landing-button,
+a.landing-button:hover,
+a.landing-button:visited {
+ color: white !important;
+}
+
+.landing-video-link {
+ white-space: nowrap;
+ display: inline-block;
+ padding: 16px 32px 16px 82px;
+ font-size: 18px;
+ font-weight: 400;
+ line-height: 24px;
+ cursor: pointer;
+ color: hsla(0, 0%, 100%, .8);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+ -webkit-transition: .2s color ease-in-out;
+ -moz-transition: .2s color ease-in-out;
+ -o-transition: .2s color ease-in-out;
+ transition: .2s color ease-in-out;
+}
+
+.landing-video-link:before {
+ height: 64px;
+ width: 64px;
+ display: inline-block;
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAFuklEQVR42u2dXWgcVRSAV9LWtBBTTZVWUhNqEQtq1QeroDRKFRFsROqTYPuo+JCiIoJKFC0USqlUfCiowRcfrBgVUUElefAPkW5T8aeaGn9aRbFsjP0x2cx8PuRMvFxmdjeb2Z17Z8+B85DsZPbO+eaec3/OPSkABdXsVI2gABSAqgJQAKoKQAGoKgAFoKoAFICqAlAAqgpAAai6DqDRAiwDeoFtwB7gPaAInABKwKToCWAMeB/YDdwJrAWWNLh9+QMAXABsBQ4A3wFTwAxQBmaBAAhjNJDPy3L938BXwAvArUCHAkh+kCXAVcA+YBw4bRg7MngtkgTlDPA98CywHmhTAP8/xCbgVeAvMZZpwDQllN7xB/AysKGlAQAXAvuBkzW85UVgCBgENlfQQbmuWAXELPAnsAvoaikAQBtwh/j3coLhS2LIfqCzzu/plL8fkvvFgZiR4L2lHrfkHQBgpQTFUwmGnwC212v0KjC2y/3jQPwDPA+05xYAcBHwubx1YZzhC02QBBBRbxgBzssdAOBy4JgRZE0ZTPuNr7FHDCbEhqNAd24AAN0yUbID7QSwsZChABut3hANXY8Bq70HIMb/Ocb4w81+66v0hmGrN0QQ1ngLQJYRvpWHMWWo4KDIaMnuCcVKgdlZAGL8t2J8vpPGrwChDLyWBMFlAA8D0z4ZvwKEs8D93gCQEc9Jy/jFgkdizaRDGUSs8wXAu1bQLQE9ngHosWbPAXDQeQAypT9rBd3+gociyxi2K9riLABZUj5iuZ6RgsciM2OzFxw2A7JrAO6VwGtKTwpG+Anoy9AVmb3gDHCPcwCAFcChRox6jPu9CazMeFQUAKNRL3AJwE2yopjq228BQPZ/d2bcCyaBTa4BeNGa8Q6naIA4GQWubiKEYWvBbp8zAGQt5VfL/fQ3GEAkTzXDLVkjokA2k5a7AuA2GaLNj/tTfvhq0pQgbcwLQtlQusYVALtlzSR191MjADNI9zbJDZWBR10BMGr5/4GMADQ0SAMDlht62xUAxy0AmzMEEMnhtIO0ZF2YAH5wITd0hQw/5wE04M1bjDyXZpC2hqMlYGnWAHqBf40APOEYgChI35VSWyasWfGqrAH0WVkOIw4CSC1IG2tDoSy7XJE1gPs8ArDoIG0BmJGk30wBDHgGYFFBOgbAtqwB7GxxAHerC8rOBU0Dt2gQzjYIb8gawDor+6HVhqFdrkzEwhabiAVOTMSkUb+06FLEUVfWgj5q0cW4g64AeNo66ZLlcnTDNmesBN4y8KArAG6QU42ttCEzBVzpCoAO4EfLDeV5SzIEvgHaXdqUP2BlQud1Ux55zj2uZUX02cPRnKalRLmu17qYmPWF5YbymJgVAh8Ay5wCII3ZEZOYm6fURGT2u9X43Mnk3CDHybmfmRVYXExPv9nKEcpLejqSC3SjdY2TBzTesHqB7wc0onTEV2KucxLApXKkJy9HlAI5anuJFwCkYQ/EuCJfD+mdBnYkXOssgHY53un7MdVZ4CVgqVcADAhjMafkfTioHc14P04yvvMApIEXy5F/+7S8y6UKolPyR4BVVf7Wi2IdawwIPhTrmAW+rmZ8bwBIQ7vloXwoVzNWS6UUrwAYy9YfOlqwKZDkgneA5Qu4l3cly84F9sqGhislywLmaozuYoGFXr0DII1ukxP1hxJ6QzR7HqLxRfumZaRzXZ3f4XXZyi7gCeB3kqsnzs+kSb9s5XHgMeD8RTxDLgq3rmeuYuFvNYCoR8wqujNi+L3UWBcu9wAMt3QZ8LiMlk5RuU50teq6kcEDgTolveIRYHUQBOek1O5cFu/ukLz7/ZJgNSm+OirebWpgaPS7slxfAr4EngGuX8jopqUBxGzyrAVuB54EXgc+lV4yLhO8cfn5E+ZqUD8kBu9sQvv0Hzj4rmoEBaAAVBWAAlBVAApAVQEoAFUFoABUFYACUFUACkC1CfofXVRJocowZVYAAAAASUVORK5CYII=);
+ background-size: contain;
+ position: absolute;
+ content: "";
+ opacity: .7;
+ margin-top: -19px;
+ margin-left: -64px;
+ -webkit-transition: .2s opacity ease-in-out;
+ -moz-transition: .2s opacity ease-in-out;
+ -o-transition: .2s opacity ease-in-out;
+ transition: .2s opacity ease-in-out;
+}
+
+.landing-video-link:hover {
+ color: hsla(0, 0%, 100%, 1);
+}
+
+.landing-video-link:hover:before {
+ opacity: 1;
+}
+
+.landing-social-image {
+ float: left;
+ margin-right: 14px;
+ height: 64px;
+ width: 64px;
+}
+
+.landing-social-copy {
+ padding-left: 78px;
+}
+
+.landing-scroll-down-affordance {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ text-align: center;
+ z-index: 10;
+}
+
+.landing-down-arrow {
+ padding: 24px;
+ display: inline-block;
+ opacity: .5;
+ -webkit-transition: .2s opacity ease-in-out;
+ -moz-transition: .2s opacity ease-in-out;
+ -o-transition: .2s opacity ease-in-out;
+ transition: .2s opacity ease-in-out;
+
+ -webkit-animation-name: pulse-opacity;
+ -webkit-animation-duration: 4s;
+}
+
+.landing-down-arrow:hover {
+ opacity: 1;
+}
+
+.landing-down-arrow img {
+ height: 28px;
+ width: 28px;
+ margin: 0 auto;
+ display: block;
+}
+
+.landing-divider {
+ display: inline-block;
+ height: 2px;
+ background-color: white;
+ position: relative;
+ margin: 10px 0;
+}
+
+/* 3 CLOLUMN LAYOUT */
+
+.landing-breakout {
+ margin-top: 40px;
+ margin-bottom: 40px;
+}
+
+.landing-breakout img {
+ margin-bottom: 20px;
+}
+
+.landing-partners img {
+ margin-bottom: 20px;
+}
+
+.landing-breakout p {
+ padding: 0 23px;
+}
+
+.landing-breakout.landing-partners img {
+ margin-bottom: 20px;
+}
+
+.col-3-wide {
+ display: inline;
+ float: left;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.col-3-wide {
+ width: 302px;
+}
+
+/**
+ * ANIMATION
+ */
+
+@-webkit-keyframes pulse-opacity {
+ 0% {
+ opacity: .5;
+ }
+ 20% {
+ opacity: .5;
+ }
+ 40% {
+ opacity: 1;
+ }
+ 60% {
+ opacity: .5;
+ }
+ 80% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: .5;
+ }
+}
+
+
+
+/**
+ * VIDEO
+ */
+
+#video-container {
+ display:none;
+ position:fixed;
+ top:0;
+ left:0;
+ width:100%;
+ height:100%;
+ background-color:rgba(0,0,0,0.8);
+ z-index:9999;
+}
+
+#video-frame {
+ width:940px;
+ height:100%;
+ margin:72px auto;
+ display:none;
+ position:relative;
+}
+
+.video-close {
+ cursor: pointer;
+ position: absolute;
+ right: -49px;
+ top: -49px;
+ pointer-events: all;
+}
+
+#icon-video-close {
+ background-image: url("../images/close-white.png");
+ background-image: -webkit-image-set(url(../images/close-white.png) 1x, url(../images/close-white_2x.png) 2x);
+ background-repeat: no-repeat;
+ background-position: 0 0;
+ background-size: 36px 36px;
+ height: 36px;
+ width: 36px;
+ display:block;
+}
+
+#icon-video-close:hover {
+ background-image: url("../images/close-grey.png");
+ background-image: -webkit-image-set(url(../images/close-grey.png) 1x, url(../images/close-grey_2x.png) 2x);
+}
+
+/* Preload the hover images */
+a.video-shadowbox-button.white:after {
+ display:none;
+ content:url("../images/close-grey.png") url("../images/close-grey_2x.png");
+}
+
+a.video-shadowbox-button.white {
+ background-image: url("../images/play-circle-white.png");
+ background-image: -webkit-image-set(url(../images/play-circle-white.png) 1x, url(../images/play-circle-white_2x.png) 2x);
+ background-size: 36px 36px;
+ background-repeat: no-repeat;
+ background-position: right;
+ padding: 16px 42px 16px 8px;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ color: #fff;
+ text-decoration:none;
+}
+
+a.video-shadowbox-button.white:hover {
+ color:#bababa !important;
+ background-image: url("../images/play-circle-grey.png");
+ background-image: -webkit-image-set(url(../images/play-circle-grey.png) 1x, url(../images/play-circle-grey_2x.png) 2x);
+}
+
+/* Preload the hover images */
+a.video-shadowbox-button.white:after {
+ display:none;
+ content:url("../images/play-circle-grey.png") url("../images/play-circle-grey_2x.png");
+}
+
+/******************
+Styles for d.a.c/index:
+*******************/
+
+
+
+/* Generic full screen carousel styling to be used across pages. */
+.fullscreen-carousel {
+ margin: 0 -10px;
+ width: 100%;
+ overflow: hidden;
+ position: relative;
+}
+
+.fullscreen-carousel-content {
+ width: 100%;
+ height: 100%;
+ position: relative;
+ display: table; /* For vertical centering */
+}
+
+.fullscreen-carousel .vcenter {
+ display: table-cell;
+ vertical-align: middle;
+ position: relative;
+}
+
+.fullscreen-carousel .vcenter > div {
+ margin: 10px auto;
+}
+
+/* Styles for the full-bleed hero image type. */
+.fullscreen-carousel .hero, .fullscreen-carousel .hero h1 {
+ color: #fff;
+}
+
+.fullscreen-carousel .hero h1 {
+ font-weight: 300;
+ font-size: 60px;
+ line-height: 68px;
+ letter-spacing: -1px;
+ margin-top: 0;
+}
+
+.fullscreen-carousel .hero p {
+ font-weight: 300;
+ font-size: 18px;
+ line-height: 24px;
+ -webkit-font-smoothing: antialiased;
+}
+
+.fullscreen-carousel .hero .hero-bg {
+ background-size: cover;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ left: 0px;
+ top: 0px;
+}
+
+
+/* Full screen carousel styling for the resource flow layout type of content */
+.fullscreen-carousel .resource-flow-layout:after {
+ height: 0; /* Dont know why this is set at 10 in default.css */
+}
+
+.fullscreen-carousel .resource-flow-layout {
+ margin-bottom: 20px;
+}
+
+
+
+/* Generic Tab carousel styling to be used across multiple pages. */
+
+.tab-carousel .tab-nav {
+ list-style: none;
+ position: relative;
+ text-align: center;
+}
+
+.tab-carousel .tab-nav li {
+ display: inline-block;
+ font-size: 22px;
+ font-weight: 400;
+ line-height: 50px;
+ list-style: none;
+ margin: 0;
+ padding: 0 25px;
+ position: relative;
+}
+
+.tab-carousel .tab-nav li a,
+.tab-carousel .tab-nav li a:hover {
+ color: #333 !important;
+ padding: 10px 10px 13px 10px;
+ position: relative;
+ z-index: 1000;
+}
+
+.tab-carousel .tab-nav li:after {
+ background: #ddd;
+ bottom: 0;
+ content: '';
+ height: 4px;
+ left: 0;
+ position: absolute;
+ width: 100%;
+ z-index: 0;
+}
+
+.tab-carousel .tab-nav .highlight {
+ position: absolute;
+ height: 4px;
+ width: 100px;
+ bottom: 0;
+ background: #33b5e5;
+}
+
+.tab-carousel .tab-carousel-content {
+ position: relative;
+ overflow: hidden;
+ white-space: nowrap;
+}
+
+.tab-carousel .tab-carousel-content [data-tab] {
+ display: inline-block;
+ white-space: normal;
+}
+
+
+
+/*
+ Resource styling for the tab carousel. The tab carousel contains either
+ a 3 column layout of resources or a single full-width resource. The
+ latter has the 18x12 class applied to it and can be styled differently
+ that way.
+*/
+
+.tab-carousel .resource .image {
+ width: 100%;
+ height: 250px;
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: 50% 50%;
+}
+
+.tab-carousel .resource .info .title {
+ font-size: 18px;
+ line-height: 24px;
+}
+
+.tab-carousel .resource .info .summary,
+.tab-carousel .resource .info .cta {
+ line-height: 24px;
+ font-size: 16px;
+}
+
+.tab-carousel .resource-card-18x12 {
+ position: relative;
+ padding-left: 450px;
+ box-sizing: border-box;
+ display: table-cell;
+ vertical-align: middle;
+}
+
+.tab-carousel .resource-card-18x12 .image {
+ position: absolute;
+ width: 420px;
+ height: 100%;
+ left: 0;
+ top: 0;
+}
+
+.tab-carousel .resource-card-18x12 .info {
+ display: inline-block;
+}
+
+.tab-carousel .resource-card-18x12 .info .title {
+ margin-bottom: 26px;
+}
+
+
+
+
+
+/*
+ Styles for the entity link used in the actions bar and in the cta of
+ the resources that appear in the tab carousel.
+*/
+.actions-bar a:after,
+.resource .cta:after {
+ content: '›';
+ font-weight: 400;
+ font-size: 22px;
+ left: 5px;
+ line-height: 1;
+ position: relative;
+ top: 1px;
+ transition: left 190ms ease-out;
+}
+
+.actions-bar a:hover:after,
+.resource .cta:hover:after {
+ left: 10px;
+}
+
+
+
+
+/*
+ Styles for the actions bar.
+*/
+.actions-bar {
+ background: #9acd00;
+ margin: 0 -10px;
+ text-align: center;
+}
+
+.actions-bar .actions {
+ padding: 30px 0 30px;
+ text-align: justify;
+ font-size: 0.1px;
+ line-height: 0.1px;
+ margin: 0 10px 0 0;
+}
+
+.actions-bar .actions:after {
+ content: '';
+ width: 100%;
+ display: inline-block;
+}
+
+.actions-bar .actions > div {
+ display: inline-block;
+}
+
+.actions-bar a {
+ font-size: 21px;
+ line-height: 27px;
+ color: #fff;
+ font-weight: 300;
+ -webkit-font-smoothing: antialiased;
+}
+
+.actions-bar a:after {
+ top: 0px;
+ font-size: 22px;
+}
+
+.actions-bar a:hover {
+ color: #fff !important;
+}
+
+
+
+
+
+/*
+ Specific styles for new home page layout of the carousels.
+*/
+
+/* Big blue button */
+a.home-new-cta-btn,
+.home-new-carousel-1 .resource-card-18x6 .cta {
+ white-space: nowrap;
+ display: inline-block;
+ padding: 14px 32px;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ cursor: pointer;
+ background: #33b5e6;
+ border-radius: 4px;
+ margin-top: 20px;
+ color: #fff;
+ transition: 0.2s background-color ease-in-out;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .cta:after {
+ display: none; /* Hide the entity for this button */
+}
+
+a.home-new-cta-btn:hover,
+.home-new-carousel-1 .resource-card-18x6 .cta:hover {
+ color: #fff !important;
+ background: #2d9fca;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .cta {
+ position: absolute;
+ bottom: 20px;
+ left: 16px;
+}
+
+/* Fullscreen carousel. */
+.home-new-carousel-1 {
+ max-height: 700px; /* Set max height so doesn't get too long */
+}
+
+.home-new-carousel-1 .fullscreen-carousel-content {
+ min-height: 450px; /* Set min height for all content */
+}
+
+.home-new-carousel-1 .hero {
+ background: #000;
+}
+
+.home-new-carousel-1 .hero-bg {
+ background-image: url(/home-new/images/hero.jpg);
+ background-position: right center;
+ opacity: 0.85;
+}
+
+/*
+ Styling for special top card of full screen layout resource layout.
+ We need to specifically style the 18x6 card to adjust its size and layout,
+ since it's not a standard card, not sure if this is unique to the home page
+ layout or should be namespaced within the fullscreen-carousel container.
+*/
+.home-new-carousel-1 .resource-flow-layout.col-16 .resource-card-18x6 {
+ height: 320px;
+ background-color:#F9F9F9;
+ border-radius: 0px;
+ box-shadow: 0px 0px 0px rgba(0, 0, 0, 0);
+
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-bg {
+ width: 636px;
+ height: 100%;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info {
+ right: 0px;
+ left: 636px;
+ height: 100%;
+ top: 0px;
+ padding: 15px 22px;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info .util {
+ display: none;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info .title {
+ font-size: 20px;
+ font-weight: 500;
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+.home-new-carousel-1 .resource-card-18x6 .card-info .text {
+ font-size: 15px;
+ line-height: 21px;
+}
+
+
+/* Tabbed carousel. */
+.home-new-carousel-2 {
+ margin: 35px auto 100px auto;
+}
+
+.home-new-carousel-2 h1 {
+ font-size: 47px;
+ font-weight: 100;
+ line-height: 54px;
+ text-align: center;
+}
+
+.annotation-message {
+ display: block;
+ font-style: italic;
+ color: #F80;
+}
+
+
+
+/* Helpouts widget */
+.resource-card-6x2.helpouts-card {
+ width: 255px;
+ height: 40px;
+ position:absolute;
+ z-index:999;
+ top:-8px;
+ right:1px;
+}
+
+.resource-card-6x2.helpouts-card > .card-info {
+ left:35px;
+ height:35px;
+ padding:4px 8px 4px 0;
+}
+
+.resource-card-6x2.helpouts-card > .card-info .helpouts-description {
+ display:block;
+ overflow:visible;
+ font-size:12px;
+ line-height:12px;
+ text-align:right;
+ color:#666;
+}
+
+.helpouts-description .link-color {
+ text-transform: uppercase;
+}
+
+.resource-card-6x2 > .card-bg.helpouts-card-bg {
+ width:35px;
+ height:35px;
+ margin:2px 0 0 0;
+ background-image: url(../images/styles/helpouts-logo-35_2x.png);
+ background-image: -webkit-image-set(url(../images/styles/helpouts-logo-35.png) 1x, url(../images/styles/helpouts-logo-35_2x.png) 2x);
+}
+
+.resource-card-6x2 > .card-bg.helpouts-card-bg:after {
+ display:none;
+}
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css b/tools/droiddoc/templates-sdk-dev/assets/css/fullscreen.css
similarity index 99%
copy from tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
copy to tools/droiddoc/templates-sdk-dev/assets/css/fullscreen.css
index 53d9a64..7912e34 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
+++ b/tools/droiddoc/templates-sdk-dev/assets/css/fullscreen.css
@@ -197,9 +197,6 @@
left:-20px;
}
-
-}
-
.col-right {
margin-right:0px;
}
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/design/default.js b/tools/droiddoc/templates-sdk-dev/assets/design/default.js
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/design/default.js
rename to tools/droiddoc/templates-sdk-dev/assets/design/default.js
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/android-developers-logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/android-developers-logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/android-developers-logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/android-developers-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/android.png b/tools/droiddoc/templates-sdk-dev/assets/images/android.png
new file mode 100644
index 0000000..4040f3f
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/android.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/android_wrench.png b/tools/droiddoc/templates-sdk-dev/assets/images/android_wrench.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/android_wrench.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/android_wrench.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow-left-develop.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrow-left-develop.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow-left-develop.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow-left-develop.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow-left.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrow-left.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow-left.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow-left.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow-right-develop.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrow-right-develop.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow-right-develop.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow-right-develop.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow-right.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrow-right.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow-right.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow-right.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow_bluelink_down.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrow_bluelink_down.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow_bluelink_down.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow_bluelink_down.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow_bluelink_up.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrow_bluelink_up.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow_bluelink_up.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow_bluelink_up.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow_left_off.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/arrow_left_off.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow_left_off.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow_left_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow_left_on.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/arrow_left_on.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow_left_on.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow_left_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow_right_off.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/arrow_right_off.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow_right_off.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow_right_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrow_right_on.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/arrow_right_on.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrow_right_on.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrow_right_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/arrows-up-down.png b/tools/droiddoc/templates-sdk-dev/assets/images/arrows-up-down.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/arrows-up-down.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/arrows-up-down.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/bg_community_leftDiv.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/bg_community_leftDiv.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/bg_community_leftDiv.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/bg_community_leftDiv.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/bg_fade.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/bg_fade.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/bg_fade.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/bg_fade.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/bg_gradient.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/bg_gradient.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/bg_gradient.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/bg_gradient.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/bg_images_sprite.png b/tools/droiddoc/templates-sdk-dev/assets/images/bg_images_sprite.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/bg_images_sprite.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/bg_images_sprite.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/bg_logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/bg_logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/bg_logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/bg_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/blog-default.png b/tools/droiddoc/templates-sdk-dev/assets/images/blog-default.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/blog-default.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/blog-default.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/body-gradient-tab.png b/tools/droiddoc/templates-sdk-dev/assets/images/body-gradient-tab.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/body-gradient-tab.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/body-gradient-tab.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/body-gradient.png b/tools/droiddoc/templates-sdk-dev/assets/images/body-gradient.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/body-gradient.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/body-gradient.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png b/tools/droiddoc/templates-sdk-dev/assets/images/breadcrumb.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/breadcrumb.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/close-grey.png b/tools/droiddoc/templates-sdk-dev/assets/images/close-grey.png
new file mode 100644
index 0000000..1b0d7f1
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/close-grey.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/close-grey_2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/close-grey_2x.png
new file mode 100644
index 0000000..1355507
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/close-grey_2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/close-white.png b/tools/droiddoc/templates-sdk-dev/assets/images/close-white.png
new file mode 100644
index 0000000..ef02018
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/close-white.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/close-white_2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/close-white_2x.png
new file mode 100644
index 0000000..9b9c41d
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/close-white_2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/close.png b/tools/droiddoc/templates-sdk-dev/assets/images/close.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/close.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/close.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/dac_logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/dac_logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/dac_logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/dac_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/dac_logo@2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/dac_logo@2x.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/dac_logo@2x.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/dac_logo@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/developers-logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/developers-logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/developers-logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/developers-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/file-generic.png b/tools/droiddoc/templates-sdk-dev/assets/images/file-generic.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/file-generic.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/file-generic.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/file-image.png b/tools/droiddoc/templates-sdk-dev/assets/images/file-image.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/file-image.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/file-image.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/file-java.png b/tools/droiddoc/templates-sdk-dev/assets/images/file-java.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/file-java.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/file-java.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/file-manifest.png b/tools/droiddoc/templates-sdk-dev/assets/images/file-manifest.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/file-manifest.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/file-manifest.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/file-xml.png b/tools/droiddoc/templates-sdk-dev/assets/images/file-xml.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/file-xml.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/file-xml.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/folder.png b/tools/droiddoc/templates-sdk-dev/assets/images/folder.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/folder.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/folder.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/fullscreen.png b/tools/droiddoc/templates-sdk-dev/assets/images/fullscreen.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/fullscreen.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/fullscreen.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/grad-rule-qv.png b/tools/droiddoc/templates-sdk-dev/assets/images/grad-rule-qv.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/grad-rule-qv.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/grad-rule-qv.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/Android_Dev_Lab_l.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/Android_Dev_Lab_l.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/Android_Dev_Lab_l.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/Android_Dev_Lab_l.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/GDC2011.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/GDC2011.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/GDC2011.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/GDC2011.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/GTV_icon_large.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/GTV_icon_large.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/GTV_icon_large.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/GTV_icon_large.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/GTV_icon_small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/GTV_icon_small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/GTV_icon_small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/GTV_icon_small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/IO-logo-2011.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/IO-logo-2011.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/IO-logo-2011.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/IO-logo-2011.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/IO-logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/IO-logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/IO-logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/IO-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/adc2_l.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/adc2_l.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/adc2_l.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/adc2_l.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/adc2_s.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/adc2_s.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/adc2_s.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/adc2_s.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/android_adc.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/android_adc.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/android_adc.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/android_adc.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_announcement.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_announcement.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_announcement.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_announcement.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_bottom.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_bottom.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_bottom.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_bottom.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_carousel.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_carousel.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_carousel.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_carousel.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_carousel_board.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_carousel_board.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_carousel_board.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_carousel_board.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_carousel_wheel.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_carousel_wheel.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/bg_home_carousel_wheel.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/bg_home_carousel_wheel.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/carousel_buttons_sprite.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/carousel_buttons_sprite.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/carousel_buttons_sprite.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/carousel_buttons_sprite.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/devphone-large.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/devphone-large.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/devphone-large.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/devphone-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/devphone-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/devphone-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/devphone-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/devphone-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/donut-android.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/donut-android.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/donut-android.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/donut-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/eclair-android.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/eclair-android.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/eclair-android.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/eclair-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/froyo-android.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/froyo-android.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/froyo-android.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/froyo-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/gdc-logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/gdc-logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/gdc-logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/gdc-logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/gingerdroid.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/gingerdroid.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/gingerdroid.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/gingerdroid.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/google-plus-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/google-plus-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/google-plus-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/google-plus-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/google-plus.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/google-plus.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/google-plus.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/google-plus.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/honeycomb-android.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/honeycomb-android.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/honeycomb-android.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/honeycomb-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-about.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/icon-about.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-about.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/icon-about.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-design.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/icon-design.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-design.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/icon-design.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-develop.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/icon-develop.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-develop.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/icon-develop.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-distribute.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/icon-distribute.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/icon-distribute.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/icon-distribute.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/ics-android.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/ics-android.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/ics-android.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/ics-android.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/io-large.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/io-large.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/io-large.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/io-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/io-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/io-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/io-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/io-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/maps-large.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/maps-large.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/maps-large.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/maps-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/maps-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/maps-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/maps-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/maps-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/market-large.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/market-large.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/market-large.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/market-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/market-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/market-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/market-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/market-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/sdk-large.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/sdk-large.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/sdk-large.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/sdk-large.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/home/sdk-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/home/sdk-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/home/sdk-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/home/sdk-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/hr_gray_main.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/hr_gray_main.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/hr_gray_main.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/hr_gray_main.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/hr_gray_side.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/hr_gray_side.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/hr_gray_side.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/hr_gray_side.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_contribute.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/icon_contribute.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_contribute.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_contribute.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_design.png b/tools/droiddoc/templates-sdk-dev/assets/images/icon_design.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_design.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_design.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_download.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/icon_download.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_download.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_download.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_download2.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/icon_download2.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_download2.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_download2.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_guidelines_logo.png b/tools/droiddoc/templates-sdk-dev/assets/images/icon_guidelines_logo.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_guidelines_logo.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_guidelines_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_market.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/icon_market.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_market.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_market.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_more.png b/tools/droiddoc/templates-sdk-dev/assets/images/icon_more.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_more.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_more.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_play.png b/tools/droiddoc/templates-sdk-dev/assets/images/icon_play.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_play.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_play.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_robot.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/icon_robot.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_robot.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_robot.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_search.png b/tools/droiddoc/templates-sdk-dev/assets/images/icon_search.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_search.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_search.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/icon_world.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/icon_world.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/icon_world.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/icon_world.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/left_off.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/left_off.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/left_off.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/left_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/left_on.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/left_on.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/left_on.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/left_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png b/tools/droiddoc/templates-sdk-dev/assets/images/link-out.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/link-out.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/locale.png b/tools/droiddoc/templates-sdk-dev/assets/images/locale.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/locale.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/locale.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/logo_breadcrumbz.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/logo_breadcrumbz.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/logo_breadcrumbz.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/logo_breadcrumbz.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_bottom.png b/tools/droiddoc/templates-sdk-dev/assets/images/more_bottom.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/more_bottom.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/more_bottom.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_check.png b/tools/droiddoc/templates-sdk-dev/assets/images/more_check.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/more_check.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/more_check.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_mid.png b/tools/droiddoc/templates-sdk-dev/assets/images/more_mid.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/more_mid.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/more_mid.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/more_top.png b/tools/droiddoc/templates-sdk-dev/assets/images/more_top.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/more_top.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/more_top.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/open_source.png b/tools/droiddoc/templates-sdk-dev/assets/images/open_source.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/open_source.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/open_source.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-grey.png b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-grey.png
new file mode 100644
index 0000000..5e7e7ba
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-grey.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-grey_2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-grey_2x.png
new file mode 100644
index 0000000..3e01635
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-grey_2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-white.png b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-white.png
new file mode 100644
index 0000000..017d846
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-white.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-white_2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-white_2x.png
new file mode 100644
index 0000000..e48c1fd
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/play-circle-white_2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/preliminary.png b/tools/droiddoc/templates-sdk-dev/assets/images/preliminary.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/preliminary.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/preliminary.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/preview.png b/tools/droiddoc/templates-sdk-dev/assets/images/preview.png
new file mode 100644
index 0000000..e5856db
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/preview.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/quicknav_arrow.png b/tools/droiddoc/templates-sdk-dev/assets/images/quicknav_arrow.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/quicknav_arrow.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/quicknav_arrow.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/quicknav_btn_bg.png b/tools/droiddoc/templates-sdk-dev/assets/images/quicknav_btn_bg.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/quicknav_btn_bg.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/quicknav_btn_bg.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-e.gif b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-e.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-e.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-e.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-e2.gif b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-e2.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-e2.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-e2.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-eg.gif b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-eg.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-eg.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-eg.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-s.gif b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-s.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-s.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-s.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-s2.gif b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-s2.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-s2.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-s2.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-s2.png b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-s2.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-s2.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-s2.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resizable-sg.gif b/tools/droiddoc/templates-sdk-dev/assets/images/resizable-sg.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resizable-sg.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/resizable-sg.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-article.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-article.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-article.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-article.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-article.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-big-article.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-article.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-big-article.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-sample.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-big-sample.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-sample.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-big-sample.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-tutorial.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-big-tutorial.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-tutorial.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-big-tutorial.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-video.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-big-video.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-big-video.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-big-video.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-card-default-android.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/resource-card-default-android.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-card-default-android.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-card-default-android.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-sample.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-sample.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-sample.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-sample.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-tutorial.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-tutorial.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-tutorial.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-tutorial.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-video.png b/tools/droiddoc/templates-sdk-dev/assets/images/resource-video.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/resource-video.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/resource-video.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/right_off.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/right_off.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/right_off.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/right_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/right_on.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/right_on.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/right_on.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/right_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/sidenav-rule.png b/tools/droiddoc/templates-sdk-dev/assets/images/sidenav-rule.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/sidenav-rule.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/sidenav-rule.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_1.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_1.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_1.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_1.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_2.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_2.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_2.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_2.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_3.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_3.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_3.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_3.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_large_1.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_large_1.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_large_1.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_large_1.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_large_2.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_large_2.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_large_2.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_large_2.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_large_3.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_large_3.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_large_3.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_large_3.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_off.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_off.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_off.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_off.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/slide_on.jpg b/tools/droiddoc/templates-sdk-dev/assets/images/slide_on.jpg
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/slide_on.jpg
rename to tools/droiddoc/templates-sdk-dev/assets/images/slide_on.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/spacer.gif b/tools/droiddoc/templates-sdk-dev/assets/images/spacer.gif
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/spacer.gif
rename to tools/droiddoc/templates-sdk-dev/assets/images/spacer.gif
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/stack-arrow-right.png b/tools/droiddoc/templates-sdk-dev/assets/images/stack-arrow-right.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/stack-arrow-right.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/stack-arrow-right.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/callout.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/callout.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/callout.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/callout.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_land_span13.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_land_span13.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_land_span13.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_land_span13.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_land_span8.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_land_span8.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_land_span8.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_land_span8.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_port_span5.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_port_span5.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_port_span5.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_port_span5.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_port_span9.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_port_span9.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_galaxynexus_blank_port_span9.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_galaxynexus_blank_port_span9.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_nexus4_blank_port_432.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_nexus4_blank_port_432.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_nexus4_blank_port_432.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_nexus4_blank_port_432.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_nexus5_blank_land_span13.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_nexus5_blank_land_span13.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_nexus5_blank_land_span13.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_nexus5_blank_land_span13.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_nexus5_blank_port_span5.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_nexus5_blank_port_span5.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/device_nexus5_blank_port_span5.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/device_nexus5_blank_port_span5.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_wear_square.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_wear_square.png
new file mode 100644
index 0000000..077a7e6
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_wear_square.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_wear_square_small.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_wear_square_small.png
new file mode 100644
index 0000000..e7e1540
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/styles/device_wear_square_small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_down.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_down.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_down.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_down.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_left.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_left.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_left.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_left.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_right.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_right.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_right.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_right.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_up.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_up.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/disclosure_up.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/disclosure_up.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/gototop.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/gototop.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/gototop.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/gototop.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/styles/helpouts-logo-35.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/helpouts-logo-35.png
new file mode 100644
index 0000000..3c2dc1a
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/styles/helpouts-logo-35.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dev/assets/images/styles/helpouts-logo-35_2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/helpouts-logo-35_2x.png
new file mode 100644
index 0000000..e34be2e
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/assets/images/styles/helpouts-logo-35_2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_action.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_action.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_action.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_action.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_good.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_good.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_good.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_good.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_movie_inline.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_movie_inline.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_movie_inline.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_movie_inline.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_phone_tablet.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_phone_tablet.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_phone_tablet.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_phone_tablet.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_use.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_use.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_use.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_use.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_web.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_web.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_web.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_web.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_wrong.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_wrong.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/ico_wrong.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/ico_wrong.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-material.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers.png
copy to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-material.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers@2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-material@2x.png
similarity index 100%
copy from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers@2x.png
copy to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-material@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers-video.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-video.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers-video.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-video.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers-video@2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-video@2x.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers-video@2x.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers-video@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers@2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers@2x.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-designers@2x.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-designers@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers-video.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers-video.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers-video.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers-video.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers-video@2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers-video@2x.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers-video@2x.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers-video@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers@2x.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers@2x.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/notice-developers@2x.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/notice-developers@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/styles/open_new_page.png b/tools/droiddoc/templates-sdk-dev/assets/images/styles/open_new_page.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/styles/open_new_page.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/styles/open_new_page.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/triangle-closed-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/triangle-closed-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/triangle-closed-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/triangle-closed-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/triangle-closed.png b/tools/droiddoc/templates-sdk-dev/assets/images/triangle-closed.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/triangle-closed.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/triangle-closed.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/triangle-opened-small.png b/tools/droiddoc/templates-sdk-dev/assets/images/triangle-opened-small.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/triangle-opened-small.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/triangle-opened-small.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/triangle-opened.png b/tools/droiddoc/templates-sdk-dev/assets/images/triangle-opened.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/triangle-opened.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/triangle-opened.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/uiguidelines1.png b/tools/droiddoc/templates-sdk-dev/assets/images/uiguidelines1.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/uiguidelines1.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/uiguidelines1.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/video-droid.png b/tools/droiddoc/templates-sdk-dev/assets/images/video-droid.png
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/images/video-droid.png
rename to tools/droiddoc/templates-sdk-dev/assets/images/video-droid.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/android_3p-bundle.js b/tools/droiddoc/templates-sdk-dev/assets/js/android_3p-bundle.js
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/js/android_3p-bundle.js
rename to tools/droiddoc/templates-sdk-dev/assets/js/android_3p-bundle.js
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js b/tools/droiddoc/templates-sdk-dev/assets/js/docs.js
similarity index 83%
copy from tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
copy to tools/droiddoc/templates-sdk-dev/assets/js/docs.js
index e6befe3..7f4be4e 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk-dev/assets/js/docs.js
@@ -19,9 +19,19 @@
/****** ON LOAD SET UP STUFF *********/
-var navBarIsFixed = false;
$(document).ready(function() {
+ // show lang dialog if the URL includes /intl/
+ //if (location.pathname.substring(0,6) == "/intl/") {
+ // var lang = location.pathname.split('/')[2];
+ // if (lang != getLangPref()) {
+ // $("#langMessage a.yes").attr("onclick","changeLangPref('" + lang
+ // + "', true); $('#langMessage').hide(); return false;");
+ // $("#langMessage .lang." + lang).show();
+ // $("#langMessage").show();
+ // }
+ //}
+
// load json file for JD doc search suggestions
$.getScript(toRoot + 'jd_lists_unified.js');
// load json file for Android API search suggestions
@@ -64,7 +74,12 @@
$('.scroll-pane').jScrollPane( {verticalGutter:0} );
// add HRs below all H2s (except for a few other h2 variants)
- $('h2').not('#qv h2').not('#tb h2').not('.sidebox h2').not('#devdoc-nav h2').not('h2.norule').css({marginBottom:0}).after('<hr/>');
+ $('h2').not('#qv h2')
+ .not('#tb h2')
+ .not('.sidebox h2')
+ .not('#devdoc-nav h2')
+ .not('h2.norule').css({marginBottom:0})
+ .after('<hr/>');
// set up the search close button
$('.search .close').click(function() {
@@ -169,6 +184,18 @@
$("#header li.design a").addClass("selected");
$("#sticky-header").addClass("design");
+ // highlight About tabs
+ } else if ($("body").hasClass("about")) {
+ var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
+ if (rootDir == "about") {
+ $("#nav-x li.about a").addClass("selected");
+ } else if (rootDir == "wear") {
+ $("#nav-x li.wear a").addClass("selected");
+ } else if (rootDir == "tv") {
+ $("#nav-x li.tv a").addClass("selected");
+ } else if (rootDir == "auto") {
+ $("#nav-x li.auto a").addClass("selected");
+ }
// highlight Develop tab
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
$("#header li.develop a").addClass("selected");
@@ -207,6 +234,8 @@
$("#nav-x li.engage a").addClass("selected");
} else if (secondFrag == "monetize") {
$("#nav-x li.monetize a").addClass("selected");
+ } else if (secondFrag == "analyze") {
+ $("#nav-x li.analyze a").addClass("selected");
} else if (secondFrag == "tools") {
$("#nav-x li.disttools a").addClass("selected");
} else if (secondFrag == "stories") {
@@ -218,7 +247,7 @@
}
} else if ($("body").hasClass("about")) {
$("#sticky-header").addClass("about");
- }
+ }
// set global variable so we can highlight the sidenav a bit later (such as for google reference)
// and highlight the sidenav
@@ -239,7 +268,7 @@
var crossBoundaries = ($("body.design").length > 0) || ($("body.guide").length > 0) ? true :
false; // navigate across topic boundaries only in design docs
if ($prevListItem.length) {
- if ($prevListItem.hasClass('nav-section')) {
+ if ($prevListItem.hasClass('nav-section') || crossBoundaries) {
// jump to last topic of previous section
$prevLink = $prevListItem.find('a:last');
} else if (!$selListItem.hasClass('nav-section')) {
@@ -262,7 +291,6 @@
// set up next links
var $nextLink = [];
var startClass = false;
- var training = $(".next-class-link").length; // decides whether to provide "next class" link
var isCrossingBoundary = false;
if ($selListItem.hasClass('nav-section') && $selListItem.children('div.empty').length == 0) {
@@ -289,13 +317,15 @@
if ($nextLink.length == 0) {
isCrossingBoundary = true;
// no more topics in this section, jump to the first topic in the next section
- $nextLink = $selListItem.parents('li:eq(0)').next('li.nav-section').find('a:eq(0)');
+ $nextLink = $selListItem.parents('li:eq(0)').next('li').find('a:eq(0)');
if (!$nextLink.length) { // Go up another layer to look for next page (lesson > class > course)
$nextLink = $selListItem.parents('li:eq(1)').next('li.nav-section').find('a:eq(0)');
if ($nextLink.length == 0) {
// if that doesn't work, we're at the end of the list, so disable NEXT link
$('.next-page-link').attr('href','').addClass("disabled")
.click(function() { return false; });
+ // and completely hide the one in the footer
+ $('.content-footer .next-page-link').hide();
}
}
}
@@ -314,13 +344,19 @@
$('.next-page-link').attr('href','')
.removeClass("hide").addClass("disabled")
.click(function() { return false; });
+ // and completely hide the one in the footer
+ $('.content-footer .next-page-link').hide();
if ($nextLink.length) {
$('.next-class-link').attr('href',$nextLink.attr('href'))
- .removeClass("hide").append($nextLink.html());
+ .removeClass("hide")
+ .append(": " + $nextLink.html());
$('.next-class-link').find('.new').empty();
}
} else {
- $('.next-page-link').attr('href', $nextLink.attr('href')).removeClass("hide");
+ $('.next-page-link').attr('href', $nextLink.attr('href'))
+ .removeClass("hide");
+ // for the footer link, also add the next page title
+ $('.content-footer .next-page-link').append(": " + $nextLink.html());
}
if (!startClass && $prevLink.length) {
@@ -332,14 +368,6 @@
}
}
- // If this is a training 'article', there should be no prev/next nav
- // ... if the grandparent is the "nav" ... and it has no child list items...
- if (training && $selListItem.parents('ul').eq(1).is('[id="nav"]') &&
- !$selListItem.find('li').length) {
- $('.next-page-link,.prev-page-link').attr('href','').addClass("disabled")
- .click(function() { return false; });
- }
-
}
@@ -347,7 +375,20 @@
// Set up the course landing pages for Training with class names and descriptions
if ($('body.trainingcourse').length) {
var $classLinks = $selListItem.find('ul li a').not('#nav .nav-section .nav-section ul a');
- var $classDescriptions = $classLinks.attr('description');
+
+ // create an array for all the class descriptions
+ var $classDescriptions = new Array($classLinks.length);
+ var lang = getLangPref();
+ $classLinks.each(function(index) {
+ var langDescr = $(this).attr(lang + "-description");
+ if (typeof langDescr !== 'undefined' && langDescr !== false) {
+ // if there's a class description in the selected language, use that
+ $classDescriptions[index] = langDescr;
+ } else {
+ // otherwise, use the default english description
+ $classDescriptions[index] = $(this).attr("description");
+ }
+ });
var $olClasses = $('<ol class="class-list"></ol>');
var $liClass;
@@ -359,7 +400,7 @@
$classLinks.each(function(index) {
$liClass = $('<li></li>');
$h2Title = $('<a class="title" href="'+$(this).attr('href')+'"><h2>' + $(this).html()+'</h2><span></span></a>');
- $pSummary = $('<p class="description">' + $(this).attr('description') + '</p>');
+ $pSummary = $('<p class="description">' + $classDescriptions[index] + '</p>');
$olLessons = $('<ol class="lesson-list"></ol>');
@@ -398,7 +439,7 @@
var stylesheet = $('link[rel="stylesheet"][class="fullscreen"]');
setNavBarLeftPos(); // do this even if sidenav isn't fixed because it could become fixed
// make sidenav behave when resizing the window and side-scolling is a concern
- if (navBarIsFixed) {
+ if (sticky) {
if ((stylesheet.attr("disabled") == "disabled") || stylesheet.length == 0) {
updateSideNavPosition();
} else {
@@ -482,7 +523,11 @@
}
}
+ // Resize once loading is finished
resizeNav();
+ // Check if there's an anchor that we need to scroll into view.
+ // A delay is needed, because some browsers do not immediately scroll down to the anchor
+ window.setTimeout(offsetScrollForSticky, 100);
/* init the language selector based on user cookie for lang */
loadLangPref();
@@ -515,10 +560,147 @@
cookiePath = "distribute_";
}
+
+ /* setup shadowbox for any videos that want it */
+ var $videoLinks = $("a.video-shadowbox-button, a.notice-developers-video");
+ if ($videoLinks.length) {
+ // if there's at least one, add the shadowbox HTML to the body
+ $('body').prepend(
+'<div id="video-container">'+
+ '<div id="video-frame">'+
+ '<div class="video-close">'+
+ '<span id="icon-video-close" onclick="closeVideo()"> </span>'+
+ '</div>'+
+ '<div id="youTubePlayer"></div>'+
+ '</div>'+
+'</div>');
+
+ // loads the IFrame Player API code asynchronously.
+ $.getScript("https://www.youtube.com/iframe_api");
+
+ $videoLinks.each(function() {
+ var videoId = $(this).attr('href').split('?v=')[1];
+ $(this).click(function(event) {
+ event.preventDefault();
+ startYouTubePlayer(videoId);
+ });
+ });
+ }
});
// END of the onload event
+var youTubePlayer;
+function onYouTubeIframeAPIReady() {
+}
+
+/* Returns the height the shadowbox video should be. It's based on the current
+ height of the "video-frame" element, which is 100% height for the window.
+ Then minus the margin so the video isn't actually the full window height. */
+function getVideoHeight() {
+ var frameHeight = $("#video-frame").height();
+ var marginTop = $("#video-frame").css('margin-top').split('px')[0];
+ return frameHeight - (marginTop * 2);
+}
+
+var mPlayerPaused = false;
+
+function startYouTubePlayer(videoId) {
+ $("#video-container").show();
+ $("#video-frame").show();
+ mPlayerPaused = false;
+
+ // compute the size of the player so it's centered in window
+ var maxWidth = 940; // the width of the web site content
+ var videoAspect = .5625; // based on 1280x720 resolution
+ var maxHeight = maxWidth * videoAspect;
+ var videoHeight = getVideoHeight();
+ var videoWidth = videoHeight / videoAspect;
+ if (videoWidth > maxWidth) {
+ videoWidth = maxWidth;
+ videoHeight = maxHeight;
+ }
+ $("#video-frame").css('width', videoWidth);
+
+ // check if we've already created this player
+ if (youTubePlayer == null) {
+ // check if there's a start time specified
+ var idAndHash = videoId.split("#");
+ var startTime = 0;
+ if (idAndHash.length > 1) {
+ startTime = idAndHash[1].split("t=")[1] != undefined ? idAndHash[1].split("t=")[1] : 0;
+ }
+ // enable localized player
+ var lang = getLangPref();
+ var captionsOn = lang == 'en' ? 0 : 1;
+
+ youTubePlayer = new YT.Player('youTubePlayer', {
+ height: videoHeight,
+ width: videoWidth,
+ videoId: idAndHash[0],
+ playerVars: {start: startTime, hl: lang, cc_load_policy: captionsOn},
+ events: {
+ 'onReady': onPlayerReady,
+ 'onStateChange': onPlayerStateChange
+ }
+ });
+ } else {
+ // reset the size in case the user adjusted the window since last play
+ youTubePlayer.setSize(videoWidth, videoHeight);
+ // if a video different from the one already playing was requested, cue it up
+ if (videoId != youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0]) {
+ youTubePlayer.cueVideoById(videoId);
+ }
+ youTubePlayer.playVideo();
+ }
+}
+
+function onPlayerReady(event) {
+ event.target.playVideo();
+ mPlayerPaused = false;
+}
+
+function closeVideo() {
+ try {
+ youTubePlayer.pauseVideo();
+ } catch(e) {
+ }
+ $("#video-container").fadeOut(200);
+}
+
+/* Track youtube playback for analytics */
+function onPlayerStateChange(event) {
+ // Video starts, send the video ID
+ if (event.data == YT.PlayerState.PLAYING) {
+ if (mPlayerPaused) {
+ ga('send', 'event', 'Videos', 'Resume',
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0]);
+ } else {
+ // track the start playing event so we know from which page the video was selected
+ ga('send', 'event', 'Videos', 'Start: ' +
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0],
+ 'on: ' + document.location.href);
+ }
+ mPlayerPaused = false;
+ }
+ // Video paused, send video ID and video elapsed time
+ if (event.data == YT.PlayerState.PAUSED) {
+ ga('send', 'event', 'Videos', 'Paused',
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0],
+ youTubePlayer.getCurrentTime());
+ mPlayerPaused = true;
+ }
+ // Video finished, send video ID and video elapsed time
+ if (event.data == YT.PlayerState.ENDED) {
+ ga('send', 'event', 'Videos', 'Finished',
+ youTubePlayer.getVideoUrl().split('?v=')[1].split('&')[0].split('%')[0],
+ youTubePlayer.getCurrentTime());
+ mPlayerPaused = true;
+ }
+}
+
+
+
function initExpandableNavItems(rootTag) {
$(rootTag + ' li.nav-section .nav-section-header').click(function() {
var section = $(this).closest('li.nav-section');
@@ -626,7 +808,7 @@
setTimeout(updateSidenavFixedWidth,delay); // need to wait a moment for css to switch
enabled = false;
}
- writeCookie("fullscreen", enabled, null, null);
+ writeCookie("fullscreen", enabled, null);
setNavBarLeftPos();
resizeNav(delay);
updateSideNavPosition();
@@ -787,7 +969,7 @@
function saveNavPanels() {
var basePath = getBaseUri(location.pathname);
var section = basePath.substring(1,basePath.indexOf("/",1));
- writeCookie("height", resizePackagesNav.css("height"), section, null);
+ writeCookie("height", resizePackagesNav.css("height"), section);
}
@@ -868,119 +1050,111 @@
return 0;
}
-function writeCookie(cookie, val, section, expiration) {
+function writeCookie(cookie, val, section) {
if (val==undefined) return;
section = section == null ? "_" : "_"+section+"_";
- if (expiration == null) {
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
- expiration = date.toGMTString();
- }
+ var age = 2*365*24*60*60; // set max-age to 2 years
var cookieValue = cookie_namespace + section + cookie + "=" + val
- + "; expires=" + expiration+"; path=/";
+ + "; max-age=" + age +"; path=/";
document.cookie = cookieValue;
}
/* ######### END COOKIES! ########## */
-
-
+var sticky = false;
var stickyTop;
+var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
/* Sets the vertical scoll position at which the sticky bar should appear.
This method is called to reset the position when search results appear or hide */
function setStickyTop() {
stickyTop = $('#header-wrapper').outerHeight() - $('#sticky-header').outerHeight();
}
+/*
+ * Displays sticky nav bar on pages when dac header scrolls out of view
+ */
+$(window).scroll(function(event) {
-/*
- * Displays sticky nav bar on pages when dac header scrolls out of view
+ setStickyTop();
+ var hiding = false;
+ var $stickyEl = $('#sticky-header');
+ var $menuEl = $('.menu-container');
+ // Exit if there's no sidenav
+ if ($('#side-nav').length == 0) return;
+ // Exit if the mouse target is a DIV, because that means the event is coming
+ // from a scrollable div and so there's no need to make adjustments to our layout
+ if ($(event.target).nodeName == "DIV") {
+ return;
+ }
+
+ var top = $(window).scrollTop();
+ // we set the navbar fixed when the scroll position is beyond the height of the site header...
+ var shouldBeSticky = top >= stickyTop;
+ // ... except if the document content is shorter than the sidenav height.
+ // (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
+ if ($("#doc-col").height() < $("#side-nav").height()) {
+ shouldBeSticky = false;
+ }
+ // Account for horizontal scroll
+ var scrollLeft = $(window).scrollLeft();
+ // When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
+ if (sticky && (scrollLeft != prevScrollLeft)) {
+ updateSideNavPosition();
+ prevScrollLeft = scrollLeft;
+ }
+
+ // Don't continue if the header is sufficently far away
+ // (to avoid intensive resizing that slows scrolling)
+ if (sticky == shouldBeSticky) {
+ return;
+ }
+
+ // If sticky header visible and position is now near top, hide sticky
+ if (sticky && !shouldBeSticky) {
+ sticky = false;
+ hiding = true;
+ // make the sidenav static again
+ $('#devdoc-nav')
+ .removeClass('fixed')
+ .css({'width':'auto','margin':''})
+ .prependTo('#side-nav');
+ // delay hide the sticky
+ $menuEl.removeClass('sticky-menu');
+ $stickyEl.fadeOut(250);
+ hiding = false;
+
+ // update the sidenaav position for side scrolling
+ updateSideNavPosition();
+ } else if (!sticky && shouldBeSticky) {
+ sticky = true;
+ $stickyEl.fadeIn(10);
+ $menuEl.addClass('sticky-menu');
+
+ // make the sidenav fixed
+ var width = $('#devdoc-nav').width();
+ $('#devdoc-nav')
+ .addClass('fixed')
+ .css({'width':width+'px'})
+ .prependTo('#body-content');
+
+ // update the sidenaav position for side scrolling
+ updateSideNavPosition();
+
+ } else if (hiding && top < 15) {
+ $menuEl.removeClass('sticky-menu');
+ $stickyEl.hide();
+ hiding = false;
+ }
+ resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
+});
+
+/*
+ * Manages secion card states and nav resize to conclude loading
*/
(function() {
$(document).ready(function() {
- setStickyTop();
- var sticky = false;
- var hiding = false;
- var $stickyEl = $('#sticky-header');
- var $menuEl = $('.menu-container');
-
- var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
-
- $(window).scroll(function() {
- // Exit if there's no sidenav
- if ($('#side-nav').length == 0) return;
- // Exit if the mouse target is a DIV, because that means the event is coming
- // from a scrollable div and so there's no need to make adjustments to our layout
- if (event.target.nodeName == "DIV") {
- return;
- }
-
-
- var top = $(window).scrollTop();
- // we set the navbar fixed when the scroll position is beyond the height of the site header...
- var shouldBeSticky = top >= stickyTop;
- // ... except if the document content is shorter than the sidenav height.
- // (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
- if ($("#doc-col").height() < $("#side-nav").height()) {
- shouldBeSticky = false;
- }
-
- // Don't continue if the header is sufficently far away
- // (to avoid intensive resizing that slows scrolling)
- if (sticky && shouldBeSticky) {
- return;
- }
-
- // Account for horizontal scroll
- var scrollLeft = $(window).scrollLeft();
- // When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
- if (navBarIsFixed && (scrollLeft != prevScrollLeft)) {
- updateSideNavPosition();
- prevScrollLeft = scrollLeft;
- }
-
- // If sticky header visible and position is now near top, hide sticky
- if (sticky && !shouldBeSticky) {
- sticky = false;
- hiding = true;
- // make the sidenav static again
- $('#devdoc-nav')
- .removeClass('fixed')
- .css({'width':'auto','margin':''})
- .prependTo('#side-nav');
- // delay hide the sticky
- $menuEl.removeClass('sticky-menu');
- $stickyEl.fadeOut(250);
- hiding = false;
-
- // update the sidenaav position for side scrolling
- updateSideNavPosition();
- } else if (!sticky && shouldBeSticky) {
- sticky = true;
- $stickyEl.fadeIn(10);
- $menuEl.addClass('sticky-menu');
-
- // make the sidenav fixed
- var width = $('#devdoc-nav').width();
- $('#devdoc-nav')
- .addClass('fixed')
- .css({'width':width+'px'})
- .prependTo('#body-content');
-
- // update the sidenaav position for side scrolling
- updateSideNavPosition();
-
- } else if (hiding && top < 15) {
- $menuEl.removeClass('sticky-menu');
- $stickyEl.hide();
- hiding = false;
- }
-
- resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
- });
-
// Stack hover states
$('.section-card-menu').each(function(index, el) {
var height = $(el).height();
@@ -990,7 +1164,6 @@
$cardInfo.css({position: 'absolute', bottom:'0px', left:'0px', right:'0px', overflow:'visible'});
});
- resizeNav(); // must resize once loading is finished
});
})();
@@ -1060,8 +1233,16 @@
}
+/* Call this to add listeners to a <select> element for Studio/Eclipse/Other docs */
+function setupIdeDocToggle() {
+ $( "select.ide" ).change(function() {
+ var selected = $(this).find("option:selected").attr("value");
+ $(".select-ide").hide();
+ $(".select-ide."+selected).show();
-
+ $("select.ide").val(selected);
+ });
+}
@@ -1114,9 +1295,7 @@
nav_pref = NAV_PREF_TREE;
init_default_navtree(toRoot);
}
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
- writeCookie("nav", nav_pref, "reference", date.toGMTString());
+ writeCookie("nav", nav_pref, "reference");
$("#nav-panels").toggle();
$("#panel-link").toggle();
@@ -1184,11 +1363,7 @@
}
function changeLangPref(lang, submit) {
- var date = new Date();
- expires = date.toGMTString(date.setTime(date.getTime()+(10*365*24*60*60*1000)));
- // keep this for 50 years
- //alert("expires: " + expires)
- writeCookie("pref_lang", lang, null, expires);
+ writeCookie("pref_lang", lang, null);
// ####### TODO: Remove this condition once we're stable on devsite #######
// This condition is only needed if we still need to support legacy GAE server
@@ -1607,8 +1782,8 @@
function onSuggestionClick(link) {
// When user clicks a suggested document, track it
- _gaq.push(['_trackEvent', 'Suggestion Click', 'clicked: ' + $(link).text(),
- 'from: ' + $("#search_autocomplete").val()]);
+ ga('send', 'event', 'Suggestion Click', 'clicked: ' + $(link).attr('href'),
+ 'query: ' + $("#search_autocomplete").val().toLowerCase());
}
function set_item_selected($li, selected)
@@ -1825,8 +2000,12 @@
return false;
}
}
- // Stop here if Google results are showing
+ // If Google results are showing, return true to allow ajax search to execute
else if ($("#searchResults").is(":visible")) {
+ // Also, if search_results is scrolled out of view, scroll to top to make results visible
+ if ((sticky ) && (search.value != "")) {
+ $('body,html').animate({scrollTop:0}, '500', 'swing');
+ }
return true;
}
// 38 UP ARROW
@@ -1949,7 +2128,7 @@
// Search for matching JD docs
- if (text.length >= 3) {
+ if (text.length >= 2) {
// Regex to match only the beginning of a word
var textRegex = new RegExp("\\b" + text.toLowerCase(), "g");
@@ -2496,8 +2675,29 @@
}
}, true);
+/* Adjust the scroll position to account for sticky header, only if the hash matches an id.
+ This does not handle <a name=""> tags. Some CSS fixes those, but only for reference docs. */
+function offsetScrollForSticky() {
+ // Ignore if there's no search bar (some special pages have no header)
+ if ($("#search-container").length < 1) return;
+
+ var hash = escape(location.hash.substr(1));
+ var $matchingElement = $("#"+hash);
+ // Sanity check that there's an element with that ID on the page
+ if ($matchingElement.length) {
+ // If the position of the target element is near the top of the page (<20px, where we expect it
+ // to be because we need to move it down 60px to become in view), then move it down 60px
+ if (Math.abs($matchingElement.offset().top - $(window).scrollTop()) < 20) {
+ $(window).scrollTop($(window).scrollTop() - 60);
+ }
+ }
+}
+
// when an event on the browser history occurs (back, forward, load) requery hash and do search
$(window).hashchange( function(){
+ // Ignore if there's no search bar (some special pages have no header)
+ if ($("#search-container").length < 1) return;
+
// If the hash isn't a search query or there's an error in the query,
// then adjust the scroll position to account for sticky header, then exit.
if ((location.hash.indexOf("q=") == -1) || (query == "undefined")) {
@@ -2505,8 +2705,7 @@
if (!$("#searchResults").is(":hidden")) {
hideResults();
}
- // Adjust the scroll position to account for sticky header
- $(window).scrollTop($(window).scrollTop() - 60);
+ offsetScrollForSticky();
return;
}
@@ -2557,8 +2756,8 @@
$("#searchResults a.gs-title").each(function(index, link) {
// When user clicks enter for Google search results, track it
$(link).click(function() {
- _gaq.push(['_trackEvent', 'Google Click', 'clicked: ' + $(this).text(),
- 'from: ' + $("#search_autocomplete").val()]);
+ ga('send', 'event', 'Google Click', 'clicked: ' + $(this).attr('href'),
+ 'query: ' + $("#search_autocomplete").val().toLowerCase());
});
});
}
@@ -2621,7 +2820,7 @@
}
function updateSidenavFixedWidth() {
- if (!navBarIsFixed) return;
+ if (!sticky) return;
$('#devdoc-nav').css({
'width' : $('#side-nav').css('width'),
'margin' : $('#side-nav').css('margin')
@@ -2632,7 +2831,7 @@
}
function updateSidenavFullscreenWidth() {
- if (!navBarIsFixed) return;
+ if (!sticky) return;
$('#devdoc-nav').css({
'width' : $('#side-nav').css('width'),
'margin' : $('#side-nav').css('margin')
@@ -2673,10 +2872,7 @@
selectedLevel = parseInt($("#apiLevelSelector option:selected").val());
toggleVisisbleApis(selectedLevel, "body");
- var date = new Date();
- date.setTime(date.getTime()+(10*365*24*60*60*1000)); // keep this for 10 years
- var expiration = date.toGMTString();
- writeCookie(API_LEVEL_COOKIE, selectedLevel, null, expiration);
+ writeCookie(API_LEVEL_COOKIE, selectedLevel, null);
if (selectedLevel < minLevel) {
var thing = ($("#jd-header").html().indexOf("package") != -1) ? "package" : "class";
@@ -3349,7 +3545,7 @@
showing lines that are cut off. This works with the css ellipsis
classes to fade last text line and apply an ellipsis char. */
- //card text currently uses 15px line height.
+ //card text currently uses 15px line height.
var lineHeight = 15;
$('.card-info .text').ellipsisfade(lineHeight);
});
@@ -3380,7 +3576,10 @@
sortOrder: $widget.data('sortorder'),
query: $widget.data('query'),
section: $widget.data('section'),
- sizeCols: sizeCols
+ sizeCols: sizeCols,
+ /* Added by LFL 6/6/14 */
+ resourceStyle: $widget.data('resourcestyle') || 'card',
+ stackSort: $widget.data('stacksort') || 'true'
};
// run the search for the set of resources to show
@@ -3392,9 +3591,13 @@
} else if (isCarousel) {
drawResourcesCarouselWidget($widget, opts, resources);
} else if (isStack) {
- var sections = buildSectionList(opts);
+ /* Looks like this got removed and is not used, so repurposing for the
+ homepage style layout.
+ Modified by LFL 6/6/14
+ */
+ //var sections = buildSectionList(opts);
opts['numStacks'] = $widget.data('numstacks');
- drawResourcesStackWidget($widget, opts, resources, sections);
+ drawResourcesStackWidget($widget, opts, resources/*, sections*/);
}
}
@@ -3413,10 +3616,8 @@
var $ul = $('<ul>');
for (var i = 0; i < resources.length; ++i) {
- //keep url clean for matching and offline mode handling
- var urlPrefix = resources[i].url.indexOf("//") > -1 ? "" : toRoot;
var $card = $('<a>')
- .attr('href', urlPrefix + resources[i].url)
+ .attr('href', cleanUrl(resources[i].url))
.decorateResourceCard(resources[i],plusone);
$('<li>').css(css)
@@ -3435,7 +3636,9 @@
});
};
- /* Initializes a Resource Card Stack Widget (column-based layout) */
+ /* Initializes a Resource Card Stack Widget (column-based layout)
+ Modified by LFL 6/6/14
+ */
function drawResourcesStackWidget($widget, opts, resources, sections) {
// Don't empty widget, grab all items inside since they will be the first
// items stacked, followed by the resource query
@@ -3453,60 +3656,88 @@
var sectionResources = [];
// Extract any subsections that are actually resource cards
- for (var i = 0; i < sections.length; ++i) {
- if (!sections[i].sections || !sections[i].sections.length) {
- //keep url clean for matching and offline mode handling
- urlPrefix = sections[i].url.indexOf("//") > -1 ? "" : toRoot;
- // Render it as a resource card
+ if (sections) {
+ for (var i = 0; i < sections.length; ++i) {
+ if (!sections[i].sections || !sections[i].sections.length) {
+ // Render it as a resource card
+ sectionResources.push(
+ $('<a>')
+ .addClass('resource-card section-card')
+ .attr('href', cleanUrl(sections[i].resource.url))
+ .decorateResourceCard(sections[i].resource,plusone)[0]
+ );
- sectionResources.push(
- $('<a>')
- .addClass('resource-card section-card')
- .attr('href', urlPrefix + sections[i].resource.url)
- .decorateResourceCard(sections[i].resource,plusone)[0]
- );
-
- } else {
- cards.push(
- $('<div>')
- .addClass('resource-card section-card-menu')
- .decorateResourceSection(sections[i],plusone)[0]
- );
+ } else {
+ cards.push(
+ $('<div>')
+ .addClass('resource-card section-card-menu')
+ .decorateResourceSection(sections[i],plusone)[0]
+ );
+ }
}
}
cards = cards.concat(sectionResources);
for (var i = 0; i < resources.length; ++i) {
- //keep url clean for matching and offline mode handling
- urlPrefix = resources[i].url.indexOf("//") > -1 ? "" : toRoot;
- var $card = $('<a>')
- .addClass('resource-card related-card')
- .attr('href', urlPrefix + resources[i].url)
- .decorateResourceCard(resources[i],plusone);
+ var $card = createResourceElement(resources[i], opts);
+
+ if (opts.resourceStyle.indexOf('related') > -1) {
+ $card.addClass('related-card');
+ }
cards.push($card[0]);
}
- for (var i = 0; i < cards.length; ++i) {
- // Find the stack with the shortest height, but give preference to
- // left to right order.
- var minHeight = $stacks[0].height();
- var minIndex = 0;
+ if (opts.stackSort != 'false') {
+ for (var i = 0; i < cards.length; ++i) {
+ // Find the stack with the shortest height, but give preference to
+ // left to right order.
+ var minHeight = $stacks[0].height();
+ var minIndex = 0;
- for (var j = 1; j < numStacks; ++j) {
- var height = $stacks[j].height();
- if (height < minHeight - 45) {
- minHeight = height;
- minIndex = j;
+ for (var j = 1; j < numStacks; ++j) {
+ var height = $stacks[j].height();
+ if (height < minHeight - 45) {
+ minHeight = height;
+ minIndex = j;
+ }
}
- }
- $stacks[minIndex].append($(cards[i]));
+ $stacks[minIndex].append($(cards[i]));
+ }
}
};
+ /*
+ Create a resource card using the given resource object and a list of html
+ configured options. Returns a jquery object containing the element.
+ */
+ function createResourceElement(resource, opts, plusone) {
+ var $el;
+
+ // The difference here is that generic cards are not entirely clickable
+ // so its a div instead of an a tag, also the generic one is not given
+ // the resource-card class so it appears with a transparent background
+ // and can be styled in whatever way the css setup.
+ if (opts.resourceStyle == 'generic') {
+ $el = $('<div>')
+ .addClass('resource')
+ .attr('href', cleanUrl(resource.url))
+ .decorateResource(resource, opts);
+ } else {
+ var cls = 'resource resource-card';
+
+ $el = $('<a>')
+ .addClass(cls)
+ .attr('href', cleanUrl(resource.url))
+ .decorateResourceCard(resource, plusone);
+ }
+
+ return $el;
+ }
+
/* Initializes a flow widget, see distribute.scss for generating accompanying css */
function drawResourcesFlowWidget($widget, opts, resources) {
$widget.empty();
@@ -3517,7 +3748,6 @@
while (i < resources.length) {
var cardSize = cardSizes[j++ % cardSizes.length];
cardSize = cardSize.replace(/^\s+|\s+$/,'');
- console.log("cardsize is " + cardSize);
// Some card sizes do not get a plusone button, such as where space is constrained
// or for cards commonly embedded in docs (to improve overall page speed).
plusone = !((cardSize == "6x2") || (cardSize == "6x3") ||
@@ -3539,11 +3769,11 @@
// Build each stack item or just a single item
do {
var resource = resources[i];
- //keep url clean for matching and offline mode handling
- urlPrefix = resource.url.indexOf("//") > -1 ? "" : toRoot;
- var $card = $('<a>')
- .addClass('resource-card resource-card-' + cardSize + ' resource-card-' + resource.type)
- .attr('href', urlPrefix + resource.url);
+
+ var $card = createResourceElement(resources[i], opts, plusone);
+
+ $card.addClass('resource-card-' + cardSize +
+ ' resource-card-' + resource.type);
if (isStack) {
$card.addClass('resource-card-' + isStack[1] + 'x' + isStack[2]);
@@ -3555,8 +3785,7 @@
stackCount = 0;
}
- $card.decorateResourceCard(resource,plusone)
- .appendTo($stackDiv || $widget);
+ $card.appendTo($stackDiv || $widget);
} while (++i < resources.length && stackCount > 0);
}
@@ -3696,6 +3925,15 @@
return true;
}
+ function cleanUrl(url)
+ {
+ if (url && url.indexOf('//') === -1) {
+ url = toRoot + url;
+ }
+
+ return url;
+ }
+
function parseResourceQuery(query) {
// Parse query into array of expressions (expression e.g. 'tag:foo + type:video')
@@ -3743,41 +3981,55 @@
})();
(function($) {
+
+ /*
+ Utility method for creating dom for the description area of a card.
+ Used in decorateResourceCard and decorateResource.
+ */
+ function buildResourceCardDescription(resource, plusone) {
+ var $description = $('<div>').addClass('description ellipsis');
+
+ $description.append($('<div>').addClass('text').html(resource.summary));
+
+ if (resource.cta) {
+ $description.append($('<a>').addClass('cta').html(resource.cta));
+ }
+
+ if (plusone) {
+ var plusurl = resource.url.indexOf("//") > -1 ? resource.url :
+ "//developer.android.com/" + resource.url;
+
+ $description.append($('<div>').addClass('util')
+ .append($('<div>').addClass('g-plusone')
+ .attr('data-size', 'small')
+ .attr('data-align', 'right')
+ .attr('data-href', plusurl)));
+ }
+
+ return $description;
+ }
+
+
/* Simple jquery function to create dom for a standard resource card */
$.fn.decorateResourceCard = function(resource,plusone) {
var section = resource.group || resource.type;
- var imgUrl;
- if (resource.image) {
- //keep url clean for matching and offline mode handling
- var urlPrefix = resource.image.indexOf("//") > -1 ? "" : toRoot;
- imgUrl = urlPrefix + resource.image;
+ var imgUrl = resource.image ||
+ 'assets/images/resource-card-default-android.jpg';
+
+ if (imgUrl.indexOf('//') === -1) {
+ imgUrl = toRoot + imgUrl;
}
- //add linkout logic here. check url or type, assign a class, map to css :after
- $('<div>')
- .addClass('card-bg')
- .css('background-image', 'url(' + (imgUrl || toRoot + 'assets/images/resource-card-default-android.jpg') + ')')
+
+ $('<div>').addClass('card-bg')
+ .css('background-image', 'url(' + (imgUrl || toRoot +
+ 'assets/images/resource-card-default-android.jpg') + ')')
.appendTo(this);
- if (!plusone) {
- $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
- .append($('<div>').addClass('section').text(section))
- .append($('<div>').addClass('title').html(resource.title))
- .append($('<div>').addClass('description ellipsis')
- .append($('<div>').addClass('text').html(resource.summary))
- .append($('<div>').addClass('util')))
- .appendTo(this);
- } else {
- $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
- .append($('<div>').addClass('section').text(section))
- .append($('<div>').addClass('title').html(resource.title))
- .append($('<div>').addClass('description ellipsis')
- .append($('<div>').addClass('text').html(resource.summary))
- .append($('<div>').addClass('util')
- .append($('<div>').addClass('g-plusone')
- .attr('data-size', 'small')
- .attr('data-align', 'right')
- .attr('data-href', resource.url))))
- .appendTo(this);
- }
+
+ $('<div>').addClass('card-info' + (!resource.summary ? ' empty-desc' : ''))
+ .append($('<div>').addClass('section').text(section))
+ .append($('<div>').addClass('title').html(resource.title))
+ .append(buildResourceCardDescription(resource, plusone))
+ .appendTo(this);
return this;
};
@@ -3860,7 +4112,39 @@
return this;
};
+
+
+
+
+ /* Render other types of resource styles that are not cards. */
+ $.fn.decorateResource = function(resource, opts) {
+ var imgUrl = resource.image ||
+ 'assets/images/resource-card-default-android.jpg';
+ var linkUrl = resource.url;
+
+ if (imgUrl.indexOf('//') === -1) {
+ imgUrl = toRoot + imgUrl;
+ }
+
+ if (linkUrl && linkUrl.indexOf('//') === -1) {
+ linkUrl = toRoot + linkUrl;
+ }
+
+ $(this).append(
+ $('<div>').addClass('image')
+ .css('background-image', 'url(' + imgUrl + ')'),
+ $('<div>').addClass('info').append(
+ $('<h4>').addClass('title').html(resource.title),
+ $('<p>').addClass('summary').html(resource.summary),
+ $('<a>').attr('href', linkUrl).addClass('cta').html('Learn More')
+ )
+ );
+
+ return this;
+ };
})(jQuery);
+
+
/* Calculate the vertical area remaining */
(function($) {
$.fn.ellipsisfade= function(lineHeight) {
@@ -3870,8 +4154,10 @@
var remainingHeight = $this.parent().parent().height();
$this.parent().siblings().each(function ()
{
- var h = $(this).height();
- remainingHeight = remainingHeight - h;
+ if ($(this).is(":visible")) {
+ var h = $(this).height();
+ remainingHeight = remainingHeight - h;
+ }
});
adjustedRemainingHeight = ((remainingHeight)/lineHeight>>0)*lineHeight
@@ -3882,3 +4168,189 @@
return this;
};
}) (jQuery);
+
+/*
+ Fullscreen Carousel
+
+ The following allows for an area at the top of the page that takes over the
+ entire browser height except for its top offset and an optional bottom
+ padding specified as a data attribute.
+
+ HTML:
+
+ <div class="fullscreen-carousel">
+ <div class="fullscreen-carousel-content">
+ <!-- content here -->
+ </div>
+ <div class="fullscreen-carousel-content">
+ <!-- content here -->
+ </div>
+
+ etc ...
+
+ </div>
+
+ Control over how the carousel takes over the screen can mostly be defined in
+ a css file. Setting min-height on the .fullscreen-carousel-content elements
+ will prevent them from shrinking to far vertically when the browser is very
+ short, and setting max-height on the .fullscreen-carousel itself will prevent
+ the area from becoming to long in the case that the browser is stretched very
+ tall.
+
+ There is limited functionality for having multiple sections since that request
+ was removed, but it is possible to add .next-arrow and .prev-arrow elements to
+ scroll between multiple content areas.
+*/
+
+(function() {
+ $(document).ready(function() {
+ $('.fullscreen-carousel').each(function() {
+ initWidget(this);
+ });
+ });
+
+ function initWidget(widget) {
+ var $widget = $(widget);
+
+ var topOffset = $widget.offset().top;
+ var padBottom = parseInt($widget.data('paddingbottom')) || 0;
+ var maxHeight = 0;
+ var minHeight = 0;
+ var $content = $widget.find('.fullscreen-carousel-content');
+ var $nextArrow = $widget.find('.next-arrow');
+ var $prevArrow = $widget.find('.prev-arrow');
+ var $curSection = $($content[0]);
+
+ if ($content.length <= 1) {
+ $nextArrow.hide();
+ $prevArrow.hide();
+ } else {
+ $nextArrow.click(function() {
+ var index = ($content.index($curSection) + 1);
+ $curSection.hide();
+ $curSection = $($content[index >= $content.length ? 0 : index]);
+ $curSection.show();
+ });
+
+ $prevArrow.click(function() {
+ var index = ($content.index($curSection) - 1);
+ $curSection.hide();
+ $curSection = $($content[index < 0 ? $content.length - 1 : 0]);
+ $curSection.show();
+ });
+ }
+
+ // Just hide all content sections except first.
+ $content.each(function(index) {
+ if ($(this).height() > minHeight) minHeight = $(this).height();
+ $(this).css({position: 'absolute', display: index > 0 ? 'none' : ''});
+ });
+
+ // Register for changes to window size, and trigger.
+ $(window).resize(resizeWidget);
+ resizeWidget();
+
+ function resizeWidget() {
+ var height = $(window).height() - topOffset - padBottom;
+ $widget.width($(window).width());
+ $widget.height(height < minHeight ? minHeight :
+ (maxHeight && height > maxHeight ? maxHeight : height));
+ }
+ }
+})();
+
+
+
+
+
+/*
+ Tab Carousel
+
+ The following allows tab widgets to be installed via the html below. Each
+ tab content section should have a data-tab attribute matching one of the
+ nav items'. Also each tab content section should have a width matching the
+ tab carousel.
+
+ HTML:
+
+ <div class="tab-carousel">
+ <ul class="tab-nav">
+ <li><a href="#" data-tab="handsets">Handsets</a>
+ <li><a href="#" data-tab="wearable">Wearable</a>
+ <li><a href="#" data-tab="tv">TV</a>
+ </ul>
+
+ <div class="tab-carousel-content">
+ <div data-tab="handsets">
+ <!--Full width content here-->
+ </div>
+
+ <div data-tab="wearable">
+ <!--Full width content here-->
+ </div>
+
+ <div data-tab="tv">
+ <!--Full width content here-->
+ </div>
+ </div>
+ </div>
+
+*/
+(function() {
+ $(document).ready(function() {
+ $('.tab-carousel').each(function() {
+ initWidget(this);
+ });
+ });
+
+ function initWidget(widget) {
+ var $widget = $(widget);
+ var $nav = $widget.find('.tab-nav');
+ var $anchors = $nav.find('[data-tab]');
+ var $li = $nav.find('li');
+ var $contentContainer = $widget.find('.tab-carousel-content');
+ var $tabs = $contentContainer.find('[data-tab]');
+ var $curTab = $($tabs[0]); // Current tab is first tab.
+ var width = $widget.width();
+
+ // Setup nav interactivity.
+ $anchors.click(function(evt) {
+ evt.preventDefault();
+ var query = '[data-tab=' + $(this).data('tab') + ']';
+ transitionWidget($tabs.filter(query));
+ });
+
+ // Add highlight for navigation on first item.
+ var $highlight = $('<div>').addClass('highlight')
+ .css({left:$li.position().left + 'px', width:$li.outerWidth() + 'px'})
+ .appendTo($nav);
+
+ // Store height since we will change contents to absolute.
+ $contentContainer.height($contentContainer.height());
+
+ // Absolutely position tabs so they're ready for transition.
+ $tabs.each(function(index) {
+ $(this).css({position: 'absolute', left: index > 0 ? width + 'px' : '0'});
+ });
+
+ function transitionWidget($toTab) {
+ if (!$curTab.is($toTab)) {
+ var curIndex = $tabs.index($curTab[0]);
+ var toIndex = $tabs.index($toTab[0]);
+ var dir = toIndex > curIndex ? 1 : -1;
+
+ // Animate content sections.
+ $toTab.css({left:(width * dir) + 'px'});
+ $curTab.animate({left:(width * -dir) + 'px'});
+ $toTab.animate({left:'0'});
+
+ // Animate navigation highlight.
+ $highlight.animate({left:$($li[toIndex]).position().left + 'px',
+ width:$($li[toIndex]).outerWidth() + 'px'})
+
+ // Store new current section.
+ $curTab = $toTab;
+ }
+ }
+ }
+})();
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/prettify.js b/tools/droiddoc/templates-sdk-dev/assets/js/prettify.js
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/assets/js/prettify.js
rename to tools/droiddoc/templates-sdk-dev/assets/js/prettify.js
diff --git a/tools/droiddoc/templates-sdk-dyn/class.cs b/tools/droiddoc/templates-sdk-dev/class.cs
similarity index 93%
copy from tools/droiddoc/templates-sdk-dyn/class.cs
copy to tools/droiddoc/templates-sdk-dev/class.cs
index 0461af6..693eaed 100644
--- a/tools/droiddoc/templates-sdk-dyn/class.cs
+++ b/tools/droiddoc/templates-sdk-dev/class.cs
@@ -1,9 +1,12 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"macros_override.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>" itemscope itemtype="http://schema.org/Article">
@@ -123,6 +126,7 @@
<?cs /if ?>
<?cs set:colspan = colspan-1 ?>
<?cs /each ?>
+<?cs call:show_annotations_list(class) ?>
</div><!-- end header -->
@@ -165,13 +169,15 @@
<div class="jd-descr">
<?cs call:deprecated_warning(class) ?>
-<?cs if:subcount(class.descr) ?>
+<?cs if:subcount(class.descr) || subcount(class.annotationdocumentation) ?>
<h2>Class Overview</h2>
-<p itemprop="articleBody"><?cs call:tag_list(class.descr) ?></p>
+<?cs if:subcount(class.descr) ?><p itemprop="articleBody"><?cs call:tag_list(class.descr) ?></p><?cs /if ?>
+<?cs if:subcount(class.annotationdocumentation) ?><?cs each:annodoc = class.annotationdocumentation?>
+<p><?cs var:annodoc.text ?></p>
+<?cs /each?><?cs /if?>
<?cs /if ?>
<?cs call:see_also_tags(class.seeAlso) ?>
-
</div><!-- jd-descr -->
@@ -192,9 +198,12 @@
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><?cs call:cond_link(method.name, toroot, method.href, included) ?></span>(<?cs call:parameter_list(method.params) ?>)</nobr>
- <?cs if:subcount(method.shortDescr) || subcount(method.deprecated) ?>
- <div class="jd-descrdiv"><?cs call:short_descr(method) ?></div>
- <?cs /if ?>
+ <?cs if:subcount(method.shortDescr) || subcount(method.deprecated) || subcount(method.showAnnotations) ?>
+ <div class="jd-descrdiv">
+ <?cs if:subcount(method.shortDescr) || subcount(method.annotationdocumentation) ?><?cs call:short_descr(method)?><?cs /if?>
+ <?cs call:show_annotations_list(method) ?>
+ </div>
+ <?cs /if ?>
</td></tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -210,7 +219,10 @@
<?cs var:field.final ?>
<?cs call:type_link(field.type) ?></nobr></td>
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?></td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(field) ?>
+ <?cs call:show_annotations_list(field) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -222,7 +234,10 @@
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
<td class="jd-typecol"><?cs call:type_link(field.type) ?></td>
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, included) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?></td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(field) ?>
+ <?cs call:show_annotations_list(field) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -242,7 +257,10 @@
<?cs call:cond_link(m.name, toroot, m.href, included) ?>
<?cs /each ?>
</td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(attr) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(attr) ?>
+ <?cs call:show_annotations_list(attr) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -259,7 +277,10 @@
<?cs var:cl.abstract ?>
<?cs var:cl.kind ?></nobr></td>
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(cl) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(cl) ?>
+ <?cs call:show_annotations_list(cl) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -335,7 +356,10 @@
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:field.since ?>" >
<td class="jd-descrcol"><?cs call:type_link(field.type) ?> </td>
<td class="jd-linkcol"><?cs call:cond_link(field.name, toroot, field.href, cl.included) ?> </td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(field) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(field) ?>
+ <?cs call:show_annotations_list(field) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
@@ -504,6 +528,7 @@
<?cs call:federated_refs(field) ?>
</div>
<div class="jd-details-descr">
+ <?cs call:show_annotations_list(field) ?>
<?cs call:description(field) ?>
<?cs if:subcount(field.constantValue) ?>
<div class="jd-tagdata">
@@ -546,6 +571,7 @@
<?cs call:federated_refs(method) ?>
</div>
<div class="jd-details-descr">
+ <?cs call:show_annotations_list(method) ?>
<?cs call:description(method) ?>
</div>
</div>
@@ -560,6 +586,7 @@
<h4 class="jd-details-title"><?cs var:attr.name ?>
</h4>
<div class="jd-details-descr">
+ <?cs call:show_annotations_list(attr) ?>
<?cs call:description(attr) ?>
<div class="jd-tagdata">
diff --git a/tools/droiddoc/templates-sdk-dyn/classes.cs b/tools/droiddoc/templates-sdk-dev/classes.cs
similarity index 84%
copy from tools/droiddoc/templates-sdk-dyn/classes.cs
copy to tools/droiddoc/templates-sdk-dev/classes.cs
index 6769f47..405892d 100644
--- a/tools/droiddoc/templates-sdk-dyn/classes.cs
+++ b/tools/droiddoc/templates-sdk-dev/classes.cs
@@ -1,9 +1,12 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"macros_override.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>" itemscope itemtype="http://schema.org/Article">
@@ -30,7 +33,10 @@
<?cs each:cl = letter ?>
<tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.since ?>" >
<td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
- <td class="jd-descrcol" width="100%"><?cs call:short_descr(cl) ?> </td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(cl) ?>
+ <?cs call:show_annotations_list(cl) ?>
+ </td>
</tr>
<?cs set:count = count + #1 ?>
<?cs /each ?>
diff --git a/tools/droiddoc/templates-sdk-dyn/components/masthead.cs b/tools/droiddoc/templates-sdk-dev/components/masthead.cs
similarity index 67%
rename from tools/droiddoc/templates-sdk-dyn/components/masthead.cs
rename to tools/droiddoc/templates-sdk-dev/components/masthead.cs
index d0ff64d..d48ea29 100644
--- a/tools/droiddoc/templates-sdk-dyn/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk-dev/components/masthead.cs
@@ -1,12 +1,58 @@
<?cs def:custom_masthead() ?>
-<?cs if:wear ?>
- <?cs call:wear_masthead() ?>
+<?cs if:preview ?>
+ <?cs call:preview_masthead() ?>
<?cs else ?>
<a name="top"></a>
+
+<!-- dialog to prompt lang pref change when loaded from hardcoded URL
+<div id="langMessage" style="display:none">
+ <div>
+ <div class="lang en">
+ <p>You requested a page in English, would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang es">
+ <p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang ja">
+ <p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang ko">
+ <p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang ru">
+ <p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang zh-cn">
+ <p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p>
+ </div>
+ <div class="lang zh-tw">
+ <p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p>
+ </div>
+ <a href="#" class="button yes" onclick="return false;">
+ <span class="lang en">Yes</span>
+ <span class="lang es">Sí</span>
+ <span class="lang ja">Yes</span>
+ <span class="lang ko">Yes</span>
+ <span class="lang ru">Yes</span>
+ <span class="lang zh-cn">是的</span>
+ <span class="lang zh-tw">没有</span>
+ </a>
+ <a href="#" class="button" onclick="$('#langMessage').hide();return false;">
+ <span class="lang en">No</span>
+ <span class="lang es">No</span>
+ <span class="lang ja">No</span>
+ <span class="lang ko">No</span>
+ <span class="lang ru">No</span>
+ <span class="lang zh-cn">没有</span>
+ <span class="lang zh-tw">没有</span>
+ </a>
+ </div>
+</div> -->
+
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it is in devsite template ?>
<!-- Header -->
<div id="header-wrapper">
- <div id="header">
+ <div id="header"><?cs call:butter_bar() ?>
<div class="wrap" id="header-wrap">
<div class="col-3 logo">
<a href="<?cs var:toroot ?>index.html">
@@ -54,11 +100,20 @@
<!-- Expanded quicknav -->
- <div id="quicknav" class="col-9">
+ <div id="quicknav" class="col-13">
<ul>
+ <li class="about">
+ <ul>
+ <li><a href="<?cs var:toroot ?>about/index.html">About</a></li>
+ <li><a href="<?cs var:toroot ?>wear/index.html">Wear</a></li>
+ <li><a href="<?cs var:toroot ?>tv/index.html">TV</a></li>
+ <li><a href="<?cs var:toroot ?>auto/index.html">Auto</a></li>
+ </ul>
+ </li>
<li class="design">
<ul>
<li><a href="<?cs var:toroot ?>design/index.html">Get Started</a></li>
+ <li><a href="<?cs var:toroot ?>design/devices.html">Devices</a></li>
<li><a href="<?cs var:toroot ?>design/style/index.html">Style</a></li>
<li><a href="<?cs var:toroot ?>design/patterns/index.html">Patterns</a></li>
<li><a href="<?cs var:toroot ?>design/building-blocks/index.html">Building Blocks</a></li>
@@ -92,7 +147,7 @@
ja-lang="リファレンス"
es-lang="Referencia"
>Reference</a></li>
- <li><a href="<?cs var:toroot ?>tools/index.html"
+ <li><a href="<?cs var:toroot ?>sdk/index.html"
zh-tw-lang="相關工具"
zh-cn-lang="工具"
ru-lang="Инструменты"
@@ -100,7 +155,6 @@
ja-lang="ツール"
es-lang="Herramientas"
>Tools</a>
- <ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the SDK</a></li></ul>
</li>
<li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
</li>
@@ -117,6 +171,7 @@
<li><a href="<?cs var:toroot ?>distribute/users/index.html">Get Users</a></li>
<li><a href="<?cs var:toroot ?>distribute/engage/index.html">Engage & Retain</a></li>
<li><a href="<?cs var:toroot ?>distribute/monetize/index.html">Monetize</a></li>
+ <li><a href="<?cs var:toroot ?>distribute/analyze/index.html">Analyze</a></li>
<li><a href="<?cs var:toroot ?>distribute/tools/index.html">Tools & Reference</a></li>
<li><a href="<?cs var:toroot ?>distribute/stories/index.html">Developer Stories</a></li>
</ul>
@@ -126,10 +181,35 @@
</div><!-- end header-wrap.wrap -->
</div><!-- end header -->
- <?cs if:training || guide || reference || tools || develop || google || samples ?>
+ <?cs if:about || wear || tv || auto ?>
<!-- Secondary x-nav -->
<div id="nav-x">
<div class="wrap">
+ <ul class="nav-x col-9 about" style="width:100%">
+ <li class="about"><a href="<?cs var:toroot ?>about/index.html"
+ >About</a></li>
+ <li class="wear"><a href="<?cs var:toroot ?>wear/index.html"
+ >Wear</a></li>
+ <li class="tv"><a href="<?cs var:toroot ?>tv/index.html"
+ >TV</a></li>
+ <li class="auto"><a href="<?cs var:toroot ?>auto/index.html"
+ >Auto</a></li>
+ </ul>
+ </div>
+ </div>
+ <!-- /Sendondary x-nav ABOUT -->
+
+
+
+ <?cs elif:training || guide || reference || tools || develop || google || samples ?>
+ <!-- Secondary x-nav -->
+ <div id="nav-x">
+ <div class="wrap" style="position:relative;z-index:1">
+
+ <?cs if:reference ?>
+
+ <?cs /if ?>
+
<ul class="nav-x col-9 develop" style="width:100%">
<li class="training"><a href="<?cs var:toroot ?>training/index.html"
zh-tw-lang="訓練課程"
@@ -155,7 +235,7 @@
ja-lang="リファレンス"
es-lang="Referencia"
>Reference</a></li>
- <li class="tools"><a href="<?cs var:toroot ?>tools/index.html"
+ <li class="tools"><a href="<?cs var:toroot ?>sdk/index.html"
zh-tw-lang="相關工具"
zh-cn-lang="工具"
ru-lang="Инструменты"
@@ -174,9 +254,9 @@
</ul>
</div>
</div>
- <!-- /Sendondary x-nav -->
+ <!-- /Sendondary x-nav DEVELOP -->
- <?cs elif:distribute || googleplay || essentials || users || engage || monetize || disttools || stories ?>
+ <?cs elif:distribute || googleplay || essentials || users || engage || monetize || analyze || disttools || stories ?>
<!-- Secondary distribute x-nav -->
<div id="nav-x">
<div class="wrap">
@@ -192,6 +272,9 @@
<li class="monetize"><a href="<?cs var:toroot ?>distribute/monetize/index.html"
>Monetize</a>
</li>
+ <li class="analyze"><a href="<?cs var:toroot ?>distribute/analyze/index.html"
+ >Analyze</a>
+ </li>
<li class="disttools"><a href="<?cs var:toroot ?>distribute/tools/index.html"
>Tools</a>
</li>
@@ -202,6 +285,7 @@
<a href="https://play.google.com/apps/publish/" class="developer-console-btn">Developer Console</a>
</div> <!-- /Secondary distribute x-nav -->
</div>
+ <!-- /Sendondary x-nav DISTRIBUTE -->
<?cs /if ?>
<div id="searchResults" class="wrap" style="display:none;">
@@ -223,23 +307,25 @@
</div>
<?cs /if ?><?cs # end if/else !devsite ?>
-<?cs /if ?><?cs # end if/else wear ?><?cs
+<?cs /if ?><?cs # end if/else preview ?><?cs
/def ?>
-<?cs def:wear_masthead() ?>
+<?cs def:preview_masthead() ?>
<a name="top"></a>
+
<!-- Header -->
<div id="header-wrapper">
- <div id="header">
+ <div id="header"><?cs call:butter_bar() ?>
<div class="wrap" id="header-wrap">
- <div class="col_3 logo wear-logo">
- <a href="<?cs var:toroot ?>wear/index.html">
- <img src="<?cs var:toroot ?>wear/images/android-wear.png" height="16" alt="Android Wear" />
+ <div class="col_3 logo landing-logo" style="width:240px">
+ <a href="<?cs var:toroot ?>preview/index.html">
+ <img src="<?cs var:toroot ?>assets/images/android.png" height="25" alt="Android"
+ style="margin:-3px 0 0" />
</a>
</div>
- <div class="col-8" style="margin:0"><h1 style="margin:1px 0 0 20px;padding:0;line-height:16px;
-color:#666;font-weight:100;font-size:24px;">Developer Preview</h1></div>
+ <div class="col-8" style="margin:0"><h1 style="margin: 4px 0 0 0px;padding:0;line-height:16px;
+color:#666;font-weight:100;font-size:27px;">M Developer Preview</h1></div>
<?cs # ADD SEARCH AND MENU ?>
<?cs call:header_search_widget() ?>
@@ -268,3 +354,22 @@
<?cs
/def ?>
+
+
+<?cs # (UN)COMMENT THE INSIDE OF THIS METHOD TO TOGGLE VISIBILITY ?>
+<?cs def:butter_bar() ?>
+
+<?cs # HIDE THE BUTTER BAR
+
+ <div style="height:20px"><!-- spacer to bump header down --></div>
+ <div id="butterbar-wrapper">
+ <div id="butterbar">
+ <a href="http://googleblog.blogspot.com/" id="butterbar-message">
+ The Android {version_number} SDK will be available on {Month} {Day}!
+ </a>
+ </div>
+ </div>
+
+?>
+
+<?cs /def ?>
diff --git a/tools/droiddoc/templates-sdk-dyn/customizations.cs b/tools/droiddoc/templates-sdk-dev/customizations.cs
similarity index 92%
rename from tools/droiddoc/templates-sdk-dyn/customizations.cs
rename to tools/droiddoc/templates-sdk-dev/customizations.cs
index 27822d5..c8c88cc 100644
--- a/tools/droiddoc/templates-sdk-dyn/customizations.cs
+++ b/tools/droiddoc/templates-sdk-dev/customizations.cs
@@ -112,6 +112,20 @@
</script>
<?cs /def ?><?cs
+def:analyze_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/analyze/analyze_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?><?cs
+
def:monetize_nav() ?>
<div class="wrap clearfix" id="body-content">
<div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
@@ -290,6 +304,22 @@
</script>
<?cs /def ?>
+<?cs
+def:preview_nav() ?>
+ <div class="wrap clearfix" id="body-content">
+ <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div id="devdoc-nav" class="scroll-pane">
+ <?cs
+ include:"../../../../frameworks/base/docs/html/preview/preview_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
+
<?cs # The default side navigation for the reference docs ?><?cs
def:default_left_nav() ?>
<?cs if:reference.gcm || reference.gms ?>
@@ -337,6 +367,7 @@
<?cs
if:subcount(class.package) ?>
<ul>
+ <?cs call:list("Annotations", class.package.annotations) ?>
<?cs call:list("Interfaces", class.package.interfaces) ?>
<?cs call:list("Classes", class.package.classes) ?>
<?cs call:list("Enums", class.package.enums) ?>
@@ -345,6 +376,7 @@
</ul><?cs
elif:subcount(package) ?>
<ul>
+ <?cs call:class_link_list("Annotations", package.annotations) ?>
<?cs call:class_link_list("Interfaces", package.interfaces) ?>
<?cs call:class_link_list("Classes", package.classes) ?>
<?cs call:class_link_list("Enums", package.enums) ?>
@@ -431,8 +463,8 @@
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="ru">Русский</option>
- <option value="zh-cn">中文 (中国)</option>
- <option value="zh-tw">中文 (台灣)</option>
+ <option value="zh-cn">中文(简体)</option>
+ <option value="zh-tw">中文(繁體)</option>
</select>
</div>
<script type="text/javascript">
@@ -526,6 +558,8 @@
call:engage_nav() ?><?cs
elif:monetize ?><?cs
call:monetize_nav() ?><?cs
+ elif:analyze ?><?cs
+ call:analyze_nav() ?><?cs
elif:disttools ?><?cs
call:disttools_nav() ?><?cs
elif:stories ?><?cs
@@ -537,6 +571,8 @@
call:distribute_nav() ?><?cs
elif:wear ?><?cs
call:wear_nav() ?><?cs
+ elif:preview ?><?cs
+ call:preview_nav() ?><?cs
else ?><?cs
call:default_left_nav() ?> <?cs
/if ?><?cs
diff --git a/tools/droiddoc/templates-sdk-dyn/data.hdf b/tools/droiddoc/templates-sdk-dev/data.hdf
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/data.hdf
rename to tools/droiddoc/templates-sdk-dev/data.hdf
diff --git a/tools/droiddoc/templates-sdk-dyn/designpage.cs b/tools/droiddoc/templates-sdk-dev/designpage.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/designpage.cs
rename to tools/droiddoc/templates-sdk-dev/designpage.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/docpage.cs b/tools/droiddoc/templates-sdk-dev/docpage.cs
similarity index 78%
rename from tools/droiddoc/templates-sdk-dyn/docpage.cs
rename to tools/droiddoc/templates-sdk-dev/docpage.cs
index 7eae405..83b1199 100644
--- a/tools/droiddoc/templates-sdk-dyn/docpage.cs
+++ b/tools/droiddoc/templates-sdk-dev/docpage.cs
@@ -2,7 +2,7 @@
<?cs include:"macros.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
-<body class="gc-documentation
+<body class="gc-documentation
<?cs
if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?><?cs
@@ -18,7 +18,7 @@
if:monetize ?> monetize<?cs /if ?><?cs
if:disttools ?> disttools<?cs /if ?><?cs
if:stories ?> stories<?cs /if ?><?cs
- elif:about ?>about<?cs
+ elif:(about||wear||tv||auto) ?>about<?cs
elif:design ?>design<?cs
/if ?><?cs
if:page.trainingcourse ?> trainingcourse<?cs
@@ -90,7 +90,7 @@
</div>
<?cs /if ?><?cs # end if training ?>
</div>
- <?cs /if ?>
+ <?cs /if ?><?cs # end if header.hide ?>
<?cs elif:samplesProjectIndex ?>
<div id="api-info-block">
@@ -103,7 +103,14 @@
<h1 itemprop="name"><?cs var:projectDir ?></h1>
<?cs else ?>
-
+ <?cs if:training ?>
+<?cs # horrible horrible hack to move TOC up when the next/prev links are not there ?>
+<style>
+ #tb-wrapper {
+ margin-top:6px;
+ }
+</style>
+ <?cs /if ?>
<?cs if:(!fullpage && !header.hide) ?>
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
@@ -150,25 +157,9 @@
if:fullpage ?>wrap<?cs
else ?>layout-content-row<?cs /if ?>"
itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div class="layout-content-col <?cs
- if:fullpage ?>col-16<?cs
- elif:training||guide ?>col-8<?cs
- else ?>col-9<?cs /if ?>" style="padding-top:4px">
- <?cs if:!page.noplus ?><?cs if:fullpage ?><style>#___plusone_0 {float:right !important;}</style><?cs /if ?>
- <div class="g-plusone" data-size="medium"></div>
- <?cs /if ?>
- </div>
<?cs if:!fullscreen ?>
- <div class="paging-links layout-content-col col-4">
+ <div class="paging-links layout-content-col col-10">
<?cs if:(design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
- <a href="#" class="prev-page-link hide"
- zh-tw-lang="上一堂課"
- zh-cn-lang="上一课"
- ru-lang="Предыдущий"
- ko-lang="이전"
- ja-lang="前へ"
- es-lang="Anterior"
- >Previous</a>
<a href="#" class="next-page-link hide"
zh-tw-lang="下一堂課"
zh-cn-lang="下一课"
@@ -185,41 +176,28 @@
ja-lang="開始する"
es-lang="Empezar"
>Get started</a>
+ <a href="#" class="next-class-link hide">Next class</a>
+ <?cs /if ?>
+ </div>
+ <div class="layout-content-col plus-container col-2" >
+ <?cs if:!page.noplus ?><?cs if:fullpage ?><style>#___plusone_0 {float:right !important;}</style><?cs /if ?>
+ <div class="g-plusone" data-size="medium"></div>
<?cs /if ?>
</div>
<?cs /if ?>
</div>
- <?cs # for training classes, provide a different kind of link when the next page is a different class ?>
- <?cs if:training && !page.article ?>
- <div class="layout-content-row content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <a href="#" class="next-class-link hide">Next class: </a>
- </div>
- <?cs /if ?>
-
</div> <!-- end jd-content -->
<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
-<!-- Start of Tag -->
-<script type="text/javascript">
-var axel = Math.random() + "";
-var a = axel * 10000000000000;
-document.write('<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>');
-</script>
-<noscript>
-<iframe src="https://2507573.fls.doubleclick.net/activityi;src=2507573;type=other026;cat=googl348;ord=1?" width="1" height="1" frameborder="0" style="display:none"></iframe>
-</noscript>
-<!-- End of Tag -->
-
-
<?cs include:"trailer.cs" ?>
<script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_lists_unified.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_extras.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_collections.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_tag_helpers.js" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_lists_unified.js?v=9" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_extras.js?v=11" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_collections.js?v=12" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_tag_helpers.js?v=5" type="text/javascript"></script>
</body>
</html>
diff --git a/tools/droiddoc/templates-sdk-dyn/footer.cs b/tools/droiddoc/templates-sdk-dev/footer.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/footer.cs
rename to tools/droiddoc/templates-sdk-dev/footer.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/gcm_navtree_data.cs b/tools/droiddoc/templates-sdk-dev/gcm_navtree_data.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/gcm_navtree_data.cs
rename to tools/droiddoc/templates-sdk-dev/gcm_navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/gms_navtree_data.cs b/tools/droiddoc/templates-sdk-dev/gms_navtree_data.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/gms_navtree_data.cs
rename to tools/droiddoc/templates-sdk-dev/gms_navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/head_tag.cs b/tools/droiddoc/templates-sdk-dev/head_tag.cs
similarity index 65%
rename from tools/droiddoc/templates-sdk-dyn/head_tag.cs
rename to tools/droiddoc/templates-sdk-dev/head_tag.cs
index 732118f..9f79f54 100644
--- a/tools/droiddoc/templates-sdk-dyn/head_tag.cs
+++ b/tools/droiddoc/templates-sdk-dev/head_tag.cs
@@ -24,8 +24,8 @@
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
/if ?>
<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>favicon.ico" />
-<title><?cs
- if:page.title ?><?cs
+<title><?cs
+ if:page.title ?><?cs
var:page.title ?> | <?cs
/if ?>Android Developers</title>
@@ -38,9 +38,9 @@
if:android.whichdoc != 'online' ?>http:<?cs
/if ?>//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
title="roboto">
-<link href="<?cs var:toroot ?>assets/css/default.css" rel="stylesheet" type="text/css">
+<link href="<?cs var:toroot ?>assets/css/default.css?v=5" rel="stylesheet" type="text/css">
-<?cs if:reference && !(reference.gms || reference.gcm || wear) ?>
+<?cs if:reference && !(reference.gms || reference.gcm || preview) ?>
<!-- FULLSCREEN STYLESHEET -->
<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
type="text/css">
@@ -62,17 +62,25 @@
var metaTags = [<?cs var:meta.tags ?>];
var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
</script>
-<script src="<?cs var:toroot ?>assets/js/docs.js" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>assets/js/docs.js?v=3" type="text/javascript"></script>
-<script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-5831155-1']);
- _gaq.push(['_trackPageview']);
+<?cs if:helpoutsWidget ?>
+<script type="text/javascript" src="https://helpouts.google.com/ps/res/embed.js" defer async
+ data-helpouts-embed data-helpouts-vertical="programming"
+ data-helpouts-tags="<?cs var:page.tags ?>" data-helpouts-prefix="android"
+ data-helpouts-standalone="true"></script>
+<?cs /if ?>
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
+<script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-5831155-1', 'android.com');
+ ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker);
+ ga('send', 'pageview');
+ ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>
+
</head>
diff --git a/tools/droiddoc/templates-sdk-dyn/header.cs b/tools/droiddoc/templates-sdk-dev/header.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/header.cs
rename to tools/droiddoc/templates-sdk-dev/header.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/header_tabs.cs b/tools/droiddoc/templates-sdk-dev/header_tabs.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/header_tabs.cs
rename to tools/droiddoc/templates-sdk-dev/header_tabs.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/jd_lists_unified.cs b/tools/droiddoc/templates-sdk-dev/jd_lists_unified.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/jd_lists_unified.cs
rename to tools/droiddoc/templates-sdk-dev/jd_lists_unified.cs
diff --git a/tools/droiddoc/templates-sdk-dev/macros_override.cs b/tools/droiddoc/templates-sdk-dev/macros_override.cs
new file mode 100644
index 0000000..0a94598
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dev/macros_override.cs
@@ -0,0 +1,36 @@
+<?cs # Create a comma separated list of annotations on obj that were in showAnnotations in Doclava ?>
+<?cs # pre is an HTML string to start the list, post is an HTML string to close the list ?>
+<?cs # for example call:show_annotations_list(cl, "<td>Annotations: ", "</td>") ?>
+<?cs # if obj has nothing on obj.showAnnotations, nothing will be output ?>
+<?cs def:show_annotations_list(obj) ?>
+ <?cs each:anno = obj.showAnnotations ?>
+ <?cs if:first(anno) ?>
+ <span class='annotation-message'>
+ Included in documentation by the annotations:
+ <?cs /if ?>
+ @<?cs var:anno.type.label ?>
+ <?cs if:last(anno) == 0 ?>
+ ,
+ <?cs /if ?>
+ <?cs if:last(anno)?>
+ </span>
+ <?cs /if ?>
+ <?cs /each ?>
+<?cs /def ?>
+
+<?cs # Override default class_link_table to display annotations ?>
+<?cs def:class_link_table(classes) ?>
+ <?cs set:count = #1 ?>
+ <table class="jd-sumtable-expando">
+ <?cs each:cl=classes ?>
+ <tr class="<?cs if:count % #2 ?>alt-color<?cs /if ?> api apilevel-<?cs var:cl.type.since ?>" >
+ <td class="jd-linkcol"><?cs call:type_link(cl.type) ?></td>
+ <td class="jd-descrcol" width="100%">
+ <?cs call:short_descr(cl) ?>
+ <?cs call:show_annotations_list(cl) ?>
+ </td>
+ </tr>
+ <?cs set:count = count + #1 ?>
+ <?cs /each ?>
+ </table>
+<?cs /def ?>
\ No newline at end of file
diff --git a/tools/droiddoc/templates-sdk-dyn/navtree_data.cs b/tools/droiddoc/templates-sdk-dev/navtree_data.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/navtree_data.cs
rename to tools/droiddoc/templates-sdk-dev/navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/nosidenavpage.cs b/tools/droiddoc/templates-sdk-dev/nosidenavpage.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/nosidenavpage.cs
rename to tools/droiddoc/templates-sdk-dev/nosidenavpage.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/package.cs b/tools/droiddoc/templates-sdk-dev/package.cs
similarity index 91%
copy from tools/droiddoc/templates-sdk-dyn/package.cs
copy to tools/droiddoc/templates-sdk-dev/package.cs
index 99eaff2..2225565 100644
--- a/tools/droiddoc/templates-sdk-dyn/package.cs
+++ b/tools/droiddoc/templates-sdk-dev/package.cs
@@ -1,10 +1,13 @@
<?cs include:"doctype.cs" ?>
<?cs include:"macros.cs" ?>
+<?cs include:"macros_override.cs" ?>
<html<?cs if:devsite ?> devsite<?cs /if ?>>
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>">
@@ -45,6 +48,7 @@
<?cs /if ?>
<?cs /def ?>
+<?cs call:class_table("Annotations", package.annotations) ?>
<?cs call:class_table("Interfaces", package.interfaces) ?>
<?cs call:class_table("Classes", package.classes) ?>
<?cs call:class_table("Enums", package.enums) ?>
diff --git a/tools/droiddoc/templates-sdk-dyn/packages.cs b/tools/droiddoc/templates-sdk-dev/packages.cs
similarity index 95%
copy from tools/droiddoc/templates-sdk-dyn/packages.cs
copy to tools/droiddoc/templates-sdk-dev/packages.cs
index 44680c3..5056d3a 100644
--- a/tools/droiddoc/templates-sdk-dyn/packages.cs
+++ b/tools/droiddoc/templates-sdk-dev/packages.cs
@@ -4,6 +4,8 @@
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
<?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
+ if:reference ?> reference<?cs
+ /if ?><?cs
elif:design ?>design<?cs
elif:distribute ?>distribute<?cs
/if ?>">
diff --git a/tools/droiddoc/templates-sdk-dyn/sample.cs b/tools/droiddoc/templates-sdk-dev/sample.cs
similarity index 97%
copy from tools/droiddoc/templates-sdk-dyn/sample.cs
copy to tools/droiddoc/templates-sdk-dev/sample.cs
index c6f28f8..32a0788 100644
--- a/tools/droiddoc/templates-sdk-dyn/sample.cs
+++ b/tools/droiddoc/templates-sdk-dev/sample.cs
@@ -18,7 +18,7 @@
<a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/index.html">Overview</a>
| <a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/project.html">Project</a>
| <a href="<?cs var:toroot ?>downloads/samples/<?cs var:projectDir ?>.zip"
- onclick="_gaq.push(['_trackEvent', 'Samples', 'Download', <?cs var:projectDir ?>]);"
+ onclick="ga('send', 'event', 'Samples', 'Download', <?cs var:projectDir ?>);"
>Download</a>
</div><!-- end sum-details-links -->
diff --git a/tools/droiddoc/templates-sdk-dyn/sampleindex.cs b/tools/droiddoc/templates-sdk-dev/sampleindex.cs
similarity index 97%
copy from tools/droiddoc/templates-sdk-dyn/sampleindex.cs
copy to tools/droiddoc/templates-sdk-dev/sampleindex.cs
index 98767b1..1bacb53 100644
--- a/tools/droiddoc/templates-sdk-dyn/sampleindex.cs
+++ b/tools/droiddoc/templates-sdk-dev/sampleindex.cs
@@ -21,7 +21,7 @@
| <a href="<?cs var:toroot ?>samples/<?cs var:projectDir ?>/project.html">Project</a>
<?cs /if ?>
| <a href="<?cs var:toroot ?>downloads/samples/<?cs var:projectDir ?>.zip"
- onclick="_gaq.push(['_trackEvent', 'Samples', 'Download', <?cs var:projectDir ?>]);"
+ onclick="ga('send', 'event', 'Samples', 'Download', <?cs var:projectDir ?>);"
>Download</a>
</div><!-- end sum-details-links -->
diff --git a/tools/droiddoc/templates-sdk-dyn/samples_navtree_data.cs b/tools/droiddoc/templates-sdk-dev/samples_navtree_data.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/samples_navtree_data.cs
rename to tools/droiddoc/templates-sdk-dev/samples_navtree_data.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/sdkpage.cs b/tools/droiddoc/templates-sdk-dev/sdkpage.cs
similarity index 69%
copy from tools/droiddoc/templates-sdk-dyn/sdkpage.cs
copy to tools/droiddoc/templates-sdk-dev/sdkpage.cs
index 95f6596..817ac47 100644
--- a/tools/droiddoc/templates-sdk-dyn/sdkpage.cs
+++ b/tools/droiddoc/templates-sdk-dev/sdkpage.cs
@@ -183,21 +183,7 @@
<td><?cs var:ndk.linux64.legacy_bytes ?></td>
<td><?cs var:ndk.linux64.legacy_checksum ?></td>
</tr> -->
- <tr>
- <th>Additional Download</th>
- <th>Package</th>
- <th style="white-space:nowrap">Size (Bytes)</th>
- <th>MD5 Checksum</th>
- </tr>
- <tr>
- <td>STL debug info</td>
- <td>
- <a onClick="return onDownload(this)"
- href="http://dl.google.com/android/ndk/<?cs var:ndk.debug_info_download ?>"><?cs var:ndk.debug_info_download ?></a>
- </td>
- <td><?cs var:ndk.debug_info_bytes ?></td>
- <td><?cs var:ndk.debug_info_checksum ?></td>
- </tr>
+
</table>
<?cs ######## HERE IS THE JD DOC CONTENT ######### ?>
@@ -278,89 +264,25 @@
-<h4><a href='' class="expandable"
- onclick="toggleExpandable(this,'.pax');hideExpandable('.myide,.reqs');return false;"
- >DOWNLOAD FOR OTHER PLATFORMS</a></h4>
+<div class="pax col-13 online" style="margin:0;">
-<div class="pax col-13 online" style="display:none;margin:0;">
+<h3>SDK Tools Only</h3>
+<p>If you prefer to use a different IDE or run the tools from the
+command line or with build scripts, you can instead download the stand-alone Android SDK Tools.
+These packages provide the basic SDK tools for app development, without an IDE.
+Also see the <a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">SDK tools release notes</a>.</p>
-<p class="table-caption"><strong>ADT Bundle</strong></p>
<table class="download">
<tr>
<th>Platform</th>
<th>Package</th>
<th>Size</th>
- <th>MD5 Checksum</th>
+ <th>SHA-1 Checksum</th>
</tr>
<tr>
- <td>Windows 32-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="win-bundle32"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.win32_bundle_download ?>"><?cs var:sdk.win32_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.win32_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.win32_bundle_checksum ?></td>
- </tr>
- <tr>
- <td>Windows 64-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="win-bundle64"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.win64_bundle_download ?>"><?cs var:sdk.win64_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.win64_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.win64_bundle_checksum ?></td>
- </tr>
- <tr>
- <td><nobr>Mac OS X 64-bit</nobr></td>
- <td>
- <a onClick="return onDownload(this)" id="mac-bundle64"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.mac64_bundle_download ?>"><?cs var:sdk.mac64_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.mac64_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.mac64_bundle_checksum ?></td>
- </tr>
- <tr>
- <td>Linux 32-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="linux-bundle32"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.linux32_bundle_download ?>"><?cs var:sdk.linux32_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.linux32_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.linux32_bundle_checksum ?></td>
- </tr>
- <tr>
- <td>Linux 64-bit</td>
- <td>
- <a onClick="return onDownload(this)" id="linux-bundle64"
- href="http://dl.google.com/android/adt/<?cs var:sdk.version ?>/<?cs var:sdk.linux64_bundle_download ?>"><?cs var:sdk.linux64_bundle_download ?></a>
- </td>
- <td><?cs var:sdk.linux64_bundle_bytes ?> bytes</td>
- <td><?cs var:sdk.linux64_bundle_checksum ?></td>
- </tr>
- </table>
-
-
-<p class="table-caption"><strong>SDK Tools Only</strong></p>
- <table class="download">
- <tr>
- <th>Platform</th>
- <th>Package</th>
- <th>Size</th>
- <th>MD5 Checksum</th>
- </tr>
- <tr>
- <td rowspan="2">Windows<br>32 & 64-bit</td>
- <td>
- <a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
-?>"><?cs var:sdk.win_download ?></a>
- </td>
- <td><?cs var:sdk.win_bytes ?> bytes</td>
- <td><?cs var:sdk.win_checksum ?></td>
- </tr>
- <tr>
- <!-- blank TD from Windows rowspan -->
+ <td rowspan="2">Windows</td>
<td>
<a onclick="return onDownload(this)" id="win-tools" href="http://dl.google.com/android/<?cs
var:sdk.win_installer
@@ -370,7 +292,16 @@
<td><?cs var:sdk.win_installer_checksum ?></td>
</tr>
<tr>
- <td><nobr>Mac OS X</nobr><br>32 & 64-bit</td>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)" href="http://dl.google.com/android/<?cs var:sdk.win_download
+?>"><?cs var:sdk.win_download ?></a>
+ </td>
+ <td><?cs var:sdk.win_bytes ?> bytes</td>
+ <td><?cs var:sdk.win_checksum ?></td>
+ </tr>
+ <tr>
+ <td><nobr>Mac OS X</nobr></td>
<td>
<a onclick="return onDownload(this)" id="mac-tools" href="http://dl.google.com/android/<?cs
var:sdk.mac_download
@@ -380,7 +311,7 @@
<td><?cs var:sdk.mac_checksum ?></td>
</tr>
<tr>
- <td>Linux<br>32 & 64-bit</td>
+ <td>Linux</td>
<td>
<a onclick="return onDownload(this)" id="linux-tools" href="http://dl.google.com/android/<?cs
var:sdk.linux_download
@@ -391,6 +322,79 @@
</tr>
</table>
+
+
+<h3>All Android Studio Packages</h3>
+
+<p>Select a specific Android Studio package for your platform. Also see the
+<a href="<?cs var:toroot ?>tools/revisions/studio.html">Android Studio release notes</a>.</p>
+
+ <table class="download">
+ <tr>
+ <th>Platform</th>
+ <th>Package</th>
+ <th>Size</th>
+ <th>SHA-1 Checksum</th>
+ </tr>
+
+ <tr>
+ <td rowspan="3">Windows</td>
+ <td>
+ <a onclick="return onDownload(this)" id="win-bundle"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_exe_download ?>"
+ ><?cs var:studio.win_bundle_exe_download ?></a><br>(Recommended)
+ </td>
+ <td><?cs var:studio.win_bundle_exe_bytes ?> bytes</td>
+ <td><?cs var:studio.win_bundle_exe_checksum ?></td>
+ </tr>
+
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.win_notools_exe_download ?>"
+ ><?cs var:studio.win_notools_exe_download ?></a><br>(No SDK tools included)
+ </td>
+ <td><?cs var:studio.win_notools_exe_bytes ?> bytes</td>
+ <td><?cs var:studio.win_notools_exe_checksum ?></td>
+ </tr>
+
+ <tr>
+ <!-- blank TD from Windows rowspan -->
+ <td>
+ <a onclick="return onDownload(this)"
+ href="https://dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.win_bundle_download ?>"
+ ><?cs var:studio.win_bundle_download ?></a>
+ </td>
+ <td><?cs var:studio.win_bundle_bytes ?> bytes</td>
+ <td><?cs var:studio.win_bundle_checksum ?></td>
+ </tr>
+
+ <tr>
+ <td><nobr>Mac OS X</nobr></td>
+ <td>
+ <a onclick="return onDownload(this)" id="mac-bundle"
+ href="https://dl.google.com/dl/android/studio/install/<?cs var:studio.version ?>/<?cs var:studio.mac_bundle_download ?>"
+ ><?cs var:studio.mac_bundle_download ?></a>
+ </td>
+ <td><?cs var:studio.mac_bundle_bytes ?> bytes</td>
+ <td><?cs var:studio.mac_bundle_checksum ?></td>
+ </tr>
+
+ <tr>
+ <td>Linux</td>
+ <td>
+ <a onclick="return onDownload(this)" id="linux-bundle"
+ href="https://dl.google.com/dl/android/studio/ide-zips/<?cs var:studio.version ?>/<?cs var:studio.linux_bundle_download ?>"
+ ><?cs var:studio.linux_bundle_download ?></a>
+ </td>
+ <td><?cs var:studio.linux_bundle_bytes ?> bytes</td>
+ <td><?cs var:studio.linux_bundle_checksum ?></td>
+ </tr>
+ </table>
+
+
+
</div><!-- end pax -->
@@ -411,7 +415,9 @@
var bundlename;
var $toolslink;
- if (navigator.appVersion.indexOf("Win")!=-1) {
+ if (navigator.appVersion.indexOf("Mobile")!=-1) {
+ // Do nothing for any "mobile" user agent
+ } else if (navigator.appVersion.indexOf("Win")!=-1) {
os = "Windows";
bundlename = '#win-bundle';
$toolslink = $('#win-tools');
@@ -419,26 +425,18 @@
os = "Mac";
bundlename = '#mac-bundle';
$toolslink = $('#mac-tools');
- } else if (navigator.appVersion.indexOf("Linux")!=-1) {
+ } else if (navigator.appVersion.indexOf("Linux")!=-1 && navigator.appVersion.indexOf("Android")==-1) {
os = "Linux";
bundlename = '#linux-bundle';
$toolslink = $('#linux-tools');
}
- if (os) {
+ if (os != undefined) {
$('#not-supported').hide();
- /* set up primary adt download button */
- $('#download-bundle-button').show();
- $('#download-bundle-button').append("Download the SDK <br/><span class='small'>ADT Bundle for " + os + "</span>");
- $('#download-bundle-button').click(function() {return onDownload(this,true,true);}).attr('href', bundlename);
-
- /* set up sdk tools only button */
- $('#download-tools-button').show();
- $('#download-tools-button').append("Download the SDK Tools for " + os);
- $('#download-tools-button').click(function() {return onDownload(this,true);}).attr('href', $toolslink.attr('href'));
- } else {
- $('.pax').show();
+ /* set up primary Android Studio download button */
+ $('.download-bundle-button').append(" <br/><span class='small'>for " + os + "</span>");
+ $('.download-bundle-button').click(function() {return onDownload(this,true,true);}).attr('href', bundlename);
}
@@ -451,44 +449,29 @@
$("#downloadForRealz").html("Download " + $(link).text());
}
- /* if it's a bundle, show the 32/64-bit picker */
- if (bundle) {
- $("#downloadForRealz").attr('bundle','true');
- if ($("#downloadForRealz").text().indexOf("Mac") == -1) {
- $("p#bitpicker").show();
- } else {
- /* mac is always 64 bit, so set it checked */
- $("p#bitpicker input[value=64]").attr('checked', true);
- }
- /* save link name until the bit version is chosen */
- $("#downloadForRealz").attr('name',$(link).attr('href'));
- } else {
- /* if not using bundle, set download button to ignore bitpicker and set url */
- $("#downloadForRealz").attr('bundle','false');
- $("#downloadForRealz").attr('href',$(link).attr('href'));
- /* set picker checked as a fake default */
- $("p#bitpicker input[value=64]").attr('checked', true);
- $("a#next-link").html("Setting Up an Existing IDE").attr('href',toRoot + 'sdk/installing/index.html');
- }
+ $("#downloadForRealz").attr('bundle', bundle);
+ $("a#downloadForRealz").attr("name", $(link).attr('href'));
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
+ $("#tos").show();
+ $("#landing").hide();
- location.hash = "download";
+ location.hash = "top";
return false;
}
function onAgreeChecked() {
- /* verify that the TOS is agreed and a bit version is chosen */
- if ($("input#agree").is(":checked") && $("#bitpicker input:checked").length) {
+ /* verify that the TOS is agreed */
+ if ($("input#agree").is(":checked")) {
/* if downloading the bundle */
if ($("#downloadForRealz").attr('bundle')) {
- /* construct the name of the link we want based on the bit version */
- linkId = $("a#downloadForRealz").attr("name") + $("#bitpicker input:checked").val();
+ /* construct the name of the link we want */
+ linkId = $("a#downloadForRealz").attr("name");
/* set the real url for download */
$("a#downloadForRealz").attr("href", $(linkId).attr("href"));
+ } else {
+ $("a#downloadForRealz").attr("href", $("a#downloadForRealz").attr("name"));
}
/* reveal the download button */
@@ -499,16 +482,28 @@
}
function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked') && $("#bitpicker input:checked").length) {
+ if ($("input#agree").is(':checked')) {
+ location.hash = "";
+ location.hash = "top";
$("div.sdk-terms").slideUp();
- $("#sdk-terms-form,.sdk-terms-intro").fadeOut('slow');
- $("#next-steps").fadeIn('slow');
- $("h1#tos-header").text('Get Ready to Code!');
- _gaq.push(['_trackEvent', 'SDK', 'ADT and Tools', $("#downloadForRealz").html()]);
+ $("h1#tos-header").text('Now downloading...');
+ $(".sdk-terms-intro").text('You\'ll be redirected to the install instructions in a moment.');
+ $("#sdk-terms-form").fadeOut('slow', function() {
+ setTimeout(function() {
+ if ($("#downloadForRealz").attr('bundle') == 'true') {
+ // User downloaded the studio Bundle
+ window.location = "/sdk/installing/index.html?pkg=studio";
+ } else {
+ // User downloaded the SDK Tools
+ window.location = "/sdk/installing/index.html?pkg=tools";
+ }
+ }, 3000);
+ });
+ ga('send', 'event', 'SDK', 'IDE and Tools', $("#downloadForRealz").html());
return true;
} else {
- $("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#258AAF"}, 200,
- function() {$("label#agreeLabel,#bitpicker input").parent().stop().animate({color: "#222"}, 200)}
+ $("label#agreeLabel").parent().stop().animate({color: "#258AAF"}, 200,
+ function() {$("label#agreeLabel").parent().stop().animate({color: "#222"}, 200)}
);
return false;
}
diff --git a/tools/droiddoc/templates-sdk-dyn/timestamp.cs b/tools/droiddoc/templates-sdk-dev/timestamp.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/timestamp.cs
rename to tools/droiddoc/templates-sdk-dev/timestamp.cs
diff --git a/tools/droiddoc/templates-sdk-dyn/trailer.cs b/tools/droiddoc/templates-sdk-dev/trailer.cs
similarity index 100%
rename from tools/droiddoc/templates-sdk-dyn/trailer.cs
rename to tools/droiddoc/templates-sdk-dev/trailer.cs
diff --git a/tools/droiddoc/templates-sdk/assets/css/default.css b/tools/droiddoc/templates-sdk/assets/css/default.css
index f411d93..693027a 100644
--- a/tools/droiddoc/templates-sdk/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk/assets/css/default.css
@@ -17,18 +17,32 @@
height: 100%;
margin: 0;
padding: 0;
- background-color:#F9F9F9;
+ background-color: #fff;
-webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
/* prevent subpixel antialiasing, which thickens the text */
/* text-rendering: optimizeLegibility; */
/* turned off ligatures due to bug 5945455 */ }
body {
- color: #222;
- font: 14px/19px Roboto, sans-serif;
+ color: #515151;
+ color: rgba(0, 0, 0, .68);
+ font: 14px/24px Roboto, sans-serif;
font-weight: 400;
letter-spacing:.1;
- padding:0 10px; }
+ padding:0 20px;
+}
+
+@media (max-width: 719px) {
+ html {
+ /* Disable accidental horizontal overflow. */
+ overflow-x: hidden;
+ }
+
+ body {
+ padding: 0 10px;
+ }
+}
#page-container {
width: 940px;
@@ -83,13 +97,8 @@
}
#side-nav {
- min-height:5px; /* silly way to avoid doc floating left when nav goes fixed */
- margin-bottom:1px;
+ padding-top: 20px;
}
-#devdoc-nav {
- outline:none;
- width:auto;
- margin: 20px 0 0; }
#devdoc-nav h2 {
border:0;
@@ -98,44 +107,251 @@
#devdoc-nav.fixed {
position: fixed;
margin:0;
- top: 65px; /* sticky-header height + 20px gutter */
+ top: 84px; /* sticky-header height + 20px gutter */
}
-#devdoc-nav span.small {
- font-size:12px;
- font-weight:normal;
+.dac-devdoc-toggle {
+ cursor: pointer;
+ padding: 8px 0;
+}
+
+.scroll-pane {
+ /* Match height of fixed parent. */
+ height: 100%;
}
#content {
width: 760px;
float: left; }
-a:hover,
-acronym:hover {
- color: #7aa1b0 !important; }
-a:focus,
-a:active {
- color: #33b5e5 !important; }
+/***** PREVIOUSLY style.css ******************/
+/* This should be close to the top, so it is easier to override. */
+[dir='rtl'] {
+ direction: rtl;
+}
+html {
+ line-height: 20px;
+}
+pre, table, input, textarea, code {
+ font-size: 1em;
+}
+address, abbr, cite {
+ font-style: normal;
+}
+[dir='rtl'] th {
+ text-align: right;
+}
+html[lang^=ja] blockquote, html[lang^=ja] q, html[lang^=ko] blockquote, html[lang^=ko] q,
+html[lang^=zh] blockquote, html[lang^=zh] q {
+ font-style: normal;
+}
+q {
+ font-style: italic;
+}
+fieldset, iframe, img {
+ border: 0;
+}
+img {
+ border: none;
+ -ms-interpolation-mode: bicubic;
+ max-width: 100%;
+ vertical-align: middle;
+}
+video {
+ max-width: 100%;
+ object-fit: cover;
+}
+q {
+ quotes: none;
+}
+sup, sub {
+ font-size: 11px;
+ line-height: 0;
+}
+
+table, fieldset {
+ margin: 0;
+}
+/* Biggest type */
+.display-1 {
+ font-size: 56px;
+ line-height: 68px;
+}
+@media (max-width: 719px) {
+ .display-1 {
+ font-size: 44px;
+ line-height: 56px;
+ }
+}
+h1, h2, h3 {
+ color: #212121;
+ color: rgba(0, 0, 0, .87);
+}
+h1 {
+ font-size: 44px;
+ line-height: 56px;
+ margin: 24px 0 12px;
+ font-weight: 300;
+}
+h1.short {
+ margin-right:320px;
+}
+@media (max-width: 719px) {
+ h1 {
+ font-size: 36px;
+ line-height: 48px;
+ }
+}
+h2 {
+ clear: left;
+ font-size: 28px;
+ font-weight: 400;
+ line-height: 32px;
+ margin: 24px 0 16px;
+}
+h3 {
+ font-size: 24px;
+ line-height: 32px;
+ font-weight: 400;
+ margin: 16px 0;
+}
+h4 {
+ font-size: 18px;
+ line-height: 24px;
+ margin: 12px 0;
+ font-weight: 500;
+}
+h5, h6 {
+ font-size: 16px;
+ line-height: 24px;
+ margin: 8px 0;
+}
+hr { /* applied to the bottom of h2 elements */
+ height: 1px;
+ margin: 7px 0 12px;
+ border: 0;
+ background: #e5e5e5;
+}
+p, pre, table, form {
+ margin: 0 0 12px;
+}
+small {
+ font-size: 11.5px;
+ color: #000;
+}
+ul, ol {
+ margin: 0 0 15px 20px;
+ padding: 0;
+}
+[dir='rtl'] ul, [dir='rtl'] ol {
+ margin: 10px 30px 10px 10px;
+}
+ul ul, ul ol, ol ul, ol ol {
+ margin-bottom: 0;
+ margin-top: 0;
+}
+li {
+ margin: 0 0 12px;
+}
+dt {
+ margin: 24px 0 12px;
+}
+dd {
+ margin:0 0 10px 40px;
+}
+dd p,
+dd pre,
+dd ul,
+dd ol,
+dd dl {
+ margin-top:10px;
+}
+li p,
+li pre,
+li ul,
+li ol,
+li dl {
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+dl dd dl:first-child {
+ margin-top: 0;
+}
+pre strong, pre b, a strong, a b, a code {
+ color: inherit;
+}
+pre, code {
+ color: #060;
+ font: 13px/18px Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ -webkit-font-smoothing: subpixel-antialiased;
+ -moz-osx-font-smoothing: auto;
+}
+code {
+ background-color: #f7f7f7;
+ padding: 3px 5px;
+}
+
+legend {
+ display: none;
+}
+a, .link-color {
+ color: #039BE5;
+ text-decoration: none;
+}
+a:focus, a:hover {
+ color: rgba(3, 155, 229, .7);
+ text-decoration: none;
+}
+a.white {
+ color: #fff;
+ text-decoration:underline;
+}
+a.white:hover, a.white:active {
+ color: #ccc;
+}
+strong, b {
+ font-weight: bold;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ border:0;
+ margin: .5em 1em 1em 0;
+ width:100%; /* consistent table widths; within IE's quirks */
+ background-color:#f7f7f7;
+}
+th, td {
+ padding: 4px 12px;
+ vertical-align: top;
+ text-align: left;
+}
+td {
+ background-color:inherit;
+ border:solid 1px #DDD;
+}
+td *:last-child {
+ margin-bottom:0;
+}
+th {
+ background-color: #999;
+ color: #fff;
+ border:solid 1px #DDD;
+ font-weight: normal;
+}
+tr:first-of-type th:first-of-type:empty {
+ visibility: hidden;
+}
a.external-link {
background:url('../images/styles/open_new_page.png') no-repeat 100% 50%;
padding-right:16px;
}
-img {
- border: none; }
#jd-content img {
margin-bottom:15px;
}
-ul {
- margin: 0;
- padding: 0; }
-
-strong {
- font-weight: 500; }
-
em {
font-style: italic; }
@@ -155,6 +371,7 @@
/* disclosures mixin */
/* content layout */
+/* This grid is deprecated in favor of .cols and .col-X */
.layout-content-row {
display: inline-block;
margin-bottom: 10px; }
@@ -264,33 +481,32 @@
/* sublinks */ }
#nav li {
list-style-type: none;
- font-size: 14px;
+ font-size: 12px;
margin:0;
padding:0;
- line-height: 15px; }
+ line-height: 18px; }
#nav a {
- color: #555555;
+ color: #505050;
text-decoration: none;
word-wrap:break-word; }
#nav .nav-section-header {
position: relative;
margin-bottom: 1px;
padding: 0 30px 0 0; }
- #nav li.selected a, #nav li.selected > .nav-section-header > a {
- color: #09C;
+ #nav li.selected a {
+ color: #039BE5;
}
#nav li.selected ul li a {
/* don't highlight child items */
- color: #555555; }
+ color: #505050; }
#nav .nav-section .nav-section .nav-section-header {
/* no white line between second level sections */
margin-bottom: 0; }
/* section header links */
#nav > li > div > a {
display: block;
- color: #333333;
- font-weight: 500;
- padding: 10px 0 10px 10px; }
+ font-weight: 700;
+ padding: 13px 0 12px 10px; }
#nav .nav-section-header:after {
content: '';
background: transparent url(../images/styles/disclosure_down.png) no-repeat scroll 50% 50%;
@@ -298,7 +514,7 @@
height: 34px;
display: block;
position: absolute;
- top: 0;
+ top: 6px;
right: 0; }
#nav .nav-section-header.empty {
padding:0; }
@@ -312,22 +528,24 @@
#nav .nav-section li a {
/* first gen child (2nd level li) */
display:block;
- font-weight: normal;
+ font-weight: 700;
text-transform: none;
- padding: 7px 5px 7px 10px;
+ padding: 13px 5px 13px 10px;
}
#nav .nav-section li li a {
/* second gen child (3rd level li) */
- padding: 5px 5px 5px 10px;
+ font-weight: 400;
+ padding: 7px 5px 7px 10px;
}
#nav li.expanded .nav-section-header {
- background:#e9e9e9;
- background: rgba(0, 0, 0, 0.05); }
+ background: #f0f0f0; }
+ #nav li.expanded .nav-section-header.empty {
+ background: none; }
#nav li.expanded li .nav-section-header {
- background: transparent; }
+ background: none; }
#nav li.expanded li ul {
/* 3rd level ul */
- padding:0 0 0 10px;
+ padding:6px 0 1px 20px;
}
#nav li.expanded > .nav-section-header:after {
content: '';
@@ -394,16 +612,12 @@
padding-bottom:0;
}
#nav li.expanded ul > li {
- background:#efefef;
- background: rgba(0, 0, 0, 0.03); }
+ background:#f7f7f7; }
#nav li.expanded ul > li li {
background:inherit; }
#nav li ul.tree-list-children ul {
display:block; }
-#nav.samples-nav li li li {
- font-size:13px;
-}
#nav.samples-nav li li li a {
padding-top:3px;
padding-bottom:3px;
@@ -423,25 +637,19 @@
/* content header */
.content-header {
- height: 30px;
- margin:36px 0 23px; /* same as h1 */
- padding:0 0 10px;} /* same as h1 */
+ position: relative;
+}
+.content-header:before,
+.content-header:after {
+ content: '';
+ display: table;
+ /* Clear heading margins, to make absolutely positioned nav a bit more predictable. */
+}
.content-header.just-links {
margin-bottom:0;
padding-bottom:0;}
-.content-header h1 {
- margin:0;
- padding:0;
- width: 700px;
-}
-.content-header > div:first-child {
- height:1px; /* set fixed height for the header div to ensure the
- next/prev links align with toc on training classes */
-}
-
.content-footer {
- border-top: 1px solid #ccc;
margin-top: 10px;
padding-top:10px;
width:100%; }
@@ -453,7 +661,7 @@
margin-right:0;
}
.content-footer.wrap {
- width:940px;
+ max-width:940px;
}
.content-footer .plus-container {
margin:5px 0 0;
@@ -467,7 +675,10 @@
}
.content-header .paging-links {
- margin-top:-25px;
+ position: absolute;
+ right: 0;
+ top: 8px;
+ width: 220px;
}
.paging-links {
position: relative;
@@ -476,9 +687,7 @@
position: absolute; }
.paging-links a,
.training-nav-top a {
- color: #555555;
- text-decoration: none;
- text-transform: uppercase; }
+ text-decoration: none; }
.paging-links .prev-page-link:before,
.training-nav-top .prev-page-link:before,
a.back-link:before {
@@ -488,10 +697,6 @@
height: 10px;
display: inline-block;
margin-right: 5px; }
- .training-nav-top .next-page-link,
- .training-nav-top .start-class-link,
- .training-nav-top .start-course-link {
- right: 10px; }
.paging-links .prev-page-link {
left: -15px; }
.paging-links .next-page-link {
@@ -517,20 +722,25 @@
}
.training-nav-top a {
+ border-bottom:0;
+ box-sizing: border-box;
+ color: inherit;
display:block;
float:left;
- width:122px;
- height:28px;
- padding: 8px;
- line-height:28px;
+ padding:10px 0;
+ line-height:30px;
text-align:center;
- border:1px solid #DADADA;
- border-bottom:0;
+ width: 50%;
+ }
+
+ .training-nav-top a.prev-page-link {
+ padding-left: 15px;
+ text-align: left;
}
.training-nav-top a.next-page-link {
- border-left:0;
- width:123px;
+ padding-right: 15px;
+ text-align: right;
}
.paging-links a.disabled,
@@ -547,41 +757,57 @@
}
.training-nav-top a.start-class-link,
- .training-nav-top a.start-course-link {
- width:262px;
- }
-
+ .training-nav-top a.start-course-link,
.paging-links a.start-class-link {
width:100%;
}
/* list of classes on course landing page */
ol.class-list {
- list-style:none;
- margin-left:0;
+ counter-reset: class;
+ list-style: none;
+ margin: 60px 0 0;
}
ol.class-list>li {
- margin:0 0 15px;
- padding:5px 0 0;
- overflow:hidden;
- border-top:1px solid #ccc;
+ box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.26);
+ margin: 0 0 20px;
+ overflow: hidden;
}
- ol.class-list li a.title {
- font-size:16px;
- margin:0;
- clear:left;
- display:block;
- height:32px;
- padding:0 4px;
+ ol.class-list .title {
+ background: #00bcd4;
+ color: #fff;
+ display: block;
+ font-size: 20px;
+ font-weight: 500;
+ height: 32px;
+ margin: 0;
+ padding: 52px 16px 12px;
+ position: relative;
}
- ol.class-list li a.title h2 {
- color:inherit;
+ ol.class-list .title:before {
+ border-bottom: 1px solid white;
+ box-sizing: border-box;
+ /* Disable the numbers for now, since vert few classes need to be taken in order. */
+ /* content: counter(class); */
+ counter-increment: class;
+ height: 40px;
+ left: 0;
+ padding: 10px 1px 0 5px;
+ position: absolute;
+ top: 0;
+ text-align: right;
+ min-width: 30px;
+ }
+ ol.class-list .title h2 {
+ color: currentColor;
+ font-size: inherit;
+ font-weight: inherit;
margin:0 0 10px;
display:block;
float:left;
width:675px;
}
- ol.class-list li a.title span {
+ ol.class-list .title span {
display:none;
float:left;
font-size:18px;
@@ -590,40 +816,71 @@
width: 10px;
height: 32px;
}
- ol.class-list li a.title:hover {
- background:#ddd;
- color:#258AAF !important;
- }
- ol.class-list li a.title:hover span {
- display:block;
- }
- #jd-content
- ol.class-list li img {
- float:left;
- clear:left;
- width:64px;
- margin:0 20px 0 0;
- }
- ol.class-list li p.description {
+ ol.class-list .description {
+ box-sizing: border-box;
float:left;
display:block;
- width:250px;
margin:0;
+ padding: 16px 10px 16px 16px;
+ width: 50%;
}
- ol.class-list li p.description.article {
+ ol.class-list .description.article {
width: 550px;
}
ol.class-list ol {
- float:left;
- width:320px;
- margin:0 0 0 30px;
- list-style:none;
- margin:0 0 0 20px;
+ box-sizing: border-box;
+ float: left;
+ list-style: none;
+ margin: 0;
+ padding: 16px 16px 16px 10px;
+ width: 50%;
}
- ol.class-list div.lessons li {
- margin:0 0 6px;
- line-height:16px;
+ ol.class-list .lessons li {
+ margin: 0 0 6px;
+ line-height: 16px;
+ }
+
+ /* Class colors */
+ ol.class-list li:nth-child(10n+1) .title {
+ background: #00bcd4;
+ }
+ ol.class-list li:nth-child(10n+2) .title {
+ background: #4db6ac;
+ }
+ ol.class-list li:nth-child(10n+3) .title {
+ background: #66bb6a;
+ }
+ ol.class-list li:nth-child(10n+4) .title {
+ background: #7cb342;
+ }
+ ol.class-list li:nth-child(10n+5) .title {
+ background: #afb42b;
+ }
+ ol.class-list li:nth-child(10n+6) .title {
+ background: #ffb300;
+ }
+ ol.class-list li:nth-child(10n+7) .title {
+ background: #ff7043;
+ }
+ ol.class-list li:nth-child(10n+8) .title {
+ background: #ec407a;
+ }
+ ol.class-list li:nth-child(10n+9) .title {
+ background: #ab47bc;
+ }
+ ol.class-list li:nth-child(10n+10) .title {
+ background: #7e57c2;
+ }
+
+ @media (max-width: 719px) {
+ ol.class-list ol,
+ ol.class-list .description {
+ float: none;
+ margin: 16px;
+ padding: 0;
+ width: auto;
+ }
}
@@ -669,7 +926,7 @@
}
ul#title-tabs li a:hover,
ul#title-tabs li a:active {
- color:#93C !important;
+ color:#039BE5 !important;
}
@@ -798,46 +1055,6 @@
.design li.with-icon.use:before {
background-image: url(../images/styles/ico_use.png); }
-/* figures and callouts */
-.figure {
- position: relative; }
- .figure.pad-below {
- margin-bottom: 20px; }
- .figure .figure-callout {
- position: absolute;
- color: #fff;
- font-weight: 500;
- font-size: 16px;
- line-height: 23px;
- text-align: center;
- background: transparent url(../images/styles/callout.png) no-repeat scroll 50% 50%;
- padding-right: 2px;
- width: 30px;
- height: 29px;
- z-index: 1000; }
- .figure .figure-callout.top {
- top: -9px; }
- .figure .figure-callout.right {
- right: -5px; }
-
-.figure-caption {
- margin: 0 10px 20px 0;
- font-size: 14px;
- line-height: 20px;
- font-style: italic; }
-
-/* rows of figures */
-.figure-row {
- font-size: 0;
- line-height: 0;
- /* to prevent space between figures */ }
- .figure-row .figure {
- display: inline-block;
- vertical-align: top; }
- .figure-row .figure + .figure {
- margin-left: 10px;
- /* reintroduce space between figures */ }
-
/* video containers */
.framed-galaxynexus-land-span-13 {
background: transparent url(../images/styles/device_galaxynexus_blank_land_span13.png) no-repeat
@@ -1031,6 +1248,15 @@
.download-button:active {
background-color: #006699; }
+.button.disabled,
+.button.disabled:hover,
+.button.disabled:active {
+ background:#ebebeb;
+ color:#999 !important;
+ border-color:#999;
+ cursor:default;
+}
+
/* UI tables and other things found in Writing style and Settings pattern */
.ui-table {
width: 100%;
@@ -1071,233 +1297,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***** PREVIOUSLY style.css ******************/
-
-
-
-
-
-@media screen, projection, print {
-[dir='rtl'] {
- direction: rtl;
-}
-html {
- line-height: 20px;
-}
-pre, table, input, textarea, code {
- font-size: 1em;
-}
-address, abbr, cite {
- font-style: normal;
-}
-[dir='rtl'] th {
- text-align: right;
-}
-html[lang^=ja] blockquote, html[lang^=ja] q, html[lang^=ko] blockquote, html[lang^=ko] q,
-html[lang^=zh] blockquote, html[lang^=zh] q {
- font-style: normal;
-}
-q {
- font-style: italic;
-}
-fieldset, iframe, img {
- border: 0;
-}
-img {
- -ms-interpolation-mode: bicubic;
- vertical-align: middle;
- max-width: 100%;
-}
-q {
- quotes: none;
-}
-sup, sub {
- font-size: 11px;
- line-height: 0;
-}
-}
-
-@media screen, projection {
-
-table, fieldset {
- margin: 0;
-}
-h1 {
- color:#333;
- font-size: 34px;
- margin: 36px 0 27px;
- padding:0 0 10px;
- font-weight:300;
-}
-h1, h2 {
- line-height: 30px;
-}
-h1.short {
- margin-right:320px;
-}
-h1.short {
- margin-right:320px;
-}
-h1.super {
- font-size: 37px;
-}
-h2 {
- color:#333;
- font-size: 26px;
- margin: 32px 0 20px;
- padding:0;
- font-weight:300;
-}
-h3 {
- color:#333;
- font-size: 21px;
- font-weight:400;
- margin:21px 0 14px 0;
-}
-h3, h4 {
- line-height: 21px;
-}
-h4 {
- font-size: 18px;
- margin: 12px 0;
- font-weight:500;
-}
-h5 {
- font-size: 14px;
-}
-h5, h6 {
- margin: 5px 0;
-}
-h6 {
- font-size: 12px;
-}
-hr { /* applied to the bottom of h2 elements */
- height: 1px;
- margin: 3px 0 12px;
- border: 0;
- background: #ccc;
-}
-p, pre, table, form {
- margin: 0 0 15px;
-}
-small {
- font-size: 11.5px;
- color: #000;
-}
-ul, ol {
- margin: 0 0 15px 18px;
- padding: 0;
-}
-[dir='rtl'] ul, [dir='rtl'] ol {
- margin: 10px 30px 10px 10px;
-}
-ul ul, ul ol, ol ul, ol ol {
- margin-bottom: 0;
- margin-top: 0;
-}
-li {
- margin:0 0 5px;
-}
-dd {
- margin:0 0 10px 30px;
-}
-dd p,
-dd pre,
-dd ul,
-dd ol,
-dd dl {
- margin-top:10px;
-}
-li p,
-li pre,
-li ul,
-li ol,
-li dl {
- margin-top:5px;
- margin-bottom:5px;
-}
-dl dd dl:first-child {
- margin-top:0;
-}
-pre strong, pre b, a strong, a b, a code {
- color: inherit;
-}
-pre, code {
- color: #060;
- font: 13px/1.5 monospace;
-}
-code {
- font-weight:bold;
- font: 13px/14px monospace;
-}
-
-legend {
- display: none;
-}
-a:link, a:visited, .link-color {
- color: #258aaf;
- text-decoration: none;
-}
-a:focus, a:hover, a:active {
- color: #33B5E5;
- text-decoration: none;
-}
-a.white {
- color: #fff;
- text-decoration:underline;
-}
-a.white:hover, a.white:active {
- color: #ccc !important;
-}
-strong, b {
- font-weight:bold;
- color: #222;
-}
-table {
- border-collapse: collapse;
- border-spacing: 0;
- border:0;
- margin: .5em 1em 1em 0;
- width:100%; /* consistent table widths; within IE's quirks */
- background-color:#f7f7f7;
-}
-th, td {
- padding: 4px 12px;
- vertical-align: top;
- text-align: left;
-}
-td {
- background-color:inherit;
- border:solid 1px #DDD;
-}
-td *:last-child {
- margin-bottom:0;
-}
-th {
- background-color: #999;
- color: #fff;
- border:solid 1px #DDD;
- font-weight: normal;
-}
-tr:first-of-type th:first-of-type:empty {
- visibility: hidden;
-}
-
/* --------------------------------------------------------------------------
Footer
*/
@@ -1468,430 +1467,23 @@
}
/* =============================================================================
- Columns
- ========================================================================== */
-
-@media screen, projection, print {
-.full {
- padding: 2.5em 0;
- border-top: solid 1px #ddd;
- border-bottom: solid 1px #ddd;
- background: #f7f7f7;
-}
-.wrap {
- margin: 0 auto;
- width: 940px;
- clear: both;
-}
-.cols {
- height: 1%;
- margin: 0 -1.533742331288343558282%;
- width: 103.06748466257669%}
-*+html .cols {
- margin-bottom: 20px;
-}
-.cols:after {
- clear: both;
- content: ' ';
- display: block;
- height: 0;
- visibility: hidden;
-}
-.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
-.col-13, .col-14, .col-15, .col-16 {
- display: inline;
- float: left;
- margin-left: 10px;
- margin-right: 10px;
-}
-/*
-* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
-.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12 {
- margin: 0;
- padding: 0 1.4% 20px;
-}
-[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
-[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
-[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
- float: right;
-}
-*/
-.col-1 { width: 40px }
-.col-2 { width: 100px }
-.col-3 { width: 160px }
-.col-4 { width: 220px }
-.col-5 { width: 280px }
-.col-6 { width: 340px }
-.col-7 { width: 400px }
-.col-8 { width: 460px }
-.col-9 { width: 520px }
-.col-10 { width: 580px }
-.col-11 { width: 640px }
-.col-12 { width: 700px }
-.col-13 { width: 760px }
-.col-14 { width: 820px }
-.col-15 { width: 880px }
-.col-16 { width: 940px }
-}
-
-.col-right {
- margin-right:0px;
-}
-
-@media screen and (max-width:772px) {
-.col-5, .col-6, .col-7 {
- clear: both;
- width: 97.0238096%}
-}
-
-/* =============================================================================
Layout
========================================================================== */
@media screen, projection, print {
-/* --------------------------------------------------------------------------
-Header, Login, Nav-X, Search
-*/
-#header {
- margin: 0;
- padding: 0;
-}
-#header:before, #header:after {
- content: "";
- display: table;
- clear: both
-}
-.logo, .nav-x {
- float: left;
-}
-.nav-x {
- margin-top: -2px;
- list-style-type: none;
-}
-.nav-x a {
- color: #333;
- font-size: 16px;
-}
-.about a.selected {
- color: #9933CC;
-}
-.design a.selected {
- color: #33b5e5;
-}
-.develop a.selected {
- color: #F80;
-}
-.distribute a.selected {
- color: #9C0;
-}
-
-
-
-.nav-x li {
- display: inline;
- margin-right: 45px;
-}
-.search {
- float: right;
- position: relative;
- width: 220px
-}
-.search .bottom, .search .left, .search .right {
+.training-nav-top {
+ border:1px solid #e5e5e5;
+ border-width: 1px 1px 0;
+ bottom: -56px;
+ box-sizing: border-box;
position: absolute;
- background-color: #a3a3a3;
-}
-.search .bottom {
- width: 220px;
- height: 1px;
- top: 24px;
- left: 0
-}
-.search .left, .search .right {
- height: 5px;
- width: 1px
-}
-.search .left { top: 19px; left: 0 }
-.search .right { top: 19px; right: 0 }
-.search form {
- float: left;
- margin-top: 2px;
- width: inherit;
-}
-.search .close,
-#player-frame .close {
- position: absolute;
- right: 8px;
- bottom: 4px;
- width: 16px;
- height: 16px;
- margin: 0;
- text-indent: -1000em;
- background: url(../images/close.png) no-repeat 0 0;
- z-index:9999;
-}
-.search .close:hover, .search .close:focus,
-#player-frame .close:hover, #player-frame .close:focus {
- background-position: -16px 0;
- cursor:pointer;
-}
-#player-frame .close {
- top: 6px;
-}
-.search form input {
- color: #999;
- font-size: 1em;
- width: inherit;
- border: none;
- margin: 0;
- padding:0 0 0 6px;
- z-index: 1500;
- background-color: transparent
-}
-.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
-}
-.search:hover .icon {
- background-position: -8px 0
-}
-.search form input:focus {
- color: #222;
- font-weight: bold;
- outline:0;
-}
-/* Search Dropdown */
-.search-dropdown {
- padding: 15px;
- width: 192px;
- border: solid 1px #c5c5c5;
- background: #fff;
- position: absolute;
- top: 35px;
- left: 0;
- -moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.2);
- box-shadow: 0 0 10px rgba(0,0,0,0.2)
-}
-.search-dropdown ul, .search-dropdown ul li {
- list-style-type: none;
- margin: 0;
- padding: 0
-}
-.search-dropdown ul li {
- clear: both
-}
-.search-dropdown img {
- float: left;
- margin: 0 10px 10px 0
-}
-.search-dropdown h6 {
- color: #222;
- margin: 0;
- line-height: normal
-}
-.search-dropdown .desc {
- color: #999;
- font-size: 11.5px;
- line-height: normal;
- margin: 0;
-}
-.search-dropdown li a:hover h6, .search-dropdown li a:hover .desc {
- color: #33b5e5
-}
-/* --------------------------------------------------------------------------
-Buttons
-*/
-.button, a.button, .button-secondary, a.button-secondary {
- border-image: initial;
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
- cursor: pointer;
-}
-.button, a.button {
- display:inline-block;
- background-color: #09c;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
- background-image: -webkit-linear-gradient(top, #2faddb, #09c);
- background-image: -moz-linear-gradient(top, #2faddb, #09c);
- background-image: -ms-linear-gradient(top, #2faddb, #09c);
- background-image: -o-linear-gradient(top, #2faddb, #09c);
- background-image: linear-gradient(top, #2faddb, #09c);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#0099cc',GradientType=0);
- border: 1px solid #3990ab;
- color: #fff;
-}
-.button-secondary, a.button-secondary {
- background-color: #f3f3f3;
- border: 1px solid #dcdcdc;
- color: #444;
-}
-a.button, a.button:visited, a.button-secondary, a.button-secondary:visited {
- margin-right: 16px;
- font-weight: 400;
- min-width: 54px;
- outline: 0;
- padding: 8px 15px;
- text-align: center;
-}
-.button, .button-secondary {
- margin-right: 16px;
- font-weight: 400;
- min-width: 54px;
- outline: 0;
- padding: 0 15px;
- text-align: center;
-}
-.button:hover, a.button:hover {
- border-color: #09c;
- background-color: #4cadcb;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#5dbcd9), to(#4cadcb));
- background-image: -webkit-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -moz-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -ms-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: -o-linear-gradient(top, #5dbcd9, #4cadcb);
- background-image: linear-gradient(top, #5dbcd9, #4cadcb);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#5dbcd9',
-EndColorStr='#4cadcb',GradientType=0);
- color: #fff !important;
-}
-.button:active, a.button:active {
- background-color: #1e799a;
- background-image: none;
- border-color: #30b7e6;
-}
-a.button.big.subtitle {
- line-height:18px;
-}
-.button-secondary:hover, a.button-secondary:hover {
- border-color: #dbdbdb;
- background-color: #f3f3f3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
- background-image: linear-gradient(top, #f9f9f9, #ececec);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5 !important;
-}
-.button-secondary:active, a.button-secondary:active {
- border-color: #dadada;
- background: #ebebeb; /* Old browsers */
- /* IE9 SVG, needs conditional override of 'filter' to 'none' */
- background:
-url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/
-Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0Jv
-eD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+
-CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIg
-eDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ViZWJl
-YiIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjEwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iI2ZhZmFmYSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjkwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+
-CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNmY2ZjYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFy
-R3JhZGllbnQ+
-CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIg
-Lz4KPC9zdmc+);
- background: -moz-linear-gradient(top, #ebebeb 0%, #f9f9f9 5%, #fafafa 50%, #f9f9f9 90%,
-#ffffff 100%); /* FF3.6+ */
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb),
-color-stop(5%,#f9f9f9), color-stop(50%,#fafafa), color-stop(90%,#f9f9f9), color-stop(100%,#ffffff));
-/* Chrome,Safari4+ */
- background: -webkit-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9
-90%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
- background: -o-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* Opera 11.10+ */
- background: -ms-linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* IE10+ */
- background: linear-gradient(top, #ebebeb 0%,#f9f9f9 5%,#fafafa 50%,#f9f9f9 90%,#ffffff
-100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ebebeb',
-endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */
- -webkit-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- -moz-box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- box-shadow: inset 0px 0px 5px 2px rgba(0, 0, 0, .05);
- color: #258AAF !important;
-}
-.button.big {
- font-size:20px;
- display:inline-block;
-}
-.button.big span.small {
- font-size:14px;
-}
-.button-caption {
- margin-top:10px;
- font-size:12px;
- font-style:italic;
+ right: 0;
+ width: 280px;
}
-.button.disabled,
-.button.disabled:hover,
-.button.disabled:active {
- background:#ebebeb;
- color:#999 !important;
- border-color:#999;
- cursor:default;
-}
-
-.training-nav-top a.button-secondary,
-.training-nav-bottom a.button-secondary {
- display:block;
- float:left;
- margin:0;
- width:130px;
- text-transform:uppercase;
- font-weight:bold;
-
- background-color: #f3f3f3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));
- background-image: -webkit-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -moz-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -ms-linear-gradient(top, #f9f9f9, #ececec);
- background-image: -o-linear-gradient(top, #f9f9f9, #ececec);
- background-image: linear-gradient(top, #f9f9f9, #ececec);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5;
-}
-
-.training-nav-top a.button-secondary:hover,
-.training-nav-bottom a.button-secondary:hover {
- background-color: #09c;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
- background-image: -webkit-linear-gradient(top, #2faddb, #09c);
- background-image: -moz-linear-gradient(top, #2faddb, #09c);
- background-image: -ms-linear-gradient(top, #2faddb, #09c);
- background-image: -o-linear-gradient(top, #2faddb, #09c);
- background-image: linear-gradient(top, #2faddb, #09c);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
- border: 1px solid #3990ab;
- color: #fff !important;
-}
-
-.training-nav-top a.button-secondary.last,
-.training-nav-bottom a.button-secondary.last {
- border-left:0;
-}
-
-.training-nav-top a.button-secondary.double-size,
-.training-nav-bottom a.button-secondary.double-size {
- width:291px;
-}
-
-.training-nav-top,
.training-nav-bottom {
float:right;
margin:0 0 0 20px;
-}
-
-.training-nav-top {
- position:relative;
- top:73px;
-}
-
-.training-nav-bottom {
padding:0 0 20px;
}
@@ -1904,33 +1496,38 @@
}
#tb-wrapper {
- margin:51px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
+ margin:56px 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
}
#tb,
#qv {
- font-size:13px;
- line-height:18px;
- width:238px;
- border:1px solid #ccc;
- float:right;
+ border: 1px solid #e5e5e5;
+ box-sizing: border-box;
+ float: right;
+ line-height: 16px;
+ padding: 5px 0;
+ width: 240px;
}
#tb {
- width:278px;
+ width:280px;
}
#tb h2,
#qv h2 {
- margin:10px 15px;
- padding:0;
- text-transform:uppercase;
- border-bottom:1px solid gainsboro;
+ border-top: 1px solid #e5e5e5;
+ color: inherit;
+ font-size: 16px;
+ line-height: 24px;
+ margin: 15px 0 4px;
+ padding: 10px 15px 0;
}
-#tb *,
-#qv * {
- font-size:inherit;
+#tb h2:first-child,
+#qv h2:first-child {
+ border-top: 0;
+ padding-top: 0;
+ margin-top: 10px;
}
#tb .download-box,
@@ -1942,7 +1539,28 @@
#qv .download-box .filename {
font-size:11px;
margin:4px 4px 10px;
- color:#666;
+}
+
+@media (max-width: 719px) {
+ .training-nav-top {
+ left: 0;
+ width: auto;
+ }
+
+ #tb-wrapper {
+ clear: none;
+ float: none;
+ margin-left: 0;
+ }
+
+ #tb {
+ float: none;
+ width: auto;
+ }
+
+ #qv-wrapper {
+ display: none;
+ }
}
@@ -1959,9 +1577,9 @@
width:226px;
font-size:13px;
line-height:18px;
- border-left:4px solid #99CC00;
+ border-left:3px solid #a9e27d;
float:right;
- padding:0 0 0 10px;
+ padding:0 0 0 20px;
margin:0 0 1em 20px;
}
@@ -1985,7 +1603,15 @@
#tb ol,
#tb ul,
#qv ul {
- margin:0 15px 10px 35px;
+ list-style-type: none;
+ margin:0 15px 10px 15px;
+}
+
+#tb li,
+#qv li {
+ margin: 8px 0;
+ padding: 0 0 0 16px;
+ position: relative;
}
#tb p {
@@ -2005,11 +1631,7 @@
#qv ul ul,
.sidebox ol ol,
.sidebox ul ul {
- margin-bottom:0;
-}
-
-#qv ol ol {
- margin:3px 0 3px 15px;
+ margin: 8px 0;
}
.sidebox p,
@@ -2145,7 +1767,6 @@
border-radius: 2px;
margin: 10px 0;
padding: 20px;
- color: #666;
position: relative;
background: #f9f9f9;
}
@@ -2332,16 +1953,11 @@
/* nav tree */
-#side-nav, #swapper,
-#nav-tree, #tree-list {
+#swapper, #nav-tree, #tree-list {
overflow:hidden;
margin-left:0;
}
-#devdoc-nav {
- overflow:visible !important; /* To keep the "to top" button visible */
-}
-
#nav-tree ul {
list-style:none;
padding:0;
@@ -2443,7 +2059,7 @@
border-bottom: 1px solid #CCC;
background:#e9e9e9;
background: rgba(0, 0, 0, 0.05); /* matches #nav li.expanded */
-
+ line-height: 19px; /* Fix regression after page line-height is bumped to 24px */
}
#api-nav-title {
padding:0 5px;
@@ -2795,7 +2411,7 @@
}
/* --------------------------------------------------------------------------
-Misc
+Misc and article typography
*/
@@ -2842,27 +2458,121 @@
p.img-caption {
margin: -10px 0 20px;
- font-size:13px;
- color:#666;
+ font-size: 13px;
}
-div.figure,
-div.figure-right {
- float:right;
- clear:right;
- margin:10px 0 0 0;
- padding:0 0 0 20px;
+/* figures and callouts */
+.figure {
+ position: relative;
+}
+
+.figure.pad-below {
+ margin-bottom: 20px;
+}
+
+.figure .figure-callout {
+ position: absolute;
+ color: #fff;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 23px;
+ text-align: center;
+ background: transparent url(../images/styles/callout.png) no-repeat scroll 50% 50%;
+ padding-right: 2px;
+ width: 30px;
+ height: 29px;
+ z-index: 1000;
+}
+
+.figure .figure-callout.top {
+ top: -9px;
+}
+
+.figure .figure-callout.right {
+ right: -5px;
+}
+
+.figure-caption {
+ margin: 0 10px 20px 0;
+ font-size: 14px;
+ line-height: 20px;
+ font-style: italic;
+}
+
+/* rows of figures */
+.figure-row {
+ font-size: 0;
+ line-height: 0;
+ /* to prevent space between figures */
+}
+
+.figure-row .figure {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.figure-row .figure + .figure {
+ margin-left: 10px;
+ /* reintroduce space between figures */
+}
+
+.border-img {
+ border: 1px solid #CCC;
+}
+
+.center-img {
+ margin: auto;
+ text-align: center;
+}
+.center-img img {
+ margin-bottom: 15px;
+}
+
+.figure img,
+.figure-right img,
+.figure-left img,
+.figure-center img,
+.border-img {
+ margin-bottom: 15px;
+}
+
+.figure-center {
+ margin: 32px auto 24px;
+ max-width: 100%;
+}
+
+.figure,
+.figure-right {
+ clear: right;
+ float: right;
+ margin: 10px 0 0 0;
+ padding: 0 0 0 20px;
+ max-width: 50%;
/* width must be defined w/ an inline style matching the image width */
}
-div.figure-left {
- float:left;
- clear:left;
- margin:10px 0 0 0;
- padding:0 20px 0 0;
+.figure-left {
+ clear: left;
+ float: left;
+ margin: 10px 0 0 0;
+ padding: 0 20px 0 0;
+ max-width: 50%;
/* width must be defined w/ an inline style matching the image width */
}
+@media (max-width: 719px) {
+ /* Collapse on mobile. */
+ .figure,
+ .figure-right,
+ .figure-left {
+ float: none;
+ clear: none;
+ padding: 0;
+ margin: 32px auto 24px;
+ max-width: 100%;
+ }
+}
+
img.frame {
border:1px solid #DDD;
padding:4px;
@@ -2871,38 +2581,31 @@
p.table-caption {
margin: 0 0 4px 0;
font-size:13px;
- color:#666;
}
p.code-caption {
margin-bottom: 4px;
font: 12px/1.5 monospace;
- color:#666;
-}
-
-div.note,
-div.caution,
-div.warning {
- margin: 0 0 15px;
}
p.note, div.note,
p.caution, div.caution,
p.warning, div.warning {
- padding: 0 0 0 10px;
- border-left: 4px solid;
+ padding: 0 0 0 20px;
+ border-left: 3px solid;
+ margin: 16px 0;
}
p.note, div.note {
- border-color: #258AAF;
+ border-color: #66c2ff;
}
p.caution, div.caution {
- border-color: #FF8800;
+ border-color: #f81;
}
p.warning, div.warning {
- border-color: #ff4443;
+ border-color: #f55;
}
div.note.design {
@@ -3454,6 +3157,15 @@
}
*/
+/* First paragraph of a content pages is a bit larger
+ - note the very specific selector. */
+.jd-descr > p:first-child,
+.jd-descr > #tb-wrapper + p,
+.jd-descr > #qv-wrapper + p {
+ font-size: 16px;
+ margin-bottom: 16px;
+}
+
/* page-top-right container for reference pages (holds
links to summary tables) */
#api-info-block {
@@ -3665,6 +3377,7 @@
font-style:italic;
}
+
/* Inline api level indicator for methods */
div.api-level {
font-size:.8em;
@@ -3685,27 +3398,6 @@
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/* SEARCH FILTER */
.menu-container {
@@ -3715,53 +3407,38 @@
font-weight:normal;
}
-.search_filtered_wrapper.reference {
- width: 193px;
- float: right;
-}
-.search_filtered_wrapper.docs {
- width:875px;
- float: left;
- position:absolute;
- top:26px;
- right:66px;
+.search_filtered_wrapper {
+ position: absolute;
+ right: 18px;
+ top: 64px;
}
.suggest-card {
+ float:right;
position:relative;
width:170px;
min-height:90px;
- padding:5px;
border: solid 1px #C5C5C5;
background: white;
- top: 15px;
margin-right:-5px;
-moz-box-shadow: 0 0 10px rgba(0,0,0,0.2);
-webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}
.suggest-card.reference {
- position:absolute;
- z-index:999;
- min-width:171px; /* +padding and border makes this match input width */
- min-height:93px; /* add 3px because this has 1 not 4px top border */
- width:auto;
- top:41px;
- margin:0;
+ z-index: 998;
+ width: auto;
}
.suggest-card.develop {
z-index:997;
- border-top: solid 4px #F80;
- float:right;
+ border-top: solid 4px #ff7043;
}
.suggest-card.design {
z-index:996;
- border-top: solid 4px #33b5e5;
- float:right;
+ border-top: solid 4px #00bcd4;
}
.suggest-card.distribute {
z-index:995;
- border-top: solid 4px #9C0;
- float:right;
+ border-top: solid 4px #afb42b;
}
.child-card {
width:100%;
@@ -3779,7 +3456,7 @@
ul.search_filtered {
min-width:100%;
list-style: none;
- margin: 0 0 5px;
+ margin: 5px 0;
padding: 0;
}
.search_filtered .jd-selected {
@@ -3788,7 +3465,7 @@
}
.search_filtered .jd-selected,
.search_filtered .jd-selected a {
- color:#09C !important;
+ color:#039BE5 !important;
}
.no-display {
@@ -3798,13 +3475,13 @@
.search_filtered li.jd-autocomplete {
font-size: 0.81em;
border: none;
- margin: 0 0 2px;
+ margin: 0;
padding: 0;
line-height:1.5em;
}
.search_filtered li a {
- padding:0 5px;
+ padding: 2px 10px;
color:#222 !important;
display:inline-block;
line-height:12px;
@@ -3814,8 +3491,8 @@
font-weight:bold;
color:#444;
border: none;
- margin: 8px 0 2px;
- padding:1px 5px;
+ margin: 0;
+ padding: 2px 10px;
line-height:1.5em;
}
.search_filtered li.header.small {
@@ -3832,6 +3509,51 @@
margin: 0 0 2px;
}
+@media (max-width: 719px) {
+ .search_filtered_wrapper {
+ left: 24px;
+ right: 24px;
+ top: 44px;
+ }
+
+ .suggest-card {
+ box-shadow: 0 2px 1px rgba(0, 0, 0, 0.1), 0 0 1px rgba(0, 0, 0, 0.1);
+ float: none;
+ margin-right: 0;
+ min-height: 0;
+ max-height: 204px;
+ overflow: hidden;
+ }
+
+ .suggest-card.develop,
+ .suggest-card.design,
+ .suggest-card.distribute {
+ display: none !important;
+ }
+
+ ul.search_filtered {
+ margin: 0;
+ }
+
+ .search_filtered li.jd-autocomplete {
+ border-top: solid 1px #C5C5C5;
+ font-size: inherit;
+ text-align: left;
+ }
+
+ .search_filtered li.jd-autocomplete:first-child {
+ border-top: 0;
+ }
+
+ .search_filtered li a {
+ display: block;
+ overflow: hidden;
+ padding: 14px 10px;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+}
+
.show-item {
display: table-row;
}
@@ -3841,8 +3563,6 @@
-
-
/* SEARCH RESULTS */
@@ -3939,10 +3659,10 @@
}
#searchResults .gsc-tabsArea {
- position:relative;
- white-space:nowrap;
- float:left;
- width:200px;
+ position: relative;
+ white-space: nowrap;
+ float: left;
+ width: 25%;
}
#searchResults .gsc-above-wrapper-area {
@@ -3950,12 +3670,26 @@
}
#searchResults .gsc-resultsbox-visible {
- float:left;
- width:720px;
- margin-left:20px;
+ box-sizing: border-box;
+ float: left;
+ padding-left:20px;
+ width: 75%;
+}
+
+@media (max-width: 719px) {
+ #searchResults .gsc-tabsArea {
+ display: none;
+ }
+
+ #searchResults .gsc-resultsbox-visible {
+ float: none;
+ padding-left: 0;
+ width: auto;
+ }
}
#searchResults .gsc-tabHeader {
+ margin-top: 4px;
padding: 3px 6px;
position:relative;
width:auto;
@@ -3964,7 +3698,7 @@
#searchResults h2#searchTitle {
padding:0;
- margin:5px 0;
+ margin:30px 0 5px;
border:none;
}
@@ -4012,98 +3746,25 @@
#searchResults .gsc-tabHeader.gsc-tabhInactive,
#searchResults .gsc-cursor-page {
- text-decoration:none;
- color:#258AAF;
- border: solid 1px #DADADA;
-}
-
-#searchResults .gsc-tabHeader.gsc-tabhInactive:hover,
-#searchResults .gsc-cursor-page:hover {
- border-color: #DBDBDB;
- background-color: #F3F3F3;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#ECECEC));
- background-image: -webkit-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -moz-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -ms-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: -o-linear-gradient(top, #F9F9F9, #ECECEC);
- background-image: linear-gradient(top, #F9F9F9, #ECECEC);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f9f9f9',
-EndColorStr='#ececec');
- color: #33B5E5;
+ background: #F0F0F0;
+ border: 0;
+ color: #039BE5;
}
#searchResults .gsc-tabHeader.gsc-tabhActive,
#searchResults .gsc-tabHeader.gsc-tabhActive:hover,
#searchResults .gsc-cursor-page.gsc-cursor-current-page,
#searchResults .gsc-cursor-page.gsc-cursor-current-page:hover {
- color:#fff;
- background-color: #09C;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#2FADDB), to(#09C));
- background-image: -webkit-linear-gradient(top, #2FADDB, #09C);
- background-image: -moz-linear-gradient(top, #2FADDB, #09C);
- background-image: -ms-linear-gradient(top, #2FADDB, #09C);
- background-image: -o-linear-gradient(top, #2FADDB, #09C);
- background-image: linear-gradient(top, #2FADDB, #09C);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#2faddb', EndColorStr='#09c');
- border: 1px solid #3990AB;
- z-index:100;
+ background-color: #039BE5;
+ border: 0;
+ color: #fff;
}
-
/************ STICKY NAV BAR ******************/
-#header-wrapper {
- background: #f9f9f9;
- margin: 0 -10px 0 -10px;
- padding: 31px 10px 0px 10px;
- position: relative;
-}
-#header-wrapper #nav-x div.wrap {
- max-width: 940px;
- height: 38px;
-}
-#header-wrapper #nav-x ul.nav-x li {
- margin-right: 31px !important;
- margin-top: 5px;
- margin-bottom: 0px;
- height: 30px;
-}
-#header-wrapper #nav-x > div.wrap ul.nav-x li.active {
- color: #669900;
- border-bottom: 3px solid #669900;
-}
-#header-wrapper #nav-x > div.wrap ul.nav-x li.active a {
- color: #669900;
-}
-#header-wrapper #nav-x > div.wrap ul.nav-x a {
- font-size: 14.5px;
-}
-#header-wrapper .developer-console-btn {
- float: right;
- background: #fefefe;
- border-radius: 4px;
- padding: 8px 14px;
- box-shadow: 1px 1px 0px #7a7a7a;
- font-size: 14px;
- margin-top: -6px;
- cursor: pointer;
- color: #464646;
- margin-right: 20px;
-}
-/* not currently used */
-#header-wrapper .shadow {
- width: 1034px;
- height: 4px;
- position: absolute;
- left: 50%;
- margin-left: -517px;
- bottom: -4px;
- background-image: url(../images/header-shadow.png);
-}
-
#context {
clear: both;
padding-top: 14px;
@@ -4147,75 +3808,6 @@
display: none;
}
-/* Sticky Nav overrides */
-.sticky-menu {
- position: fixed;
- width: 940px;
- height: 0px;
- z-index: 51;
- top: 12px;
-}
-#sticky-header {
- display: none;
- padding: 0 10px;
- position: fixed;
- background: #f9f9f9;
- top: 0px;
- left: 0px;
- right: 0px;
- height: 45px;
- box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.1);
- border-bottom: 1px solid #a5c43a;
- z-index: 50;
-}
-#sticky-header.design {
- border-bottom: 1px solid #33b5e5;
-}
-#sticky-header.develop {
- border-bottom: 1px solid #F80;
-}
-#sticky-header.distribute {
- border-bottom: 1px solid #9C0;
-}
-#sticky-header.about {
- border-bottom: 1px solid #9933CC;
-}
-#sticky-header > div {
- overflow: hidden;
- *zoom: 1;
- width: 940px;
- margin: 0 auto;
- clear: both;
- padding-top: 9px;
-}
-#sticky-header > div .logo {
- float: left;
- width: 26px;
- height: 25px;
- background: url(../images/dac_logo.png);
- background-image: -webkit-image-set(url(../images/dac_logo.png) 1x, url(../images/dac_logo@2x.png) 2x);
- z-index: 52;
- position: relative;
-}
-#sticky-header > div .top {
- float: left;
- width: 38px;
- height: 38px;
- position: relative;
- background: url(../images/styles/gototop.png);
- z-index: 52;
-}
-#sticky-header > div .breadcrumb {
- float: left;
- padding: 0 0 0 10px;
- border-left: 1px solid #d2d2d2;
- line-height: 24px;
- font-size: 14px;
- position: relative;
- top: 0px;
- z-index: 52;
-}
-
/* offset the <a name=""> tags to account for sticky nav */
body.reference a[name] {
visibility: hidden;
@@ -4225,76 +3817,6 @@
}
-}
-
-
-
-
-
-
-
-/*********** PREVIOUSLY dac-styles.css ***************/
-
-
-#header {
- border-bottom:0;
-}
-
-#header .wrap {
- max-width:940px;
- height:41px;
- border-bottom:1px solid;
- border-color: #ccc;
- position:relative;
-}
-
-.about #header .wrap {
- border-color: #9933CC;
-}
-
-.design #header .wrap {
- border-color: #33b5e5;
-}
-
-.develop #header .wrap {
- border-color: #F80;
-}
-
-.distribute #header .wrap {
- border-color: #9C0;
-}
-
-.logo a {
- float:left;
-}
-
-#header .logo {
- margin-top: -6px;
- margin-left: 0px;
- margin-bottom:0px;
- width: 160px;
- padding-right:10px;
-}
-
-
-#header-wrap .logo.landing-logo {
- width:220px;
- margin:0;
- padding:0;
- margin-bottom:22px;
-}
-#header-wrap .logo.landing-logo img {
- padding:0 0 0 10px;
-}
-
-.search {
- height:25px;
- margin-top: -3px;
- margin-bottom: 0px;
-}
-
-
-
/* Quicknav */
.btn-quicknav {
width:20px;
@@ -4332,17 +3854,6 @@
display:block;
}
-.nav-x li {
- display:block;
- float:left;
- margin-right:45px;
- -webkit-transition: all 0.25s linear;
- -moz-transition: all 0.25s linear;
- -ms-transition: all 0.25s linear;
- -o-transition: all 0.25s linear;
- transition: all 0.25s linear;
-}
-
#header-wrap.quicknav .nav-x li {
min-width:160px;
margin-right:20px;
@@ -4428,105 +3939,6 @@
}
-/* SEARCH AND MORE */
-.search {
- position: absolute;
- width: 50px;
- height:28px;
- display: block;
- margin-top:-3px;
- margin-bottom:7px;
- overflow:hidden;
- z-index:100;
- right:54px;
- -webkit-transition: width 0.4s ease;
- -moz-transition: width 0.4s ease;
- -o-transition: width 0.4s ease;
- transition: width 0.4s ease;
-}
-
-.search #search-btn {
- width:50px;
- height:28px;
- background:url(../images/icon_search.png) no-repeat;
- float:left;
-}
-
-.search-inner {
- width:245px;
-}
-
-.search:hover, .search.active {
- width:245px;
-}
-
-.search .bottom, .search .left, .search .right {
- position: absolute;
- background-color: #a2a2a2
-}
-
-.search .bottom {
- width: 214px;
- height: 1px;
- top: 24px;
- left: 0
-}
-
-.search .left, .search .right {
- height: 5px;
- width: 1px
-}
-
-.search .left {
- top: 22px;
- left: 56px;
- background-color:#CCC;
-}
-
-.search .right {
- top: 22px;
- left: 238px;
- background-color:#CCC;
-}
-
-.search form {
- margin-top: 2px;
- width: 162px;
- float:left;
-}
-
-.search form input {
- color: #2f2f2f;
- font-size: 0.95em;
- width: 178px;
- border: none;
- margin-left: 6px;
- z-index: 1500;
- position: relative;
- background-color: transparent;
- border-bottom:1px solid #CCC;
- padding:0 0 0 4px;
- outline:none;
- height:24px;
-}
-
-.search:hover form input {
- border-bottom:1px solid #33B5E5;
-}
-
-.search:hover .bottom, .search:hover .left, .search:hover .right {
- background-color: #33b5e5;
-}
-
-.search:hover #search-btn {
- background-position: 0 -28px
-}
-
-.search form input:focus {
- color: #222;
- font-weight: bold
-}
-
.moremenu {
float: right;
position: relative;
@@ -4679,9 +4091,9 @@
height:12px;
text-indent:-8000px;
list-style:none;
- margin: 0 2px;
+ margin: 0 3px;
border-radius:6px;
- background-color:#ccc;
+ background-color:#ddd;
cursor:pointer;
-webkit-transition:color .5s ease-in;
-moz-transition:color .5s ease-in;
@@ -4689,13 +4101,13 @@
transition:color .5s ease-in;
}
.slideshow-container .pagination ul li:hover {
- background-color:#999;
+ background-color:#bbb;
}
.slideshow-container .pagination ul li.active {
- background-color:#33b5e5;
+ background-color:#6ab344;
}
.slideshow-container .pagination ul li.active:hover {
- background-color:#33b5e5;
+ background-color:#6ab344;
}
.slideshow-container ul li {
display:inline;
@@ -4715,27 +4127,14 @@
padding-bottom:0px;
}
-#nav-x {
- padding-top: 13px;
-}
-
-#nav-x .wrap {
- min-height:32px;
-}
-
-#nav-x .wrap,
#searchResults.wrap {
max-width:940px;
- border-bottom:1px solid #CCC;
+ border-bottom:1px solid #e5e5e5;
}
#searchResults.wrap #leftSearchControl {
min-height:700px
}
-.nav-x {
- margin-left:0;
- margin-bottom:0;
-}
@@ -4805,7 +4204,7 @@
}
.jspDrag {
- background: #bbb;
+ background: #ccc;
position: relative;
top: 0;
left: 0;
@@ -5048,7 +4447,7 @@
display:none;
margin: -1px auto 0;
position: relative;
- width: 940px;
+ max-width: 940px;
height: 0px;
}
#player-frame {
@@ -5060,6 +4459,22 @@
height: 330px;
position: relative;
}
+#player-frame .close {
+ position: absolute;
+ right: 8px;
+ bottom: 4px;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ text-indent: -1000em;
+ top: 6px;
+ background: url(../images/close.png) no-repeat 0 0;
+ z-index:9999;
+}
+#player-frame .close:hover, #player-frame .close:focus {
+ background-position: -16px 0;
+ cursor:pointer;
+}
@@ -5114,7 +4529,7 @@
}
.landing-docs .normal-links a {
- color:#258aaf !important;
+ color:#039BE5 !important;
}
.plusone {
@@ -5221,7 +4636,7 @@
float: left;
width: 100%;
text-align: center;
- color: #09c !important;
+ color: #039BE5 !important;
}
.home-sections ul li a {
font-weight: bold;
@@ -5238,9 +4653,6 @@
.home-sections ul li.last {
margin-right: 0px;
}
-.fullpage #footer {
- margin-top: -40px;
-}
/************ DISTRIBUTE PAGES ******************/
@@ -5269,1241 +4681,6 @@
clear: both;
}
-.border-img {
- border: 1px solid #CCC;
-}
-
-.center-img {
- margin: auto;
- text-align: center;
-}
-.center-img img {
- margin-bottom: 15px;
-}
-
-.figure img, .border-img {
- margin-bottom: 15px;
-}
-
-/************ RESOURCE CARDS ******************/
-
-/* Resource cards, 12, 13, 16-col */
-
-/* Basic card-styling with shadow */
-.resource-card {
- border-radius: 1px;
- box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.12);
- background: #fefefe;
-}
-
-/* Styling for background image including tinting and section icons in stacks */
-.card-bg {
- display: block;
- position: absolute;
- vertical-align: top;
- width: 100%;
- left: 0;
- top: 0;
- background-size: cover;
- background-repeat: no-repeat;
- background-position: center;
- background-image: url(../images/resource-card-default-android.jpg);
-}
-.card-bg:after {
- content: "";
- display: block;
- height: 100%;
- width: 100%;
- opacity: 1;
- background: rgba(0, 0, 0, 0.2);
- -webkit-transition: opacity 0.5s;
- -moz-transition: opacity 0.5s;
- -o-transition: opacity 0.5s;
- transition: opacity 0.5s;
-}
-.static .card-bg:after {
- display:none;
-}
-.card-bg .card-section-icon {
- position: absolute;
- top: 50%;
- width: 100%;
- margin-top: -35px;
- text-align: center;
- padding-top: 65px;
- z-index: 100;
-}
-.card-bg .card-section-icon .icon {
- position: absolute;
- left: 50%;
- margin-left: -28px;
- top: 0px;
- width: 56px;
- height: 56px;
- background-repeat: no-repeat;
- background-position: 50% 50%;
- background-image: url(../images/stack-icon.png);
-}
-.card-bg .card-section-icon .section {
- text-transform: uppercase;
- color: white;
- font-size: 14px;
-}
-
-.card-info {
- position: absolute;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- overflow: hidden;
- background: #fefefe;
- padding: 4px 12px 6px 12px;
-}
-.card-info .section {
- text-transform: uppercase;
- color: #898989;
- font-size: 12px;
- margin-bottom: 1px;
-}
-.card-info .title {
- color: #363636;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- padding-bottom: 5px;
- margin-bottom: -2px;
- font-size: 16px;
-}
-.card-info .description {
- overflow: hidden;
-}
-.card-info .description .text {
- color: #464646;
- font: 13px/15px Roboto Condensed;
- overflow: hidden;
- width:100%;
-}
-.card-info .description .util {
- position: absolute;
- right: 5px;
- bottom: 70px; /*-2px;*/
- opacity: 0;
- -webkit-transition: opacity 0.5s;
- -moz-transition: opacity 0.5s;
- -o-transition: opacity 0.5s;
- transition: opacity 0.5s;
-}
-.card-info.empty-desc .title {
- white-space: normal;
- overflow: visible;
-}
-.card-info.empty-desc .description {
- display: none;
-}
-/* Truncate card summaries at bounding box and
- * and apply ellipsis at lower right */
-.ellipsis {
- overflow: hidden;
- float:right;
- line-height: 15px;
- width:100%;
-}
-.resource-card-6x6 .card-info .description .teddddddxt {
- float:left;
- position:relative;
- margin-left:0;
-}
-.ellipsis:before {
- content:"";
- float: left;
- width: 5px;
- height:100%;
-}
-.ellipsis > *:first-child.text {
- float: right;
- width: 100% !important;
- margin-left: -5px;
-}
-.ellipsis:after {
- content: "\02026";
- height:17px;
- padding-bottom:4px;
-
- box-sizing: content-box;
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
-
- float: right; position: relative;
- top: -16px; left: 100%;
- width: 4em; margin-left: -4em;
- padding-right: 5px;
-
- background: -webkit-gradient(linear, left top, right top,
- from(rgba(255, 255, 255, 0)), to(white), color-stop(65%, white));
- background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white);
- background: -o-linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white);
- background: -ms-linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white);
- background: linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white);
-}
-.ellipsis:after {
- font-style: normal; color: #aaa;
- font-size:13px;
- text-align: right;
-}
-
-/* Flow Layout */
-.resource-flow-layout {
- display: inline-block;
-}
-.resource-flow-layout .resource-card, .resource-flow-layout .resource-card-stack {
- float: left;
- position: relative;
-}
-.resource-flow-layout .resource-card-stack > .resource-card {
- margin-right: 0px !important;
-}
-.resource-flow-layout:after {
- content: ".";
- display: block;
- height: 0;
- position:relative;
- clear: both;
- visibility: hidden;
-}
-.resource-card:hover {
- cursor: pointer;
-}
-.static .resource-card:hover {
- cursor: auto;
-}
-.resource-card:hover .card-bg:after {
- opacity: 0;
-}
-/* disabled to make way for fade/ellipsis truncation,
- and the plusone moves up.
-.resource-card:hover .card-info .description .text {
- padding-right: 70px;
-} */
-.resource-card:hover .card-info .description .util {
- opacity: 1;
-}
-
-/* Carousel Layout */
-/* Carousel styles for landing page */
-.resource-carousel-layout {
- margin: 20px 0 20px 0;
- position: relative;
- overflow: hidden;
-}
-.resource-carousel-layout .slideshow-prev, .resource-carousel-layout .slideshow-next {
- display: none;
-}
-.resource-carousel-layout .pagination {
- bottom: 0px;
-}
-.resource-carousel-layout .frame li {
- position: relative;
-}
-.resource-carousel-layout .frame li .card-bg {
- height: 300px;
-}
-.resource-carousel-layout .frame li .card-info {
- padding: 7px 15px 0px 15px;
- top: 300px;
-}
-.resource-carousel-layout .frame li .card-info .section {
- font-size: 13px;
- margin-bottom: 7px;
-}
-.resource-carousel-layout .frame li .card-info .title {
- font-size: 25px;
- margin-bottom: 2px;
-}
-.resource-carousel-layout .frame li .card-info .description {
- font-family: 15px/16px Roboto Condensed, sans-serif;
-}
-.resource-carousel-layout .frame li .card-info .description .text {
- height: 40px;
-}
-.resource-carousel-layout .frame li .card-info .description .util {
- bottom:97px;
- right:4px;
-}
-
-/* Stack Layout */
-.resource-stack-layout {
- display: inline-block;
-}
-.resource-stack-layout .resource-card-stack {
- float: left;
- position: relative;
-}
-.resource-stack-layout .resource-card {
- margin-bottom: 20px;
- display: block;
- position: relative;
-}
-.resource-stack-layout .section-card-menu > .card-info .section, .resource-stack-layout .section-card > .card-info .title {
- /*text-transform: uppercase;*/
- color: #898989;
- font-size: 17px;
- line-height: 24px;
- margin-bottom: 6px;
-}
-.resource-stack-layout .section-card {
- height: 284px;
-}
-.resource-stack-layout .section-card > .card-bg {
- height: 192px;
-}
-.resource-stack-layout .section-card > .card-info {
- padding: 4px 12px 6px 12px;
- top: 192px;
-}
-.resource-stack-layout .section-card > .card-info .section {
- display: none;
-}
-.resource-stack-layout .section-card > .card-info .title {
- font-size: 17px;
- border-bottom: 1px solid #959595;
- padding-bottom: 0px;
-}
-.resource-stack-layout .section-card > .card-info .description {
- font-size: 13px;
- line-height: 15px;
-}
-.resource-stack-layout .section-card > .card-info .description .text {
- height: 30px;
-}
-.resource-stack-layout .related-card {
- height: 90px;
-}
-.resource-stack-layout .related-card > .card-bg {
- left: 0;
- top: 0;
- width: 90px;
- height: 100%;
- position: absolute;
- display: block;
-}
-.resource-stack-layout .related-card > .card-info {
- left: 90px;
- padding: 4px 12px 4px 12px;
-}
-.resource-stack-layout .related-card > .card-info .section {
- font-size: 12px;
- margin-bottom: 1px;
- display: none;
-}
-.resource-stack-layout .related-card > .card-info .title {
- font-size: 16px;
- margin-bottom: -2px;
- white-space: normal;
- overflow: visible;
- text-overflow: ellipsis;
-}
-.resource-stack-layout .related-card > .card-info .title:after {
- content: url(../images/link-out.png);
- display: block;
-}
-.resource-stack-layout .related-card > .card-info .description {
- display: none;
-}
-.resource-stack-layout .section-card-menu {
- /* Flexible height */
- display: block;
- height: auto;
- width: auto;
-}
-.resource-stack-layout .section-card-menu .card-bg {
- height: 155px;
- /* Flexible height */
- position: relative;
- display: inline-block;
- vertical-align: top;
-}
-.resource-stack-layout .section-card-menu .card-info {
- padding: 4px 12px 0px 12px;
- /* Flexible height */
- position: relative;
- left: auto;
- top: auto;
- right: auto;
- bottom: auto;
-}
-.resource-stack-layout .section-card-menu .card-info ul {
- list-style: none;
- margin: 0;
-}
-.resource-stack-layout .section-card-menu .card-info ul li {
- list-style: none;
- margin: 0;
- padding: 15px 0;
- border-top-width: 1px;
- border-top-style: solid;
- border-top-color: #959595;
-}
-.resource-stack-layout .section-card-menu .card-info ul li a, .resource-stack-layout .section-card-menu .card-info ul li a:focus, .resource-stack-layout .section-card-menu .card-info ul li a:link, .resource-stack-layout .section-card-menu .card-info ul li a:visited, .resource-stack-layout .section-card-menu .card-info ul li a:active, .resource-stack-layout .section-card-menu .card-info ul li a:hover {
- color: #363636 !important;
-}
-.resource-stack-layout .section-card-menu .card-info ul li:first-child {
- border-top: none;
-}
-.resource-stack-layout .section-card-menu .card-info ul li:hover .title:after {
- opacity: 1;
- -webkit-transition: opacity 0.5s;
- -moz-transition: opacity 0.5s;
- -o-transition: opacity 0.5s;
- transition: opacity 0.5s;
-}
-.resource-stack-layout .section-card-menu .card-info ul li:hover .description {
- max-height: 30px;
- opacity: 1;
- -webkit-transition: max-height 0.5s, opacity 1s;
- -moz-transition: max-height 0.5s, opacity 1s;
- -o-transition: max-height 0.5s, opacity 1s;
- transition: max-height 0.5s, opacity 1s;
-}
-.resource-stack-layout .section-card-menu .card-info .title {
- font-size: 16px;
- margin-bottom: -2px;
- position: relative;
-}
-.resource-stack-layout .section-card-menu .card-info .title:after {
- background: url(../images/stack-arrow-right.png);
- content: '';
- opacity: 0;
- -webkit-transition: opacity 0.25s;
- -moz-transition: opacity 0.25s;
- -o-transition: opacity 0.25s;
- transition: opacity 0.25s;
- position: absolute;
- right: 0px;
- top: 3px;
- width: 10px;
- height: 15px;
-}
-.resource-stack-layout .section-card-menu .card-info .title.more {
- text-transform: uppercase;
- color: #898989;
- display: inline-block;
-}
-.resource-stack-layout .section-card-menu .card-info .title.more:after {
- background: url(../images/stack-arrow-right.png);
- content: '';
- display: block;
- position: absolute;
- right: -20px;
- top: 3px;
- width: 10px;
- height: 15px;
-}
-.resource-stack-layout .section-card-menu .card-info .description {
- max-height: 0px;
- opacity: 0;
- overflow: hidden;
- font-size: 13px;
- line-height: 15px;
- /* Hover off */
- -webkit-transition: max-height 0.5s, opacity 0.5s;
- -moz-transition: max-height 0.5s, opacity 0.5s;
- -o-transition: max-height 0.5s, opacity 0.5s;
- transition: max-height 0.5s, opacity 0.5s;
-}
-.resource-stack-layout .section-card-menu .card-info .description .text {
- height: 30px;
-}
-.resource-stack-layout:after {
- content: ".";
- display: block;
- height: 0;
- clear: both;
- visibility: hidden;
-}
-
-/* Generate the flow layout styles for a 3-column 16-col span */
-.resource-flow-layout.col-16 {
- margin: 0 -14px 0 0;
- width: 954px;
-}
-.resource-flow-layout.col-16 .resource-card, .resource-flow-layout.col-16 .resource-card-stack {
- margin: 0 14px 20px 0;
-}
-.resource-flow-layout.col-16 .resource-card-row-stack-last {
- margin-bottom: 0px !important;
-}
-.resource-flow-layout.col-16 .resource-card-col-stack-last {
- margin-bottom: 0px !important;
-}
-.resource-flow-layout.col-16 .resource-card-3x6 {
- width: 145px;
- height: 284px;
-}
-.resource-flow-layout.col-16 .resource-card-3x12 {
- width: 145px;
- height: 588px;
-}
-.resource-flow-layout.col-16 .resource-card-3x18 {
- width: 145px;
- height: 892px;
-}
-.resource-flow-layout.col-16 .resource-card-6x6 {
- width: 304px;
- height: 284px;
-}
-.resource-flow-layout.col-16 .resource-card-6x12 {
- width: 304px;
- height: 588px;
-}
-.resource-flow-layout.col-16 .resource-card-6x18 {
- width: 304px;
- height: 892px;
-}
-.resource-flow-layout.col-16 .resource-card-9x6 {
- width: 463px;
- height: 284px;
-}
-.resource-flow-layout.col-16 .resource-card-9x12 {
- width: 463px;
- height: 588px;
-}
-.resource-flow-layout.col-16 .resource-card-9x18 {
- width: 463px;
- height: 892px;
-}
-.resource-flow-layout.col-16 .resource-card-12x6 {
- width: 622px;
- height: 284px;
-}
-.resource-flow-layout.col-16 .resource-card-12x12 {
- width: 622px;
- height: 588px;
-}
-.resource-flow-layout.col-16 .resource-card-12x18 {
- width: 622px;
- height: 892px;
-}
-.resource-flow-layout.col-16 .resource-card-15x6 {
- width: 781px;
- height: 284px;
-}
-.resource-flow-layout.col-16 .resource-card-15x12 {
- width: 781px;
- height: 588px;
-}
-.resource-flow-layout.col-16 .resource-card-15x18 {
- width: 781px;
- height: 892px;
-}
-.resource-flow-layout.col-16 .resource-card-18x6 {
- width: 940px;
- height: 284px;
-}
-.resource-flow-layout.col-16 .resource-card-18x12 {
- width: 940px;
- height: 420px;
-}
-.resource-flow-layout.col-16 .resource-card-18x18 {
- width: 940px;
- height: 892px;
-}
-.resource-flow-layout.col-16 .resource-card-3x2 {
- width: 145px;
- height: 95px;
-}
-.resource-flow-layout.col-16 .resource-card-3x2x3 {
- width: 145px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-16 .resource-card-3x3 {
- width: 145px;
- height: 142px;
-}
-.resource-flow-layout.col-16 .resource-card-3x3x2 {
- width: 145px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-16 .resource-card-6x2 {
- width: 304px;
- height: 95px;
-}
-.resource-flow-layout.col-16 .resource-card-6x2x3 {
- width: 304px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-16 .resource-card-6x3 {
- width: 304px;
- height: 142px;
-}
-.resource-flow-layout.col-16 .resource-card-6x3x2 {
- width: 304px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-16 .resource-card-9x2 {
- width: 463px;
- height: 95px;
-}
-.resource-flow-layout.col-16 .resource-card-9x2x3 {
- width: 463px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-16 .resource-card-9x3 {
- width: 463px;
- height: 142px;
-}
-.resource-flow-layout.col-16 .resource-card-9x3x2 {
- width: 463px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-16 .resource-card-12x2 {
- width: 622px;
- height: 95px;
-}
-.resource-flow-layout.col-16 .resource-card-12x2x3 {
- width: 622px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-16 .resource-card-12x3 {
- width: 622px;
- height: 142px;
-}
-.resource-flow-layout.col-16 .resource-card-12x3x2 {
- width: 622px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-16 .resource-card-15x2 {
- width: 781px;
- height: 95px;
-}
-.resource-flow-layout.col-16 .resource-card-15x2x3 {
- width: 781px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-16 .resource-card-15x3 {
- width: 781px;
- height: 142px;
-}
-.resource-flow-layout.col-16 .resource-card-15x3x2 {
- width: 781px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-16 .resource-card-18x2 {
- width: 940px;
- height: 95px;
-}
-.resource-flow-layout.col-16 .resource-card-18x2x3 {
- width: 940px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-16 .resource-card-18x3 {
- width: 940px;
- height: 142px;
-}
-.resource-flow-layout.col-16 .resource-card-18x3x2 {
- width: 940px;
- height: 138px;
- margin-bottom: 8px;
-}
-
-/* Generate the flow layout styles for a 3-column 16-col span */
-.resource-flow-layout.col-12 {
- margin: 0 -14px 0 0;
- width: 714px;
-}
-
-.resource-flow-layout.col-12 .resource-card, .resource-flow-layout.col-12 .resource-card-stack {
- margin: 0 14px 20px 0;
-}
-.resource-flow-layout.col-12 .resource-card-row-stack-last {
- margin-bottom: 0px !important;
-}
-.resource-flow-layout.col-12 .resource-card-col-stack-last {
- margin-bottom: 0px !important;
-}
-.resource-flow-layout.col-12 .resource-card-3x6 {
- width: 105px;
- height: 284px;
-}
-.resource-flow-layout.col-12 .resource-card-3x12 {
- width: 105px;
- height: 588px;
-}
-.resource-flow-layout.col-12 .resource-card-3x18 {
- width: 105px;
- height: 892px;
-}
-.resource-flow-layout.col-12 .resource-card-6x6 {
- width: 224px;
- height: 284px;
-}
-.resource-flow-layout.col-12 .resource-card-6x12 {
- width: 224px;
- height: 588px;
-}
-.resource-flow-layout.col-12 .resource-card-6x18 {
- width: 224px;
- height: 892px;
-}
-.resource-flow-layout.col-12 .resource-card-9x6 {
- width: 343px;
- height: 284px;
-}
-.resource-flow-layout.col-12 .resource-card-9x12 {
- width: 343px;
- height: 588px;
-}
-.resource-flow-layout.col-12 .resource-card-9x18 {
- width: 343px;
- height: 892px;
-}
-.resource-flow-layout.col-12 .resource-card-12x6 {
- width: 462px;
- height: 284px;
-}
-.resource-flow-layout.col-12 .resource-card-12x12 {
- width: 462px;
- height: 588px;
-}
-.resource-flow-layout.col-12 .resource-card-12x18 {
- width: 462px;
- height: 892px;
-}
-.resource-flow-layout.col-12 .resource-card-15x6 {
- width: 581px;
- height: 284px;
-}
-.resource-flow-layout.col-12 .resource-card-15x12 {
- width: 581px;
- height: 588px;
-}
-.resource-flow-layout.col-12 .resource-card-15x18 {
- width: 581px;
- height: 892px;
-}
-.resource-flow-layout.col-12 .resource-card-18x6 {
- width: 700px;
- height: 284px;
-}
-.resource-flow-layout.col-12 .resource-card-18x12 {
- width: 700px;
- height: 420px;
-}
-.resource-flow-layout.col-12 .resource-card-18x18 {
- width: 700px;
- height: 892px;
-}
-.resource-flow-layout.col-12 .resource-card-3x2 {
- width: 105px;
- height: 95px;
-}
-.resource-flow-layout.col-12 .resource-card-3x2x3 {
- width: 105px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-12 .resource-card-3x3 {
- width: 105px;
- height: 142px;
-}
-.resource-flow-layout.col-12 .resource-card-3x3x2 {
- width: 105px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-12 .resource-card-6x2 {
- width: 224px;
- height: 95px;
-}
-.resource-flow-layout.col-12 .resource-card-6x2x3 {
- width: 224px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-12 .resource-card-6x3 {
- width: 224px;
- height: 142px;
-}
-.resource-flow-layout.col-12 .resource-card-6x3x2 {
- width: 224px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-12 .resource-card-9x2 {
- width: 343px;
- height: 95px;
-}
-.resource-flow-layout.col-12 .resource-card-9x2x3 {
- width: 343px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-12 .resource-card-9x3 {
- width: 343px;
- height: 142px;
-}
-.resource-flow-layout.col-12 .resource-card-9x3x2 {
- width: 343px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-12 .resource-card-12x2 {
- width: 462px;
- height: 95px;
-}
-.resource-flow-layout.col-12 .resource-card-12x2x3 {
- width: 462px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-12 .resource-card-12x3 {
- width: 462px;
- height: 142px;
-}
-.resource-flow-layout.col-12 .resource-card-12x3x2 {
- width: 462px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-12 .resource-card-15x2 {
- width: 581px;
- height: 95px;
-}
-.resource-flow-layout.col-12 .resource-card-15x2x3 {
- width: 581px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-12 .resource-card-15x3 {
- width: 581px;
- height: 142px;
-}
-.resource-flow-layout.col-12 .resource-card-15x3x2 {
- width: 581px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-12 .resource-card-18x2 {
- width: 700px;
- height: 95px;
-}
-.resource-flow-layout.col-12 .resource-card-18x2x3 {
- width: 700px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-12 .resource-card-18x3 {
- width: 700px;
- height: 142px;
-}
-.resource-flow-layout.col-12 .resource-card-18x3x2 {
- width: 700px;
- height: 138px;
- margin-bottom: 8px;
-}
-
-/* Generate the flow layout styles for a 3-column 13-col span */
-
-.resource-flow-layout.col-13 {
- margin: 0 -14px 0 0;
- width: 774px;
-}
-.resource-flow-layout.col-13 .resource-card, .resource-flow-layout.col-13 .resource-card-stack {
- margin: 0 14px 20px 0;
-}
-.resource-flow-layout.col-13 .resource-card-row-stack-last {
- margin-bottom: 0px !important;
-}
-.resource-flow-layout.col-13 .resource-card-col-stack-last {
- margin-bottom: 0px !important;
-}
-.resource-flow-layout.col-13 .resource-card-3x6 {
- width: 115px;
- height: 284px;
-}
-.resource-flow-layout.col-13 .resource-card-3x12 {
- width: 115px;
- height: 588px;
-}
-.resource-flow-layout.col-13 .resource-card-3x18 {
- width: 115px;
- height: 892px;
-}
-.resource-flow-layout.col-13 .resource-card-6x6 {
- width: 244px;
- height: 284px;
-}
-.resource-flow-layout.col-13 .resource-card-6x12 {
- width: 244px;
- height: 588px;
-}
-.resource-flow-layout.col-13 .resource-card-6x18 {
- width: 244px;
- height: 892px;
-}
-.resource-flow-layout.col-13 .resource-card-9x6 {
- width: 373px;
- height: 284px;
-}
-.resource-flow-layout.col-13 .resource-card-9x12 {
- width: 373px;
- height: 588px;
-}
-.resource-flow-layout.col-13 .resource-card-9x18 {
- width: 373px;
- height: 892px;
-}
-.resource-flow-layout.col-13 .resource-card-12x6 {
- width: 502px;
- height: 284px;
-}
-.resource-flow-layout.col-13 .resource-card-12x12 {
- width: 502px;
- height: 588px;
-}
-.resource-flow-layout.col-13 .resource-card-12x18 {
- width: 502px;
- height: 892px;
-}
-.resource-flow-layout.col-13 .resource-card-15x6 {
- width: 631px;
- height: 284px;
-}
-.resource-flow-layout.col-13 .resource-card-15x12 {
- width: 631px;
- height: 588px;
-}
-.resource-flow-layout.col-13 .resource-card-15x18 {
- width: 631px;
- height: 892px;
-}
-.resource-flow-layout.col-13 .resource-card-18x6 {
- width: 760px;
- height: 284px;
-}
-.resource-flow-layout.col-13 .resource-card-18x12 {
- width: 760px;
- height: 420px;
-}
-.resource-flow-layout.col-13 .resource-card-18x18 {
- width: 760px;
- height: 892px;
-}
-.resource-flow-layout.col-13 .resource-card-3x2 {
- width: 115px;
- height: 95px;
-}
-.resource-flow-layout.col-13 .resource-card-3x2x3 {
- width: 115px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-13 .resource-card-3x3 {
- width: 115px;
- height: 142px;
-}
-.resource-flow-layout.col-13 .resource-card-3x3x2 {
- width: 115px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-13 .resource-card-6x2 {
- width: 244px;
- height: 95px;
-}
-.resource-flow-layout.col-13 .resource-card-6x2x3 {
- width: 244px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-13 .resource-card-6x3 {
- width: 244px;
- height: 142px;
-}
-.resource-flow-layout.col-13 .resource-card-6x3x2 {
- width: 244px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-13 .resource-card-9x2 {
- width: 373px;
- height: 95px;
-}
-.resource-flow-layout.col-13 .resource-card-9x2x3 {
- width: 373px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-13 .resource-card-9x3 {
- width: 373px;
- height: 142px;
-}
-.resource-flow-layout.col-13 .resource-card-9x3x2 {
- width: 373px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-13 .resource-card-12x2 {
- width: 502px;
- height: 95px;
-}
-.resource-flow-layout.col-13 .resource-card-12x2x3 {
- width: 502px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-13 .resource-card-12x3 {
- width: 502px;
- height: 142px;
-}
-.resource-flow-layout.col-13 .resource-card-12x3x2 {
- width: 502px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-13 .resource-card-15x2 {
- width: 631px;
- height: 95px;
-}
-.resource-flow-layout.col-13 .resource-card-15x2x3 {
- width: 631px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-13 .resource-card-15x3 {
- width: 631px;
- height: 142px;
-}
-.resource-flow-layout.col-13 .resource-card-15x3x2 {
- width: 631px;
- height: 138px;
- margin-bottom: 8px;
-}
-.resource-flow-layout.col-13 .resource-card-18x2 {
- width: 760px;
- height: 95px;
-}
-.resource-flow-layout.col-13 .resource-card-18x2x3 {
- width: 760px;
- height: 90px;
- margin-bottom: 7px;
-}
-.resource-flow-layout.col-13 .resource-card-18x3 {
- width: 760px;
- height: 142px;
-}
-.resource-flow-layout.col-13 .resource-card-18x3x2 {
- width: 760px;
- height: 138px;
- margin-bottom: 8px;
-}
-
-/*
- The following are styles for cards in the flowlayout above, styled by the number of rows they span
-*/
-/* Single row items, might be simpler to just apply a class */
-.resource-card-3x6 > .card-bg, .resource-card-6x6 > .card-bg, .resource-card-9x6 > .card-bg, .resource-card-12x6 > .card-bg, .resource-card-15x6 > .card-bg, .resource-card-18x6 > .card-bg {
- height: 192px;
-}
-.resource-card-3x6 > .card-info, .resource-card-6x6 > .card-info, .resource-card-9x6 > .card-info, .resource-card-12x6 > .card-info, .resource-card-15x6 > .card-info, .resource-card-18x6 > .card-info {
- padding: 4px 12px 6px 12px;
- top: 192px;
-}
-.resource-card-3x6 > .card-info .section, .resource-card-6x6 > .card-info .section, .resource-card-9x6 > .card-info .section, .resource-card-12x6 > .card-info .section, .resource-card-15x6 > .card-info .section, .resource-card-18x6 > .card-info .section {
- font-size: 12px;
- margin-bottom: 1px;
-}
-.resource-card-3x6 > .card-info .title, .resource-card-6x6 > .card-info .title, .resource-card-9x6 > .card-info .title, .resource-card-12x6 > .card-info .title, .resource-card-15x6 > .card-info .title, .resource-card-18x6 > .card-info .title {
- font-size: 16px;
- margin-bottom: -2px;
-}
-.resource-card-3x6 > .card-info .description, .resource-card-6x6 > .card-info .description, .resource-card-9x6 > .card-info .description, .resource-card-12x6 > .card-info .description, .resource-card-15x6 > .card-info .description, .resource-card-18x6 > .card-info .description {
- font-size: 13px;
- line-height: 15px;
-}
-.resource-card-3x6 > .card-info .description .text, .resource-card-6x6 > .card-info .description .text, .resource-card-9x6 > .card-info .description .text, .resource-card-12x6 > .card-info .description .text, .resource-card-15x6 > .card-info .description .text, .resource-card-18x6 > .card-info .description .text {
- height: 30px;
-}
-
-/* Double row items */
-.resource-card-3x12 > .card-bg, .resource-card-6x12 > .card-bg, .resource-card-9x12 > .card-bg, .resource-card-12x12 > .card-bg, .resource-card-15x12 > .card-bg, .resource-card-18x12 > .card-bg {
- height: 320px;
-}
-.resource-card-3x12 > .card-info, .resource-card-6x12 > .card-info, .resource-card-9x12 > .card-info, .resource-card-12x12 > .card-info, .resource-card-15x12 > .card-info, .resource-card-18x12 > .card-info {
- padding: 4px 12px 6px 12px;
- top: 320px;
-}
-.resource-card-3x12 > .card-info .section, .resource-card-6x12 > .card-info .section, .resource-card-9x12 > .card-info .section, .resource-card-12x12 > .card-info .section, .resource-card-15x12 > .card-info .section, .resource-card-18x12 > .card-info .section {
- font-size: 12px;
- margin-bottom: 1px;
-}
-.resource-card-3x12 > .card-info .title, .resource-card-6x12 > .card-info .title, .resource-card-9x12 > .card-info .title, .resource-card-12x12 > .card-info .title, .resource-card-15x12 > .card-info .title, .resource-card-18x12 > .card-info .title {
- font-size: 16px;
- margin-bottom: -2px;
- white-space: normal;
-}
-.resource-card-3x12 > .card-info .description, .resource-card-6x12 > .card-info .description, .resource-card-9x12 > .card-info .description, .resource-card-12x12 > .card-info .description, .resource-card-15x12 > .card-info .description, .resource-card-18x12 > .card-info .description {
- font-size: 13px;
- line-height: 15px;
-}
-
-/* 1/3 row items */
-.resource-card-3x2 > .card-bg, .resource-card-6x2 > .card-bg, .resource-card-9x2 > .card-bg, .resource-card-12x2 > .card-bg, .resource-card-15x2 > .card-bg, .resource-card-18x2 > .card-bg {
- left: 0;
- top: 0;
- width: 90px;
- height: 100%;
- position: absolute;
- display: block;
-}
-.resource-card-3x2 > .card-info, .resource-card-6x2 > .card-info, .resource-card-9x2 > .card-info, .resource-card-12x2 > .card-info, .resource-card-15x2 > .card-info, .resource-card-18x2 > .card-info {
- left: 90px;
- padding: 4px 12px 4px 12px;
- height: 80px;
- overflow: hidden;
-}
-.resource-card-3x2 > .card-info .section, .resource-card-6x2 > .card-info .section, .resource-card-6x3 > .card-info .section, .resource-card-9x2 > .card-info .section, .resource-card-12x2 > .card-info .section, .resource-card-15x2 > .card-info .section, .resource-card-18x2 > .card-info .section {
- font-size: 12px;
- margin-bottom: 1px;
- /* display: none; */
-}
-.resource-card-3x2 > .card-info .title, .resource-card-6x2 > .card-info .title, .resource-card-9x2 > .card-info .title, .resource-card-12x2 > .card-info .title, .resource-card-15x2 > .card-info .title, .resource-card-18x2 > .card-info .title {
- font-size: 16px;
- margin-bottom: -2px;
- white-space: normal;
- overflow: visible;
- text-overflow: ellipsis;
-}
-.resource-card-3x2 > .card-info .title:after, .resource-card-6x2 > .card-info .title:after, .resource-card-9x2 > .card-info .title:after, .resource-card-12x2 > .card-info .title:after, .resource-card-15x2 > .card-info .title:after, .resource-card-18x2 > .card-info .title:after {
- /* content: url(../images/link-out.png); */
- display: block;
-}
-.resource-card-3x2 > .card-info .description, .resource-card-6x2 > .card-info .description, .resource-card-9x2 > .card-info .description, .resource-card-12x2 > .card-info .description, .resource-card-15x2 > .card-info .description, .resource-card-18x2 > .card-info .description {
- display: none;
-}
-
-
-/* Override to show the description instead of the content section */
-.no-section .resource-card-3x2 > .card-info .section,
-.no-section .resource-card-6x2 > .card-info .section {
- display: none;
-}
-.no-section .resource-card-3x2 > .card-info .description,
-.no-section .resource-card-6x2 > .card-info .description {
- display: block;
-}
-
-/* 1/2 row items */
-.resource-card-3x3 > .card-bg, .resource-card-6x3 > .card-bg, .resource-card-9x3 > .card-bg, .resource-card-12x3 > .card-bg, .resource-card-15x3 > .card-bg, .resource-card-18x3 > .card-bg {
- left: 0;
- top: 0;
- width: 90px;
- height: 100%;
- position: absolute;
- display: block;
-}
-.resource-card-3x3 > .card-info, .resource-card-6x3 > .card-info, .resource-card-9x3 > .card-info, .resource-card-12x3 > .card-info, .resource-card-15x3 > .card-info, .resource-card-18x3 > .card-info {
- left: 90px;
- padding: 4px 12px 0px 12px;
-}
-.resource-card-3x3 > .card-info .section, .resource-card-6x3 > .card-info .section, .resource-card-9x3 > .card-info .section, .resource-card-12x3 > .card-info .section, .resource-card-15x3 > .card-info .section, .resource-card-18x3 > .card-info .section {
- font-size: 12px;
- margin-bottom: 1px;
- display: none;
-}
-.resource-card-3x3 > .card-info .title, .resource-card-6x3 > .card-info .title, .resource-card-9x3 > .card-info .title, .resource-card-12x3 > .card-info .title, .resource-card-15x3 > .card-info .title, .resource-card-18x3 > .card-info .title {
- font-size: 16px;
- margin-bottom: -2px;
- white-space: normal;
- overflow: visible;
-}
-.resource-card-3x3 > .card-info .description .text, .resource-card-6x3 > .card-info .description .text, .resource-card-9x3 > .card-info .description .text, .resource-card-12x3 > .card-info .description .text, .resource-card-15x3 > .card-info .description .text, .resource-card-18x3 > .card-info .description .text {
- font-size: 12px;
- line-height: 15px;
- padding-right: 0px !important;
- height: 80px;
-}
-.resource-card-3x3 > .card-info .description .util, .resource-card-6x3 > .card-info .description .util, .resource-card-9x3 > .card-info .description .util, .resource-card-12x3 > .card-info .description .util, .resource-card-15x3 > .card-info .description .util, .resource-card-18x3 > .card-info .description .util {
- display: none;
-}
-/* placement of plusone */
-.resource-card-6x12 > .card-info .description .util, .resource-card-9x12 > .card-info .description .util, .resource-card-12x12 > .card-info .description .util, .resource-card-15x12 > .card-info .description .util {
- bottom:2px;
-}
-.resource-card-18x12 > .card-info .description .util {
- bottom:2px;
-}
-/* Overrides for col-16 6x6 cards linking to local content on landing pages.
- Suppresses "section" and puts the title above a hairline rule. */
-.landing .card-info .section, .resource-flow-layout.col-16.landing .resource-card-9x6 .card-info .section {
- display:none;
-}
-.landing .card-info .title {
- color: #898989;
- font-size: 17px;
- line-height: 24px;
- margin-bottom: 6px;
- border-bottom: 1px solid #959595;
- padding-bottom: 0px;
-}
-.landing .card-info .description {
- font-size: 13px;
- line-height: 15px;
-}
-.landing .card-info .description .text {
-height:30px;
-}
-.landing .resource-card-6x6 > .card-info .description .util, .landing .resource-card-9x6 > .card-info .description .util {
- bottom:2px;
-}
-/*
- Generate a resource stack layout for a 3 column widget spanning 16 grid cols
-*/
-.resource-stack-layout.col-16 {
- margin: 0 -14px 0 0;
- width: 954px;
-}
-.resource-stack-layout.col-16 .resource-card-stack {
- margin: 0 14px 0 0;
- width: 304px;
-}
-
-/* Example of card menu tinting */
-.resource-widget[data-section=distribute\/tools] .section-card-menu
-.card-bg:after {
- background: rgba(126, 55, 148, 0.4) !important;
-}
-.resource-widget[data-section=distribute\/tools] .section-card-menu
-.card-section-icon .icon {
- background-color: #7e3794 !important;
-}
-.resource-widget[data-section=distribute\/tools] .section-card-menu
-.card-info ul li {
- border-top-color: #7e3794 !important;
-}
-
-/* tinting for stacks */
-
-div.jd-descr > .resource-widget[data-section=distribute\/tools]
-.section-card-menu .card-info ul li {
- border-top-color: #7e3794 !important;
-}
-
-
/**
* UTILITIES
@@ -6530,11 +4707,13 @@
*/
.landing-h1 {
- font-weight: 100;
- font-size: 60px;
- line-height: 78px;
+ color: #44555d;
+ font-weight: 300;
+ font-size: 56px;
+ line-height: 80px;
text-align: center;
letter-spacing: -1px;
+ margin-bottom: 6px;
}
.landing-pre-h1 {
@@ -6545,11 +4724,11 @@
text-align: center;
letter-spacing: -1px;
text-transform: uppercase;
-
}
.landing-h1.hero {
text-align: left;
+ color: #fff;
}
.landing-h2 {
@@ -6560,10 +4739,10 @@
}
.landing-subhead {
- color: #999999;
+ color: #78868d;
font-size: 20px;
- line-height: 28px;
- font-weight:300;
+ font-weight: 300;
+ line-height: 32px;
text-align: center;
}
.landing-subhead.hero {
@@ -6600,23 +4779,21 @@
* LAYOUT
*/
-#body-content,
-.fullpage,
-#jd-content,
-.jd-descr,
-.landing-body-content {
- height: 100%;
-}
-
.landing-section {
- padding: 80px 10px 80px;
- width: 100%;
- margin-left: -10px;
+ background: #eceff1;
+ clear: both;
+ padding: 80px 20px 80px;
+ margin: 0 -20px;
text-rendering: optimizeLegibility;
}
-#extending-android-to-wearables {
- padding-top: 30px;
+@media (max-width: 719px) {
+ .landing-section {
+ margin-left: -10px;
+ margin-right: -10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ }
}
.landing-short-section {
@@ -6624,7 +4801,7 @@
}
.landing-gray-background {
- background-color: #e9e9e9;
+ background-color: #b0bec5;
}
.landing-white-background {
@@ -6636,24 +4813,19 @@
background-color: hsl(8, 70%, 54%);
}
-.landing-subhead-red {
+.landing-red-background .landing-h1 {
+ color: white;
+}
+
+.landing-red-background .landing-subhead {
color: hsl(8, 71%, 84%);
text-align: left;
}
-.landing-subhead-red p {
- margin-top: 20px;
-}
-
-.landing-hero-container {
- height: 100%;
-}
-
.preview-hero {
- height: calc(100% - 110px);
+ height: calc(100vh - 128px);
min-height: 504px;
- margin-top: -5px;
padding-top: 0;
padding-bottom: 0;
background-image: url(../../preview/images/hero.jpg);
@@ -6665,9 +4837,8 @@
}
.wear-hero {
- height: calc(100% - 110px);
+ height: calc(100vh - 128px);
min-height: 504px;
- margin-top: -5px;
padding-top: 0;
padding-bottom: 0;
background-image: url(../../wear/images/hero.jpg);
@@ -6679,9 +4850,8 @@
}
.tv-hero {
- height: calc(100% - 110px);
+ height: calc(100vh - 128px);
min-height: 504px;
- margin-top: -5px;
padding-top: 0;
padding-bottom: 0;
background-image: url(../../tv/images/hero.jpg);
@@ -6693,9 +4863,8 @@
}
.auto-hero {
- height: calc(100% - 110px);
+ height: calc(100vh - 128px);
min-height: 504px;
- margin-top: -5px;
padding-top: 0;
padding-bottom: 0;
background-image: url(../../auto/images/hero.jpg);
@@ -6708,16 +4877,16 @@
.landing-hero-scrim {
background: black;
- opacity: .2;
- position: absolute;
- width: 100%;
height: 100%;
- margin-left: -10px;
+ left: 0;
+ position: absolute;
+ opacity: .2;
+ width: 100%;
}
.landing-hero-wrap {
margin: 0 auto;
- width: 940px;
+ max-width: 940px;
clear: both;
height: 100%;
position: relative;
@@ -6736,56 +4905,6 @@
line-height: 24px;
}
-.landing-button {
- white-space: nowrap;
- display: inline-block;
- padding: 16px 32px;
- font-size: 18px;
- font-weight: 500;
- line-height: 24px;
- cursor: pointer;
- color: white;
- -webkit-user-select: none;
- -moz-user-select: none;
- -o-user-select: none;
- user-select: none;
- -webkit-transition: .2s background-color ease-in-out;
- -moz-transition: .2s background-color ease-in-out;
- -o-transition: .2s background-color ease-in-out;
- transition: .2s background-color ease-in-out;
-}
-
-.landing-primary {
- background-color: hsl(8, 70%, 44%);
- color: #f8f8f8;
-}
-
-.landing-button.landing-primary:hover {
- background-color: hsl(8, 70%, 36%);
-}
-
-.landing-button.landing-primary:active {
- background-color: hsl(8, 70%, 30%);
-}
-
-.landing-button.landing-secondary {
- background-color: #2faddb;
-}
-
-.landing-button.landing-secondary:hover {
- background-color: #09c;
-}
-
-.landing-button.landing-secondary:active {
- background-color: #3990ab;
-}
-
-a.landing-button,
-a.landing-button:hover,
-a.landing-button:visited {
- color: white !important;
-}
-
.landing-video-link {
white-space: nowrap;
display: inline-block;
@@ -6904,17 +5023,6 @@
margin-bottom: 20px;
}
-.col-3-wide {
- display: inline;
- float: left;
- margin-left: 10px;
- margin-right: 10px;
-}
-
-.col-3-wide {
- width: 302px;
-}
-
/**
* ANIMATION
*/
@@ -6958,7 +5066,7 @@
}
#video-frame {
- width:940px;
+ max-width:940px;
height:100%;
margin:72px auto;
display:none;
@@ -7021,6 +5129,69 @@
content:url("../images/play-circle-grey.png") url("../images/play-circle-grey_2x.png");
}
+/*
+ * Responsive YouTube embeds from DevSite
+ *
+ * When applied to a <div> that wraps a video, "video-wrapper" forces the video
+ * to float right at 50% of the column width on desktop, but appear as a block
+ * element at 100% of the column width on smaller screens.
+ * "video-wrapper-full-width" works the same but is always 100% width.
+ */
+.video-wrapper,
+.video-wrapper-left {
+ float: right;
+ margin: 0 0 40px 40px;
+ padding-top: calc(((100% - 40px) / 2) / 16 * 9); /* 16:9 including margin */
+ position: relative;
+ width: calc((100% - 40px) / 2); /* 50% including margin */
+}
+
+/*
+ * "video-wrapper-left" forces 50% without the float
+ * This is useful for heading content when you want the video to
+ * appear next to an element that is already floated right
+ * (e.g. tb-wrapper <div>)
+ */
+.video-wrapper-left {
+ float: none;
+ margin: 16px 0 20px 0;
+}
+
+.video-wrapper-full-width {
+ margin: 16px 0;
+ padding-top: 56.25%; /* Forces div to 16:9 at 100% width */
+ position: relative;
+ width: 100%;
+}
+
+.video-wrapper embed,
+.video-wrapper iframe,
+.video-wrapper object,
+.video-wrapper-full-width embed,
+.video-wrapper-full-width iframe,
+.video-wrapper-full-width object,
+.video-wrapper-left embed,
+.video-wrapper-left iframe,
+.video-wrapper-left object {
+ height: 100%;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+@media screen and (max-width: 1000px) {
+
+ .video-wrapper,
+ .video-wrapper-left {
+ float: none;
+ margin: 16px 0;
+ padding-top: 56.25%; /* Forces div to 16:9 at 100% width */
+ width: 100%;
+ }
+}
+
+
/******************
Styles for d.a.c/index:
*******************/
@@ -7029,8 +5200,7 @@
/* Generic full screen carousel styling to be used across pages. */
.fullscreen-carousel {
- margin: 0 -10px;
- width: 100%;
+ margin: 0 -20px;
overflow: hidden;
position: relative;
}
@@ -7069,7 +5239,6 @@
font-weight: 300;
font-size: 18px;
line-height: 24px;
- -webkit-font-smoothing: antialiased;
}
.fullscreen-carousel .hero .hero-bg {
@@ -7203,48 +5372,18 @@
}
-
-
-
-/*
- Styles for the entity link used in the actions bar and in the cta of
- the resources that appear in the tab carousel.
-*/
-.actions-bar a:after,
-.resource .cta:after {
- content: '›';
- font-weight: 400;
- font-size: 22px;
- left: 5px;
- line-height: 1;
- position: relative;
- top: 1px;
- transition: left 190ms ease-out;
-}
-
-.actions-bar a:hover:after,
-.resource .cta:hover:after {
- left: 10px;
-}
-
-
-
-
/*
Styles for the actions bar.
*/
.actions-bar {
- background: #9acd00;
- margin: 0 -10px;
+ background: #b0bec5;
text-align: center;
}
.actions-bar .actions {
- padding: 30px 0 30px;
- text-align: justify;
+ padding: 24px 0;
font-size: 0.1px;
line-height: 0.1px;
- margin: 0 10px 0 0;
}
.actions-bar .actions:after {
@@ -7255,26 +5394,36 @@
.actions-bar .actions > div {
display: inline-block;
+ margin: 0 16px;
}
-.actions-bar a {
- font-size: 21px;
- line-height: 27px;
+.actions-bar .actions a {
color: #fff;
+ font-size: 24px;
font-weight: 300;
- -webkit-font-smoothing: antialiased;
+ line-height: 50px;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
}
-.actions-bar a:after {
- top: 0px;
- font-size: 22px;
+.actions-bar .actions a:hover {
+ opacity: .54;
}
-.actions-bar a:hover {
- color: #fff !important;
+.actions-bar .actions .dac-sprite {
+ margin: 0 -8px 0 -12px;
}
+@media (max-width: 719px) {
+ .actions-bar {
+ text-align: left;
+ }
+ .actions-bar .actions > div {
+ display: block;
+ margin: 0;
+ }
+}
@@ -7438,3 +5587,3203 @@
.resource-card-6x2 > .card-bg.helpouts-card-bg:after {
display:none;
}
+
+.dac-visible-mobile-block, .dac-mobile-only, .dac-visible-mobile-inline, .dac-visible-mobile-inline-block, .dac-visible-tablet-block, .dac-visible-tablet-inline, .dac-visible-tablet-inline-block, .dac-visible-desktop-block, .dac-visible-desktop-inline, .dac-visible-desktop-inline-block {
+ display: none !important;
+}
+
+@media (max-width: 719px) {
+ .dac-hidden-mobile {
+ display: none !important;
+ }
+
+ .dac-visible-mobile-block, .dac-mobile-only {
+ display: block !important;
+ }
+
+ .dac-visible-mobile-inline {
+ display: inline !important;
+ }
+
+ .dac-visible-mobile-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 720px) and (max-width: 979px) {
+ .dac-hidden-tablet {
+ display: none !important;
+ }
+
+ .dac-visible-tablet-block {
+ display: block !important;
+ }
+
+ .dac-visible-tablet-inline {
+ display: inline !important;
+ }
+
+ .dac-visible-tablet-inline-block {
+ display: inline-block !important;
+ }
+}
+
+@media (min-width: 980px) {
+ .dac-hidden-desktop {
+ display: none !important;
+ }
+
+ .dac-visible-desktop-block {
+ display: block !important;
+ }
+
+ .dac-visible-desktop-inline {
+ display: inline !important;
+ }
+
+ .dac-visible-desktop-inline-block {
+ display: inline-block !important;
+ }
+}
+
+.dac-offset-parent {
+ position: relative !important;
+}
+
+/**
+ * Break strings when their length exceeds the width of their container.
+ */
+.dac-text-break {
+ word-wrap: break-word !important;
+}
+
+/**
+ * Horizontal text alignment
+ */
+.dac-text-center {
+ text-align: center !important;
+}
+
+.dac-text-left {
+ text-align: left !important;
+}
+
+.dac-text-right {
+ text-align: right !important;
+}
+
+/**
+ * Prevent whitespace wrapping
+ */
+.dac-text-no-wrap {
+ white-space: nowrap !important;
+}
+
+/**
+ * Prevent text from wrapping onto multiple lines, instead truncate with an ellipsis.
+ */
+.dac-text-truncate {
+ max-width: 100%;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ word-wrap: normal !important;
+}
+
+/**
+ * Floats
+ */
+.dac-float-left {
+ float: left !important;
+}
+
+.dac-float-right {
+ float: right !important;
+}
+
+/**
+ * New block formatting context
+ *
+ * This affords some useful properties to the element. It won't wrap under
+ * floats. Will also contain any floated children.
+ * N.B. This will clip overflow. Use the alternative method below if this is
+ * problematic.
+ */
+.dac-nbfc {
+ overflow: hidden !important; }
+
+/**
+ * New block formatting context (alternative)
+ *
+ * Alternative method when overflow must not be clipped.
+ *
+ * N.B. This breaks down in some browsers when elements within this element
+ * exceed its width.
+ */
+.dac-nbfc-alt {
+ display: table-cell !important;
+ width: 10000px !important; }
+
+/* New CSS */
+/************ RESOURCE CARDS ******************/
+/* Basic card-styling with shadow */
+.resource-card {
+ background: #fff;
+ box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.21);
+ display: block;
+ position: relative; }
+
+/* Play button is only visible on 6by6 cards */
+.play-button {
+ background-color: #000;
+ border-radius: 50%;
+ box-sizing: border-box;
+ display: none;
+ height: 70px;
+ left: 50%;
+ margin-left: -35px;
+ line-height: 65px;
+ padding-left: 4px;
+ position: absolute;
+ opacity: .6;
+ text-align: center;
+ -webkit-transition: opacity .5s;
+ transition: opacity .5s;
+ top: 50px;
+ width: 70px;
+ z-index: 1; }
+ .resource-card-6x6 .play-button {
+ display: block; }
+
+/* Styling for background image including tinting and section icons in stacks */
+.card-bg {
+ bottom: 131px;
+ display: block;
+ position: absolute;
+ vertical-align: top;
+ width: 100%;
+ left: 0;
+ top: 0;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-image: url(../images/resource-card-default-android.jpg); }
+ .card-bg:after {
+ content: "";
+ display: block;
+ height: 100%;
+ width: 100%;
+ opacity: 1;
+ background: rgba(0, 0, 0, 0.05);
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s; }
+ .static .card-bg:after {
+ display: none; }
+ .card-bg .card-section-icon {
+ position: absolute;
+ top: 50%;
+ width: 100%;
+ margin-top: -35px;
+ text-align: center;
+ padding-top: 65px;
+ z-index: 100; }
+ .card-bg .card-section-icon .icon {
+ position: absolute;
+ left: 50%;
+ margin-left: -28px;
+ top: 0px;
+ width: 56px;
+ height: 56px;
+ background-repeat: no-repeat;
+ background-position: 50% 50%;
+ background-image: url(../images/stack-icon.png); }
+ .card-bg .card-section-icon .section {
+ text-transform: uppercase;
+ color: white;
+ font-size: 14px; }
+
+.card-info {
+ position: absolute;
+ box-sizing: border-box;
+ height: 131px;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ background: #fefefe;
+ padding: 6px 12px; }
+ .card-info .section {
+ color: #898989;
+ font-size: 11px;
+ font-weight: 700;
+ letter-spacing: .3px;
+ line-height: 20px;
+ text-transform: uppercase; }
+ .card-info .title {
+ color: #333;
+ font-size: 18px;
+ font-weight: 500;
+ line-height: 24px;
+ margin-bottom: 2px;
+ max-height: 48px;
+ overflow: hidden;
+ padding-bottom: 5px;
+ text-overflow: ellipsis;
+ white-space: normal; }
+ .card-info .description {
+ overflow: hidden; }
+ .card-info .description .text {
+ color: #666;
+ font-size: 14px;
+ height: 60px;
+ line-height: 20px;
+ overflow: hidden;
+ width: 100%; }
+ .card-info .description .util {
+ position: absolute;
+ right: 5px;
+ bottom: 70px;
+ opacity: 0;
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s; }
+ .card-info.empty-desc .title {
+ white-space: normal;
+ overflow: visible; }
+ .card-info.empty-desc .description {
+ display: none; }
+
+/* Truncate card summaries at bounding box and
+ * and apply ellipsis at lower right */
+.ellipsis {
+ overflow: hidden;
+ float: right;
+ line-height: 15px;
+ width: 100%; }
+ .ellipsis:before {
+ content: "";
+ float: left;
+ width: 5px;
+ height: 100%; }
+ .ellipsis > *:first-child.text {
+ float: right;
+ width: 100% !important;
+ margin-left: -5px; }
+ .ellipsis:after {
+ content: "\02026";
+ height: 17px;
+ padding-bottom: 4px;
+ box-sizing: content-box;
+ float: right;
+ position: relative;
+ top: -16px;
+ left: 100%;
+ width: 4em;
+ margin-left: -4em;
+ padding-right: 5px;
+ background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), to(white), color-stop(65%, white));
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0), white 65%, white);
+ background: linear-gradient(to right, rgba(255, 255, 255, 0), white 65%, white); }
+ .ellipsis:after {
+ font-style: normal;
+ color: #aaa;
+ font-size: 13px;
+ text-align: right; }
+
+.resource-card:hover {
+ cursor: pointer; }
+ .static .resource-card:hover {
+ cursor: auto; }
+ .resource-card:hover .card-bg:after {
+ opacity: 0; }
+ .resource-card:hover .play-button {
+ opacity: .3; }
+ .resource-card:hover .card-info .description .util {
+ opacity: 1; }
+
+/* Carousel Layout */
+/* Carousel styles for landing page */
+.resource-carousel-layout {
+ height: 531px;
+ margin: 20px 0 20px 0;
+ padding: 0 !important;
+ position: relative;
+ overflow: hidden; }
+ .resource-carousel-layout .slideshow-prev, .resource-carousel-layout .slideshow-next {
+ display: none; }
+ .resource-carousel-layout .pagination {
+ bottom: 97px;
+ left: auto;
+ padding-right: 10px;
+ right: 0;
+ text-align: right;
+ width: 16.66666667%; }
+ .resource-carousel-layout .pagination ul li {
+ text-indent: 8000px; }
+ .resource-carousel-layout .frame li {
+ position: relative; }
+ .resource-carousel-layout .frame li .card-bg {
+ bottom: 131px; }
+ .resource-carousel-layout .frame li .card-info {
+ height: 131px;
+ padding: 6px 12px;
+ top: auto; }
+ .resource-carousel-layout .frame li .card-info .title {
+ font-size: 28px;
+ font-weight: 400;
+ line-height: 32px; }
+ .resource-carousel-layout .frame li .card-info .description .text {
+ height: 40px; }
+ .resource-carousel-layout .frame li .card-info .description .util {
+ bottom: 97px;
+ right: 4px; }
+
+/* Stack Layout */
+.resource-stack-layout {
+ display: inline-block;
+ padding: 0; }
+ .resource-stack-layout .section-card-menu > .card-info .section, .resource-stack-layout .section-card > .card-info .title {
+ /*text-transform: uppercase;*/
+ color: #898989;
+ font-size: 17px;
+ line-height: 24px;
+ margin-bottom: 6px; }
+ .resource-stack-layout .section-card {
+ height: 284px; }
+ .resource-stack-layout .section-card > .card-bg {
+ height: 192px; }
+ .resource-stack-layout .section-card > .card-info {
+ padding: 4px 12px 6px 12px;
+ top: 192px; }
+ .resource-stack-layout .section-card > .card-info .section {
+ display: none; }
+ .resource-stack-layout .section-card > .card-info .title {
+ font-size: 17px;
+ border-bottom: 1px solid #959595;
+ padding-bottom: 0px; }
+ .resource-stack-layout .section-card > .card-info .description {
+ font-size: 13px;
+ line-height: 15px; }
+ .resource-stack-layout .section-card > .card-info .description .text {
+ height: 30px; }
+ .resource-stack-layout .related-card {
+ height: 90px; }
+ .resource-stack-layout .related-card > .card-bg {
+ left: 0;
+ top: 0;
+ width: 90px;
+ height: 100%;
+ position: absolute;
+ display: block; }
+ .resource-stack-layout .related-card > .card-info {
+ left: 90px;
+ padding: 4px 12px 4px 12px; }
+ .resource-stack-layout .related-card > .card-info .section {
+ font-size: 12px;
+ margin-bottom: 1px;
+ display: none; }
+ .resource-stack-layout .related-card > .card-info .title {
+ font-size: 16px;
+ margin-bottom: -2px;
+ white-space: normal;
+ overflow: visible;
+ text-overflow: ellipsis; }
+ .resource-stack-layout .related-card > .card-info .title:after {
+ content: url(../images/link-out.png);
+ display: block; }
+ .resource-stack-layout .related-card > .card-info .description {
+ display: none; }
+ .resource-stack-layout .section-card-menu {
+ /* Flexible height */
+ display: block;
+ height: auto;
+ width: auto; }
+ .resource-stack-layout .section-card-menu .card-bg {
+ height: 155px;
+ /* Flexible height */
+ position: relative;
+ display: inline-block;
+ vertical-align: top; }
+ .resource-stack-layout .section-card-menu .card-info {
+ padding: 4px 12px 0px 12px;
+ /* Flexible height */
+ position: relative;
+ left: auto;
+ top: auto;
+ right: auto;
+ bottom: auto; }
+ .resource-stack-layout .section-card-menu .card-info ul {
+ list-style: none;
+ margin: 0; }
+ .resource-stack-layout .section-card-menu .card-info ul li {
+ list-style: none;
+ margin: 0;
+ padding: 15px 0;
+ border-top-width: 1px;
+ border-top-style: solid;
+ border-top-color: #959595; }
+ .resource-stack-layout .section-card-menu .card-info ul li a, .resource-stack-layout .section-card-menu .card-info ul li a:focus, .resource-stack-layout .section-card-menu .card-info ul li a:hover {
+ color: #333 !important; }
+ .resource-stack-layout .section-card-menu .card-info ul li:first-child {
+ border-top: none; }
+ .resource-stack-layout .section-card-menu .card-info ul li:hover .title:after {
+ opacity: 1;
+ -webkit-transition: opacity 0.5s;
+ transition: opacity 0.5s; }
+ .resource-stack-layout .section-card-menu .card-info ul li:hover .description {
+ max-height: 30px;
+ opacity: 1;
+ -webkit-transition: max-height 0.5s, opacity 1s;
+ transition: max-height 0.5s, opacity 1s; }
+ .resource-stack-layout .section-card-menu .card-info .title {
+ font-size: 16px;
+ margin-bottom: -2px;
+ position: relative; }
+ .resource-stack-layout .section-card-menu .card-info .title:after {
+ background: url(../images/stack-arrow-right.png);
+ content: '';
+ opacity: 0;
+ -webkit-transition: opacity 0.25s;
+ transition: opacity 0.25s;
+ position: absolute;
+ right: 0px;
+ top: 3px;
+ width: 10px;
+ height: 15px; }
+ .resource-stack-layout .section-card-menu .card-info .title.more {
+ text-transform: uppercase;
+ color: #898989;
+ display: inline-block; }
+ .resource-stack-layout .section-card-menu .card-info .title.more:after {
+ background: url(../images/stack-arrow-right.png);
+ content: '';
+ display: block;
+ position: absolute;
+ right: -20px;
+ top: 3px;
+ width: 10px;
+ height: 15px; }
+ .resource-stack-layout .section-card-menu .card-info .description {
+ max-height: 0px;
+ opacity: 0;
+ overflow: hidden;
+ font-size: 13px;
+ line-height: 15px;
+ /* Hover off */
+ -webkit-transition: max-height 0.5s, opacity 0.5s;
+ transition: max-height 0.5s, opacity 0.5s; }
+ .resource-stack-layout .section-card-menu .card-info .description .text {
+ height: 30px; }
+ .resource-stack-layout:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden; }
+
+.resource-card, .resource-card-stack {
+ margin-bottom: 20px; }
+
+.resource-card-row-stack-last {
+ margin-bottom: 0px !important; }
+
+.resource-card-col-stack-last {
+ margin-bottom: 0px !important; }
+
+.resource-card-3x6 {
+ height: 300px; }
+
+.resource-card-3x12 {
+ height: 620px; }
+
+.resource-card-3x18 {
+ height: 940px; }
+
+.resource-card-6x6 {
+ height: 300px; }
+
+.resource-card-6x12 {
+ height: 620px; }
+
+.resource-card-6x18 {
+ height: 940px; }
+
+.resource-card-9x6 {
+ height: 300px; }
+
+.resource-card-9x12 {
+ height: 620px; }
+
+.resource-card-9x18 {
+ height: 940px; }
+
+.resource-card-12x6 {
+ height: 300px; }
+
+.resource-card-12x12 {
+ height: 620px; }
+
+.resource-card-12x18 {
+ height: 940px; }
+
+.resource-card-15x6 {
+ height: 300px; }
+
+.resource-card-15x12 {
+ height: 620px; }
+
+.resource-card-15x18 {
+ height: 940px; }
+
+.resource-card-18x6 {
+ height: 300px; }
+
+.resource-card-18x12 {
+ height: 620px; }
+
+.resource-card-18x18 {
+ height: 940px; }
+
+.resource-card-3x2 {
+ height: 100px; }
+
+.resource-card-3x2x3 {
+ height: 90px;
+ margin-bottom: 15px; }
+
+.resource-card-3x3 {
+ height: 150px; }
+
+.resource-card-3x3x2 {
+ height: 142px;
+ margin-bottom: 16px; }
+
+.resource-card-6x2 {
+ height: 100px; }
+
+.resource-card-6x2x3 {
+ height: 90px;
+ margin-bottom: 15px; }
+
+.resource-card-6x3 {
+ height: 150px; }
+
+.resource-card-6x3x2 {
+ height: 142px;
+ margin-bottom: 16px; }
+
+.resource-card-9x2 {
+ height: 100px; }
+
+.resource-card-9x2x3 {
+ height: 90px;
+ margin-bottom: 15px; }
+
+.resource-card-9x3 {
+ height: 150px; }
+
+.resource-card-9x3x2 {
+ height: 142px;
+ margin-bottom: 16px; }
+
+.resource-card-12x2 {
+ height: 100px; }
+
+.resource-card-12x2x3 {
+ height: 90px;
+ margin-bottom: 15px; }
+
+.resource-card-12x3 {
+ height: 150px; }
+
+.resource-card-12x3x2 {
+ height: 142px;
+ margin-bottom: 16px; }
+
+.resource-card-15x2 {
+ height: 100px; }
+
+.resource-card-15x2x3 {
+ height: 90px;
+ margin-bottom: 15px; }
+
+.resource-card-15x3 {
+ height: 150px; }
+
+.resource-card-15x3x2 {
+ height: 142px;
+ margin-bottom: 16px; }
+
+.resource-card-18x2 {
+ height: 100px; }
+
+.resource-card-18x2x3 {
+ height: 90px;
+ margin-bottom: 15px; }
+
+.resource-card-18x3 {
+ height: 150px; }
+
+.resource-card-18x3x2 {
+ height: 142px;
+ margin-bottom: 16px; }
+
+/*
+ The following are styles for cards in the flowlayout above, styled by the number of rows they span
+*/
+/* Single row, 2 column items. */
+.resource-card-9x6 {
+ height: 390px; }
+
+/* Double row, 1 column items. Eg full width video thumbnails. */
+.resource-card-18x12 {
+ height: 558px; }
+
+/* 1/3 row items */
+.resource-card-3x2 > .card-bg, .resource-card-6x2 > .card-bg, .resource-card-9x2 > .card-bg, .resource-card-12x2 > .card-bg, .resource-card-15x2 > .card-bg, .resource-card-18x2 > .card-bg {
+ left: 0;
+ top: 0;
+ width: 90px;
+ height: 100%;
+ position: absolute;
+ display: block; }
+.resource-card-3x2 > .card-info, .resource-card-6x2 > .card-info, .resource-card-9x2 > .card-info, .resource-card-12x2 > .card-info, .resource-card-15x2 > .card-info, .resource-card-18x2 > .card-info {
+ height: 100%;
+ left: 90px;
+ padding: 6px 12px;
+ overflow: hidden; }
+ .resource-card-3x2 > .card-info .title, .resource-card-6x2 > .card-info .title, .resource-card-9x2 > .card-info .title, .resource-card-12x2 > .card-info .title, .resource-card-15x2 > .card-info .title, .resource-card-18x2 > .card-info .title {
+ max-height: 48px;
+ white-space: normal; }
+ .resource-card-3x2 > .card-info .description, .resource-card-6x2 > .card-info .description, .resource-card-9x2 > .card-info .description, .resource-card-12x2 > .card-info .description, .resource-card-15x2 > .card-info .description, .resource-card-18x2 > .card-info .description {
+ display: none; }
+ .resource-card-3x2 > .card-info .text, .resource-card-6x2 > .card-info .text, .resource-card-9x2 > .card-info .text, .resource-card-12x2 > .card-info .text, .resource-card-15x2 > .card-info .text, .resource-card-18x2 > .card-info .text {
+ height: auto; }
+
+/* Override to show the description instead of the content section */
+.no-section .resource-card-3x2 > .card-info .section, .no-section .resource-card-6x2 > .card-info .section {
+ display: none; }
+
+.no-section .resource-card-3x2 > .card-info .description, .no-section .resource-card-6x2 > .card-info .description {
+ display: block; }
+
+/* 1/2 row items */
+.resource-card-3x3, .resource-card-6x3, .resource-card-9x3, .resource-card-12x3, .resource-card-15x3, .resource-card-18x3 {
+ height: 160px; }
+ .resource-card-3x3 > .card-bg, .resource-card-6x3 > .card-bg, .resource-card-9x3 > .card-bg, .resource-card-12x3 > .card-bg, .resource-card-15x3 > .card-bg, .resource-card-18x3 > .card-bg {
+ left: 0;
+ top: 0;
+ width: 90px;
+ height: 100%;
+ position: absolute;
+ display: block; }
+ .resource-card-3x3 > .card-info, .resource-card-6x3 > .card-info, .resource-card-9x3 > .card-info, .resource-card-12x3 > .card-info, .resource-card-15x3 > .card-info, .resource-card-18x3 > .card-info {
+ height: 100%;
+ left: 90px;
+ padding: 6px 12px; }
+ .resource-card-3x3 > .card-info .section, .resource-card-6x3 > .card-info .section, .resource-card-9x3 > .card-info .section, .resource-card-12x3 > .card-info .section, .resource-card-15x3 > .card-info .section, .resource-card-18x3 > .card-info .section {
+ display: none; }
+ .resource-card-3x3 > .card-info .title, .resource-card-6x3 > .card-info .title, .resource-card-9x3 > .card-info .title, .resource-card-12x3 > .card-info .title, .resource-card-15x3 > .card-info .title, .resource-card-18x3 > .card-info .title {
+ max-height: 96px;
+ white-space: normal; }
+ .resource-card-3x3 > .card-info .text, .resource-card-6x3 > .card-info .text, .resource-card-9x3 > .card-info .text, .resource-card-12x3 > .card-info .text, .resource-card-15x3 > .card-info .text, .resource-card-18x3 > .card-info .text {
+ height: auto; }
+ .resource-card-3x3 > .card-info .util, .resource-card-6x3 > .card-info .util, .resource-card-9x3 > .card-info .util, .resource-card-12x3 > .card-info .util, .resource-card-15x3 > .card-info .util, .resource-card-18x3 > .card-info .util {
+ display: none; }
+
+/* placement of plusone */
+.resource-card-6x12 > .card-info .description .util, .resource-card-9x12 > .card-info .description .util, .resource-card-12x12 > .card-info .description .util, .resource-card-15x12 > .card-info .description .util {
+ bottom: 2px; }
+
+.resource-card-18x12 > .card-info .description .util {
+ bottom: 2px; }
+
+/* Overrides for col-16 6x6 cards linking to local content on landing pages.
+ Suppresses "section". */
+.landing .card-info .section {
+ display: none; }
+
+/*
+ Generate a resource stack layout for a 3 column widget spanning 16 grid cols
+*/
+.resource-stack-layout.col-16 {
+ margin: 0 -14px 0 0;
+ width: 954px; }
+ .resource-stack-layout.col-16 .resource-card-stack {
+ margin: 0 14px 0 0;
+ width: 304px; }
+
+/* Example of card menu tinting */
+.resource-widget[data-section=distribute\/tools] .section-card-menu .card-bg:after {
+ background: rgba(126, 55, 148, 0.4) !important; }
+.resource-widget[data-section=distribute\/tools] .section-card-menu .card-section-icon .icon {
+ background-color: #7e3794 !important; }
+.resource-widget[data-section=distribute\/tools] .section-card-menu .card-info ul li {
+ border-top-color: #7e3794 !important; }
+
+/* tinting for stacks */
+div.jd-descr > .resource-widget[data-section=distribute\/tools] .section-card-menu .card-info ul li {
+ border-top-color: #7e3794 !important; }
+
+.dac-fab, .button, .landing-button, .dac-button {
+ background: transparent;
+ border: 0;
+ border-radius: 3px;
+ box-sizing: border-box;
+ color: currentColor;
+ cursor: pointer;
+ display: inline-block;
+ font-weight: 500;
+ font-size: 14px;
+ font-style: inherit;
+ font-variant: inherit;
+ font-family: inherit;
+ letter-spacing: .5px;
+ line-height: 24px;
+ margin: 6px 16px 6px 0;
+ min-width: 88px;
+ outline: 0;
+ padding: 6px 12px;
+ position: relative;
+ text-align: center;
+ text-decoration: none;
+ text-transform: uppercase;
+ -webkit-transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+ transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), background-color 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ white-space: nowrap; }
+
+.button, .landing-button, .dac-button.dac-raised {
+ background-color: #FAFAFA;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.26); }
+
+.dac-button.dac-raised.dac-primary, .landing-secondary, .button {
+ background-color: #039bef; }
+ .dac-button.dac-raised.dac-primary:hover, .landing-secondary:hover, .button:hover {
+ background-color: #0288d1; }
+ .dac-button.dac-raised.dac-primary:active, .landing-secondary:active, .button:active {
+ background-color: #0277bd; }
+
+.dac-button.dac-raised.dac-red, .landing-primary {
+ background-color: #bf3722; }
+ .dac-button.dac-raised.dac-red:hover, .landing-primary:hover {
+ background-color: #9c2d1c; }
+ .dac-button.dac-raised.dac-red:active, .landing-primary:active {
+ background-color: #822517; }
+
+.dac-button.dac-raised.dac-green, .landing-button.green {
+ background-color: #90C653; }
+
+.dac-button.dac-raised.dac-primary, .landing-secondary, .button, .dac-button.dac-raised.dac-red, .landing-primary, .dac-button.dac-raised.dac-green, .landing-button.green {
+ color: #fff; }
+
+.dac-button.dac-large, .landing-button {
+ padding: 12px 24px; }
+
+.dac-fab {
+ background: #fff;
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.26);
+ border-radius: 50%;
+ font-size: 0;
+ height: 36px;
+ line-height: 36px;
+ min-width: 0;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+ width: 36px; }
+ .dac-fab:hover, a:hover > .dac-fab {
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.26); }
+ .dac-fab.dac-primary {
+ background: #00c7a0; }
+ .dac-fab.dac-large {
+ height: 54px;
+ line-height: 54px;
+ width: 54px; }
+
+.dac-scroll-button {
+ height: 54px;
+ line-height: 54px;
+ margin: 0;
+ position: absolute;
+ right: 0;
+ top: -27px;
+ width: 54px;
+ z-index: 1; }
+ @media (max-width: 719px) {
+ .dac-scroll-button {
+ display: none; } }
+
+/* Footer component */
+.dac-footer {
+ background-color: #fff;
+ border-top: 1px solid #f0f0f0;
+ clear: both;
+ color: #999;
+ font-size: 12px;
+ margin-top: 96px;
+ padding-bottom: 20px;
+ position: relative;
+ /* Modifier for landing pages, to snuggle closer to sections. */ }
+ .dac-footer a {
+ color: #999; }
+ .dac-footer p {
+ margin: 7px 0 0; }
+ .dac-footer-main {
+ padding: 30px 0; }
+ .dac-footer-reachout {
+ text-align: right; }
+ .dac-footer-contact, .dac-footer-social {
+ display: inline-block; }
+ .dac-footer .dac-footer-getnews, .dac-footer .dac-footer-contact-link {
+ color: #000;
+ cursor: pointer;
+ font-size: 20px;
+ font-weight: 300;
+ margin: 8px 0;
+ vertical-align: middle; }
+ .dac-footer .dac-footer-contact-link, .dac-footer .dac-footer-social-link {
+ margin-left: 16px;
+ margin-right: 0; }
+ .dac-footer-getnews > .dac-fab {
+ margin-left: 4px; }
+ .dac-footer-separator {
+ background: #f0f0f0;
+ margin: 0 0 12px; }
+ .dac-footer-links a + a:before {
+ content: '|';
+ cursor: default;
+ margin: 0 10px 0 8px; }
+ .dac-footer .locales {
+ float: right;
+ margin: 0; }
+ .dac-footer .locales select {
+ background-color: #f0f0f0;
+ border-radius: 3px;
+ font-size: 12px;
+ height: auto;
+ margin-top: -2px;
+ padding: 8px 12px;
+ width: 146px; }
+ .dac-footer.dac-landing {
+ margin-top: 0;
+ border-top: 0; }
+ @media (max-width: 719px) {
+ .dac-footer-reachout {
+ text-align: left; }
+ .dac-footer-social {
+ display: block; }
+ .dac-footer-social-link, .dac-footer-contact-link {
+ display: inline-block; }
+ .dac-footer .dac-footer-contact-link, .dac-footer .dac-footer-social-link {
+ margin-left: 0;
+ margin-right: 16px; }
+ .dac-footer .locales {
+ display: block;
+ float: none;
+ margin-top: 15px; } }
+
+/* =============================================================================
+ Columns
+ ========================================================================== */
+.wrap {
+ margin: 0 auto;
+ max-width: 940px;
+ clear: both; }
+
+.cols {
+ margin-left: -10px;
+ margin-right: -10px;
+ /**
+ * For modern browsers
+ * 1. The space content is one way to avoid an Opera bug when the
+ * contenteditable attribute is included anywhere else in the document.
+ * Otherwise it causes space to appear at the top and bottom of elements
+ * that are clearfixed.
+ * 2. The use of `table` rather than `block` is only necessary if using
+ * `:before` to contain the top-margins of child elements.
+ */ }
+ .cols:before, .cols:after {
+ content: ' ';
+ /* 1 */
+ display: table;
+ /* 2 */ }
+ .cols:after {
+ clear: both; }
+
+[class*=col-] {
+ box-sizing: border-box;
+ float: left;
+ min-height: 1px;
+ padding-left: 10px;
+ padding-right: 10px;
+ position: relative; }
+
+.col-1 {
+ width: 6.25%; }
+
+.col-2 {
+ width: 12.5%; }
+
+.col-3 {
+ width: 18.75%; }
+
+.col-4 {
+ width: 25%; }
+
+.col-5 {
+ width: 31.25%; }
+
+.col-6 {
+ width: 37.5%; }
+
+.col-7 {
+ width: 43.75%; }
+
+.col-8 {
+ width: 50%; }
+
+.col-9 {
+ width: 56.25%; }
+
+.col-10 {
+ width: 62.5%; }
+
+.col-11 {
+ width: 68.75%; }
+
+.col-12 {
+ width: 75%; }
+
+.col-13 {
+ width: 81.25%; }
+
+.col-14 {
+ width: 87.5%; }
+
+.col-15 {
+ width: 93.75%; }
+
+.col-16 {
+ width: 100%; }
+
+.col-13 .col-1 {
+ width: 7.69230769%; }
+
+.col-13 .col-2 {
+ width: 15.38461538%; }
+
+.col-13 .col-3 {
+ width: 23.07692308%; }
+
+.col-13 .col-4 {
+ width: 30.76923077%; }
+
+.col-13 .col-5 {
+ width: 38.46153846%; }
+
+.col-13 .col-6 {
+ width: 46.15384615%; }
+
+.col-13 .col-7 {
+ width: 53.84615385%; }
+
+.col-13 .col-8 {
+ width: 61.53846154%; }
+
+.col-13 .col-9 {
+ width: 69.23076923%; }
+
+.col-13 .col-10 {
+ width: 76.92307692%; }
+
+.col-13 .col-11 {
+ width: 84.61538462%; }
+
+.col-13 .col-12 {
+ width: 92.30769231%; }
+
+.col-13 .col-13 {
+ width: 100%; }
+
+.col-12 .col-1 {
+ width: 8.33333333%; }
+
+.col-12 .col-2 {
+ width: 16.66666667%; }
+
+.col-12 .col-3 {
+ width: 25%; }
+
+.col-12 .col-4 {
+ width: 33.33333333%; }
+
+.col-12 .col-5 {
+ width: 41.66666667%; }
+
+.col-12 .col-6 {
+ width: 50%; }
+
+.col-12 .col-7 {
+ width: 58.33333333%; }
+
+.col-12 .col-8 {
+ width: 66.66666667%; }
+
+.col-12 .col-9 {
+ width: 75%; }
+
+.col-12 .col-10 {
+ width: 83.33333333%; }
+
+.col-12 .col-11 {
+ width: 91.66666667%; }
+
+.col-12 .col-12 {
+ width: 100%; }
+
+.col-1of1, .col-2of2, .col-3of3, .col-4of4, .col-5of5, .col-6of6, .col-8of8, .col-10of10, .col-12of12, .col-16of16 {
+ width: 100%; }
+
+.col-1of2, .col-2of4, .col-3of6, .col-4of8, .col-5of10, .col-6of12, .col-8of16 {
+ width: 50%; }
+
+.col-1of3, .col-2of6, .col-4of12 {
+ width: 33.33333333%; }
+
+.col-2of3, .col-4of6, .col-8of12 {
+ width: 66.66666667%; }
+
+.col-1of4, .col-2of8, .col-3of12, .col-4of16 {
+ width: 25%; }
+
+.col-3of4, .col-6of8, .col-9of12, .col-12of16 {
+ width: 75%; }
+
+.col-1of5, .col-2of10 {
+ width: 20%; }
+
+.col-2of5, .col-4of10 {
+ width: 40%; }
+
+.col-3of5, .col-6of10 {
+ width: 60%; }
+
+.col-4of5, .col-8of10 {
+ width: 80%; }
+
+.col-1of6, .col-2of12 {
+ width: 16.66666667%; }
+
+.col-5of6, .col-10of12 {
+ width: 83.33333333%; }
+
+.col-1of8, .col-2of16 {
+ width: 12.5%; }
+
+.col-3of8, .col-6of16 {
+ width: 37.5%; }
+
+.col-5of8, .col-10of16 {
+ width: 62.5%; }
+
+.col-7of8, .col-14of16 {
+ width: 87.5%; }
+
+.col-1of10 {
+ width: 10%; }
+
+.col-3of10 {
+ width: 30%; }
+
+.col-7of10 {
+ width: 70%; }
+
+.col-9of10 {
+ width: 90%; }
+
+.col-1of12 {
+ width: 8.33333333%; }
+
+.col-5of12 {
+ width: 41.66666667%; }
+
+.col-7of12 {
+ width: 58.33333333%; }
+
+.col-11of12 {
+ width: 91.66666667%; }
+
+.col-1of16 {
+ width: 6.25%; }
+
+.col-3of16 {
+ width: 18.75%; }
+
+.col-5of16 {
+ width: 31.25%; }
+
+.col-7of16 {
+ width: 43.75%; }
+
+.col-9of16 {
+ width: 56.25%; }
+
+.col-11of16 {
+ width: 68.75%; }
+
+.col-13of16 {
+ width: 81.25%; }
+
+.col-15of16 {
+ width: 93.75%; }
+
+.col-pull-1of1, .col-pull-2of2, .col-pull-3of3, .col-pull-4of4, .col-pull-5of5, .col-pull-6of6, .col-pull-8of8, .col-pull-10of10, .col-pull-12of12, .col-pull-16of16 {
+ left: -100%; }
+
+.col-pull-1of2, .col-pull-2of4, .col-pull-3of6, .col-pull-4of8, .col-pull-5of10, .col-pull-6of12, .col-pull-8of16 {
+ left: -50%; }
+
+.col-pull-1of3, .col-pull-2of6, .col-pull-4of12 {
+ left: -33.33333333%; }
+
+.col-pull-2of3, .col-pull-4of6, .col-pull-8of12 {
+ left: -66.66666667%; }
+
+.col-pull-1of4, .col-pull-2of8, .col-pull-3of12, .col-pull-4of16 {
+ left: -25%; }
+
+.col-pull-3of4, .col-pull-6of8, .col-pull-9of12, .col-pull-12of16 {
+ left: -75%; }
+
+.col-pull-1of5, .col-pull-2of10 {
+ left: -20%; }
+
+.col-pull-2of5, .col-pull-4of10 {
+ left: -40%; }
+
+.col-pull-3of5, .col-pull-6of10 {
+ left: -60%; }
+
+.col-pull-4of5, .col-pull-8of10 {
+ left: -80%; }
+
+.col-pull-1of6, .col-pull-2of12 {
+ left: -16.66666667%; }
+
+.col-pull-5of6, .col-pull-10of12 {
+ left: -83.33333333%; }
+
+.col-pull-1of8, .col-pull-2of16 {
+ left: -12.5%; }
+
+.col-pull-3of8, .col-pull-6of16 {
+ left: -37.5%; }
+
+.col-pull-5of8, .col-pull-10of16 {
+ left: -62.5%; }
+
+.col-pull-7of8, .col-pull-14of16 {
+ left: -87.5%; }
+
+.col-pull-1of10 {
+ left: -10%; }
+
+.col-pull-3of10 {
+ left: -30%; }
+
+.col-pull-7of10 {
+ left: -70%; }
+
+.col-pull-9of10 {
+ left: -90%; }
+
+.col-pull-1of12 {
+ left: -8.33333333%; }
+
+.col-pull-5of12 {
+ left: -41.66666667%; }
+
+.col-pull-7of12 {
+ left: -58.33333333%; }
+
+.col-pull-11of12 {
+ left: -91.66666667%; }
+
+.col-pull-1of16 {
+ left: -6.25%; }
+
+.col-pull-3of16 {
+ left: -18.75%; }
+
+.col-pull-5of16 {
+ left: -31.25%; }
+
+.col-pull-7of16 {
+ left: -43.75%; }
+
+.col-pull-9of16 {
+ left: -56.25%; }
+
+.col-pull-11of16 {
+ left: -68.75%; }
+
+.col-pull-13of16 {
+ left: -81.25%; }
+
+.col-pull-15of16 {
+ left: -93.75%; }
+
+.col-push-1of1, .col-push-2of2, .col-push-3of3, .col-push-4of4, .col-push-5of5, .col-push-6of6, .col-push-8of8, .col-push-10of10, .col-push-12of12, .col-push-16of16 {
+ left: 100%; }
+
+.col-push-1of2, .col-push-2of4, .col-push-3of6, .col-push-4of8, .col-push-5of10, .col-push-6of12, .col-push-8of16 {
+ left: 50%; }
+
+.col-push-1of3, .col-push-2of6, .col-push-4of12 {
+ left: 33.33333333%; }
+
+.col-push-2of3, .col-push-4of6, .col-push-8of12 {
+ left: 66.66666667%; }
+
+.col-push-1of4, .col-push-2of8, .col-push-3of12, .col-push-4of16 {
+ left: 25%; }
+
+.col-push-3of4, .col-push-6of8, .col-push-9of12, .col-push-12of16 {
+ left: 75%; }
+
+.col-push-1of5, .col-push-2of10 {
+ left: 20%; }
+
+.col-push-2of5, .col-push-4of10 {
+ left: 40%; }
+
+.col-push-3of5, .col-push-6of10 {
+ left: 60%; }
+
+.col-push-4of5, .col-push-8of10 {
+ left: 80%; }
+
+.col-push-1of6, .col-push-2of12 {
+ left: 16.66666667%; }
+
+.col-push-5of6, .col-push-10of12 {
+ left: 83.33333333%; }
+
+.col-push-1of8, .col-push-2of16 {
+ left: 12.5%; }
+
+.col-push-3of8, .col-push-6of16 {
+ left: 37.5%; }
+
+.col-push-5of8, .col-push-10of16 {
+ left: 62.5%; }
+
+.col-push-7of8, .col-push-14of16 {
+ left: 87.5%; }
+
+.col-push-1of10 {
+ left: 10%; }
+
+.col-push-3of10 {
+ left: 30%; }
+
+.col-push-7of10 {
+ left: 70%; }
+
+.col-push-9of10 {
+ left: 90%; }
+
+.col-push-1of12 {
+ left: 8.33333333%; }
+
+.col-push-5of12 {
+ left: 41.66666667%; }
+
+.col-push-7of12 {
+ left: 58.33333333%; }
+
+.col-push-11of12 {
+ left: 91.66666667%; }
+
+.col-push-1of16 {
+ left: 6.25%; }
+
+.col-push-3of16 {
+ left: 18.75%; }
+
+.col-push-5of16 {
+ left: 31.25%; }
+
+.col-push-7of16 {
+ left: 43.75%; }
+
+.col-push-9of16 {
+ left: 56.25%; }
+
+.col-push-11of16 {
+ left: 68.75%; }
+
+.col-push-13of16 {
+ left: 81.25%; }
+
+.col-push-15of16 {
+ left: 93.75%; }
+
+@media (max-width: 960px) and (min-width: 720px) {
+ .col-tablet-1of1, .col-tablet-2of2, .col-tablet-3of3, .col-tablet-4of4, .col-tablet-5of5, .col-tablet-6of6, .col-tablet-8of8, .col-tablet-10of10, .col-tablet-12of12, .col-tablet-16of16 {
+ width: 100%; }
+ .col-tablet-1of2, .col-tablet-2of4, .col-tablet-3of6, .col-tablet-4of8, .col-tablet-5of10, .col-tablet-6of12, .col-tablet-8of16 {
+ width: 50%; }
+ .col-tablet-1of3, .col-tablet-2of6, .col-tablet-4of12 {
+ width: 33.33333333%; }
+ .col-tablet-2of3, .col-tablet-4of6, .col-tablet-8of12 {
+ width: 66.66666667%; }
+ .col-tablet-1of4, .col-tablet-2of8, .col-tablet-3of12, .col-tablet-4of16 {
+ width: 25%; }
+ .col-tablet-3of4, .col-tablet-6of8, .col-tablet-9of12, .col-tablet-12of16 {
+ width: 75%; }
+ .col-tablet-1of5, .col-tablet-2of10 {
+ width: 20%; }
+ .col-tablet-2of5, .col-tablet-4of10 {
+ width: 40%; }
+ .col-tablet-3of5, .col-tablet-6of10 {
+ width: 60%; }
+ .col-tablet-4of5, .col-tablet-8of10 {
+ width: 80%; }
+ .col-tablet-1of6, .col-tablet-2of12 {
+ width: 16.66666667%; }
+ .col-tablet-5of6, .col-tablet-10of12 {
+ width: 83.33333333%; }
+ .col-tablet-1of8, .col-tablet-2of16 {
+ width: 12.5%; }
+ .col-tablet-3of8, .col-tablet-6of16 {
+ width: 37.5%; }
+ .col-tablet-5of8, .col-tablet-10of16 {
+ width: 62.5%; }
+ .col-tablet-7of8, .col-tablet-14of16 {
+ width: 87.5%; }
+ .col-tablet-1of10 {
+ width: 10%; }
+ .col-tablet-3of10 {
+ width: 30%; }
+ .col-tablet-7of10 {
+ width: 70%; }
+ .col-tablet-9of10 {
+ width: 90%; }
+ .col-tablet-1of12 {
+ width: 8.33333333%; }
+ .col-tablet-5of12 {
+ width: 41.66666667%; }
+ .col-tablet-7of12 {
+ width: 58.33333333%; }
+ .col-tablet-11of12 {
+ width: 91.66666667%; }
+ .col-tablet-1of16 {
+ width: 6.25%; }
+ .col-tablet-3of16 {
+ width: 18.75%; }
+ .col-tablet-5of16 {
+ width: 31.25%; }
+ .col-tablet-7of16 {
+ width: 43.75%; }
+ .col-tablet-9of16 {
+ width: 56.25%; }
+ .col-tablet-11of16 {
+ width: 68.75%; }
+ .col-tablet-13of16 {
+ width: 81.25%; }
+ .col-tablet-15of16 {
+ width: 93.75%; }
+ .col-tablet-pull-1of1, .col-tablet-pull-2of2, .col-tablet-pull-3of3, .col-tablet-pull-4of4, .col-tablet-pull-5of5, .col-tablet-pull-6of6, .col-tablet-pull-8of8, .col-tablet-pull-10of10, .col-tablet-pull-12of12, .col-tablet-pull-16of16 {
+ left: -100%; }
+ .col-tablet-pull-1of2, .col-tablet-pull-2of4, .col-tablet-pull-3of6, .col-tablet-pull-4of8, .col-tablet-pull-5of10, .col-tablet-pull-6of12, .col-tablet-pull-8of16 {
+ left: -50%; }
+ .col-tablet-pull-1of3, .col-tablet-pull-2of6, .col-tablet-pull-4of12 {
+ left: -33.33333333%; }
+ .col-tablet-pull-2of3, .col-tablet-pull-4of6, .col-tablet-pull-8of12 {
+ left: -66.66666667%; }
+ .col-tablet-pull-1of4, .col-tablet-pull-2of8, .col-tablet-pull-3of12, .col-tablet-pull-4of16 {
+ left: -25%; }
+ .col-tablet-pull-3of4, .col-tablet-pull-6of8, .col-tablet-pull-9of12, .col-tablet-pull-12of16 {
+ left: -75%; }
+ .col-tablet-pull-1of5, .col-tablet-pull-2of10 {
+ left: -20%; }
+ .col-tablet-pull-2of5, .col-tablet-pull-4of10 {
+ left: -40%; }
+ .col-tablet-pull-3of5, .col-tablet-pull-6of10 {
+ left: -60%; }
+ .col-tablet-pull-4of5, .col-tablet-pull-8of10 {
+ left: -80%; }
+ .col-tablet-pull-1of6, .col-tablet-pull-2of12 {
+ left: -16.66666667%; }
+ .col-tablet-pull-5of6, .col-tablet-pull-10of12 {
+ left: -83.33333333%; }
+ .col-tablet-pull-1of8, .col-tablet-pull-2of16 {
+ left: -12.5%; }
+ .col-tablet-pull-3of8, .col-tablet-pull-6of16 {
+ left: -37.5%; }
+ .col-tablet-pull-5of8, .col-tablet-pull-10of16 {
+ left: -62.5%; }
+ .col-tablet-pull-7of8, .col-tablet-pull-14of16 {
+ left: -87.5%; }
+ .col-tablet-pull-1of10 {
+ left: -10%; }
+ .col-tablet-pull-3of10 {
+ left: -30%; }
+ .col-tablet-pull-7of10 {
+ left: -70%; }
+ .col-tablet-pull-9of10 {
+ left: -90%; }
+ .col-tablet-pull-1of12 {
+ left: -8.33333333%; }
+ .col-tablet-pull-5of12 {
+ left: -41.66666667%; }
+ .col-tablet-pull-7of12 {
+ left: -58.33333333%; }
+ .col-tablet-pull-11of12 {
+ left: -91.66666667%; }
+ .col-tablet-pull-1of16 {
+ left: -6.25%; }
+ .col-tablet-pull-3of16 {
+ left: -18.75%; }
+ .col-tablet-pull-5of16 {
+ left: -31.25%; }
+ .col-tablet-pull-7of16 {
+ left: -43.75%; }
+ .col-tablet-pull-9of16 {
+ left: -56.25%; }
+ .col-tablet-pull-11of16 {
+ left: -68.75%; }
+ .col-tablet-pull-13of16 {
+ left: -81.25%; }
+ .col-tablet-pull-15of16 {
+ left: -93.75%; }
+ .col-tablet-push-1of1, .col-tablet-push-2of2, .col-tablet-push-3of3, .col-tablet-push-4of4, .col-tablet-push-5of5, .col-tablet-push-6of6, .col-tablet-push-8of8, .col-tablet-push-10of10, .col-tablet-push-12of12, .col-tablet-push-16of16 {
+ left: 100%; }
+ .col-tablet-push-1of2, .col-tablet-push-2of4, .col-tablet-push-3of6, .col-tablet-push-4of8, .col-tablet-push-5of10, .col-tablet-push-6of12, .col-tablet-push-8of16 {
+ left: 50%; }
+ .col-tablet-push-1of3, .col-tablet-push-2of6, .col-tablet-push-4of12 {
+ left: 33.33333333%; }
+ .col-tablet-push-2of3, .col-tablet-push-4of6, .col-tablet-push-8of12 {
+ left: 66.66666667%; }
+ .col-tablet-push-1of4, .col-tablet-push-2of8, .col-tablet-push-3of12, .col-tablet-push-4of16 {
+ left: 25%; }
+ .col-tablet-push-3of4, .col-tablet-push-6of8, .col-tablet-push-9of12, .col-tablet-push-12of16 {
+ left: 75%; }
+ .col-tablet-push-1of5, .col-tablet-push-2of10 {
+ left: 20%; }
+ .col-tablet-push-2of5, .col-tablet-push-4of10 {
+ left: 40%; }
+ .col-tablet-push-3of5, .col-tablet-push-6of10 {
+ left: 60%; }
+ .col-tablet-push-4of5, .col-tablet-push-8of10 {
+ left: 80%; }
+ .col-tablet-push-1of6, .col-tablet-push-2of12 {
+ left: 16.66666667%; }
+ .col-tablet-push-5of6, .col-tablet-push-10of12 {
+ left: 83.33333333%; }
+ .col-tablet-push-1of8, .col-tablet-push-2of16 {
+ left: 12.5%; }
+ .col-tablet-push-3of8, .col-tablet-push-6of16 {
+ left: 37.5%; }
+ .col-tablet-push-5of8, .col-tablet-push-10of16 {
+ left: 62.5%; }
+ .col-tablet-push-7of8, .col-tablet-push-14of16 {
+ left: 87.5%; }
+ .col-tablet-push-1of10 {
+ left: 10%; }
+ .col-tablet-push-3of10 {
+ left: 30%; }
+ .col-tablet-push-7of10 {
+ left: 70%; }
+ .col-tablet-push-9of10 {
+ left: 90%; }
+ .col-tablet-push-1of12 {
+ left: 8.33333333%; }
+ .col-tablet-push-5of12 {
+ left: 41.66666667%; }
+ .col-tablet-push-7of12 {
+ left: 58.33333333%; }
+ .col-tablet-push-11of12 {
+ left: 91.66666667%; }
+ .col-tablet-push-1of16 {
+ left: 6.25%; }
+ .col-tablet-push-3of16 {
+ left: 18.75%; }
+ .col-tablet-push-5of16 {
+ left: 31.25%; }
+ .col-tablet-push-7of16 {
+ left: 43.75%; }
+ .col-tablet-push-9of16 {
+ left: 56.25%; }
+ .col-tablet-push-11of16 {
+ left: 68.75%; }
+ .col-tablet-push-13of16 {
+ left: 81.25%; }
+ .col-tablet-push-15of16 {
+ left: 93.75%; } }
+
+.col-3-wide {
+ width: 33.33333333%; }
+
+@media (max-width: 719px) {
+ /* Remove .col-12 and .col-13 backward compatibility support as soon as it's been removed. */
+[class*=col-], .col-12 [class*=col-], .col-13 [class*=col-] {
+ float: none;
+ left: 0;
+ width: auto;
+} }
+
+/* Header component */
+.dac-header {
+ background: #fff;
+ height: 64px;
+ margin: 0 -20px;
+}
+
+@media (max-width: 719px) {
+ .dac-header {
+ margin: 0 -10px;
+ }
+}
+
+.about .dac-header, .distribute .dac-header, .develop .dac-header {
+ height: 128px;
+}
+
+.dac-header-inner {
+ background: #fff;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07);
+ box-sizing: border-box;
+ height: 64px;
+ left: 0;
+ right: 0;
+ top: 0;
+ z-index: 52;
+}
+
+.dac-header.dac-sub .dac-header-inner {
+ border-bottom: 1px solid #e5e5e5;
+ box-shadow: none;
+}
+
+.dac-header.is-sticky .dac-header-inner {
+ position: fixed;
+ -webkit-animation: .3s dac-header-show;
+ animation: .3s dac-header-show;
+}
+
+.dac-header-logo {
+ border-right: 1px solid #e5e5e5;
+ display: block;
+ font-size: 20px;
+ font-weight: 300;
+ float: left;
+ letter-spacing: .3px;
+ line-height: 36px;
+ margin-right: 16px;
+ padding: 14px 24px 14px;
+}
+
+.dac-header-logo, .dac-header-logo:hover, .dac-header-logo:focus {
+ color: #444;
+}
+
+.dac-header-logo-image {
+ margin-right: 5px;
+ vertical-align: top;
+}
+
+.dac-header-console-btn {
+ border: 1px solid #c5c5c5;
+ border-radius: 3px;
+ box-shadow: 0 1px 1px 0 rgba(0, 0, 0, 0.11);
+ background: #fff;
+ float: right;
+ font-size: 14px;
+ line-height: 28px;
+ margin: 17px 30px 17px 10px;
+ padding: 0 10px;
+ position: relative;
+ z-index: 52;
+}
+
+.dac-header-console-btn > .dac-sprite {
+ margin-right: 5px;
+}
+
+.dac-header-console-btn, .dac-header-console-btn:hover, .dac-header-console-btn:focus {
+ color: #666;
+}
+
+.dac-header-console-btn:focus {
+ background: rgba(63, 81, 181, 0.1);
+ outline: 0;
+}
+
+@media (max-width: 719px) {
+ .dac-header {
+ height: 64px !important;
+ text-align: center;
+ }
+
+ .dac-header-inner {
+ position: fixed;
+ }
+
+ .dac-header-logo {
+ border-right: 0;
+ display: inline-block;
+ margin-right: 0;
+ float: none;
+ }
+
+ .dac-header.dac-sub {
+ display: none;
+ }
+
+ .dac-header-console-btn {
+ display: none;
+ }
+}
+
+@-webkit-keyframes dac-header-show {
+ 0% {
+ -webkit-transform: translateY(-64px);
+ transform: translateY(-64px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+@keyframes dac-header-show {
+ 0% {
+ -webkit-transform: translateY(-64px);
+ transform: translateY(-64px);
+ }
+
+ 100% {
+ -webkit-transform: translateY(0);
+ transform: translateY(0);
+ }
+}
+
+/* Header Breadcrumbs component */
+.dac-header-crumbs {
+ display: none;
+ list-style-type: none;
+ margin: 0;
+}
+
+.is-sticky .dac-header-crumbs {
+ display: block;
+}
+
+.dac-header-crumbs-item {
+ float: left;
+ position: relative;
+ margin: 0;
+ padding-left: 10px;
+}
+
+.dac-header-crumbs-item:before {
+ color: #444;
+ content: '>';
+ font-weight: 300;
+ font-size: 20px;
+ left: 0;
+ line-height: 28px;
+ padding: 16px 0;
+ position: absolute;
+}
+
+.dac-header-crumbs-item:first-child:before {
+ content: none;
+}
+
+.dac-header-crumbs-link {
+ color: #444;
+ display: block;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 32px;
+ padding: 16px 16px;
+ -webkit-transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1);
+ transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1);
+}
+
+.dac-header-crumbs-link:hover, .dac-header-crumbs-link:focus {
+ color: rgba(68, 68, 68, 0.7);
+}
+
+.dac-header-crumbs-link:focus {
+ background: rgba(63, 81, 181, 0.1);
+ outline: 0;
+}
+
+.dac-header-crumbs-link.current {
+ color: #6ab344;
+ font-weight: 400;
+}
+
+.dac-header-crumbs-link.current.ndk {
+ color: #00BCD4;
+}
+
+@media (max-width: 719px) {
+ .dac-header-crumbs {
+ display: none;
+ }
+}
+
+/* Header site search component */
+.dac-header-search {
+ background: #fff;
+ border-left: 1px solid #e5e5e5;
+ display: block;
+ float: right;
+ height: 28px;
+ padding: 18px 0;
+ position: relative;
+ overflow: hidden;
+ -webkit-transition: width 0.4s ease, left 0.4s ease;
+ transition: width 0.4s ease, left 0.4s ease;
+ width: 64px;
+ z-index: 52;
+}
+
+.dac-header-search:hover, .dac-header-search.active {
+ width: 228px;
+}
+
+.dac-header-search-inner {
+ width: 228px;
+}
+
+.dac-header-search-btn {
+ left: 20px;
+ position: absolute;
+ top: 20px;
+ opacity: .54;
+}
+
+.dac-header-search-form {
+ left: 54px;
+ opacity: 0;
+ position: absolute;
+ right: 24px;
+ top: 20px;
+ -webkit-transition: opacity .4s;
+ transition: opacity .4s;
+}
+
+.dac-header-search:hover .dac-header-search-form, .dac-header-search.active .dac-header-search-form {
+ opacity: 1;
+}
+
+.dac-header-search-input {
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid #CCC;
+ border-radius: 0;
+ box-sizing: border-box;
+ color: #2f2f2f;
+ font-size: 14px;
+ height: 24px;
+ outline: none;
+ padding: 4px 20px 4px 0;
+ width: 100%;
+ z-index: 1500;
+}
+
+.dac-header-search-input:focus {
+ color: #222;
+ font-weight: bold;
+ outline: 0;
+}
+
+.dac-header-search-close {
+ position: absolute;
+ right: 4px;
+ bottom: 4px;
+ width: 16px;
+ height: 16px;
+ margin: 0;
+ text-indent: -1000em;
+ background: url(../images/close.png) no-repeat 0 0;
+ z-index: 9999;
+}
+
+.dac-header-search-close:hover, .dac-header-search-close:focus {
+ background-position: -16px 0;
+ cursor: pointer;
+}
+
+@media (max-width: 719px) {
+ .dac-header-search {
+ position: absolute;
+ left: calc(100% - 64px);
+ right: 0;
+ top: 0;
+ width: auto;
+ }
+
+ .dac-header-search:hover, .dac-header-search.active {
+ left: 64px;
+ width: auto;
+ }
+}
+
+/* Main navigation component */
+.is-sticky .dac-nav, .dac-nav-head, .dac-nav-toggle {
+ display: none;
+}
+
+.dac-nav-list {
+ list-style-type: none;
+ left: 192px;
+ margin: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 51;
+}
+
+.dac-nav-item {
+ float: left;
+ margin: 0;
+}
+
+.dac-nav-head {
+ margin-bottom: 10px;
+}
+
+.dac-nav-dimmer {
+ background: #000;
+ display: none;
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ position: fixed;
+ top: 0;
+ -webkit-transition: visibility 0s linear .3s, opacity .3s linear;
+ transition: visibility 0s linear .3s, opacity .3s linear;
+ -webkit-transform: translateZ(0);
+ transform: translateZ(0);
+ visibility: hidden;
+ width: 100%;
+ z-index: 52;
+}
+
+.dac-nav-hamburger {
+ display: inline-block;
+ height: 15px;
+ width: 16px;
+}
+
+.dac-nav-hamburger-top, .dac-nav-hamburger-mid, .dac-nav-hamburger-bot {
+ background: #999;
+ display: block;
+ height: 3px;
+ margin: 3px 0 0;
+ width: 100%;
+}
+
+.dac-nav-link {
+ color: #444;
+ display: block;
+ font-size: 16px;
+ font-weight: 300;
+ letter-spacing: .24px;
+ line-height: 32px;
+ padding: 18px 16px 14px;
+ -webkit-transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1);
+ transition: background-color 0.35s cubic-bezier(0.35, 0, 0.25, 1);
+}
+
+.dac-nav-link:hover, .dac-nav-link:focus {
+ color: rgba(68, 68, 68, 0.7);
+}
+
+.dac-nav-link:focus {
+ background: rgba(63, 81, 181, 0.1);
+ outline: 0;
+}
+
+.dac-nav-link.has-subnav, .dac-nav-link.selected {
+ border-bottom: 3px solid #6ab344;
+ font-weight: 500;
+ padding-bottom: 11px;
+}
+
+.dac-nav-link.has-subnav.ndk, .dac-nav-link.selected.ndk {
+ border-bottom: 3px solid #00BCD4;
+}
+
+.dac-nav-secondary {
+ border-bottom: 1px solid #e5e5e5;
+ display: none;
+ left: -192px;
+ list-style-type: none;
+ margin: 0;
+ position: absolute;
+ top: 64px;
+ right: 0;
+}
+
+.dac-nav-link.has-subnav + .dac-nav-secondary, .dac-nav-link.selected + .dac-nav-secondary {
+ display: block;
+}
+
+.dac-nav-secondary .dac-nav-link {
+ color: #666;
+ padding: 17px 16px 15px;
+}
+
+.dac-nav-secondary .dac-nav-link:hover, .dac-nav-secondary .dac-nav-link:focus {
+ color: rgba(102, 102, 102, 0.7);
+}
+
+@media (min-width: 720px) and (max-width: 979px) {
+ .dac-nav-secondary .dac-nav-link {
+ padding-left: 8px;
+ padding-right: 8px;
+ }
+}
+
+.dac-nav-secondary .dac-nav-link.selected {
+ border: none;
+ font-weight: 700;
+}
+
+.dac-nav-secondary .dac-nav-link.selected.ndk {
+ border: none;
+ font-weight: 700;
+}
+
+@media (max-width: 719px) {
+ .dac-nav-open {
+ overflow: hidden;
+ }
+
+ .dac-nav-toggle {
+ border-right: 1px solid #e5e5e5;
+ display: inline-block;
+ position: absolute;
+ left: 0;
+ line-height: 64px;
+ text-align: center;
+ width: 64px;
+ }
+
+ .dac-nav-head, .dac-nav-secondary, .dac-nav-dimmer {
+ display: block;
+ }
+
+ .dac-nav-dimmer.dac-nav-open {
+ opacity: .8;
+ -webkit-transition-delay: 0s;
+ transition-delay: 0s;
+ visibility: visible;
+ }
+
+ .dac-nav-list {
+ background: #fff;
+ bottom: 0;
+ left: auto;
+ max-width: 280px;
+ -webkit-overflow-scrolling: touch;
+ overflow-y: scroll;
+ padding: 0 0 20px 0;
+ position: fixed;
+ right: 100%;
+ top: 0;
+ -webkit-transition: -webkit-transform .3s ease;
+ transition: transform .3s ease;
+ width: 85%;
+ z-index: 52;
+ }
+
+ .dac-nav-list.dac-nav-open {
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+
+ .dac-nav-secondary {
+ border: none;
+ position: static;
+ width: 100%;
+ }
+
+ .dac-nav-item {
+ float: none;
+ }
+
+ .dac-nav-link {
+ display: block;
+ font-size: 12px;
+ font-weight: 600;
+ color: #333;
+ padding: 0 20px;
+ }
+
+ .dac-nav-link.selected {
+ color: #09f;
+ }
+
+ .dac-nav-secondary .dac-nav-link {
+ font-weight: 400;
+ margin-left: 20px;
+ margin-right: 20px;
+ padding: 0 20px;
+ }
+
+ .dac-nav-link.has-subnav, .dac-nav-link.selected {
+ border: none;
+ padding: 0 20px;
+ }
+
+ .dac-nav-link.has-subnav.ndk, .dac-nav-link.selected.ndk {
+ border: none;
+ padding: 0 20px;
+ }
+
+ .dac-logo-image {
+ margin-right: 5px;
+ vertical-align: top;
+ }
+
+ .dac-nav-logo {
+ box-shadow: 0 2px 2px rgba(0, 0, 0, 0.04);
+ font-size: 20px;
+ font-weight: 300;
+ letter-spacing: .3px;
+ line-height: 36px;
+ padding: 14px 24px;
+ }
+
+ .dac-nav-logo, .dac-nav-logo:hover, .dac-nav-logo:focus {
+ color: #444;
+ }
+}
+
+/* Hero carousel */
+.dac-hero {
+ background-color: #fff;
+ background-position: 50% 30%;
+ background-size: cover;
+ box-sizing: border-box;
+ font-size: 16px;
+ min-height: 550px;
+ padding-top: 88px;
+}
+
+.dac-hero.dac-darken::before {
+ background: rgba(0, 0, 0, 0.3);
+ bottom: 0;
+ content: '';
+ display: block;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+@media (max-width: 719px) {
+ .dac-hero.dac-darken::before {
+ background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.9) 80%);
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.9) 80%);
+ }
+}
+
+.dac-hero.dac-darken .dac-hero-content {
+ position: relative;
+}
+
+@media (max-width: 719px) {
+ .dac-hero {
+ padding-bottom: 20px;
+ padding-top: 20px;
+ }
+}
+
+.dac-hero-tag {
+ font-size: 11px;
+ font-weight: 700;
+ letter-spacing: .07em;
+ margin-bottom: 2px;
+ text-transform: uppercase;
+}
+
+.dac-hero-title {
+ margin: 0 0 14px;
+}
+
+@media (max-width: 719px) {
+ .dac-hero-title {
+ font-size: 28px;
+ line-height: 35px;
+ }
+}
+
+.dac-hero-description {
+ margin-bottom: 16px;
+}
+
+@media (max-width: 719px) {
+ .dac-hero-description {
+ font-size: 14px;
+ }
+}
+
+.dac-hero-cta {
+ display: inline-block;
+ line-height: 40px;
+ margin-right: 20px;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+}
+
+.dac-hero-cta:hover {
+ color: currentColor;
+ opacity: .54;
+}
+
+.dac-hero-cta .dac-sprite {
+ margin-left: -8px;
+}
+
+@media (max-width: 719px) {
+ .dac-hero-cta {
+ line-height: 28px;
+ }
+}
+
+.dac-hero-figure {
+ text-align: center;
+}
+
+@media (max-width: 719px) {
+ .dac-hero-figure {
+ height: 150px;
+ margin: 15px 0;
+ }
+
+ .dac-hero-figure img {
+ max-height: 150px;
+ }
+}
+
+.dac-hero-carousel {
+ height: 550px;
+ position: relative;
+}
+
+.dac-hero-carousel > .dac-hero {
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ will-change: opacity;
+}
+
+.dac-hero-carousel > .dac-hero, .dac-hero-carousel > .dac-hero .wrap {
+ opacity: 0;
+}
+
+.dac-hero-carousel > .dac-hero.active {
+ opacity: 1;
+ -webkit-transition: opacity .5s;
+ transition: opacity .5s;
+ z-index: 1;
+}
+
+.dac-hero-carousel > .dac-hero.active .wrap {
+ opacity: 1;
+ -webkit-transition: opacity .5s .5s;
+ transition: opacity .5s .5s;
+}
+
+.dac-hero-carousel > .dac-hero.out, .dac-hero-carousel > .dac-hero.out .wrap {
+ -webkit-transition: opacity 0s .5s;
+ transition: opacity 0s .5s;
+ opacity: 0;
+}
+
+.dac-hero-carousel-action {
+ bottom: 0;
+ display: block;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 1;
+}
+
+.dac-hero-carousel .dac-hero-cta {
+ position: relative;
+ z-index: 1;
+}
+
+.dac-hero-carousel-pagination {
+ bottom: 33px;
+ left: 0;
+ position: absolute;
+ right: 0;
+}
+
+@media (max-width: 719px) {
+ .dac-hero-carousel-pagination {
+ text-align: center;
+ bottom: 20px;
+ }
+}
+
+.dac-hero-carousel-pagination .dac-pagination-item {
+ position: relative;
+ z-index: 1;
+}
+
+.dac-pagination {
+ list-style: none;
+ margin: 0 -6px;
+}
+
+.dac-pagination-item {
+ background-clip: content-box;
+ background-color: rgba(153, 153, 153, 0.4);
+ border-radius: 50%;
+ cursor: pointer;
+ display: inline-block;
+ height: 14px;
+ overflow: hidden;
+ padding: 6px;
+ pointer-events: all;
+ text-indent: 100%;
+ -webkit-transition: background-color .1s ease-in;
+ transition: background-color .1s ease-in;
+ white-space: nowrap;
+ width: 14px;
+ will-change: background-color;
+}
+
+.dac-pagination-item:hover {
+ background-color: rgba(153, 153, 153, 0.6);
+}
+
+.dac-pagination-item.active, .dac-pagination-item.active:hover {
+ background-color: #6ab344;
+}
+
+.dac-invert .dac-pagination-item {
+ background-color: rgba(204, 204, 204, 0.2);
+}
+
+.dac-invert .dac-pagination-item:hover {
+ background-color: rgba(153, 153, 153, 0.4);
+}
+
+@media (max-width: 719px) {
+ .dac-pagination-item {
+ height: 12px;
+ width: 12px;
+ }
+}
+
+/* Form component */
+.dac-form {
+ color: #505050;
+ font-size: 16px;
+ /* Modal Responsive */
+}
+
+.dac-form a {
+ color: #000;
+}
+
+.dac-form-aside {
+ display: inline-block;
+ font-size: 12px;
+ margin-top: 0;
+}
+
+.dac-form-required {
+ color: #ef4300;
+}
+
+.dac-form-fieldset {
+ padding: 0;
+}
+
+.dac-form-legend {
+ display: block;
+ color: #333;
+ font-weight: 500;
+ margin: 20px 0 12px;
+ padding: 0;
+ width: 100%;
+}
+
+.dac-form-legend > .dac-form-required {
+ float: right;
+ margin-top: 3px;
+}
+
+.dac-form-input {
+ border: 0 solid #e3e3e3;
+ border-bottom-width: 1px;
+ display: block;
+ outline: 0;
+ padding: 1px 0 8px;
+ -webkit-transition: border-color .2s;
+ transition: border-color .2s;
+ width: 100%;
+}
+
+.dac-form-input-group {
+ position: relative;
+}
+
+.dac-form-input-group > .dac-form-required {
+ display: block;
+ bottom: 3px;
+ position: absolute;
+ right: 0;
+}
+
+.dac-form-input:focus {
+ border-bottom-color: #09f;
+}
+
+.dac-form-floatlabel {
+ display: block;
+ cursor: text;
+ margin-top: 5px;
+ pointer-events: none;
+ -webkit-transform-origin: 0 100%;
+ -ms-transform-origin: 0 100%;
+ transform-origin: 0 100%;
+ -webkit-transform: translate3d(0, 22px, 0) scale(1);
+ transform: translate3d(0, 22px, 0) scale(1);
+ -webkit-transition: -webkit-transform .2s;
+ transition: transform .2s;
+}
+
+.dac-focused > .dac-form-floatlabel, .dac-has-value > .dac-form-floatlabel {
+ cursor: default;
+ -webkit-transform: translate3d(0, 0, 0) scale(.75);
+ transform: translate3d(0, 0, 0) scale(.75);
+}
+
+.dac-form-radio, .dac-form-checkbox {
+ opacity: 0;
+ position: absolute;
+}
+
+.dac-form-radio-group, .dac-form-checkbox-group {
+ display: table;
+ margin-top: 10px;
+}
+
+.dac-form-radio-button, .dac-form-checkbox-button {
+ box-sizing: border-box;
+ cursor: pointer;
+ display: table-cell;
+ float: left;
+ height: 18px;
+ margin: 2px 10px 0 0;
+ position: relative;
+ width: 18px;
+}
+
+.dac-form-radio-button::after, .dac-form-radio-button::before, .dac-form-checkbox-button::after, .dac-form-checkbox-button::before {
+ box-sizing: border-box;
+ content: '';
+ border-radius: 50%;
+ display: block;
+ height: 100%;
+ position: absolute;
+ width: 100%;
+}
+
+.dac-form-radio-button::before, .dac-form-checkbox-button::before {
+ background: rgba(0, 0, 0, 0.7);
+ -webkit-transform: translateZ(0) scale(0);
+ transform: translateZ(0) scale(0);
+ -webkit-transition: -webkit-transform .3s;
+ transition: transform .3s;
+}
+
+.dac-form-radio-button::after, .dac-form-checkbox-button::after {
+ border: 2px solid rgba(0, 0, 0, 0.7);
+}
+
+.dac-form-radio:checked + .dac-form-radio-button::before, .dac-form-checkbox:checked + .dac-form-checkbox-button::before {
+ -webkit-transform: translateZ(0) scale(.5);
+ transform: translateZ(0) scale(.5);
+}
+
+.dac-form-radio:focus + .dac-form-radio-button::after, .dac-form-checkbox:focus + .dac-form-checkbox-button::after {
+ border: 2px solid #09f;
+}
+
+.dac-form-checkbox-button::after, .dac-form-checkbox-button::before {
+ border-radius: 0;
+}
+
+@media (max-width: 719px) {
+ .dac-form-legend {
+ margin-bottom: 0;
+ }
+}
+
+/* Media component */
+.dac-media {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-flow: row wrap;
+ -ms-flex-flow: row wrap;
+ flex-flow: row wrap;
+}
+
+.dac-media-figure {
+ margin: 0;
+}
+
+.dac-media-body {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ -ms-flex: 1;
+ flex: 1;
+}
+
+.no-flexbox .dac-media {
+ display: table;
+ width: 100%;
+}
+
+.no-flexbox .dac-media-body, .no-flexbox .dac-media-figure {
+ display: table-cell;
+}
+
+.no-flexbox .dac-media-figure {
+ padding: 0;
+}
+
+.no-flexbox .dac-media-body {
+ width: 100%;
+}
+
+.dac-swap {
+ overflow: hidden;
+ position: relative;
+}
+
+.dac-swap-section {
+ left: 0;
+ opacity: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ -webkit-transition: opacity 1s, -webkit-transform .5s;
+ transition: opacity 1s, transform .5s;
+}
+
+.dac-swap-section.dac-up {
+ -webkit-transform: translateY(-100%);
+ -ms-transform: translateY(-100%);
+ transform: translateY(-100%);
+}
+
+.dac-swap-section.dac-down {
+ -webkit-transform: translateY(100%);
+ -ms-transform: translateY(100%);
+ transform: translateY(100%);
+}
+
+.dac-swap-section.dac-left {
+ -webkit-transform: translateX(-100%);
+ -ms-transform: translateX(-100%);
+ transform: translateX(-100%);
+}
+
+.dac-swap-section.dac-right {
+ -webkit-transform: translateX(100%);
+ -ms-transform: translateX(100%);
+ transform: translateX(100%);
+}
+
+.dac-swap-section.dac-active {
+ opacity: 1;
+ position: relative;
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+ width: auto;
+}
+
+/* Modal component */
+.dac-modal {
+ background: rgba(0, 0, 0, 0.8);
+ bottom: 0;
+ left: 0;
+ opacity: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: fixed;
+ right: 0;
+ top: 0;
+ -webkit-transition: visibility 0s linear .3s, opacity .3s linear;
+ transition: visibility 0s linear .3s, opacity .3s linear;
+ visibility: hidden;
+ z-index: 52;
+}
+
+.dac-modal.dac-active {
+ opacity: 1;
+ -webkit-transition-delay: 0s;
+ transition-delay: 0s;
+ visibility: visible;
+}
+
+.dac-modal-open {
+ overflow: hidden;
+}
+
+.dac-modal-container {
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-filter: drop-shadow(0 5px 15px rgba(0, 0, 0, 0.4));
+ filter: drop-shadow(0 5px 15px rgba(0, 0, 0, 0.4));
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ min-height: 100%;
+ width: 100%;
+}
+
+.dac-modal-window {
+ background: #fff;
+ border-radius: 5px;
+ box-sizing: border-box;
+ margin: 20px auto;
+ -webkit-transition: -webkit-transform .3s;
+ transition: transform .3s;
+ -webkit-transform: translate(0, -30px);
+ -ms-transform: translate(0, -30px);
+ transform: translate(0, -30px);
+ width: 960px;
+}
+
+.dac-modal.dac-active .dac-modal-window {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+
+.dac-modal-header {
+ background: #00695c;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ padding: 35px 35px 30px;
+ position: relative;
+}
+
+.dac-modal-header-close {
+ background: none;
+ border: none;
+ cursor: pointer;
+ line-height: 0;
+ outline: 0;
+ opacity: .7;
+ padding: 8px;
+ position: absolute;
+ right: 5px;
+ -webkit-transition: background-color .3s;
+ transition: background-color .3s;
+ top: 5px;
+}
+
+.dac-modal-header-close:active {
+ background: rgba(255, 255, 255, 0.2);
+}
+
+.dac-modal-header-title {
+ color: #fff;
+ font-size: 24px;
+ font-weight: 300;
+ line-height: 32px;
+ margin: 0;
+ padding-right: 150px;
+}
+
+.dac-modal-header-subtitle {
+ bottom: 0;
+ color: #fff;
+ display: inline-block;
+ font: inherit;
+ font-size: 14px;
+ margin: 0;
+ opacity: .8;
+ position: absolute;
+ right: 0;
+}
+
+.dac-modal-content {
+ padding: 12px 35px;
+}
+
+.dac-modal-action {
+ margin: 0;
+}
+
+.dac-modal-footer {
+ padding: 24px 35px;
+}
+
+@media (max-width: 1000px) {
+ .dac-modal-window {
+ margin: 20px;
+ width: auto;
+ }
+
+ .dac-modal-container {
+ z-index: auto;
+ }
+}
+
+@media (max-width: 719px) {
+ .dac-modal-window {
+ margin: 10px;
+ }
+
+ .dac-modal-header {
+ padding: 35px 10px 10px;
+ }
+
+ .dac-modal-header-title {
+ font-size: 16px;
+ line-height: 24px;
+ padding: 0;
+ }
+
+ .dac-modal-header-subtitle {
+ display: block;
+ margin: 0;
+ position: static;
+ text-align: right;
+ }
+
+ .dac-modal-content {
+ padding: 10px;
+ }
+
+ .dac-modal-footer {
+ border-top: 1px solid #e3e3e3;
+ padding: 35px 10px;
+ }
+}
+
+.newsletter .dac-modal-footer {
+ padding-top: 0;
+ text-align: right;
+}
+
+.newsletter-checkboxes {
+ padding-top: 20px;
+}
+
+.newsletter-success-message {
+ font-size: 32px;
+ line-height: 1.4;
+ padding: 40px 30px;
+ text-align: center;
+}
+
+@media (max-width: 719px) {
+ .newsletter-success-message {
+ font-size: 16px;
+ padding: 12px 0 0;
+ }
+}
+
+@media (min-width: 720px) {
+ .newsletter-checkboxes {
+ padding-top: 46px;
+ }
+
+ .newsletter-leftCol {
+ padding-right: 40px;
+ }
+
+ .newsletter-rightCol {
+ padding-left: 40px;
+ }
+}
+
+@media (max-width: 719px) {
+ .newsletter .dac-modal-footer {
+ margin-top: 30px;
+ padding: 30px 10px;
+ text-align: center;
+ }
+}
+
+.dac-expand, .dac-section {
+ margin-left: -20px;
+ margin-right: -20px;
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+@media (max-width: 719px) {
+ .dac-expand, .dac-section {
+ margin-left: -10px;
+ margin-right: -10px;
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+}
+
+.dac-invert {
+ color: #b2b2b2;
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.dac-invert h1, .dac-invert h2, .dac-invert h3 {
+ color: #fff;
+}
+
+.dac-light.dac-hero, .dac-light.dac-section {
+ background-color: #eceff1;
+}
+
+.dac-gray.dac-hero, .dac-gray.dac-section {
+ background-color: #b0bec5;
+}
+
+.dac-dark.dac-hero, .dac-dark.dac-section {
+ background-color: #37474f;
+}
+
+.dac-red.dac-hero, .dac-red.dac-section {
+ background-color: #dc4d38;
+}
+
+.dac-hero-cta, .dac-section-title, .dac-section-links {
+ color: #212121;
+ color: rgba(0, 0, 0, 0.87);
+}
+
+.dac-invert .dac-hero-cta, .dac-invert .dac-section-title, .dac-invert .dac-section-links {
+ color: white;
+}
+
+.dac-hero-cta .dac-sprite, .dac-section-title .dac-sprite, .dac-section-links .dac-sprite {
+ opacity: .87;
+}
+
+.dac-invert .dac-hero-cta .dac-sprite, .dac-invert .dac-section-title .dac-sprite, .dac-invert .dac-section-links .dac-sprite {
+ opacity: 1;
+}
+
+.dac-hero-tag, .dac-hero-description, .dac-section-subtitle {
+ color: #757575;
+ color: rgba(0, 0, 0, 0.54);
+}
+
+.dac-invert .dac-hero-tag, .dac-invert .dac-hero-description, .dac-invert .dac-section-subtitle {
+ color: #b2b2b2;
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.dac-section {
+ background-position: 50% 50%;
+ background-size: cover;
+ padding-bottom: 84px;
+ padding-top: 84px;
+ position: relative;
+}
+
+@media (max-width: 719px) {
+ .dac-section {
+ padding-bottom: 52px;
+ padding-top: 52px;
+ }
+}
+
+.dac-section.dac-small {
+ padding-bottom: 32px;
+ padding-top: 32px;
+}
+
+.dac-section-title {
+ text-align: center;
+ margin-bottom: 40px;
+ margin-top: 0;
+}
+
+.dac-section-subtitle {
+ font-size: 16px;
+ margin-bottom: 40px;
+ margin-top: -24px;
+ text-align: center;
+}
+
+.dac-section-links {
+ font-size: 16px;
+ list-style: none;
+ line-height: 40px;
+ margin: 16px 0 0;
+ text-align: center;
+}
+
+@media (max-width: 719px) {
+ .dac-section-links {
+ margin-left: -8px;
+ text-align: left;
+ }
+}
+
+.dac-section-link {
+ display: inline-block;
+ margin: 0 32px;
+ -webkit-transition: opacity .3s;
+ transition: opacity .3s;
+}
+
+.dac-section-link:hover {
+ opacity: .54;
+}
+
+@media (max-width: 719px) {
+ .dac-section-link {
+ display: block;
+ margin: 0;
+ }
+}
+
+.dac-section-link a {
+ color: inherit;
+}
+
+/*
+SCSS variables are information about icon's compiled state, stored under its original file name
+
+.icon-home {
+ width: $icon-home-width;
+}
+
+The large array-like variables contain all information about a single icon
+$icon-home: x y offset_x offset_y width height total_width total_height image_path;
+
+At the bottom of this section, we provide information about the spritesheet itself
+$spritesheet: width height image $spritesheet-sprites;
+*/
+.dac-sprite, #tb li:before, #qv li:before {
+ background-image: url(/assets/images/sprite.png);
+ display: inline-block;
+ vertical-align: middle; }
+ @media screen and (min-device-pixel-ratio: 1.5) {
+ .dac-sprite, #tb li:before, #qv li:before {
+ background-image: url(/assets/images/sprite-2x.png);
+ background-size: 50% 50%; } }
+
+.dac-sprite.dac-auto-chevron {
+ background-position: 0px -196px;
+ height: 24px;
+ width: 24px;
+ vertical-align: -6px; }
+ .dac-invert .dac-sprite.dac-auto-chevron {
+ background-position: 0px -222px;
+ height: 24px;
+ width: 24px; }
+.dac-sprite.dac-auto-chevron-large {
+ background-position: 0px -404px;
+ height: 36px;
+ width: 36px;
+ vertical-align: -10px; }
+ .dac-invert .dac-sprite.dac-auto-chevron-large {
+ background-position: 0px -442px;
+ height: 36px;
+ width: 36px; }
+.dac-sprite.dac-auto-unfold-less {
+ background-position: 0px -352px;
+ height: 24px;
+ width: 24px;
+ vertical-align: -6px; }
+ .dac-invert .dac-sprite.dac-auto-unfold-less {
+ background-position: 0px -326px;
+ height: 24px;
+ width: 24px; }
+.dac-sprite.dac-auto-unfold-more {
+ background-position: 0px -300px;
+ height: 24px;
+ width: 24px;
+ vertical-align: -6px; }
+ .dac-invert .dac-sprite.dac-auto-unfold-more {
+ background-position: 0px -378px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-arrow-down-gray {
+ background-position: 0px 0px;
+ height: 11px;
+ width: 19px; }
+
+.dac-sprite.dac-arrow-right {
+ background-position: 0px -128px;
+ height: 18px;
+ width: 11px; }
+
+.dac-sprite.dac-chevron-large-right-black {
+ background-position: 0px -404px;
+ height: 36px;
+ width: 36px; }
+
+.dac-sprite.dac-chevron-large-right-white {
+ background-position: 0px -442px;
+ height: 36px;
+ width: 36px; }
+
+.dac-sprite.dac-chevron-right-black {
+ background-position: 0px -196px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-chevron-right-white {
+ background-position: 0px -222px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-close {
+ background-position: 0px -27px;
+ height: 12px;
+ width: 12px; }
+
+.dac-sprite.dac-expand-less-black {
+ background-position: 0px -248px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-expand-more-black {
+ background-position: 0px -170px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-google-play {
+ background-position: 0px -108px;
+ height: 18px;
+ width: 16px; }
+
+.dac-sprite.dac-gplus {
+ background-position: 0px -89px;
+ height: 17px;
+ width: 16px; }
+
+.dac-sprite.dac-mail {
+ background-position: 0px -13px;
+ height: 12px;
+ width: 16px; }
+
+.dac-sprite.dac-play-white {
+ background-position: 0px -148px;
+ height: 20px;
+ width: 16px; }
+
+.dac-sprite.dac-rss {
+ background-position: 0px -41px;
+ height: 14px;
+ width: 14px; }
+
+.dac-sprite.dac-search {
+ background-position: 0px -274px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-twitter {
+ background-position: 0px -73px;
+ height: 14px;
+ width: 16px; }
+
+.dac-sprite.dac-unfold-less-white {
+ background-position: 0px -326px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-unfold-less {
+ background-position: 0px -352px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-unfold-more-white {
+ background-position: 0px -378px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-unfold-more {
+ background-position: 0px -300px;
+ height: 24px;
+ width: 24px; }
+
+.dac-sprite.dac-youtube {
+ background-position: 0px -57px;
+ height: 14px;
+ width: 18px; }
+
+.dac-toggle-expand {
+ cursor: pointer;
+ display: inline-block; }
+.dac-toggle-collapse {
+ cursor: pointer;
+ display: none; }
+.dac-toggle.is-expanded .dac-toggle-expand {
+ display: none; }
+.dac-toggle.is-expanded .dac-toggle-collapse {
+ display: inline-block; }
+.dac-toggle-content {
+ clear: left;
+ overflow: hidden;
+ max-height: 0;
+ -webkit-transition: .3s max-height;
+ transition: .3s max-height; }
+.dac-toggle.is-expanded .dac-toggle-content {
+ max-height: none; }
+.dac-toggle.dac-mobile .dac-toggle-content {
+ max-height: none; }
+@media (max-width: 719px) {
+ .dac-toggle.dac-mobile .dac-toggle-content {
+ max-height: 0; }
+ .dac-toggle.is-expanded .dac-toggle-content {
+ max-height: none; } }
+
+.dac-visible-mobile-block, .dac-mobile-only, .dac-visible-mobile-inline, .dac-visible-mobile-inline-block, .dac-visible-tablet-block, .dac-visible-tablet-inline, .dac-visible-tablet-inline-block, .dac-visible-desktop-block, .dac-visible-desktop-inline, .dac-visible-desktop-inline-block {
+ display: none !important; }
+
+@media (max-width: 719px) {
+ .dac-hidden-mobile {
+ display: none !important; }
+ .dac-visible-mobile-block, .dac-mobile-only {
+ display: block !important; }
+ .dac-visible-mobile-inline {
+ display: inline !important; }
+ .dac-visible-mobile-inline-block {
+ display: inline-block !important; } }
+
+@media (min-width: 720px) and (max-width: 979px) {
+ .dac-hidden-tablet {
+ display: none !important; }
+ .dac-visible-tablet-block {
+ display: block !important; }
+ .dac-visible-tablet-inline {
+ display: inline !important; }
+ .dac-visible-tablet-inline-block {
+ display: inline-block !important; } }
+
+@media (min-width: 980px) {
+ .dac-hidden-desktop {
+ display: none !important; }
+ .dac-visible-desktop-block {
+ display: block !important; }
+ .dac-visible-desktop-inline {
+ display: inline !important; }
+ .dac-visible-desktop-inline-block {
+ display: inline-block !important; } }
+
+.dac-offset-parent {
+ position: relative !important; }
+
+/**
+ * Break strings when their length exceeds the width of their container.
+ */
+.dac-text-break {
+ word-wrap: break-word !important; }
+
+/**
+ * Horizontal text alignment
+ */
+.dac-text-center {
+ text-align: center !important; }
+
+.dac-text-left {
+ text-align: left !important; }
+
+.dac-text-right {
+ text-align: right !important; }
+
+/**
+ * Prevent whitespace wrapping
+ */
+.dac-text-no-wrap {
+ white-space: nowrap !important; }
+
+/**
+ * Prevent text from wrapping onto multiple lines, instead truncate with an ellipsis.
+ */
+.dac-text-truncate {
+ max-width: 100%;
+ overflow: hidden !important;
+ text-overflow: ellipsis !important;
+ white-space: nowrap !important;
+ word-wrap: normal !important; }
+
+/**
+ * Floats
+ */
+.dac-float-left {
+ float: left !important; }
+
+.dac-float-right {
+ float: right !important; }
+
+/**
+ * New block formatting context
+ *
+ * This affords some useful properties to the element. It won't wrap under
+ * floats. Will also contain any floated children.
+ * N.B. This will clip overflow. Use the alternative method below if this is
+ * problematic.
+ */
+.dac-nbfc {
+ overflow: hidden !important;
+}
+
+/**
+ * New block formatting context (alternative)
+ *
+ * Alternative method when overflow must not be clipped.
+ *
+ * N.B. This breaks down in some browsers when elements within this element
+ * exceed its width.
+ */
+.dac-nbfc-alt {
+ display: table-cell !important;
+ width: 10000px !important;
+}
+
+#tb li:before, #qv li:before {
+ background-position: 0px -196px;
+ height: 24px;
+ width: 24px;
+ content: '';
+ left: -8px;
+ opacity: .7;
+ position: absolute;
+ top: -4px;
+}
diff --git a/tools/droiddoc/templates-sdk/assets/css/fullscreen.css b/tools/droiddoc/templates-sdk/assets/css/fullscreen.css
index 7912e34..0f108e0 100644
--- a/tools/droiddoc/templates-sdk/assets/css/fullscreen.css
+++ b/tools/droiddoc/templates-sdk/assets/css/fullscreen.css
@@ -14,195 +14,7 @@
*/
@media screen, projection, print {
-.full {
- padding: 2.5em 0;
- border-top: solid 1px #ddd;
- border-bottom: solid 1px #ddd;
- background: #f7f7f7;
+ .wrap {
+ max-width: none;
+ }
}
-.wrap {
- margin: 0 auto;
- width: 100%;
- min-width:600px;
- clear: both;
-}
-.cols {
- height: 1%;
- margin: 0 -1.533742331288343558282%;
- width: 103.06748466257669%}
-*+html .cols {
- margin-bottom: 20px;
-}
-.cols:after {
- clear: both;
- content: ' ';
- display: block;
- height: 0;
- visibility: hidden;
-}
-.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12,
-.col-13, .col-14, .col-15, .col-16 {
- float: left;
- margin: 0 1.063829787234% 20px 1.063829787234%;
-}
-* html .col-1, * html .col-2, * html .col-3, * html .col-4, * html .col-5, * html .col-6, * html
-.col-7, * html .col-8, * html .col-9, * html .col-10, * html .col-11, * html .col-12, * html
-.col-13, * html .col-14, * html .col-15, * html .col-16 {
- margin: 0;
- margin: 0 1.063829787234% 20px 1.063829787234%;
-}
-[dir='rtl'] .col-1, [dir='rtl'] .col-2, [dir='rtl'] .col-3, [dir='rtl'] .col-4, [dir='rtl'] .col-5,
-[dir='rtl'] .col-6, [dir='rtl'] .col-7, [dir='rtl'] .col-8, [dir='rtl'] .col-9, [dir='rtl'] .col-10,
-[dir='rtl'] .col-11, [dir='rtl'] .col-12 {
- float: right;
-}
-.col-1 {
- width: 4.16666666666667%;
-}
-.col-2 {
- width: 10.4166666666667%;
-}
-.col-3 {
- width: 16.6666666666667%;
-}
-.col-4 {
- width: 22.9166666666667%;
-}
-.col-5 {
- width: 29.1666666666667%;
-}
-.col-6 {
- width: 35.4166666666667%;
-}
-.col-7 {
- width: 41.6666666666667%;
-}
-.col-8 {
- width: 47.9166666666667%;
-}
-.col-9 {
- width: 55.3333333333333%;
-}
-.col-10 {
- width: 60.4166666666667%;
-}
-.col-11 {
- width: 66.6666666666667%;
-}
-.col-12 {
- width: 72.9166666666667%;
-}
-.col-13 {
- width: 79.1666666666667%;
-}
-.col-14 {
- width: 85.4166666666667%;
-}
-.col-15 {
- width: 91.6666666666667%;
-}
-.col-16 {
- width: 97.9166666666667%;
-}
-
-
-
-
-
-
-
-#header .col-1,
-#nav-x .col-1 { width: 40px }
-#header .col-2,
-#nav-x .col-2 { width: 100px }
-#header .col-3,
-#nav-x .col-3 { width: 160px }
-#header .col-4,
-#nav-x .col-4 { width: 220px }
-#header .col-5,
-#nav-x .col-5 { width: 280px }
-#header .col-6,
-#nav-x .col-6 { width: 340px }
-#header .col-7,
-#nav-x .col-7 { width: 400px }
-#header .col-8,
-#nav-x .col-8 { width: 460px }
-#header .col-9,
-#nav-x .col-9 { width: 520px }
-#header .col-10,
-#nav-x .col-10 { width: 580px }
-#header .col-11,
-#nav-x .col-11 { width: 640px }
-#header .col-12,
-#nav-x .col-12 { width: 700px }
-#header .col-13,
-#nav-x .col-13 { width: 760px }
-#header .col-14,
-#nav-x .col-14 { width: 820px }
-#header .col-15,
-#nav-x .col-15 { width: 880px }
-#header .col-16,
-#nav-x .col-16 { width: 940px }
-
-
-
-body {
- padding:0 20px;
-}
-#header,
-#searchResults,
-#nav-x {
- margin:0;
-}
-#body-content {
- margin:0;
-}
-#body-content > .col-12 {
- width:77.9804965%;
- margin:0 0 0 0.97%; /* this percentage chosen to make IE9 happy */
-}
-#side-nav {
- width: 19.9804965%;
- margin:0 1.063829787234% 0 0;
-}
-
-#header .wrap {
- max-width: 100%;
-}
-
-#header-wrapper #nav-x div.wrap,
-#searchResults.wrap {
- max-width:100%;
-}
-
-.nav-x {
- margin:-2px 0 0 0;
-}
-
-#devdoc-nav.fixed,
-#devdoc-nav.fixed a.totop {
- left:20px; /* !important ... for IE i think */
-}
-
-#sticky-header {
- padding: 0 20px;
-}
-
-#sticky-header > div {
- width: 100%;
-}
-
-.sticky-menu {
- width:100%;
- left:-20px;
-}
-
-.col-right {
- margin-right:0px;
-}
-
-@media screen and (max-width:772px) {
-.col-5, .col-6, .col-7 {
- clear: both;
- width: 97.0238096%}
-}
\ No newline at end of file
diff --git a/tools/droiddoc/templates-sdk/assets/images/android_logo.png b/tools/droiddoc/templates-sdk/assets/images/android_logo.png
new file mode 100644
index 0000000..5f19215
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/android_logo.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/images/android_logo@2x.png b/tools/droiddoc/templates-sdk/assets/images/android_logo@2x.png
new file mode 100644
index 0000000..04132cc
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/android_logo@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/images/android_logo_ndk.png b/tools/droiddoc/templates-sdk/assets/images/android_logo_ndk.png
new file mode 100644
index 0000000..3f39f4d
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/android_logo_ndk.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/images/android_logo_ndk@2x.png b/tools/droiddoc/templates-sdk/assets/images/android_logo_ndk@2x.png
new file mode 100644
index 0000000..8081ac5
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/android_logo_ndk@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/images/resource-card-default-android.jpg b/tools/droiddoc/templates-sdk/assets/images/resource-card-default-android.jpg
index 8050744..398030f 100644
--- a/tools/droiddoc/templates-sdk/assets/images/resource-card-default-android.jpg
+++ b/tools/droiddoc/templates-sdk/assets/images/resource-card-default-android.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/images/sprite-2x.png b/tools/droiddoc/templates-sdk/assets/images/sprite-2x.png
new file mode 100644
index 0000000..185b7e8
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/sprite-2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/images/sprite.png b/tools/droiddoc/templates-sdk/assets/images/sprite.png
new file mode 100644
index 0000000..7fef43e
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/sprite.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/assets/js/docs.js b/tools/droiddoc/templates-sdk/assets/js/docs.js
index 7f4be4e..d88c0e6 100644
--- a/tools/droiddoc/templates-sdk/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk/assets/js/docs.js
@@ -56,7 +56,7 @@
// setup keyboard listener for search shortcut
$('body').keyup(function(event) {
- if (event.which == 191) {
+ if (event.which == 191 && $(event.target).is(':not(:input)')) {
$('#search_autocomplete').focus();
}
});
@@ -71,18 +71,12 @@
});
// initialize the divs with custom scrollbars
- $('.scroll-pane').jScrollPane( {verticalGutter:0} );
-
- // add HRs below all H2s (except for a few other h2 variants)
- $('h2').not('#qv h2')
- .not('#tb h2')
- .not('.sidebox h2')
- .not('#devdoc-nav h2')
- .not('h2.norule').css({marginBottom:0})
- .after('<hr/>');
+ if (window.innerWidth >= 720) {
+ $('.scroll-pane').jScrollPane({verticalGutter: 0});
+ }
// set up the search close button
- $('.search .close').click(function() {
+ $('#search-close').on('click touchend', function() {
$searchInput = $('#search_autocomplete');
$searchInput.attr('value', '');
$(this).addClass("hide");
@@ -92,38 +86,13 @@
hideResults();
});
- // Set up quicknav
- var quicknav_open = false;
- $("#btn-quicknav").click(function() {
- if (quicknav_open) {
- $(this).removeClass('active');
- quicknav_open = false;
- collapse();
- } else {
- $(this).addClass('active');
- quicknav_open = true;
- expand();
- }
- })
-
- var expand = function() {
- $('#header-wrap').addClass('quicknav');
- $('#quicknav').stop().show().animate({opacity:'1'});
- }
-
- var collapse = function() {
- $('#quicknav').stop().animate({opacity:'0'}, 100, function() {
- $(this).hide();
- $('#header-wrap').removeClass('quicknav');
- });
- }
-
//Set up search
$("#search_autocomplete").focus(function() {
$("#search-container").addClass('active');
})
- $("#search-container").mouseover(function() {
+ $("#search-container").on('mouseover touchend', function(e) {
+ if ($(e.target).is('#search-close')) { return; }
$("#search-container").addClass('active');
$("#search_autocomplete").focus();
})
@@ -180,73 +149,88 @@
// Highlight the header tabs...
// highlight Design tab
- if ($("body").hasClass("design")) {
- $("#header li.design a").addClass("selected");
- $("#sticky-header").addClass("design");
+ var urlSegments = pagePathOriginal.split('/');
+ var navEl = $(".dac-nav-list");
+ var subNavEl = navEl.find(".dac-nav-secondary");
+ var parentNavEl;
+ if ($("body").hasClass("design")) {
+ navEl.find("> li.design > a").addClass("selected");
// highlight About tabs
} else if ($("body").hasClass("about")) {
- var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
- if (rootDir == "about") {
- $("#nav-x li.about a").addClass("selected");
- } else if (rootDir == "wear") {
- $("#nav-x li.wear a").addClass("selected");
- } else if (rootDir == "tv") {
- $("#nav-x li.tv a").addClass("selected");
- } else if (rootDir == "auto") {
- $("#nav-x li.auto a").addClass("selected");
+ if (urlSegments[1] == "about" || urlSegments[1] == "wear" || urlSegments[1] == "tv" || urlSegments[1] == "auto") {
+ navEl.find("> li.home > a").addClass('has-subnav');
+ subNavEl.find("li." + urlSegments[1] + " > a").addClass("selected");
+ } else {
+ navEl.find("> li.home > a").addClass('selected');
}
+
+// highlight NDK tabs
+ } else if ($("body").hasClass("ndk")) {
+ parentNavEl = navEl.find("> li.ndk > a");
+ parentNavEl.addClass('has-subnav');
+ if ($("body").hasClass("guide")) {
+ navEl.find("> li.guides > a").addClass("selected ndk");
+ } else if ($("body").hasClass("reference")) {
+ navEl.find("> li.reference > a").addClass("selected ndk");
+ } else if ($("body").hasClass("samples")) {
+ navEl.find("> li.samples > a").addClass("selected ndk");
+ } else if ($("body").hasClass("downloads")) {
+ navEl.find("> li.downloads > a").addClass("selected ndk");
+ }
+
// highlight Develop tab
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
- $("#header li.develop a").addClass("selected");
- $("#sticky-header").addClass("develop");
+ parentNavEl = navEl.find("> li.develop > a");
+ parentNavEl.addClass('has-subnav');
+
// In Develop docs, also highlight appropriate sub-tab
- var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
- if (rootDir == "training") {
- $("#nav-x li.training a").addClass("selected");
- } else if (rootDir == "guide") {
- $("#nav-x li.guide a").addClass("selected");
- } else if (rootDir == "reference") {
+ if (urlSegments[1] == "training") {
+ subNavEl.find("li.training > a").addClass("selected");
+ } else if (urlSegments[1] == "guide") {
+ subNavEl.find("li.guide > a").addClass("selected");
+ } else if (urlSegments[1] == "reference") {
// If the root is reference, but page is also part of Google Services, select Google
if ($("body").hasClass("google")) {
- $("#nav-x li.google a").addClass("selected");
+ subNavEl.find("li.google > a").addClass("selected");
} else {
- $("#nav-x li.reference a").addClass("selected");
+ subNavEl.find("li.reference > a").addClass("selected");
}
- } else if ((rootDir == "tools") || (rootDir == "sdk")) {
- $("#nav-x li.tools a").addClass("selected");
+ } else if ((urlSegments[1] == "tools") || (urlSegments[1] == "sdk")) {
+ subNavEl.find("li.tools > a").addClass("selected");
} else if ($("body").hasClass("google")) {
- $("#nav-x li.google a").addClass("selected");
+ subNavEl.find("li.google > a").addClass("selected");
} else if ($("body").hasClass("samples")) {
- $("#nav-x li.samples a").addClass("selected");
+ subNavEl.find("li.samples > a").addClass("selected");
+ } else if ($("body").hasClass("preview")) {
+ subNavEl.find("li.preview > a").addClass("selected");
+ } else {
+ parentNavEl.removeClass('has-subnav').addClass("selected");
}
-
// highlight Distribute tab
} else if ($("body").hasClass("distribute")) {
- $("#header li.distribute a").addClass("selected");
- $("#sticky-header").addClass("distribute");
+ parentNavEl = navEl.find("> li.distribute > a");
+ parentNavEl.addClass('has-subnav');
- var baseFrag = pagePathOriginal.indexOf('/', 1) + 1;
- var secondFrag = pagePathOriginal.substring(baseFrag, pagePathOriginal.indexOf('/', baseFrag));
- if (secondFrag == "users") {
- $("#nav-x li.users a").addClass("selected");
- } else if (secondFrag == "engage") {
- $("#nav-x li.engage a").addClass("selected");
- } else if (secondFrag == "monetize") {
- $("#nav-x li.monetize a").addClass("selected");
- } else if (secondFrag == "analyze") {
- $("#nav-x li.analyze a").addClass("selected");
- } else if (secondFrag == "tools") {
- $("#nav-x li.disttools a").addClass("selected");
- } else if (secondFrag == "stories") {
- $("#nav-x li.stories a").addClass("selected");
- } else if (secondFrag == "essentials") {
- $("#nav-x li.essentials a").addClass("selected");
- } else if (secondFrag == "googleplay") {
- $("#nav-x li.googleplay a").addClass("selected");
+ if (urlSegments[2] == "users") {
+ subNavEl.find("li.users > a").addClass("selected");
+ } else if (urlSegments[2] == "engage") {
+ subNavEl.find("li.engage > a").addClass("selected");
+ } else if (urlSegments[2] == "monetize") {
+ subNavEl.find("li.monetize > a").addClass("selected");
+ } else if (urlSegments[2] == "analyze") {
+ subNavEl.find("li.analyze > a").addClass("selected");
+ } else if (urlSegments[2] == "tools") {
+ subNavEl.find("li.essentials > a").addClass("selected");
+ } else if (urlSegments[2] == "stories") {
+ subNavEl.find("li.stories > a").addClass("selected");
+ } else if (urlSegments[2] == "essentials") {
+ subNavEl.find("li.essentials > a").addClass("selected");
+ } else if (urlSegments[2] == "googleplay") {
+ subNavEl.find("li.googleplay > a").addClass("selected");
+ } else {
+ parentNavEl.removeClass('has-subnav').addClass("selected");
}
- } else if ($("body").hasClass("about")) {
- $("#sticky-header").addClass("about");
}
// set global variable so we can highlight the sidenav a bit later (such as for google reference)
@@ -392,14 +376,13 @@
var $olClasses = $('<ol class="class-list"></ol>');
var $liClass;
- var $imgIcon;
var $h2Title;
var $pSummary;
var $olLessons;
var $liLesson;
$classLinks.each(function(index) {
- $liClass = $('<li></li>');
- $h2Title = $('<a class="title" href="'+$(this).attr('href')+'"><h2>' + $(this).html()+'</h2><span></span></a>');
+ $liClass = $('<li class="clearfix"></li>');
+ $h2Title = $('<a class="title" href="'+$(this).attr('href')+'"><h2 class="norule">' + $(this).html()+'</h2><span></span></a>');
$pSummary = $('<p class="description">' + $classDescriptions[index] + '</p>');
$olLessons = $('<ol class="lesson-list"></ol>');
@@ -407,18 +390,14 @@
$lessons = $(this).closest('li').find('ul li a');
if ($lessons.length) {
- $imgIcon = $('<img src="'+toRoot+'assets/images/resource-tutorial.png" '
- + ' width="64" height="64" alt=""/>');
$lessons.each(function(index) {
$olLessons.append('<li><a href="'+$(this).attr('href')+'">' + $(this).html()+'</a></li>');
});
} else {
- $imgIcon = $('<img src="'+toRoot+'assets/images/resource-article.png" '
- + ' width="64" height="64" alt=""/>');
$pSummary.addClass('article');
}
- $liClass.append($h2Title).append($imgIcon).append($pSummary).append($olLessons);
+ $liClass.append($h2Title).append($pSummary).append($olLessons);
$olClasses.append($liClass);
});
$('.jd-descr').append($olClasses);
@@ -436,23 +415,15 @@
/* Resize nav height when window height changes */
$(window).resize(function() {
if ($('#side-nav').length == 0) return;
- var stylesheet = $('link[rel="stylesheet"][class="fullscreen"]');
- setNavBarLeftPos(); // do this even if sidenav isn't fixed because it could become fixed
+ setNavBarDimensions(); // do this even if sidenav isn't fixed because it could become fixed
// make sidenav behave when resizing the window and side-scolling is a concern
- if (sticky) {
- if ((stylesheet.attr("disabled") == "disabled") || stylesheet.length == 0) {
- updateSideNavPosition();
- } else {
- updateSidenavFullscreenWidth();
- }
- }
- resizeNav();
+ updateSideNavDimensions();
+ checkSticky();
+ resizeNav(250);
});
-
- var navBarLeftPos;
if ($('#devdoc-nav').length) {
- setNavBarLeftPos();
+ setNavBarDimensions();
}
@@ -495,7 +466,12 @@
$('h2').click(function() {
var id = $(this).attr('id');
if (id) {
- document.location.hash = id;
+ if (history && history.replaceState) {
+ // Change url without scrolling.
+ history.replaceState({}, '', '#' + id);
+ } else {
+ document.location.hash = id;
+ }
}
});
@@ -504,15 +480,6 @@
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
-
- // Revise the sidenav widths to make room for the scrollbar
- // which avoids the visible width from changing each time the bar appears
- var $sidenav = $("#side-nav");
- var sidenav_width = parseInt($sidenav.innerWidth());
-
- $("#devdoc-nav #nav").css("width", sidenav_width - 4 + "px"); // 4px is scrollbar width
-
-
$(".scroll-pane").removeAttr("tabindex"); // get rid of tabindex added by jscroller
if ($(".scroll-pane").length > 1) {
@@ -738,21 +705,28 @@
/** Create the list of breadcrumb links in the sticky header */
function buildBreadcrumbs() {
- var $breadcrumbUl = $("#sticky-header ul.breadcrumb");
+ var $breadcrumbUl = $(".dac-header-crumbs");
+ var primaryNavLink = ".dac-nav-list > .dac-nav-item > .dac-nav-link";
+
// Add the secondary horizontal nav item, if provided
- var $selectedSecondNav = $("div#nav-x ul.nav-x a.selected").clone().removeClass("selected");
+ var $selectedSecondNav = $(".dac-nav-secondary .dac-nav-link.selected").clone()
+ .attr('class', 'dac-header-crumbs-link');
+
if ($selectedSecondNav.length) {
- $breadcrumbUl.prepend($("<li>").append($selectedSecondNav))
+ $breadcrumbUl.prepend($('<li class="dac-header-crumbs-item">').append($selectedSecondNav));
}
+
// Add the primary horizontal nav
- var $selectedFirstNav = $("div#header-wrap ul.nav-x a.selected").clone().removeClass("selected");
+ var $selectedFirstNav = $(primaryNavLink + ".selected, " + primaryNavLink + ".has-subnav").clone()
+ .attr('class', 'dac-header-crumbs-link');
+
// If there's no header nav item, use the logo link and title from alt text
if ($selectedFirstNav.length < 1) {
- $selectedFirstNav = $("<a>")
+ $selectedFirstNav = $('<a class="dac-header-crumbs-link">')
.attr('href', $("div#header .logo a").attr('href'))
.text($("div#header .logo img").attr('alt'));
}
- $breadcrumbUl.prepend($("<li>").append($selectedFirstNav));
+ $breadcrumbUl.prepend($('<li class="dac-header-crumbs-item">').append($selectedFirstNav));
}
@@ -809,22 +783,25 @@
enabled = false;
}
writeCookie("fullscreen", enabled, null);
- setNavBarLeftPos();
+ setNavBarDimensions();
resizeNav(delay);
- updateSideNavPosition();
+ updateSideNavDimensions();
setTimeout(initSidenavHeightResize,delay);
}
-
-function setNavBarLeftPos() {
+// TODO: Refactor into a closure.
+var navBarLeftPos;
+var navBarWidth;
+function setNavBarDimensions() {
navBarLeftPos = $('#body-content').offset().left;
+ navBarWidth = $('#side-nav').width();
}
-function updateSideNavPosition() {
+function updateSideNavDimensions() {
var newLeft = $(window).scrollLeft() - navBarLeftPos;
- $('#devdoc-nav').css({left: -newLeft});
- $('#devdoc-nav .totop').css({left: -(newLeft - parseInt($('#side-nav').css('margin-left')))});
+ $('#devdoc-nav').css({left: -newLeft, width: navBarWidth});
+ $('#devdoc-nav .totop').css({left: -(newLeft - parseInt($('#side-nav').css('padding-left')))});
}
// TODO: use $(document).ready instead
@@ -858,7 +835,7 @@
-/* ######### RESIZE THE SIDENAV HEIGHT ########## */
+/* ######### RESIZE THE SIDENAV ########## */
function resizeNav(delay) {
var $nav = $("#devdoc-nav");
@@ -874,7 +851,7 @@
// get the height of space between nav and top of window.
// Could be either margin or top position, depending on whether the nav is fixed.
- var topMargin = (parseInt($nav.css('margin-top')) || parseInt($nav.css('top'))) + 1;
+ var topMargin = (parseInt($nav.css('top')) || 20) + 1;
// add 1 for the #side-nav bottom margin
// Depending on whether the header is visible, set the side nav's height.
@@ -889,7 +866,9 @@
$scrollPanes = $(".scroll-pane");
- if ($scrollPanes.length > 1) {
+ if ($window.width() < 720) {
+ $nav.css('height', '');
+ } else if ($scrollPanes.length > 1) {
// subtract the height of the api level widget and nav swapper from the available nav height
navHeight -= ($('#api-nav-header').outerHeight(true) + $('#nav-swap').outerHeight(true));
@@ -957,7 +936,7 @@
function reInitScrollbars() {
var pane = $(".scroll-pane").each(function(){
var api = $(this).data('jsp');
- if (!api) { setTimeout(reInitScrollbars,300); return;}
+ if (!api) {return;}
api.reinitialise( {verticalGutter:0} );
});
$(".scroll-pane").removeAttr("tabindex"); // get rid of tabindex added by jscroller
@@ -993,6 +972,7 @@
/** Scroll the jScrollPane to make the currently selected item visible
This is called when the page finished loading. */
function scrollIntoView(nav) {
+ return;
var $nav = $("#"+nav);
var element = $nav.jScrollPane({/* ...settings... */});
var api = element.data('jsp');
@@ -1068,39 +1048,45 @@
/* Sets the vertical scoll position at which the sticky bar should appear.
This method is called to reset the position when search results appear or hide */
function setStickyTop() {
- stickyTop = $('#header-wrapper').outerHeight() - $('#sticky-header').outerHeight();
+ stickyTop = $('#header-wrapper').outerHeight() - $('#header > .dac-header-inner').outerHeight();
}
/*
* Displays sticky nav bar on pages when dac header scrolls out of view
*/
$(window).scroll(function(event) {
-
- setStickyTop();
- var hiding = false;
- var $stickyEl = $('#sticky-header');
- var $menuEl = $('.menu-container');
- // Exit if there's no sidenav
- if ($('#side-nav').length == 0) return;
// Exit if the mouse target is a DIV, because that means the event is coming
// from a scrollable div and so there's no need to make adjustments to our layout
if ($(event.target).nodeName == "DIV") {
return;
}
+ checkSticky();
+});
+
+function checkSticky() {
+ setStickyTop();
+ var $headerEl = $('#header');
+ // Exit if there's no sidenav
+ if ($('#side-nav').length == 0) return;
+
var top = $(window).scrollTop();
// we set the navbar fixed when the scroll position is beyond the height of the site header...
- var shouldBeSticky = top >= stickyTop;
+ var shouldBeSticky = top > stickyTop;
// ... except if the document content is shorter than the sidenav height.
// (this is necessary to avoid crazy behavior on OSX Lion due to overscroll bouncing)
if ($("#doc-col").height() < $("#side-nav").height()) {
shouldBeSticky = false;
}
+ // Nor on mobile
+ if (window.innerWidth < 720) {
+ shouldBeSticky = false;
+ }
// Account for horizontal scroll
var scrollLeft = $(window).scrollLeft();
// When the sidenav is fixed and user scrolls horizontally, reposition the sidenav to match
if (sticky && (scrollLeft != prevScrollLeft)) {
- updateSideNavPosition();
+ updateSideNavDimensions();
prevScrollLeft = scrollLeft;
}
@@ -1113,41 +1099,29 @@
// If sticky header visible and position is now near top, hide sticky
if (sticky && !shouldBeSticky) {
sticky = false;
- hiding = true;
// make the sidenav static again
$('#devdoc-nav')
- .removeClass('fixed')
- .css({'width':'auto','margin':''})
- .prependTo('#side-nav');
+ .removeClass('fixed')
+ .css({'width':'auto','margin':''});
// delay hide the sticky
- $menuEl.removeClass('sticky-menu');
- $stickyEl.fadeOut(250);
- hiding = false;
+ $headerEl.removeClass('is-sticky');
// update the sidenaav position for side scrolling
- updateSideNavPosition();
+ updateSideNavDimensions();
} else if (!sticky && shouldBeSticky) {
sticky = true;
- $stickyEl.fadeIn(10);
- $menuEl.addClass('sticky-menu');
+ $headerEl.addClass('is-sticky');
// make the sidenav fixed
- var width = $('#devdoc-nav').width();
$('#devdoc-nav')
- .addClass('fixed')
- .css({'width':width+'px'})
- .prependTo('#body-content');
+ .addClass('fixed');
// update the sidenaav position for side scrolling
- updateSideNavPosition();
+ updateSideNavDimensions();
- } else if (hiding && top < 15) {
- $menuEl.removeClass('sticky-menu');
- $stickyEl.hide();
- hiding = false;
}
resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
-});
+}
/*
* Manages secion card states and nav resize to conclude loading
@@ -1352,13 +1326,13 @@
function changeNavLang(lang) {
- var $links = $("#devdoc-nav,#header,#nav-x,.training-nav-top,.content-footer").find("a["+lang+"-lang]");
- $links.each(function(i){ // for each link with a translation
+ if (lang === 'en') { return; }
+
+ var $links = $('a[' + lang + '-lang]');
+ $links.each(function(){ // for each link with a translation
var $link = $(this);
- if (lang != "en") { // No need to worry about English, because a language change invokes new request
- // put the desired language from the attribute as the text
- $link.text($link.attr(lang+"-lang"))
- }
+ // put the desired language from the attribute as the text
+ $link.text($link.attr(lang + '-lang'))
});
}
@@ -1841,12 +1815,11 @@
// if there are api results
if ((gMatches.length > 0) || (gGoogleMatches.length > 0)) {
// reveal suggestion list
- $('.suggest-card.dummy').show();
$('.suggest-card.reference').show();
var listIndex = 0; // list index position
// reset the lists
- $(".search_filtered_wrapper.reference li").remove();
+ $(".suggest-card.reference li").remove();
// ########### ANDROID RESULTS #############
if (gMatches.length > 0) {
@@ -1876,13 +1849,12 @@
}
} else {
$('.suggest-card.reference').hide();
- $('.suggest-card.dummy').hide();
}
// ########### JD DOC RESULTS #############
if (gDocsMatches.length > 0) {
// reset the lists
- $(".search_filtered_wrapper.docs li").remove();
+ $(".suggest-card:not(.reference) li").remove();
// determine google results to show
// NOTE: The order of the conditions below for the sugg.type MUST BE SPECIFIC:
@@ -1947,7 +1919,7 @@
}
} else {
- $('.search_filtered_wrapper.docs .suggest-card:not(.dummy)').hide(300);
+ $('.suggest-card:not(.reference)').hide(300);
}
}
@@ -1971,14 +1943,14 @@
// show/hide the close button
if (text != '') {
- $(".search .close").removeClass("hide");
+ $("#search-close").removeClass("hide");
} else {
- $(".search .close").addClass("hide");
+ $("#search-close").addClass("hide");
}
// 27 = esc
if (e.keyCode == 27) {
// close all search results
- if (kd) $('.search .close').trigger('click');
+ if (kd) $('#search-close').trigger('click');
return true;
}
// 13 = enter
@@ -2129,9 +2101,8 @@
// Search for matching JD docs
if (text.length >= 2) {
- // Regex to match only the beginning of a word
- var textRegex = new RegExp("\\b" + text.toLowerCase(), "g");
-
+ // match only the beginning of a word
+ var queryStr = text.toLowerCase();
// Search for Training classes
for (var i=0; i<TRAINING_RESOURCES.length; i++) {
@@ -2145,7 +2116,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2155,7 +2126,7 @@
if ((s.lang == currentLang) &&
(!(s.type == "training" && s.url.indexOf("index.html") == -1) || matched)) {
// it matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2179,7 +2150,8 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
+
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2187,7 +2159,7 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2211,7 +2183,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2219,7 +2191,7 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2243,7 +2215,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2251,7 +2223,7 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2275,7 +2247,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2283,7 +2255,7 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2307,7 +2279,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2315,7 +2287,7 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2339,7 +2311,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2347,7 +2319,7 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2370,7 +2342,7 @@
// Check if query matches any tags; work backwards toward 1 to assist ranking
for (var j = s.keywords.length - 1; j >= 0; j--) {
// it matches a tag
- if (s.keywords[j].toLowerCase().match(textRegex)) {
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_tag = j + 1; // add 1 to index position
}
@@ -2378,7 +2350,38 @@
// Check if query matches the doc title, but only for current language
if (s.lang == currentLang) {
// if query matches the doc title.t
- if (s.title.toLowerCase().match(textRegex)) {
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
+ matched = true;
+ s.matched_title = 1;
+ }
+ }
+ if (matched) {
+ gDocsMatches[matchedCountDocs] = s;
+ matchedCountDocs++;
+ }
+ }
+
+ // Search for Preview Guides
+ for (var i=0; i<PREVIEW_RESOURCES.length; i++) {
+ // current search comparison, with counters for tag and title,
+ // used later to improve ranking
+ var s = PREVIEW_RESOURCES[i];
+ s.matched_tag = 0;
+ s.matched_title = 0;
+ var matched = false;
+
+ // Check if query matches any tags; work backwards toward 1 to assist ranking
+ for (var j = s.keywords.length - 1; j >= 0; j--) {
+ // it matches a tag
+ if (s.keywords[j].toLowerCase().indexOf(queryStr) == 0) {
+ matched = true;
+ s.matched_tag = j + 1; // add 1 to index position
+ }
+ }
+ // Check if query matches the doc title, but only for current language
+ if (s.lang == currentLang) {
+ // if query matches the doc title
+ if (s.title.toLowerCase().indexOf(queryStr) == 0) {
matched = true;
s.matched_title = 1;
}
@@ -2536,7 +2539,7 @@
{
if (!focused) {
if(obj.value == ""){
- $(".search .close").addClass("hide");
+ $("#search-close").addClass("hide");
}
$(".suggest-card").hide();
}
@@ -2553,7 +2556,7 @@
function hideResults() {
$("#searchResults").slideUp('fast', setStickyTop);
- $(".search .close").addClass("hide");
+ $("#search-close").addClass("hide");
location.hash = '';
$("#search_autocomplete").val("").blur();
@@ -2670,7 +2673,7 @@
} else {
// first time loading search results for this page
$('#searchResults').slideDown('slow', setStickyTop);
- $(".search .close").removeClass("hide");
+ $("#search-close").removeClass("hide");
loadSearchResults();
}
}, true);
@@ -2714,7 +2717,7 @@
searchControl.execute(query);
$('#searchResults').slideDown('slow', setStickyTop);
$("#search_autocomplete").focus();
- $(".search .close").removeClass("hide");
+ $("#search-close").removeClass("hide");
updateResultTitle(query);
});
@@ -3146,6 +3149,10 @@
me.node = new Object();
me.node.li = document.getElementById(navtree_id);
+ if (!me.node.li) {
+ return;
+ }
+
me.node.children_data = root_nodes;
me.node.children = new Array();
me.node.children_ul = document.createElement("ul");
@@ -3536,6 +3543,10 @@
var addedPageResources = {};
$(document).ready(function() {
+ // Need to initialize hero carousel before other sections for dedupe
+ // to work correctly.
+ $('[data-carousel-query]').dacCarouselQuery();
+
$('.resource-widget').each(function() {
initResourceWidget(this);
});
@@ -3545,8 +3556,8 @@
showing lines that are cut off. This works with the css ellipsis
classes to fade last text line and apply an ellipsis char. */
- //card text currently uses 15px line height.
- var lineHeight = 15;
+ //card text currently uses 20px line height.
+ var lineHeight = 20;
$('.card-info .text').ellipsisfade(lineHeight);
});
@@ -3562,21 +3573,20 @@
isCarousel = $widget.hasClass('resource-carousel-layout'),
isStack = $widget.hasClass('resource-stack-layout');
- // find size of widget by pulling out its class name
- var sizeCols = 1;
+ // remove illegal col-x class which is not relevant anymore thanks to responsive styles.
var m = $widget.get(0).className.match(/\bcol-(\d+)\b/);
- if (m) {
- sizeCols = parseInt(m[1], 10);
+ if (m && !$widget.is('.cols > *')) {
+ $widget.removeClass('col-' + m[1]);
}
var opts = {
cardSizes: ($widget.data('cardsizes') || '').split(','),
maxResults: parseInt($widget.data('maxresults') || '100', 10),
+ initialResults: $widget.data('initialResults'),
itemsPerPage: $widget.data('itemsperpage'),
sortOrder: $widget.data('sortorder'),
query: $widget.data('query'),
section: $widget.data('section'),
- sizeCols: sizeCols,
/* Added by LFL 6/6/14 */
resourceStyle: $widget.data('resourcestyle') || 'card',
stackSort: $widget.data('stacksort') || 'true'
@@ -3604,7 +3614,7 @@
/* Initializes a Resource Carousel Widget */
function drawResourcesCarouselWidget($widget, opts, resources) {
$widget.empty();
- var plusone = true; //always show plusone on carousel
+ var plusone = false; // stop showing plusone buttons on cards
$widget.addClass('resource-card slideshow-container')
.append($('<a>').addClass('slideshow-prev').text('Prev'))
@@ -3642,7 +3652,7 @@
function drawResourcesStackWidget($widget, opts, resources, sections) {
// Don't empty widget, grab all items inside since they will be the first
// items stacked, followed by the resource query
- var plusone = true; //by default show plusone on section cards
+ var plusone = false; // stop showing plusone buttons on cards
var cards = $widget.find('.resource-card').detach().toArray();
var numStacks = opts.numStacks || 1;
var $stacks = [];
@@ -3737,22 +3747,49 @@
return $el;
}
+
+ function createResponsiveFlowColumn(cardSize) {
+ var cardWidth = parseInt(cardSize.match(/(\d+)/)[1], 10);
+ var column = $('<div>').addClass('col-' + (cardWidth / 3) + 'of6');
+ if (cardWidth < 9) {
+ column.addClass('col-tablet-1of2');
+ } else if (cardWidth > 9 && cardWidth < 18) {
+ column.addClass('col-tablet-1of1');
+ }
+ if (cardWidth < 18) {
+ column.addClass('col-mobile-1of1')
+ }
+ return column;
+ }
/* Initializes a flow widget, see distribute.scss for generating accompanying css */
function drawResourcesFlowWidget($widget, opts, resources) {
- $widget.empty();
+ $widget.empty().addClass('cols');
var cardSizes = opts.cardSizes || ['6x6'];
+ var initialResults = opts.initialResults || resources.length;
var i = 0, j = 0;
- var plusone = true; // by default show plusone on resource cards
+ var plusone = false; // stop showing plusone buttons on cards
+ var cardParent = $widget;
while (i < resources.length) {
+
+ if (i === initialResults && initialResults < resources.length) {
+ // Toggle remaining cards
+ cardParent = $('<div class="dac-toggle-content clearfix">').appendTo($widget);
+ $widget.addClass('dac-toggle');
+ $('<div class="col-1of1 dac-section-links dac-text-center">')
+ .append(
+ $('<div class="dac-section-link" data-toggle="section">')
+ .append('<span class="dac-toggle-expand">More<i class="dac-sprite dac-auto-unfold-more"></i></span>')
+ .append('<span class="dac-toggle-collapse">Less<i class="dac-sprite dac-auto-unfold-less"></i></span>')
+ )
+ .appendTo($widget)
+ }
+
var cardSize = cardSizes[j++ % cardSizes.length];
cardSize = cardSize.replace(/^\s+|\s+$/,'');
- // Some card sizes do not get a plusone button, such as where space is constrained
- // or for cards commonly embedded in docs (to improve overall page speed).
- plusone = !((cardSize == "6x2") || (cardSize == "6x3") ||
- (cardSize == "9x2") || (cardSize == "9x3") ||
- (cardSize == "12x2") || (cardSize == "12x3"));
+
+ var column = createResponsiveFlowColumn(cardSize).appendTo(cardParent);
// A stack has a third dimension which is the number of stacked items
var isStack = cardSize.match(/(\d+)x(\d+)x(\d+)/);
@@ -3763,7 +3800,7 @@
// Create a stack container which should have the dimensions defined
// by the product of the items inside.
$stackDiv = $('<div>').addClass('resource-card-stack resource-card-' + isStack[1]
- + 'x' + isStack[2] * isStack[3]) .appendTo($widget);
+ + 'x' + isStack[2] * isStack[3]) .appendTo(column);
}
// Build each stack item or just a single item
@@ -3785,7 +3822,7 @@
stackCount = 0;
}
- $card.appendTo($stackDiv || $widget);
+ $card.appendTo($stackDiv || column);
} while (++i < resources.length && stackCount > 0);
}
@@ -3800,6 +3837,10 @@
}
function buildResourceList(opts) {
+ return $.queryResources(opts);
+ }
+
+ $.queryResources = function(opts) {
var maxResults = opts.maxResults || 100;
var query = opts.query || '';
@@ -3848,8 +3889,9 @@
// add to list of already added indices
for (var j = 0; j < resources.length; j++) {
- // console.log(resources[j].title);
- addedResourceIndices[resources[j].index] = 1;
+ if (resources[j]) {
+ addedResourceIndices[resources[j].index] = 1;
+ }
}
// concat to final results list
@@ -3891,7 +3933,7 @@
function getResourceNotAlreadyAddedFilter(addedResourceIndices) {
return function(resource) {
- return !addedResourceIndices[resource.index];
+ return resource && !addedResourceIndices[resource.index];
};
}
@@ -4020,6 +4062,12 @@
imgUrl = toRoot + imgUrl;
}
+ if (resource.type === 'youtube') {
+ $('<div>').addClass('play-button')
+ .append($('<i class="dac-sprite dac-play-white">'))
+ .appendTo(this);
+ }
+
$('<div>').addClass('card-bg')
.css('background-image', 'url(' + (imgUrl || toRoot +
'assets/images/resource-card-default-android.jpg') + ')')
@@ -4155,7 +4203,7 @@
$this.parent().siblings().each(function ()
{
if ($(this).is(":visible")) {
- var h = $(this).height();
+ var h = $(this).outerHeight(true);
remainingHeight = remainingHeight - h;
}
});
@@ -4354,3 +4402,895 @@
}
}
})();
+
+/**
+ * Auto TOC
+ *
+ * Upgrades h2s on the page to have a rule and be toggle-able on mobile.
+ */
+(function($) {
+ var upgraded = false;
+ var h2Titles;
+
+ function initWidget() {
+ // add HRs below all H2s (except for a few other h2 variants)
+ // Consider doing this with css instead.
+ h2Titles = $('h2').not('#qv h2, #tb h2, .sidebox h2, #devdoc-nav h2, h2.norule');
+ h2Titles.css({marginBottom:0}).after('<hr/>');
+
+ // Exit early if on older browser.
+ if (!window.matchMedia) {
+ return;
+ }
+
+ // Only run logic in mobile layout.
+ var query = window.matchMedia('(max-width: 719px)');
+ if (query.matches) {
+ makeTogglable();
+ } else {
+ query.addListener(makeTogglable);
+ }
+ }
+
+ function makeTogglable() {
+ // Only run this logic once.
+ if (upgraded) { return; }
+ upgraded = true;
+
+ // Only make content h2s togglable.
+ var contentTitles = h2Titles.filter('#jd-content *');
+
+ // If there are more than 1
+ if (contentTitles.size() < 2) {
+ return;
+ }
+
+ contentTitles.each(function() {
+ // Find all the relevant nodes.
+ var $title = $(this);
+ var $hr = $title.next();
+ var $contents = $hr.nextUntil('h2, .next-docs');
+ var $section = $($title)
+ .add($hr)
+ .add($title.prev('a[name]'))
+ .add($contents);
+ var $anchor = $section.first().prev();
+ var anchorMethod = 'after';
+ if ($anchor.length === 0) {
+ $anchor = $title.parent();
+ anchorMethod = 'prepend';
+ }
+
+ // Some h2s are in their own container making it pretty hard to find the end, so skip.
+ if ($contents.length === 0) {
+ return;
+ }
+
+ // Remove from DOM before messing with it. DOM is slow!
+ $section.detach();
+
+ // Add mobile-only expand arrows.
+ $title.prepend('<span class="dac-visible-mobile-inline-block">' +
+ '<i class="dac-toggle-expand dac-sprite dac-expand-more-black"></i>' +
+ '<i class="dac-toggle-collapse dac-sprite dac-expand-less-black"></i>' +
+ '</span>')
+ .attr('data-toggle', 'section');
+
+ // Wrap in magic markup.
+ $section = $section.wrapAll('<div class="dac-toggle dac-mobile">').parent();
+ $contents.wrapAll('<div class="dac-toggle-content"><div>'); // extra div used for max-height calculation.
+
+ // Pre-expand section if requested.
+ if ($title.hasClass('is-expanded')) {
+ $section.addClass('is-expanded');
+ }
+
+ // Pre-expand section if targetted by hash.
+ if (location.hash && $section.find(location.hash).length) {
+ $section.addClass('is-expanded');
+ }
+
+ // Add it back to the dom.
+ $anchor[anchorMethod].call($anchor, $section);
+ });
+ }
+
+ $(function() {
+ initWidget();
+ });
+})(jQuery);
+
+(function($) {
+ 'use strict';
+
+ /**
+ * Toggle Floating Label state.
+ * @param {HTMLElement} el - The DOM element.
+ * @param options
+ * @constructor
+ */
+ function FloatingLabel(el, options) {
+ this.el = $(el);
+ this.options = $.extend({}, FloatingLabel.DEFAULTS_, options);
+ this.group = this.el.closest('.dac-form-input-group');
+ this.input = this.group.find('.dac-form-input');
+
+ this.checkValue_ = this.checkValue_.bind(this);
+ this.checkValue_();
+
+ this.input.on('focus', function() {
+ this.group.addClass('dac-focused');
+ }.bind(this));
+ this.input.on('blur', function() {
+ this.group.removeClass('dac-focused');
+ this.checkValue_();
+ }.bind(this));
+ this.input.on('keyup', this.checkValue_);
+ }
+
+ /**
+ * The label is moved out of the textbox when it has a value.
+ */
+ FloatingLabel.prototype.checkValue_ = function() {
+ if (this.input.val().length) {
+ this.group.addClass('dac-has-value');
+ } else {
+ this.group.removeClass('dac-has-value');
+ }
+ };
+
+ /**
+ * jQuery plugin
+ * @param {object} options - Override default options.
+ */
+ $.fn.dacFloatingLabel = function(options) {
+ return this.each(function() {
+ new FloatingLabel(this, options);
+ });
+ };
+
+ $(document).on('ready.aranja', function() {
+ $('.dac-form-floatlabel').each(function() {
+ $(this).dacFloatingLabel($(this).data());
+ });
+ });
+})(jQuery);
+
+/* global toRoot, CAROUSEL_OVERRIDE */
+(function($) {
+ // Ordering matters
+ var TAG_MAP = [
+ {from: 'developerstory', to: 'Android Developer Story'},
+ {from: 'googleplay', to: 'Google Play'}
+ ];
+
+ function DacCarouselQuery(el) {
+ this.el = $(el);
+
+ var opts = this.el.data();
+ opts.maxResults = parseInt(opts.maxResults || '100', 10);
+ opts.query = opts.carouselQuery;
+ var resources = $.queryResources(opts);
+
+ this.el.empty();
+ $(resources).map(function() {
+ var resource = $.extend({}, this, CAROUSEL_OVERRIDE[this.url]);
+ var slide = $('<article class="dac-expand dac-hero">');
+ var image = cleanUrl(resource.heroImage || resource.image);
+ var fullBleed = image && !resource.heroColor;
+
+ // Configure background
+ slide.css({
+ backgroundImage: fullBleed ? 'url(' + image + ')' : '',
+ backgroundColor: resource.heroColor || ''
+ });
+
+ // Should copy be inverted
+ slide.toggleClass('dac-invert', resource.heroInvert || fullBleed);
+ slide.toggleClass('dac-darken', fullBleed);
+
+ // Should be clickable
+ slide.append($('<a class="dac-hero-carousel-action">').attr('href', cleanUrl(resource.url)));
+
+ var cols = $('<div class="cols dac-hero-content">');
+
+ // inline image column
+ var rightCol = $('<div class="col-1of2 col-push-1of2 dac-hero-figure">')
+ .appendTo(cols);
+
+ if (!fullBleed && image) {
+ rightCol.append($('<img>').attr('src', image));
+ }
+
+ // info column
+ $('<div class="col-1of2 col-pull-1of2">')
+ .append($('<div class="dac-hero-tag">').text(formatTag(resource)))
+ .append($('<h1 class="dac-hero-title">').text(formatTitle(resource)))
+ .append($('<p class="dac-hero-description">').text(resource.summary))
+ .append($('<a class="dac-hero-cta">')
+ .text(formatCTA(resource))
+ .attr('href', cleanUrl(resource.url))
+ .prepend($('<span class="dac-sprite dac-auto-chevron">'))
+ )
+ .appendTo(cols);
+
+ slide.append(cols.wrap('<div class="wrap">').parent());
+ return slide[0];
+ }).prependTo(this.el);
+
+ // Pagination element.
+ this.el.append('<div class="dac-hero-carousel-pagination"><div class="wrap" data-carousel-pagination>');
+
+ this.el.dacCarousel();
+ }
+
+ function cleanUrl(url) {
+ if (url && url.indexOf('//') === -1) {
+ url = toRoot + url;
+ }
+ return url;
+ }
+
+ function formatTag(resource) {
+ // Hmm, need a better more scalable solution for this.
+ for (var i = 0, mapping; mapping = TAG_MAP[i]; i++) {
+ if (resource.tags.indexOf(mapping.from) > -1) {
+ return mapping.to;
+ }
+ }
+ return resource.type;
+ }
+
+ function formatTitle(resource) {
+ return resource.title.replace(/android developer story: /i, '');
+ }
+
+ function formatCTA(resource) {
+ return resource.type === 'youtube' ? 'Watch the video' : 'Learn more';
+ }
+
+ // jQuery plugin
+ $.fn.dacCarouselQuery = function() {
+ return this.each(function() {
+ var el = $(this);
+ var data = el.data('dac.carouselQuery');
+
+ if (!data) { el.data('dac.carouselQuery', (data = new DacCarouselQuery(el))); }
+ });
+ };
+
+ // Data API
+ $(function() {
+ $('[data-carousel-query]').dacCarouselQuery();
+ });
+})(jQuery);
+
+(function($) {
+ /**
+ * A CSS based carousel, inspired by SequenceJS.
+ * @param {jQuery} el
+ * @param {object} options
+ * @constructor
+ */
+ function DacCarousel(el, options) {
+ this.el = $(el);
+ this.options = options = $.extend({}, DacCarousel.OPTIONS, this.el.data(), options || {});
+ this.frames = this.el.find(options.frameSelector);
+ this.count = this.frames.size();
+ this.current = options.start;
+
+ this.initPagination();
+ this.initEvents();
+ this.initFrame();
+ }
+
+ DacCarousel.OPTIONS = {
+ auto: true,
+ autoTime: 10000,
+ autoMinTime: 5000,
+ btnPrev: '[data-carousel-prev]',
+ btnNext: '[data-carousel-next]',
+ frameSelector: 'article',
+ loop: true,
+ start: 0,
+ swipeThreshold: 160,
+ pagination: '[data-carousel-pagination]'
+ };
+
+ DacCarousel.prototype.initPagination = function() {
+ this.pagination = $([]);
+ if (!this.options.pagination) { return; }
+
+ var pagination = $('<ul class="dac-pagination">');
+ var parent = this.el;
+ if (typeof this.options.pagination === 'string') { parent = this.el.find(this.options.pagination); }
+
+ if (this.count > 1) {
+ for (var i = 0; i < this.count; i++) {
+ var li = $('<li class="dac-pagination-item">').text(i);
+ if (i === this.options.start) { li.addClass('active'); }
+ li.click(this.go.bind(this, i));
+
+ pagination.append(li);
+ }
+ this.pagination = pagination.children();
+ parent.append(pagination);
+ }
+ };
+
+ DacCarousel.prototype.initEvents = function() {
+ var that = this;
+
+ this.touch = {
+ start: {x: 0, y: 0},
+ end: {x: 0, y: 0}
+ };
+
+ this.el.on('touchstart', this.touchstart_.bind(this));
+ this.el.on('touchend', this.touchend_.bind(this));
+ this.el.on('touchmove', this.touchmove_.bind(this));
+
+ this.el.hover(function() {
+ that.pauseRotateTimer();
+ }, function() {
+ that.startRotateTimer();
+ });
+
+ $(this.options.btnPrev).click(function(e) {
+ e.preventDefault();
+ that.prev();
+ });
+
+ $(this.options.btnNext).click(function(e) {
+ e.preventDefault();
+ that.next();
+ });
+ };
+
+ DacCarousel.prototype.touchstart_ = function(event) {
+ var t = event.originalEvent.touches[0];
+ this.touch.start = {x: t.screenX, y: t.screenY};
+ };
+
+ DacCarousel.prototype.touchend_ = function() {
+ var deltaX = this.touch.end.x - this.touch.start.x;
+ var deltaY = Math.abs(this.touch.end.y - this.touch.start.y);
+ var shouldSwipe = (deltaY < Math.abs(deltaX)) && (Math.abs(deltaX) >= this.options.swipeThreshold);
+
+ if (shouldSwipe) {
+ if (deltaX > 0) {
+ this.prev();
+ } else {
+ this.next();
+ }
+ }
+ };
+
+ DacCarousel.prototype.touchmove_ = function(event) {
+ var t = event.originalEvent.touches[0];
+ this.touch.end = {x: t.screenX, y: t.screenY};
+ };
+
+ DacCarousel.prototype.initFrame = function() {
+ this.frames.removeClass('active').eq(this.options.start).addClass('active');
+ };
+
+ DacCarousel.prototype.startRotateTimer = function() {
+ if (!this.options.auto || this.rotateTimer) { return; }
+ this.rotateTimer = setTimeout(this.next.bind(this), this.options.autoTime);
+ };
+
+ DacCarousel.prototype.pauseRotateTimer = function() {
+ clearTimeout(this.rotateTimer);
+ this.rotateTimer = null;
+ };
+
+ DacCarousel.prototype.prev = function() {
+ this.go(this.current - 1);
+ };
+
+ DacCarousel.prototype.next = function() {
+ this.go(this.current + 1);
+ };
+
+ DacCarousel.prototype.go = function(next) {
+ // Figure out what the next slide is.
+ while (this.count > 0 && next >= this.count) { next -= this.count; }
+ while (next < 0) { next += this.count; }
+
+ // Cancel if we're already on that slide.
+ if (next === this.current) { return; }
+
+ // Prepare next slide.
+ this.frames.eq(next).removeClass('out');
+
+ // Recalculate styles before starting slide transition.
+ this.el.resolveStyles();
+ // Update pagination
+ this.pagination.removeClass('active').eq(next).addClass('active');
+
+ // Transition out current frame
+ this.frames.eq(this.current).toggleClass('active out');
+
+ // Transition in a new frame
+ this.frames.eq(next).toggleClass('active');
+
+ this.current = next;
+ };
+
+ // Helper which resolves new styles for an element, so it can start transitioning
+ // from the new values.
+ $.fn.resolveStyles = function() {
+ /*jshint expr:true*/
+ this[0] && this[0].offsetTop;
+ return this;
+ };
+
+ // jQuery plugin
+ $.fn.dacCarousel = function() {
+ this.each(function() {
+ var $el = $(this);
+ $el.data('dac-carousel', new DacCarousel(this));
+ });
+ return this;
+ };
+
+ // Data API
+ $(function() {
+ $('[data-carousel]').dacCarousel();
+ });
+})(jQuery);
+
+(function($) {
+ 'use strict';
+
+ function Modal(el, options) {
+ this.el = $(el);
+ this.options = $.extend({}, ToggleModal.DEFAULTS_, options);
+ this.isOpen = false;
+
+ this.el.on('click', function(event) {
+ if (!$.contains($('.dac-modal-window')[0], event.target)) {
+ return this.el.trigger('modal-close');
+ }
+ }.bind(this));
+
+ this.el.on('modal-open', this.open_.bind(this));
+ this.el.on('modal-close', this.close_.bind(this));
+ this.el.on('modal-toggle', this.toggle_.bind(this));
+ }
+
+ Modal.prototype.toggle_ = function() {
+ this.el.trigger('modal-' + (this.isOpen ? 'close' : 'open'));
+ };
+
+ Modal.prototype.close_ = function() {
+ this.el.removeClass('dac-active');
+ $('body').removeClass('dac-modal-open');
+ this.isOpen = false;
+ };
+
+ Modal.prototype.open_ = function() {
+ this.el.addClass('dac-active');
+ $('body').addClass('dac-modal-open');
+ this.isOpen = true;
+ };
+
+ function ToggleModal(el, options) {
+ this.el = $(el);
+ this.options = $.extend({}, ToggleModal.DEFAULTS_, options);
+ this.modal = this.options.modalToggle ? $('[data-modal="' + this.options.modalToggle + '"]') :
+ this.el.closest('[data-modal]');
+
+ this.el.on('click', this.clickHandler_.bind(this));
+ }
+
+ ToggleModal.prototype.clickHandler_ = function(event) {
+ event.preventDefault();
+ this.modal.trigger('modal-toggle');
+ };
+
+ /**
+ * jQuery plugin
+ * @param {object} options - Override default options.
+ */
+ $.fn.dacModal = function(options) {
+ return this.each(function() {
+ new Modal(this, options);
+ });
+ };
+
+ $.fn.dacToggleModal = function(options) {
+ return this.each(function() {
+ new ToggleModal(this, options);
+ });
+ };
+
+ /**
+ * Data Attribute API
+ */
+ $(document).on('ready.aranja', function() {
+ $('[data-modal]').each(function() {
+ $(this).dacModal($(this).data());
+ });
+
+ $('[data-modal-toggle]').each(function() {
+ $(this).dacToggleModal($(this).data());
+ });
+ });
+})(jQuery);
+
+(function($) {
+ 'use strict';
+
+ /**
+ * Toggle the visabilty of the mobile navigation.
+ * @param {HTMLElement} el - The DOM element.
+ * @param options
+ * @constructor
+ */
+ function ToggleNav(el, options) {
+ this.el = $(el);
+ this.options = $.extend({}, ToggleNav.DEFAULTS_, options);
+ this.options.target = [this.options.navigation];
+
+ if (this.options.body) {this.options.target.push('body')}
+ if (this.options.dimmer) {this.options.target.push(this.options.dimmer)}
+
+ this.el.on('click', this.clickHandler_.bind(this));
+ }
+
+ /**
+ * ToggleNav Default Settings
+ * @type {{body: boolean, dimmer: string, navigation: string, toggleClass: string}}
+ * @private
+ */
+ ToggleNav.DEFAULTS_ = {
+ body: true,
+ dimmer: '.dac-nav-dimmer',
+ navigation: '[data-dac-nav]',
+ toggleClass: 'dac-nav-open'
+ };
+
+ /**
+ * The actual toggle logic.
+ * @param event
+ * @private
+ */
+ ToggleNav.prototype.clickHandler_ = function(event) {
+ event.preventDefault();
+ $(this.options.target.join(', ')).toggleClass(this.options.toggleClass);
+ };
+
+ /**
+ * jQuery plugin
+ * @param {object} options - Override default options.
+ */
+ $.fn.dacToggleMobileNav = function(options) {
+ return this.each(function() {
+ new ToggleNav(this, options);
+ });
+ };
+
+ /**
+ * Data Attribute API
+ */
+ $(window).on('load.aranja', function() {
+ $('[data-dac-toggle-nav]').each(function() {
+ $(this).dacToggleMobileNav($(this).data());
+ });
+ });
+})(jQuery);
+
+(function($) {
+ 'use strict';
+
+ /**
+ * Submit the newsletter form to a Google Form.
+ * @param {HTMLElement} el - The Form DOM element.
+ * @constructor
+ */
+ function NewsletterForm(el) {
+ this.el = $(el);
+ this.form = this.el.find('form');
+ $('<iframe/>').hide()
+ .attr('name', 'dac-newsletter-iframe')
+ .attr('src', '')
+ .insertBefore(this.form);
+ this.form.on('submit', this.submitHandler_.bind(this));
+ }
+
+ /**
+ * Milliseconds until modal has vanished after modal-close is triggered.
+ * @type {number}
+ * @private
+ */
+ NewsletterForm.CLOSE_DELAY_ = 300;
+
+ /**
+ * Switch view to display form after close.
+ * @private
+ */
+ NewsletterForm.prototype.closeHandler_ = function() {
+ setTimeout(function() {
+ this.el.trigger('swap-reset');
+ }.bind(this), NewsletterForm.CLOSE_DELAY_);
+ };
+
+ /**
+ * Reset the modal to initial state.
+ * @private
+ */
+ NewsletterForm.prototype.reset_ = function() {
+ this.form.trigger('reset');
+ this.el.one('modal-close', this.closeHandler_.bind(this));
+ };
+
+ /**
+ * Display a success view on submit.
+ * @private
+ */
+ NewsletterForm.prototype.submitHandler_ = function() {
+ this.el.one('swap-complete', this.reset_.bind(this));
+ this.el.trigger('swap-content');
+ };
+
+ /**
+ * jQuery plugin
+ * @param {object} options - Override default options.
+ */
+ $.fn.dacNewsletterForm = function(options) {
+ return this.each(function() {
+ new NewsletterForm(this, options);
+ });
+ };
+
+ /**
+ * Data Attribute API
+ */
+ $(document).on('ready.aranja', function() {
+ $('[data-newsletter]').each(function() {
+ $(this).dacNewsletterForm();
+ });
+ });
+})(jQuery);
+
+(function($) {
+ 'use strict';
+
+ /**
+ * Smoothly scroll to location on current page.
+ * @param el
+ * @param options
+ * @constructor
+ */
+ function ScrollButton(el, options) {
+ this.el = $(el);
+ this.target = $(this.el.attr('href'));
+ this.options = $.extend({}, ScrollButton.DEFAULTS_, options);
+
+ if (typeof this.options.offset === 'string') {
+ this.options.offset = $(this.options.offset).height();
+ }
+
+ this.el.on('click', this.clickHandler_.bind(this));
+ }
+
+ /**
+ * Default options
+ * @type {{duration: number, easing: string, offset: number, scrollContainer: string}}
+ * @private
+ */
+ ScrollButton.DEFAULTS_ = {
+ duration: 300,
+ easing: 'swing',
+ offset: 0,
+ scrollContainer: 'html, body'
+ };
+
+ /**
+ * Scroll logic
+ * @param event
+ * @private
+ */
+ ScrollButton.prototype.clickHandler_ = function(event) {
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {
+ return;
+ }
+
+ event.preventDefault();
+
+ $(this.options.scrollContainer).animate({
+ scrollTop: this.target.offset().top - this.options.offset
+ }, this.options);
+ };
+
+ /**
+ * jQuery plugin
+ * @param {object} options - Override default options.
+ */
+ $.fn.dacScrollButton = function(options) {
+ return this.each(function() {
+ new ScrollButton(this, options);
+ });
+ };
+
+ /**
+ * Data Attribute API
+ */
+ $(document).on('ready.aranja', function() {
+ $('[data-scroll-button]').each(function() {
+ $(this).dacScrollButton($(this).data());
+ });
+ });
+})(jQuery);
+
+(function($) {
+ 'use strict';
+
+ /**
+ * A component that swaps two dynamic height views with an animation.
+ * Listens for the following events:
+ * * swap-content: triggers SwapContent.swap_()
+ * * swap-reset: triggers SwapContent.reset()
+ * @param el
+ * @param options
+ * @constructor
+ */
+ function SwapContent(el, options) {
+ this.el = $(el);
+ this.options = $.extend({}, SwapContent.DEFAULTS_, options);
+ this.containers = this.el.find(this.options.container);
+ this.initiallyActive = this.containers.children('.' + this.options.activeClass).eq(0);
+ this.el.on('swap-content', this.swap.bind(this));
+ this.el.on('swap-reset', this.reset.bind(this));
+ }
+
+ /**
+ * SwapContent's default settings.
+ * @type {{activeClass: string, container: string, transitionSpeed: number}}
+ * @private
+ */
+ SwapContent.DEFAULTS_ = {
+ activeClass: 'dac-active',
+ container: '[data-swap-container]',
+ transitionSpeed: 500
+ };
+
+ /**
+ * Returns container's visible height.
+ * @param container
+ * @returns {number}
+ */
+ SwapContent.prototype.currentHeight = function(container) {
+ return container.children('.' + this.options.activeClass).outerHeight();
+ };
+
+ /**
+ * Reset to show initial content
+ */
+ SwapContent.prototype.reset = function() {
+ if (!this.initiallyActive.hasClass(this.initiallyActive)) {
+ this.containers.children().toggleClass(this.options.activeClass);
+ }
+ };
+
+ /**
+ * Complete the swap.
+ */
+ SwapContent.prototype.complete = function() {
+ this.containers.height('auto');
+ this.containers.trigger('swap-complete');
+ };
+
+ /**
+ * Perform the swap of content.
+ */
+ SwapContent.prototype.swap = function() {
+ console.log(this.containers);
+ this.containers.each(function(index, container) {
+ container = $(container);
+ container.height(this.currentHeight(container)).children().toggleClass(this.options.activeClass);
+ container.animate({height: this.currentHeight(container)}, this.options.transitionSpeed,
+ this.complete.bind(this));
+ }.bind(this));
+ };
+
+ /**
+ * jQuery plugin
+ * @param {object} options - Override default options.
+ */
+ $.fn.dacSwapContent = function(options) {
+ return this.each(function() {
+ new SwapContent(this, options);
+ });
+ };
+
+ /**
+ * Data Attribute API
+ */
+ $(document).on('ready.aranja', function() {
+ $('[data-swap]').each(function() {
+ $(this).dacSwapContent($(this).data());
+ });
+ });
+})(jQuery);
+
+(function($) {
+ function Toggle(el) {
+ $(el).on('click.dac.togglesection', this.toggle);
+ }
+
+ Toggle.prototype.toggle = function() {
+ var $this = $(this);
+
+ var $parent = getParent($this);
+ var isExpanded = $parent.hasClass('is-expanded');
+
+ transitionMaxHeight($parent.find('.dac-toggle-content'), !isExpanded);
+ $parent.toggleClass('is-expanded');
+
+ return false;
+ };
+
+ function getParent($this) {
+ var selector = $this.attr('data-target');
+
+ if (!selector) {
+ selector = $this.attr('href');
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '');
+ }
+
+ var $parent = selector && $(selector);
+
+ $parent = $parent && $parent.length ? $parent : $this.closest('.dac-toggle');
+
+ return $parent.length ? $parent : $this.parent();
+ }
+
+ /**
+ * Runs a transition of max-height along with responsive styles which hide or expand the element.
+ * @param $el
+ * @param visible
+ */
+ function transitionMaxHeight($el, visible) {
+ var contentHeight = $el.prop('scrollHeight');
+ var targetHeight = visible ? contentHeight : 0;
+ var duration = $el.transitionDuration();
+
+ // If we're hiding, first set the maxHeight we're transitioning from.
+ if (!visible) {
+ $el.css('maxHeight', contentHeight + 'px')
+ .resolveStyles();
+ }
+
+ // Transition to new state
+ $el.css('maxHeight', targetHeight);
+
+ // Reset maxHeight to css value after transition.
+ setTimeout(function() {
+ $el.css('maxHeight', '');
+ }, duration);
+ }
+
+ // Utility to get the transition duration for the element.
+ $.fn.transitionDuration = function() {
+ var d = $(this).css('transitionDuration') || '0s';
+
+ return +(parseFloat(d) * (/ms/.test(d) ? 1 : 1000)).toFixed(0);
+ };
+
+ // jQuery plugin
+ $.fn.toggleSection = function(option) {
+ return this.each(function() {
+ var $this = $(this);
+ var data = $this.data('dac.togglesection');
+ if (!data) {$this.data('dac.togglesection', (data = new Toggle(this)));}
+ if (typeof option === 'string') {data[option].call($this);}
+ });
+ };
+
+ // Data api
+ $(document)
+ .on('click.toggle', '[data-toggle="section"]', Toggle.prototype.toggle);
+})(jQuery);
diff --git a/tools/droiddoc/templates-sdk/class.cs b/tools/droiddoc/templates-sdk/class.cs
index 7aa99f9..44eae97 100644
--- a/tools/droiddoc/templates-sdk/class.cs
+++ b/tools/droiddoc/templates-sdk/class.cs
@@ -667,10 +667,9 @@
<?cs # the next two lines must be exactly like this to be parsed by eclipse ?>
<!-- ========= END OF CLASS DATA ========= -->
<A NAME="navbar_top"></A>
-
-<?cs include:"footer.cs" ?>
</div> <!-- jd-content -->
+<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
<?cs include:"trailer.cs" ?>
diff --git a/tools/droiddoc/templates-sdk/classes.cs b/tools/droiddoc/templates-sdk/classes.cs
index 405892d..32966a0 100644
--- a/tools/droiddoc/templates-sdk/classes.cs
+++ b/tools/droiddoc/templates-sdk/classes.cs
@@ -43,11 +43,12 @@
</table>
<?cs /each ?>
-<?cs include:"footer.cs" ?>
</div><!-- end jd-content -->
+
+<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
<?cs include:"trailer.cs" ?>
</body>
-</html>
\ No newline at end of file
+</html>
diff --git a/tools/droiddoc/templates-sdk/components/masthead.cs b/tools/droiddoc/templates-sdk/components/masthead.cs
index c09dc02..838ddbe 100644
--- a/tools/droiddoc/templates-sdk/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk/components/masthead.cs
@@ -1,10 +1,7 @@
<?cs def:custom_masthead() ?>
-<?cs if:preview ?>
- <?cs call:preview_masthead() ?>
-<?cs else ?>
<a name="top"></a>
-<!-- dialog to prompt lang pref change when loaded from hardcoded URL
+<!-- dialog to prompt lang pref change when loaded from hardcoded URL
<div id="langMessage" style="display:none">
<div>
<div class="lang en">
@@ -52,254 +49,47 @@
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it is in devsite template ?>
<!-- Header -->
<div id="header-wrapper">
- <div id="header"><?cs call:butter_bar() ?>
- <div class="wrap" id="header-wrap">
- <div class="col-3 logo">
- <a href="<?cs var:toroot ?>index.html">
- <img src="<?cs var:toroot ?>assets/images/dac_logo.png"
- srcset="<?cs var:toroot ?>assets/images/dac_logo@2x.png 2x"
- width="123" height="25" alt="Android Developers" />
- </a>
- <div class="btn-quicknav" id="btn-quicknav">
- <a href="#" class="arrow-inactive">Quicknav</a>
- <a href="#" class="arrow-active">Quicknav</a>
- </div>
- </div>
- <ul class="nav-x col-9">
- <li class="design">
- <a href="<?cs var:toroot ?>design/index.html"
- zh-tw-lang="設計"
- zh-cn-lang="设计"
- ru-lang="Проектирование"
- ko-lang="디자인"
- ja-lang="設計"
- es-lang="Diseñar"
- >Design</a></li>
- <li class="develop"><a href="<?cs var:toroot ?>develop/index.html"
- zh-tw-lang="開發"
- zh-cn-lang="开发"
- ru-lang="Разработка"
- ko-lang="개발"
- ja-lang="開発"
- es-lang="Desarrollar"
- >Develop</a></li>
- <li class="distribute last"><a href="<?cs var:toroot ?>distribute/<?cs
- if:android.whichdoc == "offline" ?>googleplay/<?cs /if ?>index.html"
- zh-tw-lang="發佈"
- zh-cn-lang="分发"
- ru-lang="Распространение"
- ko-lang="배포"
- ja-lang="配布"
- es-lang="Distribuir"
- >Distribute</a></li>
+ <div class="dac-header" id="header"><?cs call:butter_bar() ?>
+ <div class="dac-header-inner">
+ <a class="dac-nav-toggle" data-dac-toggle-nav href="javascript:;" title="Open navigation">
+ <span class="dac-nav-hamburger">
+ <span class="dac-nav-hamburger-top"></span>
+ <span class="dac-nav-hamburger-mid"></span>
+ <span class="dac-nav-hamburger-bot"></span>
+ </span>
+ </a>
+ <?cs if:ndk ?><a class="dac-header-logo" href="<?cs var:toroot ?>ndk/index.html">
+ <img class="dac-header-logo-image" src="<?cs var:toroot ?>assets/images/android_logo_ndk.png"
+ srcset="<?cs var:toroot ?>assets/images/android_logo_ndk@2x.png 2x"
+ width="32" height="36" alt="Android" /> NDK
+ </a><?cs else ?><a class="dac-header-logo" href="<?cs var:toroot ?>index.html">
+ <img class="dac-header-logo-image" src="<?cs var:toroot ?>assets/images/android_logo.png"
+ srcset="<?cs var:toroot ?>assets/images/android_logo@2x.png 2x"
+ width="32" height="36" alt="Android" /> Developers
+ </a><?cs /if ?>
+
+ <ul class="dac-header-crumbs">
+ <?cs # More <li> elements added here with javascript ?>
+ <?cs if:!section.landing ?><li class="dac-header-crumbs-item"><span class="dac-header-crumbs-link current <?cs
+ if:ndk ?>ndk<?cs /if ?>"><?cs var:page.title ?></a></li><?cs
+ /if ?>
</ul>
-
<?cs # ADD SEARCH AND MENU ?>
+ <?cs if:!ndk ?>
<?cs call:header_search_widget() ?>
-
-
- <!-- Expanded quicknav -->
- <div id="quicknav" class="col-13">
- <ul>
- <li class="about">
- <ul>
- <li><a href="<?cs var:toroot ?>about/index.html">About</a></li>
- <li><a href="<?cs var:toroot ?>wear/index.html">Wear</a></li>
- <li><a href="<?cs var:toroot ?>tv/index.html">TV</a></li>
- <li><a href="<?cs var:toroot ?>auto/index.html">Auto</a></li>
- </ul>
- </li>
- <li class="design">
- <ul>
- <li><a href="<?cs var:toroot ?>design/index.html">Get Started</a></li>
- <li><a href="<?cs var:toroot ?>design/devices.html">Devices</a></li>
- <li><a href="<?cs var:toroot ?>design/style/index.html">Style</a></li>
- <li><a href="<?cs var:toroot ?>design/patterns/index.html">Patterns</a></li>
- <li><a href="<?cs var:toroot ?>design/building-blocks/index.html">Building Blocks</a></li>
- <li><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></li>
- <li><a href="<?cs var:toroot ?>design/videos/index.html">Videos</a></li>
- </ul>
- </li>
- <li class="develop">
- <ul>
- <li><a href="<?cs var:toroot ?>training/index.html"
- zh-tw-lang="訓練課程"
- zh-cn-lang="培训"
- ru-lang="Курсы"
- ko-lang="교육"
- ja-lang="トレーニング"
- es-lang="Capacitación"
- >Training</a></li>
- <li><a href="<?cs var:toroot ?>guide/index.html"
- zh-tw-lang="API 指南"
- zh-cn-lang="API 指南"
- ru-lang="Руководства по API"
- ko-lang="API 가이드"
- ja-lang="API ガイド"
- es-lang="Guías de la API"
- >API Guides</a></li>
- <li><a href="<?cs var:toroot ?>reference/packages.html"
- zh-tw-lang="參考資源"
- zh-cn-lang="参考"
- ru-lang="Справочник"
- ko-lang="참조문서"
- ja-lang="リファレンス"
- es-lang="Referencia"
- >Reference</a></li>
- <li><a href="<?cs var:toroot ?>sdk/index.html"
- zh-tw-lang="相關工具"
- zh-cn-lang="工具"
- ru-lang="Инструменты"
- ko-lang="도구"
- ja-lang="ツール"
- es-lang="Herramientas"
- >Tools</a>
- </li>
- <li><a href="<?cs var:toroot ?>google/index.html">Google Services</a>
- </li>
- <?cs if:android.hasSamples ?>
- <li><a href="<?cs var:toroot ?>samples/index.html">Samples</a>
- </li>
- <?cs /if ?>
- </ul>
- </li>
- <li class="distribute last">
- <ul>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/index.html">Google Play</a></li>
- <li><a href="<?cs var:toroot ?>distribute/essentials/index.html">Essentials</a></li>
- <li><a href="<?cs var:toroot ?>distribute/users/index.html">Get Users</a></li>
- <li><a href="<?cs var:toroot ?>distribute/engage/index.html">Engage & Retain</a></li>
- <li><a href="<?cs var:toroot ?>distribute/monetize/index.html">Monetize</a></li>
- <li><a href="<?cs var:toroot ?>distribute/analyze/index.html">Analyze</a></li>
- <li><a href="<?cs var:toroot ?>distribute/tools/index.html">Tools & Reference</a></li>
- <li><a href="<?cs var:toroot ?>distribute/stories/index.html">Developer Stories</a></li>
- </ul>
- </li>
- </ul>
- </div><!-- /Expanded quicknav -->
- </div><!-- end header-wrap.wrap -->
- </div><!-- end header -->
-
- <?cs if:about || wear || tv || auto ?>
- <!-- Secondary x-nav -->
- <div id="nav-x">
- <div class="wrap">
- <ul class="nav-x col-9 about" style="width:100%">
- <li class="about"><a href="<?cs var:toroot ?>about/index.html"
- >About</a></li>
- <li class="wear"><a href="<?cs var:toroot ?>wear/index.html"
- >Wear</a></li>
- <li class="tv"><a href="<?cs var:toroot ?>tv/index.html"
- >TV</a></li>
- <li class="auto"><a href="<?cs var:toroot ?>auto/index.html"
- >Auto</a></li>
- </ul>
- </div>
- </div>
- <!-- /Sendondary x-nav ABOUT -->
-
-
-
- <?cs elif:training || guide || reference || tools || develop || google || samples ?>
- <!-- Secondary x-nav -->
- <div id="nav-x">
- <div class="wrap" style="position:relative;z-index:1">
-
- <?cs if:reference ?>
- <?cs # HIDE HELPOUTS RECRUIT BANNER
- <a id="helpoutsLink" class="resource resource-card resource-card-6x2x3 resource-card-6x2 helpouts-card"
- href="http://helpouts.google.com/partner/landing/provider/googledevelopers?utm_source=dac&utm_medium=banner&utm_campaign=android_provider_banner3" target="_blank">
- <div class="card-bg helpouts-card-bg"></div>
- <div class="card-info">
- <div class="helpouts-description">
- <div class="text">Help Android Wear and TV developers<br/>
- <span id="helpoutsLinkText" class="link-color"
- style="display:block;padding-top:5px;text-align:right">Learn more</span>
- </div>
- </div>
- </div>
- </a>
- # END HIDE HELPOUTS ?>
<?cs /if ?>
- <ul class="nav-x col-9 develop" style="width:100%">
- <li class="training"><a href="<?cs var:toroot ?>training/index.html"
- zh-tw-lang="訓練課程"
- zh-cn-lang="培训"
- ru-lang="Курсы"
- ko-lang="교육"
- ja-lang="トレーニング"
- es-lang="Capacitación"
- >Training</a></li>
- <li class="guide"><a href="<?cs var:toroot ?>guide/index.html"
- zh-tw-lang="API 指南"
- zh-cn-lang="API 指南"
- ru-lang="Руководства по API"
- ko-lang="API 가이드"
- ja-lang="API ガイド"
- es-lang="Guías de la API"
- >API Guides</a></li>
- <li class="reference"><a href="<?cs var:toroot ?>reference/packages.html"
- zh-tw-lang="參考資源"
- zh-cn-lang="参考"
- ru-lang="Справочник"
- ko-lang="참조문서"
- ja-lang="リファレンス"
- es-lang="Referencia"
- >Reference</a></li>
- <li class="tools"><a href="<?cs var:toroot ?>sdk/index.html"
- zh-tw-lang="相關工具"
- zh-cn-lang="工具"
- ru-lang="Инструменты"
- ko-lang="도구"
- ja-lang="ツール"
- es-lang="Herramientas"
- >Tools</a></li>
- <li class="google"><a href="<?cs var:toroot ?>google/index.html"
- >Google Services</a>
- </li>
- <?cs if:android.hasSamples ?>
- <li class="samples"><a href="<?cs var:toroot ?>samples/index.html"
- >Samples</a>
- </li>
- <?cs /if ?>
- </ul>
- </div>
- </div>
- <!-- /Sendondary x-nav DEVELOP -->
+ <?cs if:ndk ?><a class="dac-header-console-btn" href="http://developer.android.com">
+ <span class="dac-visible-desktop-inline">Back to Android Developers</span>
+ </a><?cs else ?><a class="dac-header-console-btn" href="https://play.google.com/apps/publish/">
+ <span class="dac-sprite dac-google-play"></span>
+ <span class="dac-visible-desktop-inline">Developer</span>
+ Console
+ </a><?cs /if ?>
- <?cs elif:distribute || googleplay || essentials || users || engage || monetize || analyze || disttools || stories ?>
- <!-- Secondary distribute x-nav -->
- <div id="nav-x">
- <div class="wrap">
- <ul class="nav-x distribute">
- <li class="googleplay"><a href="<?cs var:toroot ?>distribute/googleplay/index.html"
- >Google Play</a></li>
- <li class="essentials"><a href="<?cs var:toroot ?>distribute/essentials/index.html"
- >Essentials</a></li>
- <li class="users"><a href="<?cs var:toroot ?>distribute/users/index.html"
- >Get Users</a></li>
- <li class="engage"><a href="<?cs var:toroot ?>distribute/engage/index.html"
- >Engage & Retain</a></li>
- <li class="monetize"><a href="<?cs var:toroot ?>distribute/monetize/index.html"
- >Monetize</a>
- </li>
- <li class="analyze"><a href="<?cs var:toroot ?>distribute/analyze/index.html"
- >Analyze</a>
- </li>
- <li class="disttools"><a href="<?cs var:toroot ?>distribute/tools/index.html"
- >Tools</a>
- </li>
- <li class="stories"><a href="<?cs var:toroot ?>distribute/stories/index.html"
- >Stories</a>
- </li>
- </ul>
- <a href="https://play.google.com/apps/publish/" class="developer-console-btn">Developer Console</a>
- </div> <!-- /Secondary distribute x-nav -->
- </div>
- <!-- /Sendondary x-nav DISTRIBUTE -->
- <?cs /if ?>
+ </div><!-- end header-wrap.wrap -->
+ </div><!-- end header -->
<div id="searchResults" class="wrap" style="display:none;">
<h2 id="searchTitle">Results</h2>
@@ -307,66 +97,180 @@
</div>
</div> <!--end header-wrapper -->
- <div id="sticky-header">
- <div>
- <a class="logo" href="#top"></a>
- <a class="top" href="#top"></a>
- <ul class="breadcrumb">
- <?cs # More <li> elements added here with javascript ?>
- <?cs if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
- /if ?>
- </ul>
- </div>
- </div>
+ <?cs if:ndk ?>
+ <!-- NDK Navigation-->
+ <nav class="dac-nav">
+ <div class="dac-nav-dimmer" data-dac-toggle-nav></div>
-<?cs /if ?><?cs # end if/else !devsite ?>
-<?cs /if ?><?cs # end if/else preview ?><?cs
-/def ?>
-
-<?cs def:preview_masthead() ?>
-<a name="top"></a>
-
-
-<!-- Header -->
-<div id="header-wrapper">
- <div id="header"><?cs call:butter_bar() ?>
- <div class="wrap" id="header-wrap">
- <div class="col_3 logo landing-logo" style="width:240px">
- <a href="<?cs var:toroot ?>preview/index.html">
- <img src="<?cs var:toroot ?>assets/images/android.png" height="25" alt="Android"
- style="margin:-3px 0 0" />
+ <ul class="dac-nav-list" data-dac-nav>
+ <li class="dac-nav-item dac-nav-head">
+ <a class="dac-nav-link dac-nav-logo" data-dac-toggle-nav href="javascript:;" title="Close navigation">
+ <img class="dac-logo-image" src="<?cs var:toroot ?>assets/images/android_logo_ndk.png"
+ srcset="<?cs var:toroot ?>assets/images/android_logo_ndk@2x.png 2x"
+ width="32" height="36" alt="Android" /> NDK
</a>
- </div>
- <div class="col-8" style="margin:0"><h1 style="margin: 4px 0 0 0px;padding:0;line-height:16px;
-color:#666;font-weight:100;font-size:27px;">L Developer Preview</h1></div>
-
- <?cs # ADD SEARCH AND MENU ?>
- <?cs call:header_search_widget() ?>
-
- </div><!-- end header-wrap -->
- </div><!-- /Header -->
-
-
- <div id="searchResults" class="wrap" style="display:none;">
- <h2 id="searchTitle">Results</h2>
- <div id="leftSearchControl" class="search-control">Loading...</div>
- </div>
-</div> <!--end header-wrapper -->
-
-<div id="sticky-header">
- <div>
- <a class="logo" href="#top"></a>
- <a class="top" href="#top"></a>
- <ul class="breadcrumb">
- <?cs # More <li> elements added here with javascript ?>
- <?cs if:!section.landing ?><li class="current"><?cs var:page.title ?></li><?cs
- /if ?>
+ </li>
+ <li class="dac-nav-item guides">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>ndk/guides/index.html"
+ zh-tw-lang="API 指南"
+ zh-cn-lang="API 指南"
+ ru-lang="Руководства по API"
+ ko-lang="API 가이드"
+ ja-lang="API ガイド"
+ es-lang="Guías de la API">Guides</a>
+ </li>
+ <li class="dac-nav-item reference">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>ndk/reference/index.html"
+ zh-tw-lang="參考資源"
+ zh-cn-lang="参考"
+ ru-lang="Справочник"
+ ko-lang="참조문서"
+ ja-lang="リファレンス"
+ es-lang="Referencia">Reference</a>
+ </li>
+ <li class="dac-nav-item samples">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>ndk/samples/index.html"
+ >Samples</a>
+ </li>
+ <li class="dac-nav-item downloads">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>ndk/downloads/index.html"
+ >Downloads</a>
+ </li>
</ul>
- </div>
-</div>
+ </nav>
+ <!-- end NDK navigation-->
+ <?cs else ?>
+ <!-- Navigation-->
+ <nav class="dac-nav">
+ <div class="dac-nav-dimmer" data-dac-toggle-nav></div>
- <?cs
-/def ?>
+ <ul class="dac-nav-list" data-dac-nav>
+ <li class="dac-nav-item dac-nav-head">
+ <a class="dac-nav-link dac-nav-logo" data-dac-toggle-nav href="javascript:;" title="Close navigation">
+ <img class="dac-logo-image" src="<?cs var:toroot ?>assets/images/android_logo.png"
+ srcset="<?cs var:toroot ?>assets/images/android_logo@2x.png 2x"
+ width="32" height="36" alt="Android" /> Developers
+ </a>
+ </li>
+ <li class="dac-nav-item home">
+ <a class="dac-nav-link dac-visible-mobile-block" href="<?cs var:toroot ?>index.html">Home</a>
+ <ul class="dac-nav-secondary about">
+ <li class="dac-nav-item about">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>about/index.html">Android</a>
+ </li>
+ <li class="dac-nav-item wear">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>wear/index.html">Wear</a>
+ </li>
+ <li class="dac-nav-item tv">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>tv/index.html">TV</a>
+ </li>
+ <li class="dac-nav-item auto">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>auto/index.html">Auto</a>
+ </li>
+ </ul>
+ </li>
+ <li class="dac-nav-item design">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>design/index.html"
+ zh-tw-lang="設計"
+ zh-cn-lang="设计"
+ ru-lang="Проектирование"
+ ko-lang="디자인"
+ ja-lang="設計"
+ es-lang="Diseñar">Design</a>
+ </li>
+ <li class="dac-nav-item develop">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>develop/index.html"
+ zh-tw-lang="開發"
+ zh-cn-lang="开发"
+ ru-lang="Разработка"
+ ko-lang="개발"
+ ja-lang="開発"
+ es-lang="Desarrollar">Develop</a>
+ <ul class="dac-nav-secondary develop">
+ <li class="dac-nav-item training">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>training/index.html"
+ zh-tw-lang="訓練課程"
+ zh-cn-lang="培训"
+ ru-lang="Курсы"
+ ko-lang="교육"
+ ja-lang="トレーニング"
+ es-lang="Capacitación">Training</a>
+ </li>
+ <li class="dac-nav-item guide">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>guide/index.html"
+ zh-tw-lang="API 指南"
+ zh-cn-lang="API 指南"
+ ru-lang="Руководства по API"
+ ko-lang="API 가이드"
+ ja-lang="API ガイド"
+ es-lang="Guías de la API">API Guides</a>
+ </li>
+ <li class="dac-nav-item reference">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>reference/packages.html"
+ zh-tw-lang="參考資源"
+ zh-cn-lang="参考"
+ ru-lang="Справочник"
+ ko-lang="참조문서"
+ ja-lang="リファレンス"
+ es-lang="Referencia">Reference</a>
+ </li>
+ <li class="dac-nav-item tools">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>sdk/index.html"
+ zh-tw-lang="相關工具"
+ zh-cn-lang="工具"
+ ru-lang="Инструменты"
+ ko-lang="도구"
+ ja-lang="ツール"
+ es-lang="Herramientas">Tools</a></li>
+ <li class="dac-nav-item google">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>google/index.html">Google Services</a>
+ </li>
+ <?cs if:android.hasSamples ?>
+ <li class="dac-nav-item samples">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>samples/index.html">Samples</a>
+ </li>
+ <?cs /if ?>
+ <li class="dac-nav-item preview">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>preview/index.html">Preview</a>
+ </li>
+ </ul>
+ </li>
+ <li class="dac-nav-item distribute">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/<?cs if:android.whichdoc == 'offline' ?>googleplay/<?cs /if ?>index.html"
+ zh-tw-lang="發佈"
+ zh-cn-lang="分发"
+ ru-lang="Распространение"
+ ko-lang="배포"
+ ja-lang="配布"
+ es-lang="Distribuir">Distribute</a>
+ <ul class="dac-nav-secondary distribute">
+ <li class="dac-nav-item googleplay">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/googleplay/index.html">Google Play</a></li>
+ <li class="dac-nav-item essentials">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/essentials/index.html">Essentials</a></li>
+ <li class="dac-nav-item users">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/users/index.html">Get Users</a></li>
+ <li class="dac-nav-item engage">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/engage/index.html">Engage & Retain</a></li>
+ <li class="dac-nav-item monetize">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/monetize/index.html">Earn</a>
+ </li>
+ <li class="dac-nav-item analyze">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/analyze/index.html">Analyze</a>
+ </li>
+ <li class="dac-nav-item stories">
+ <a class="dac-nav-link" href="<?cs var:toroot ?>distribute/stories/index.html">Stories</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <!-- end navigation-->
+ <?cs /if ?>
+<?cs /if ?><?cs # end if/else !devsite ?>
+
+<?cs
+/def ?><?cs # end custom_masthead() ?>
<?cs # (UN)COMMENT THE INSIDE OF THIS METHOD TO TOGGLE VISIBILITY ?>
@@ -383,6 +287,6 @@
</div>
</div>
-?>
+?>
<?cs /def ?>
diff --git a/tools/droiddoc/templates-sdk/customizations.cs b/tools/droiddoc/templates-sdk/customizations.cs
index c8c88cc..aaef8ed 100644
--- a/tools/droiddoc/templates-sdk/customizations.cs
+++ b/tools/droiddoc/templates-sdk/customizations.cs
@@ -1,33 +1,41 @@
-<?cs
+<?cs
+def:mobile_nav_toggle() ?>
+ <div class="dac-visible-mobile-block" data-toggle="section">
+ <span class="dac-toggle-expand dac-devdoc-toggle"><i class="dac-sprite dac-expand-more-black"></i> Show navigation</span>
+ <span class="dac-toggle-collapse dac-devdoc-toggle" data-toggle-section><i class="dac-sprite dac-expand-less-black"></i> Hide navigation</span>
+ </div>
+<?cs /def ?><?cs
+
def:fullpage() ?>
<div id="body-content">
+ <div>
<?cs /def ?>
<?cs
def:sdk_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<?cs /def ?><?cs
def:no_nav() ?>
<div class="wrap clearfix" id="body-content">
+ <div>
<?cs /def ?><?cs
def:tools_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-<?cs
- include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -38,15 +46,13 @@
<?cs /def ?>
<?cs
def:training_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-
-<?cs
- include:"../../../../frameworks/base/docs/html/training/training_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/training/training_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -57,10 +63,30 @@
<?cs /def ?><?cs
def:googleplay_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/googleplay/googleplay_toc.cs" ?>
+ </div>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?><?cs
+
+def:preview_nav() ?>
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/preview/preview_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -71,10 +97,13 @@
<?cs /def ?><?cs
def:essentials_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/essentials/essentials_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -85,10 +114,13 @@
<?cs /def ?><?cs
def:users_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/users/users_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -99,10 +131,13 @@
<?cs /def ?><?cs
def:engage_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/engage/engage_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -113,10 +148,13 @@
<?cs /def ?><?cs
def:analyze_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/analyze/analyze_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -127,10 +165,13 @@
<?cs /def ?><?cs
def:monetize_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/monetize/monetize_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -141,10 +182,13 @@
<?cs /def ?><?cs
def:disttools_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/tools/disttools_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -155,10 +199,13 @@
<?cs /def ?><?cs
def:stories_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
<?cs include:"../../../../frameworks/base/docs/html/distribute/stories/stories_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -169,14 +216,13 @@
<?cs /def ?><?cs
def:guide_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -187,15 +233,13 @@
<?cs /def ?>
<?cs
def:design_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-
-<?cs
- include:"../../../../frameworks/base/docs/html/design/design_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/design/design_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -206,14 +250,13 @@
<?cs /def ?>
<?cs
def:distribute_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -225,13 +268,13 @@
<?cs
def:samples_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/samples/samples_toc.cs" ?>
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/samples/samples_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
@@ -244,14 +287,13 @@
<?cs
def:google_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
+ </div>
</div>
<script type="text/javascript">
showGoogleRefTree();
@@ -267,14 +309,13 @@
<?cs
def:about_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-3" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -287,14 +328,13 @@
<?cs
def:wear_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-
-<?cs
- include:"../../../../frameworks/base/docs/html/wear/wear_toc.cs" ?>
-
-
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/wear/wear_toc.cs" ?>
+ </div>
</div>
</div> <!-- end side-nav -->
<script>
@@ -304,29 +344,14 @@
</script>
<?cs /def ?>
-<?cs
-def:preview_nav() ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
- <?cs
- include:"../../../../frameworks/base/docs/html/preview/preview_toc.cs" ?>
- </div>
- </div> <!-- end side-nav -->
- <script>
- $(document).ready(function() {
- scrollIntoView("devdoc-nav");
- });
- </script>
-<?cs /def ?>
-<?cs # The default side navigation for the reference docs ?><?cs
+<?cs # The default side navigation for the reference docs ?><?cs
def:default_left_nav() ?>
<?cs if:reference.gcm || reference.gms ?>
<?cs call:google_nav() ?>
<?cs else ?>
- <div class="wrap clearfix" id="body-content">
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-4 dac-hidden-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav">
<div id="api-nav-header">
<div id="api-level-toggle">
@@ -341,15 +366,15 @@
<div id="api-nav-title">Android APIs</div>
</div><!-- end nav header -->
<script>
- var SINCE_DATA = [ <?cs
- each:since = since ?>'<?cs
- var:since.name ?>'<?cs
+ var SINCE_DATA = [ <?cs
+ each:since = since ?>'<?cs
+ var:since.name ?>'<?cs
if:!last(since) ?>, <?cs /if ?><?cs
- /each
+ /each
?> ];
buildApiLevelSelector();
</script>
-
+
<div id="swapper">
<div id="nav-panels">
<div id="resize-packages-nav">
@@ -364,7 +389,7 @@
<div id="classes-nav" class="scroll-pane">
-<?cs
+<?cs
if:subcount(class.package) ?>
<ul>
<?cs call:list("Annotations", class.package.annotations) ?>
@@ -373,7 +398,7 @@
<?cs call:list("Enums", class.package.enums) ?>
<?cs call:list("Exceptions", class.package.exceptions) ?>
<?cs call:list("Errors", class.package.errors) ?>
- </ul><?cs
+ </ul><?cs
elif:subcount(package) ?>
<ul>
<?cs call:class_link_list("Annotations", package.annotations) ?>
@@ -382,11 +407,11 @@
<?cs call:class_link_list("Enums", package.enums) ?>
<?cs call:class_link_list("Exceptions", package.exceptions) ?>
<?cs call:class_link_list("Errors", package.errors) ?>
- </ul><?cs
+ </ul><?cs
else ?>
- <p style="padding:10px">Select a package to view its members</p><?cs
+ <p style="padding:10px">Select a package to view its members</p><?cs
/if ?><br/>
-
+
</div><!-- end classes -->
</div><!-- end nav-panels -->
@@ -427,84 +452,53 @@
});
</script>
<?cs /if ?>
- <?cs
+ <?cs
/def ?>
+<?cs
+def:ndk_nav() ?>
+ <div class="wrap clearfix" id="body-content"><div class="cols">
+ <div class="col-3 dac-toggle dac-mobile" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <?cs call:mobile_nav_toggle() ?>
+ <div class="dac-toggle-content" id="devdoc-nav">
+ <div class="scroll-pane">
+<?cs
+if:guide ?><?cs include:"../../../../frameworks/base/docs/html/ndk/guides/guides_toc.cs" ?><?cs
+elif:reference ?><?cs include:"../../../../frameworks/base/docs/html/ndk/reference/reference_toc.cs" ?><?cs
+elif:downloads ?><?cs include:"../../../../frameworks/base/docs/html/ndk/downloads/downloads_toc.cs" ?><?cs
+elif:samples ?><?cs include:"../../../../frameworks/base/docs/html/ndk/samples/samples_toc.cs" ?><?cs
+/if ?>
+ </div>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?cs /def ?>
<?cs
def:header_search_widget() ?>
-<div class="menu-container">
- <div class="moremenu">
- <div id="more-btn"></div>
- </div>
- <div class="morehover" id="moremenu">
- <div class="top"></div>
- <div class="mid">
- <div class="header">Links</div>
- <ul>
- <li><a href="https://play.google.com/apps/publish/" target="_googleplay">Google Play Developer Console</a></li>
- <li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
- <li><a href="<?cs var:toroot ?>about/index.html">About Android</a></li>
- </ul>
- <div class="header">Android Sites</div>
- <ul>
- <li><a href="http://www.android.com">Android.com</a></li>
- <li class="active"><a>Android Developers</a></li>
- <li><a href="http://source.android.com">Android Open Source Project</a></li>
- </ul>
-
- <?cs # Include language switcher only in online docs ?>
- <?cs if:android.whichdoc == "online" ?>
- <div class="header">Language</div>
- <div id="language" class="locales">
- <select name="language" onChange="changeLangPref(this.value, true)">
- <option value="en">English</option>
- <option value="es">Español</option>
- <option value="ja">日本語</option>
- <option value="ko">한국어</option>
- <option value="ru">Русский</option>
- <option value="zh-cn">中文(简体)</option>
- <option value="zh-tw">中文(繁體)</option>
- </select>
- </div>
- <script type="text/javascript">
- <!--
- loadLangPref();
- //-->
- </script>
- <?cs /if ?>
- <?cs # End of lang switcher ?>
- <br class="clearfix" />
- </div><!-- end 'mid' -->
- <div class="bottom"></div>
- </div><!-- end 'moremenu' -->
-
- <div class="search" id="search-container">
- <div class="search-inner">
- <div id="search-btn"></div>
- <div class="left"></div>
- <form onsubmit="return submit_search()">
+ <div class="dac-header-search" id="search-container">
+ <div class="dac-header-search-inner">
+ <div class="dac-sprite dac-search dac-header-search-btn" id="search-btn"></div>
+ <form class="dac-header-search-form" onsubmit="return submit_search()">
<input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
onkeydown="return search_changed(event, true, '<?cs var:toroot ?>')"
- onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')" />
+ onkeyup="return search_changed(event, false, '<?cs var:toroot ?>')"
+ class="dac-header-search-input" placeholder="Search" />
+ <a class="dac-header-search-close hide" id="search-close">close</a>
</form>
- <div class="right"></div>
- <a class="close hide">close</a>
- <div class="left"></div>
- <div class="right"></div>
- </div><!-- end search-inner -->
- </div><!-- end search-container -->
+ </div><!-- end dac-header-search-inner -->
+ </div><!-- end dac-header-search -->
- <div class="search_filtered_wrapper reference">
+ <div class="search_filtered_wrapper">
<div class="suggest-card reference no-display">
<ul class="search_filtered">
</ul>
</div>
- </div>
-
- <div class="search_filtered_wrapper docs">
- <div class="suggest-card dummy no-display"> </div>
<div class="suggest-card develop no-display">
<ul class="search_filtered">
</ul>
@@ -524,87 +518,98 @@
</ul>
</div>
</div>
-</div><!-- end menu-container (search and menu widget) -->
<?cs /def ?>
-
-<?cs
+<?cs
def:custom_left_nav() ?><?cs
- if:fullpage ?><?cs
- call:fullpage() ?><?cs
- elif:nonavpage ?><?cs
- call:no_nav() ?><?cs
- elif:guide ?><?cs
- call:guide_nav() ?><?cs
- elif:design ?><?cs
- call:design_nav() ?><?cs
- elif:training ?><?cs
- call:training_nav() ?><?cs
- elif:tools ?><?cs
- call:tools_nav() ?><?cs
- elif:google ?><?cs
- call:google_nav() ?><?cs
- elif:samples ?><?cs
- call:samples_nav() ?><?cs
- elif:distribute ?><?cs
- if:googleplay ?><?cs
- call:googleplay_nav() ?><?cs
- elif:essentials ?><?cs
- call:essentials_nav() ?><?cs
- elif:users ?><?cs
- call:users_nav() ?><?cs
- elif:engage ?><?cs
- call:engage_nav() ?><?cs
- elif:monetize ?><?cs
- call:monetize_nav() ?><?cs
- elif:analyze ?><?cs
- call:analyze_nav() ?><?cs
- elif:disttools ?><?cs
- call:disttools_nav() ?><?cs
- elif:stories ?><?cs
- call:stories_nav() ?><?cs
+ if:ndk ?><?cs
+ if:fullpage ?><?cs
+ call:fullpage() ?><?cs
+ elif:nonavpage ?><?cs
+ call:no_nav() ?><?cs
+ elif:guide || reference || samples || downloads ?><?cs
+ call:ndk_nav() ?><?cs
+ else ?><?cs
+ call:default_left_nav() ?> <?cs
/if ?><?cs
- elif:about ?><?cs
- call:about_nav() ?><?cs
- elif:distribute ?><?cs
- call:distribute_nav() ?><?cs
- elif:wear ?><?cs
- call:wear_nav() ?><?cs
- elif:preview ?><?cs
- call:preview_nav() ?><?cs
else ?><?cs
- call:default_left_nav() ?> <?cs
+ if:fullpage ?><?cs
+ call:fullpage() ?><?cs
+ elif:nonavpage ?><?cs
+ call:no_nav() ?><?cs
+ elif:guide ?><?cs
+ call:guide_nav() ?><?cs
+ elif:design ?><?cs
+ call:design_nav() ?><?cs
+ elif:training ?><?cs
+ call:training_nav() ?><?cs
+ elif:tools ?><?cs
+ call:tools_nav() ?><?cs
+ elif:google ?><?cs
+ call:google_nav() ?><?cs
+ elif:samples ?><?cs
+ call:samples_nav() ?><?cs
+ elif:preview ?><?cs
+ call:preview_nav() ?><?cs
+ elif:distribute ?><?cs
+ if:googleplay ?><?cs
+ call:googleplay_nav() ?><?cs
+ elif:essentials ?><?cs
+ call:essentials_nav() ?><?cs
+ elif:users ?><?cs
+ call:users_nav() ?><?cs
+ elif:engage ?><?cs
+ call:engage_nav() ?><?cs
+ elif:monetize ?><?cs
+ call:monetize_nav() ?><?cs
+ elif:analyze ?><?cs
+ call:analyze_nav() ?><?cs
+ elif:disttools ?><?cs
+ call:disttools_nav() ?><?cs
+ elif:stories ?><?cs
+ call:stories_nav() ?><?cs
+ /if ?><?cs
+ elif:about ?><?cs
+ call:about_nav() ?><?cs
+ elif:distribute ?><?cs
+ call:distribute_nav() ?><?cs
+ elif:wear ?><?cs
+ call:wear_nav() ?><?cs
+ else ?><?cs
+ call:default_left_nav() ?> <?cs
+ /if ?><?cs
/if ?><?cs
/def ?>
-<?cs # appears at the bottom of every page ?><?cs
+<?cs # appears at the bottom of every page ?><?cs
def:custom_cc_copyright() ?>
- Except as noted, this content is
+ Except as noted, this content is
licensed under <a href="http://creativecommons.org/licenses/by/2.5/">
- Creative Commons Attribution 2.5</a>. For details and
- restrictions, see the <a href="<?cs var:toroot ?>license.html">Content
- License</a>.<?cs
+ Creative Commons Attribution 2.5</a>. For details and
+ restrictions, see the <a href="<?cs var:toroot ?>license.html">Content
+ License</a>.<?cs
/def ?>
-<?cs
+<?cs
def:custom_copyright() ?>
Except as noted, this content is licensed under <a
- href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
+ href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>.
For details and restrictions, see the <a href="<?cs var:toroot ?>license.html">
- Content License</a>.<?cs
+ Content License</a>.<?cs
/def ?>
-<?cs
+<?cs
def:custom_footerlinks() ?>
- <p>
- <a href="<?cs var:toroot ?>about/index.html">About Android</a> |
- <a href="<?cs var:toroot ?>legal.html">Legal</a> |
- <a href="<?cs var:toroot ?>support.html">Support</a>
- </p><?cs
+ <a href="<?cs var:toroot ?>about/index.html">About Android</a>
+ <a href="<?cs var:toroot ?>auto/index.html">Auto</a>
+ <a href="<?cs var:toroot ?>tv/index.html">TV</a>
+ <a href="<?cs var:toroot ?>wear/index.html">Wear</a>
+ <a href="<?cs var:toroot ?>legal.html">Legal</a>
+ <?cs
/def ?>
-<?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs
+<?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs
def:custom_buildinfo() ?><?cs
if:!google && !reference.gcm && !reference.gms ?>
Android <?cs var:sdk.version ?> r<?cs var:sdk.rel.id ?> — <?cs
diff --git a/tools/droiddoc/templates-sdk/designpage.cs b/tools/droiddoc/templates-sdk/designpage.cs
index 2be179d..b945a1c 100644
--- a/tools/droiddoc/templates-sdk/designpage.cs
+++ b/tools/droiddoc/templates-sdk/designpage.cs
@@ -37,14 +37,12 @@
<?cs if:header.hide ?>
<?cs else ?>
-<div class="layout-content-row content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
- <div class="layout-content-col span-9">
+<div class="content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
<?cs if:header.justLinks ?>
<?cs elif:header.title ?><h2><?cs var:header.title ?></h2>
<?cs else ?><h2><?cs var:page.title ?></h2>
<?cs /if ?>
- </div>
- <div class="paging-links layout-content-col span-4" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="paging-links" itemscope itemtype="http://schema.org/SiteNavigationElement">
<a href="#" class="prev-page-link">Previous</a>
<a href="#" class="next-page-link">Next</a>
</div>
@@ -55,9 +53,9 @@
<?cs if:footer.hide ?>
<?cs else ?>
-<div class="layout-content-row content-footer" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div class="paging-links layout-content-col span-9"> </div>
- <div class="paging-links layout-content-col span-4">
+<div class="cols content-footer" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="paging-links col-9"> </div>
+ <div class="paging-links col-4">
<a href="#" class="prev-page-link">Previous</a>
<a href="#" class="next-page-link">Next</a>
</div>
diff --git a/tools/droiddoc/templates-sdk/docpage.cs b/tools/droiddoc/templates-sdk/docpage.cs
index d064222..668105b 100644
--- a/tools/droiddoc/templates-sdk/docpage.cs
+++ b/tools/droiddoc/templates-sdk/docpage.cs
@@ -4,31 +4,39 @@
<?cs include:"head_tag.cs" ?>
<body class="gc-documentation
+<?cs # add document classes for navigation header selection (and other stuff) ?>
<?cs
-if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?><?cs
- if:(guide||develop||training||reference||tools||sdk||samples) ?>develop<?cs
+ if:(google || reference.gms || reference.gcm) ?>google <?cs /if ?><?cs
+ if:ndk ?>ndk<?cs
if:guide ?> guide<?cs /if ?><?cs
if:samples ?> samples<?cs /if ?><?cs
- elif:(distribute||googleplay||essentials||users||engage||monetize||disttools||stories)
- ?>distribute<?cs
- if:googleplay ?> googleplay<?cs /if ?><?cs
- if:essentials ?> essentials<?cs /if ?><?cs
- if:users ?> users<?cs /if ?><?cs
- if:engage ?> engage<?cs /if ?><?cs
- if:monetize ?> monetize<?cs /if ?><?cs
- if:disttools ?> disttools<?cs /if ?><?cs
- if:stories ?> stories<?cs /if ?><?cs
- elif:(about||wear||tv||auto) ?>about<?cs
- elif:design ?>design<?cs
-/if ?><?cs
-if:page.trainingcourse ?> trainingcourse<?cs
+ if:reference ?> reference<?cs /if ?><?cs
+ if:downloads ?> downloads<?cs /if ?><?cs
+ else ?><?cs
+ if:(guide||develop||training||reference||tools||sdk||google||samples||preview) ?>develop<?cs
+ if:guide ?> guide<?cs /if ?><?cs
+ if:samples ?> samples<?cs /if ?><?cs
+ if:preview ?> preview<?cs /if ?><?cs
+ elif:(distribute||googleplay||essentials||users||engage||monetize||disttools||stories||analyze) ?>distribute<?cs
+ if:googleplay ?> googleplay<?cs /if ?><?cs
+ if:essentials ?> essentials<?cs /if ?><?cs
+ if:users ?> users<?cs /if ?><?cs
+ if:engage ?> engage<?cs /if ?><?cs
+ if:monetize ?> monetize<?cs /if ?><?cs
+ if:disttools ?> disttools<?cs /if ?><?cs
+ if:stories ?> stories<?cs /if ?><?cs
+ if:analyze ?> analyze<?cs /if ?><?cs
+ elif:(about||wear||tv||auto) ?>about<?cs
+ elif:design ?>design<?cs
+ /if ?><?cs
+ if:page.trainingcourse ?> trainingcourse<?cs /if ?><?cs
/if ?>" itemscope itemtype="http://schema.org/Article"><?cs
include:"header.cs" ?>
<div <?cs
if:fullpage
?>class="fullpage"<?cs
- elif:(design||tools||about||sdk||googleplay||essentials||users||monetize||disttools) && !nonavpage
+ elif:(design||tools||about||sdk||googleplay||essentials||users||engage||monetize||disttools||stories) && !nonavpage
?>class="col-13" id="doc-col"<?cs
elif:!nonavpage
?>class="col-12" id="doc-col"<?cs /if ?> >
@@ -36,14 +44,12 @@
<?cs if:(design||training||walkthru) && !page.trainingcourse && !page.article ?><?cs # header logic for docs that provide previous/next buttons ?>
<?cs if:header.hide ?>
<?cs else ?>
- <div class="layout-content-row content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
- <div class="layout-content-col <?cs if:training ?>span-7<?cs else ?>span-9<?cs /if ?>">
+ <div class="content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
<?cs if:header.justLinks ?>
<?cs else ?><h1 itemprop="name"><?cs var:page.title ?></h1>
<?cs /if ?>
- </div>
<?cs if:training ?>
- <div class="training-nav-top layout-content-col span-5" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="training-nav-top" itemscope itemtype="http://schema.org/SiteNavigationElement">
<a href="#" class="prev-page-link hide"
zh-tw-lang="上一堂課"
zh-cn-lang="上一课"
@@ -70,7 +76,7 @@
>Get started</a>
</div>
<?cs elif:!page.trainingcourse ?>
- <div class="paging-links layout-content-col span-4" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="paging-links" itemscope itemtype="http://schema.org/SiteNavigationElement">
<a href="#" class="prev-page-link hide"
zh-tw-lang="上一堂課"
zh-cn-lang="上一课"
@@ -116,16 +122,18 @@
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
<div class="landing-banner">
<?cs if:page.landing.image ?><?cs # use two-column layout only if there is an image ?>
- <div class="col-6">
- <img src="<?cs var:toroot ?><?cs var:page.landing.image ?>" alt="" />
- </div>
- <div class="col-6">
+ <div class="cols">
+ <div class="col-6">
+ <img src="<?cs var:toroot ?><?cs var:page.landing.image ?>" alt="" />
+ </div>
+ <div class="col-6">
<?cs /if ?>
<h1 itemprop="name" style="margin-bottom:0;"><?cs var:page.title ?></h1>
<p itemprop="description"><?cs var:page.landing.intro ?></p>
<p><a class="next-page-link topic-start-link"></a></p>
<?cs if:page.landing.image ?>
+ </div>
</div>
<?cs /if ?>
</div>
@@ -153,13 +161,11 @@
<?cs call:tag_list(root.descr) ?>
</div>
+ <?cs if:!fullscreen && (design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
<div class="content-footer <?cs
- if:fullpage ?>wrap<?cs
- else ?>layout-content-row<?cs /if ?>"
+ if:fullpage ?>wrap<?cs /if ?>"
itemscope itemtype="http://schema.org/SiteNavigationElement">
- <?cs if:!fullscreen ?>
- <div class="paging-links layout-content-col col-10">
- <?cs if:(design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
+ <div class="paging-links">
<a href="#" class="next-page-link hide"
zh-tw-lang="下一堂課"
zh-cn-lang="下一课"
@@ -177,15 +183,9 @@
es-lang="Empezar"
>Get started</a>
<a href="#" class="next-class-link hide">Next class</a>
- <?cs /if ?>
- </div>
- <div class="layout-content-col plus-container col-2" >
- <?cs if:!page.noplus ?><?cs if:fullpage ?><style>#___plusone_0 {float:right !important;}</style><?cs /if ?>
- <div class="g-plusone" data-size="medium"></div>
- <?cs /if ?>
- </div>
- <?cs /if ?>
+ </div>
</div>
+ <?cs /if ?>
</div> <!-- end jd-content -->
@@ -194,13 +194,10 @@
<?cs include:"trailer.cs" ?>
<script src="https://developer.android.com/ytblogger_lists_unified.js" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_lists_unified.js?v=8" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_extras.js?v=9" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_collections.js?v=9" type="text/javascript"></script>
- <script src="<?cs var:toroot ?>jd_tag_helpers.js?v=5" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_lists_unified.js?v=15" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_extras.js?v=15" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_collections.js?v=15" type="text/javascript"></script>
+ <script src="<?cs var:toroot ?>jd_tag_helpers.js?v=15" type="text/javascript"></script>
</body>
</html>
-
-
-
diff --git a/tools/droiddoc/templates-sdk/footer.cs b/tools/droiddoc/templates-sdk/footer.cs
index b609d3b..1ffee63 100644
--- a/tools/droiddoc/templates-sdk/footer.cs
+++ b/tools/droiddoc/templates-sdk/footer.cs
@@ -1,20 +1,172 @@
-<div id="footer" class="wrap" <?cs if:fullpage ?>style="width:940px"<?cs /if ?>>
-
-<?cs if:reference ?>
- <div id="copyright">
- <?cs call:custom_copyright() ?>
+<div class="wrap">
+ <div class="dac-footer<?cs if:fullpage ?> dac-landing<?cs /if ?>">
+ <div class="cols dac-footer-main">
+ <div class="col-1of2">
+ <a class="dac-footer-getnews" data-modal-toggle="newsletter" href="javascript:;">Get news & tips <span
+ class="dac-fab dac-primary"><i class="dac-sprite dac-mail"></i></span></a>
+ </div>
+ <div class="col-1of2 dac-footer-reachout">
+ <div class="dac-footer-contact">
+ <a class="dac-footer-contact-link" href="http://android-developers.blogspot.com/">Blog</a>
+ <a class="dac-footer-contact-link" href="/support.html">Support</a>
+ </div>
+ <div class="dac-footer-social">
+ <a class="dac-fab dac-footer-social-link" href="https://www.youtube.com/user/androiddevelopers"><i class="dac-sprite dac-youtube"></i></a>
+ <a class="dac-fab dac-footer-social-link" href="https://plus.google.com/+AndroidDevelopers"><i class="dac-sprite dac-gplus"></i></a>
+ <a class="dac-fab dac-footer-social-link" href="https://twitter.com/AndroidDev"><i class="dac-sprite dac-twitter"></i></a>
+ </div>
+ </div>
+ </div>
+
+ <hr class="dac-footer-separator"/>
+
+ <?cs if:reference ?>
+ <p class="dac-footer-copyright">
+ <?cs call:custom_copyright() ?>
+ </p>
+ <p class="dac-footer-build">
+ <?cs call:custom_buildinfo() ?>
+ </p>
+ <?cs elif:!hide_license_footer ?>
+ <p class="dac-footer-copyright">
+ <?cs call:custom_cc_copyright() ?>
+ </p>
+ <?cs /if ?>
+
+ <p class="dac-footer-links">
+ <a href="/about/index.html">About Android</a>
+ <a href="/auto/index.html">Auto</a>
+ <a href="/tv/index.html">TV</a>
+ <a href="/wear/index.html">Wear</a>
+ <a href="/legal.html">Legal</a>
+
+ <span id="language" class="locales">
+ <select name="language" onchange="changeLangPref(this.value, true)">
+ <option value="en" selected="selected">English</option>
+ <option value="es">Español</option>
+ <option value="ja">日本語</option>
+ <option value="ko">한국어</option>
+ <option value="pt-br">Português Brasileiro</option>
+ <option value="ru">Русский</option>
+ <option value="zh-cn">中文(简体)</option>
+ <option value="zh-tw">中文(繁體)</option>
+ </select>
+ </span>
+ </p>
</div>
- <div id="build_info">
- <?cs call:custom_buildinfo() ?>
+</div> <!-- end footer -->
+
+<div data-modal="newsletter" data-newsletter data-swap class="dac-modal newsletter">
+ <div class="dac-modal-container">
+ <div class="dac-modal-window">
+ <header class="dac-modal-header">
+ <button class="dac-modal-header-close" data-modal-toggle><i class="dac-sprite dac-close"></i></button>
+ <div class="dac-swap" data-swap-container>
+ <section class="dac-swap-section dac-active dac-down">
+ <h2 class="norule dac-modal-header-title">Get the latest Android developer news and tips that will help you find success on Google Play.</h2>
+ <p class="dac-modal-header-subtitle">* Required Fields</p>
+ </section>
+ <section class="dac-swap-section dac-up">
+ <h2 class="norule dac-modal-header-title">Hooray!</h2>
+ </section>
+ </div>
+ </header>
+ <div class="dac-swap" data-swap-container>
+ <section class="dac-swap-section dac-active dac-left">
+ <form action="https://docs.google.com/forms/d/1QgnkzbEJIDu9lMEea0mxqWrXUJu0oBCLD7ar23V0Yys/formResponse" class="dac-form" method="post" target="dac-newsletter-iframe">
+ <section class="dac-modal-content">
+ <fieldset class="dac-form-fieldset">
+ <div class="cols">
+ <div class="col-1of2 newsletter-leftCol">
+ <div class="dac-form-input-group">
+ <label for="newsletter-full-name" class="dac-form-floatlabel">Full name</label>
+ <input type="text" class="dac-form-input" name="entry.1357890476" id="newsletter-full-name" required>
+ <span class="dac-form-required">*</span>
+ </div>
+ <div class="dac-form-input-group">
+ <label for="newsletter-email" class="dac-form-floatlabel">Email address</label>
+ <input type="email" class="dac-form-input" name="entry.472100832" id="newsletter-email" required>
+ <span class="dac-form-required">*</span>
+ </div>
+ </div>
+ <div class="col-1of2 newsletter-rightCol">
+ <div class="dac-form-input-group">
+ <label for="newsletter-company" class="dac-form-floatlabel">Company / developer name</label>
+ <input type="text" class="dac-form-input" name="entry.1664780309" id="newsletter-company">
+ </div>
+ <div class="dac-form-input-group">
+ <label for="newsletter-play-store" class="dac-form-floatlabel">One of your Play Store app URLs</label>
+ <input type="url" class="dac-form-input" name="entry.47013838" id="newsletter-play-store" required>
+ <span class="dac-form-required">*</span>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ <fieldset class="dac-form-fieldset">
+ <div class="cols">
+ <div class="col-1of2 newsletter-leftCol">
+ <legend class="dac-form-legend">Which best describes your business:<span class="dac-form-required">*</span>
+ </legend>
+ <div class="dac-form-radio-group">
+ <input type="radio" value="Apps" class="dac-form-radio" name="entry.1796324055" id="newsletter-business-type-app" required>
+ <label for="newsletter-business-type-app" class="dac-form-radio-button"></label>
+ <label for="newsletter-business-type-app" class="dac-form-label">Apps</label>
+ </div>
+ <div class="dac-form-radio-group">
+ <input type="radio" value="Games" class="dac-form-radio" name="entry.1796324055" id="newsletter-business-type-games" required>
+ <label for="newsletter-business-type-games" class="dac-form-radio-button"></label>
+ <label for="newsletter-business-type-games" class="dac-form-label">Games</label>
+ </div>
+ <div class="dac-form-radio-group">
+ <input type="radio" value="Apps and Games" class="dac-form-radio" name="entry.1796324055" id="newsletter-business-type-appsgames" required>
+ <label for="newsletter-business-type-appsgames" class="dac-form-radio-button"></label>
+ <label for="newsletter-business-type-appsgames" class="dac-form-label">Apps & Games</label>
+ </div>
+ </div>
+ <div class="col-1of2 newsletter-rightCol newsletter-checkboxes">
+ <div class="dac-form-radio-group">
+ <div class="dac-media">
+ <div class="dac-media-figure">
+ <input type="checkbox" class="dac-form-checkbox" name="entry.732309842" id="newsletter-add" required value="Add me to the mailing list for the monthly newsletter and occasional emails about development and Google Play opportunities.">
+ <label for="newsletter-add" class="dac-form-checkbox-button"></label>
+ </div>
+ <div class="dac-media-body">
+ <label for="newsletter-add" class="dac-form-label dac-form-aside">Add me to the mailing list for the monthly newsletter and occasional emails about development and Google Play opportunities.<span class="dac-form-required">*</span></label>
+ </div>
+ </div>
+ </div>
+ <div class="dac-form-radio-group">
+ <div class="dac-media">
+ <div class="dac-media-figure">
+ <input type="checkbox" class="dac-form-checkbox" name="entry.2045036090" id="newsletter-terms" required value="I acknowledge that the information provided in this form will be subject to Google's privacy policy (https://www.google.com/policies/privacy/).">
+ <label for="newsletter-terms" class="dac-form-checkbox-button"></label>
+ </div>
+ <div class="dac-media-body">
+ <label for="newsletter-terms" class="dac-form-label dac-form-aside">I acknowledge that the information provided in this form will be subject to <a href="https://www.google.com/policies/privacy/">Google's privacy policy</a>.<span class="dac-form-required">*</span></label>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </fieldset>
+ </section>
+ <footer class="dac-modal-footer">
+ <div class="cols">
+ <div class="col-2of5">
+ </div>
+ </div>
+ <button type="submit" value="Submit" class="dac-fab dac-primary dac-large dac-modal-action"><i class="dac-sprite dac-arrow-right"></i></button>
+ </footer>
+ </form>
+ </section>
+ <section class="dac-swap-section dac-right">
+ <div class="dac-modal-content">
+ <p class="newsletter-success-message">
+ You have successfully signed up for the latest Android developer news and tips.
+ </p>
+ </div>
+ </section>
+ </div>
+ </div>
</div>
-<?cs elif:!hide_license_footer ?>
- <div id="copyright">
- <?cs call:custom_cc_copyright() ?>
- </div>
-<?cs /if ?>
-<?cs if:!no_footer_links ?>
- <div id="footerlinks">
- <?cs call:custom_footerlinks() ?>
- </div>
-<?cs /if ?>
-</div> <!-- end footer -->
\ No newline at end of file
+</div> <!-- end footer -->
diff --git a/tools/droiddoc/templates-sdk/head_tag.cs b/tools/droiddoc/templates-sdk/head_tag.cs
index 9f79f54..babb3c7 100644
--- a/tools/droiddoc/templates-sdk/head_tag.cs
+++ b/tools/droiddoc/templates-sdk/head_tag.cs
@@ -15,10 +15,8 @@
?><?cs
# END if/else devsite ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="viewport" content="width=<?cs
- if:page.viewport_width ?><?cs
- var:page.viewport_width ?><?cs
- else ?>device-width<?cs /if ?>" />
+<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
+<meta content="IE=edge" http-equiv="X-UA-Compatible">
<?cs
if:page.metaDescription ?>
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
@@ -38,7 +36,12 @@
if:android.whichdoc != 'online' ?>http:<?cs
/if ?>//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
title="roboto">
-<link href="<?cs var:toroot ?>assets/css/default.css?v=5" rel="stylesheet" type="text/css">
+<?cs
+ if:ndk ?><link rel="stylesheet" href="<?cs
+ if:android.whichdoc != 'online' ?>http:<?cs
+ /if ?>//fonts.googleapis.com/css?family=Roboto+Mono:400,500,700" title="roboto-mono" type="text/css"><?cs
+/if ?>
+<link href="<?cs var:toroot ?>assets/css/default.css?v=7" rel="stylesheet" type="text/css">
<?cs if:reference && !(reference.gms || reference.gcm || preview) ?>
<!-- FULLSCREEN STYLESHEET -->
@@ -62,7 +65,7 @@
var metaTags = [<?cs var:meta.tags ?>];
var devsite = <?cs if:devsite ?>true<?cs else ?>false<?cs /if ?>;
</script>
-<script src="<?cs var:toroot ?>assets/js/docs.js?v=3" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>assets/js/docs.js?v=6" type="text/javascript"></script>
<?cs if:helpoutsWidget ?>
<script type="text/javascript" src="https://helpouts.google.com/ps/res/embed.js" defer async
diff --git a/tools/droiddoc/templates-sdk/nosidenavpage.cs b/tools/droiddoc/templates-sdk/nosidenavpage.cs
index 8e59693..61754f0 100644
--- a/tools/droiddoc/templates-sdk/nosidenavpage.cs
+++ b/tools/droiddoc/templates-sdk/nosidenavpage.cs
@@ -11,6 +11,7 @@
<?cs call:custom_masthead() ?>
<div id="body-content">
+<div>
<div id="doc-content" style="position:relative;">
<?cs call:tag_list(root.descr) ?>
diff --git a/tools/droiddoc/templates-sdk/package.cs b/tools/droiddoc/templates-sdk/package.cs
index 2225565..72d5538 100644
--- a/tools/droiddoc/templates-sdk/package.cs
+++ b/tools/droiddoc/templates-sdk/package.cs
@@ -55,8 +55,9 @@
<?cs call:class_table("Exceptions", package.exceptions) ?>
<?cs call:class_table("Errors", package.errors) ?>
-<?cs include:"footer.cs" ?>
</div><!-- end jd-content -->
+
+<?cs include:"footer.cs" ?>
</div><!-- doc-content -->
<?cs include:"trailer.cs" ?>
diff --git a/tools/droiddoc/templates-sdk/packages.cs b/tools/droiddoc/templates-sdk/packages.cs
index 5056d3a..fe6a5aa 100644
--- a/tools/droiddoc/templates-sdk/packages.cs
+++ b/tools/droiddoc/templates-sdk/packages.cs
@@ -35,8 +35,9 @@
<?cs /each ?>
</table>
-<?cs include:"footer.cs" ?>
</div><!-- end jd-content -->
+
+<?cs include:"footer.cs" ?>
</div> <!-- end doc-content -->
<?cs include:"trailer.cs" ?>
diff --git a/tools/droiddoc/templates-sdk/sample.cs b/tools/droiddoc/templates-sdk/sample.cs
index 32a0788..7b4bf0f 100644
--- a/tools/droiddoc/templates-sdk/sample.cs
+++ b/tools/droiddoc/templates-sdk/sample.cs
@@ -92,9 +92,9 @@
<div class="content-footer <?cs
if:fullpage ?>wrap<?cs
- else ?>layout-content-row<?cs /if ?>"
+ else ?>cols<?cs /if ?>"
itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div class="layout-content-col <?cs
+ <div class="<?cs
if:fullpage ?>col-16<?cs
elif:training||guide ?>col-8<?cs
else ?>col-9<?cs /if ?>" style="padding-top:4px">
@@ -103,7 +103,7 @@
<?cs /if ?>
</div>
<?cs if:!fullscreen ?>
- <div class="paging-links layout-content-col col-4">
+ <div class="paging-links col-4">
<?cs if:(design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
<a href="#" class="prev-page-link hide"
zh-tw-lang="上一堂課"
@@ -128,7 +128,7 @@
<?cs # for training classes, provide a different kind of link when the next page is a different class ?>
<?cs if:training && !page.article ?>
- <div class="layout-content-row content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
<a href="#" class="next-class-link hide">Next class: </a>
</div>
<?cs /if ?>
diff --git a/tools/droiddoc/templates-sdk/sampleindex.cs b/tools/droiddoc/templates-sdk/sampleindex.cs
index 1bacb53..e62d3fe 100644
--- a/tools/droiddoc/templates-sdk/sampleindex.cs
+++ b/tools/droiddoc/templates-sdk/sampleindex.cs
@@ -82,9 +82,9 @@
<?cs /if ?><?cs # end if/else online docs ?>
<div class="content-footer <?cs
if:fullpage ?>wrap<?cs
- else ?>layout-content-row<?cs /if ?>"
+ else ?>cols<?cs /if ?>"
itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div class="layout-content-col <?cs
+ <div class="<?cs
if:fullpage ?>col-16<?cs
elif:training||guide ?>col-8<?cs
else ?>col-9<?cs /if ?>" style="padding-top:4px">
@@ -93,7 +93,7 @@
<?cs /if ?>
</div>
<?cs if:!fullscreen ?>
- <div class="paging-links layout-content-col col-4">
+ <div class="paging-links col-4">
<?cs if:(design||training||walkthru) && !page.landing && !page.trainingcourse && !footer.hide ?>
<a href="#" class="prev-page-link hide"
zh-tw-lang="上一堂課"
@@ -118,7 +118,7 @@
<?cs # for training classes, provide a different kind of link when the next page is a different class ?>
<?cs if:training && !page.article ?>
- <div class="layout-content-row content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
+ <div class="content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
<a href="#" class="next-class-link hide">Next class: </a>
</div>
<?cs /if ?>
diff --git a/tools/droiddoc/templates-sdk/sdkpage.cs b/tools/droiddoc/templates-sdk/sdkpage.cs
index 817ac47..8ec034f 100644
--- a/tools/droiddoc/templates-sdk/sdkpage.cs
+++ b/tools/droiddoc/templates-sdk/sdkpage.cs
@@ -116,6 +116,7 @@
<td><?cs var:ndk.win64.legacy_bytes ?></td>
<td><?cs var:ndk.win64.legacy_checksum ?></td>
</tr> -->
+<!-- (this item is deprecated)
<tr>
<td>Mac OS X 32-bit</td>
<td>
@@ -124,8 +125,9 @@
</td>
<td><?cs var:ndk.mac32_bytes ?></td>
<td><?cs var:ndk.mac32_checksum ?></td>
- </tr>
- <!-- <tr>
+ </tr> -->
+ <!-- (this item is deprecated)
+ <tr>
<td>
<a onClick="return onDownload(this)"
href="http://dl.google.com/android/ndk/<?cs var:ndk.mac32.legacy_download ?>"><?cs var:ndk.mac32.legacy_download ?></a>
@@ -399,9 +401,6 @@
-</div><!-- end col-13 for lower-half content -->
-
-
<script>
diff --git a/tools/droiddoc/templates-sdk/trailer.cs b/tools/droiddoc/templates-sdk/trailer.cs
index 337f8d3..225b2c1 100644
--- a/tools/droiddoc/templates-sdk/trailer.cs
+++ b/tools/droiddoc/templates-sdk/trailer.cs
@@ -1,3 +1,4 @@
+</div> <!-- end .cols --> <?cs # normally opened by header.cs ?>
</div> <!-- end body-content --> <?cs # normally opened by header.cs ?>
<?cs if:carousel ?>
diff --git a/tools/fs_config/fs_config.c b/tools/fs_config/fs_config.c
index fac3d93..e797957 100644
--- a/tools/fs_config/fs_config.c
+++ b/tools/fs_config/fs_config.c
@@ -67,16 +67,17 @@
}
static void usage() {
- fprintf(stderr, "Usage: fs_config [-S context_file] [-C]\n");
+ fprintf(stderr, "Usage: fs_config [-D product_out_path] [-S context_file] [-C]\n");
}
int main(int argc, char** argv) {
char buffer[1024];
const char* context_file = NULL;
+ const char* product_out_path = NULL;
struct selabel_handle* sehnd = NULL;
int print_capabilities = 0;
int opt;
- while((opt = getopt(argc, argv, "CS:")) != -1) {
+ while((opt = getopt(argc, argv, "CS:D:")) != -1) {
switch(opt) {
case 'C':
print_capabilities = 1;
@@ -84,6 +85,9 @@
case 'S':
context_file = optarg;
break;
+ case 'D':
+ product_out_path = optarg;
+ break;
default:
usage();
exit(EXIT_FAILURE);
@@ -114,7 +118,7 @@
unsigned uid = 0, gid = 0, mode = 0;
uint64_t capabilities;
- fs_config(buffer, is_dir, &uid, &gid, &mode, &capabilities);
+ fs_config(buffer, is_dir, product_out_path, &uid, &gid, &mode, &capabilities);
printf("%s %d %d %o", buffer, uid, gid, mode);
if (sehnd != NULL) {
diff --git a/tools/fs_get_stats/fs_get_stats.c b/tools/fs_get_stats/fs_get_stats.c
index a9814b9..159e2aa 100644
--- a/tools/fs_get_stats/fs_get_stats.c
+++ b/tools/fs_get_stats/fs_get_stats.c
@@ -25,11 +25,12 @@
{
fprintf(stderr, "fs_get_stats: retrieve the target file stats "
"for the specified file\n");
- fprintf(stderr, "usage: fs_get_stats cur_perms is_dir filename\n");
+ fprintf(stderr, "usage: fs_get_stats cur_perms is_dir filename targetout\n");
fprintf(stderr, "\tcur_perms - The current permissions of "
"the file\n");
fprintf(stderr, "\tis_dir - Is filename is a dir, 1. Otherwise, 0.\n");
fprintf(stderr, "\tfilename - The filename to lookup\n");
+ fprintf(stderr, "\ttargetout - The target out path to query device specific FS configs\n");
fprintf(stderr, "\n");
}
@@ -42,7 +43,7 @@
unsigned uid = (unsigned)-1;
unsigned gid = (unsigned)-1;
- if (argc < 4) {
+ if (argc < 5) {
ERROR("Invalid arguments\n");
print_help();
exit(-1);
@@ -58,7 +59,7 @@
is_dir = 1;
uint64_t capabilities;
- fs_config(argv[3], is_dir, &uid, &gid, &perms, &capabilities);
+ fs_config(argv[3], is_dir, argv[4], &uid, &gid, &perms, &capabilities);
fprintf(stdout, "%d %d 0%o\n", uid, gid, perms);
return 0;
diff --git a/tools/mktarball.sh b/tools/mktarball.sh
index 3e32006..ef0fe86 100755
--- a/tools/mktarball.sh
+++ b/tools/mktarball.sh
@@ -5,8 +5,9 @@
# $3: subdir to tar up (from $2)
# $4: target tar name
# $5: target tarball name (usually $(3).bz2)
+# $6: TARGET_OUT path to query device specific FS configs
-if [ $# -ne 5 ]; then
+if [ $# -ne 6 ]; then
echo "Error: wrong number of arguments in cmd: $0 $* "
exit 1
fi
@@ -16,6 +17,7 @@
dir_to_tar=$3
target_tar=`readlink -f $4`
target_tarball=`readlink -f $5`
+target_out=`readlink -f $6`
cd $2
@@ -28,7 +30,7 @@
for f in ${subdirs} ${files} ; do
curr_perms=`stat -c 0%a $f`
[ -d "$f" ] && is_dir=1 || is_dir=0
- new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f}`
+ new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f} ${target_out}`
new_uid=`echo ${new_info} | awk '{print $1;}'`
new_gid=`echo ${new_info} | awk '{print $2;}'`
new_perms=`echo ${new_info} | awk '{print $3;}'`
diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py
index 74a5452..f90f9be 100755
--- a/tools/releasetools/build_image.py
+++ b/tools/releasetools/build_image.py
@@ -26,9 +26,12 @@
import subprocess
import sys
import commands
+import common
import shutil
import tempfile
+OPTIONS = common.OPTIONS
+
FIXED_SALT = "aee087a5be3b982978c923f566a94613496b417f2af592639bc80d141e34dfe7"
def RunCommand(cmd):
@@ -57,6 +60,7 @@
def GetVerityMetadataSize(partition_size):
cmd = "system/extras/verity/build_verity_metadata.py -s %d"
cmd %= partition_size
+
status, output = commands.getstatusoutput(cmd)
if status:
print output
@@ -164,7 +168,11 @@
image_size = prop_dict["partition_size"]
block_dev = prop_dict["verity_block_device"]
signer_key = prop_dict["verity_key"] + ".pk8"
- signer_path = prop_dict["verity_signer_cmd"]
+ if OPTIONS.verity_signer_path is not None:
+ signer_path = OPTIONS.verity_signer_path + ' '
+ signer_path += ' '.join(OPTIONS.verity_signer_args)
+ else:
+ signer_path = prop_dict["verity_signer_cmd"]
# make a tempdir
tempdir_name = tempfile.mkdtemp(suffix="_verity_images")
@@ -196,13 +204,14 @@
shutil.rmtree(tempdir_name, ignore_errors=True)
return True
-def BuildImage(in_dir, prop_dict, out_file):
+def BuildImage(in_dir, prop_dict, out_file, target_out=None):
"""Build an image to out_file from in_dir with property prop_dict.
Args:
in_dir: path of input directory.
prop_dict: property dictionary.
out_file: path of the output image file.
+ target_out: path of the product out directory to read device specific FS config files.
Returns:
True iff the image is built successfully.
@@ -243,6 +252,7 @@
# verified.
if verity_supported and is_verity_partition and fs_spans_partition:
partition_size = int(prop_dict.get("partition_size"))
+
adjusted_size = AdjustPartitionSizeForVerity(partition_size)
if not adjusted_size:
return False
@@ -263,6 +273,8 @@
build_command.extend(["-T", str(prop_dict["timestamp"])])
if fs_config:
build_command.extend(["-C", fs_config])
+ if target_out:
+ build_command.extend(["-D", target_out])
if "block_list" in prop_dict:
build_command.extend(["-B", prop_dict["block_list"]])
build_command.extend(["-L", prop_dict["mount_point"]])
@@ -273,8 +285,14 @@
build_command.extend([in_dir, out_file])
build_command.extend(["-s"])
build_command.extend(["-m", prop_dict["mount_point"]])
+ if target_out:
+ build_command.extend(["-d", target_out])
if "selinux_fc" in prop_dict:
build_command.extend(["-c", prop_dict["selinux_fc"]])
+ if "squashfs_compressor" in prop_dict:
+ build_command.extend(["-z", prop_dict["squashfs_compressor"]])
+ if "squashfs_compressor_opt" in prop_dict:
+ build_command.extend(["-zo", prop_dict["squashfs_compressor_opt"]])
elif fs_type.startswith("f2fs"):
build_command = ["mkf2fsuserimg.sh"]
build_command.extend([out_file, prop_dict["partition_size"]])
@@ -415,6 +433,8 @@
copy_prop("ramdisk_dir", "ramdisk_dir")
copy_prop("ramdisk_fs_config", "ramdisk_fs_config")
copy_prop("has_ext4_reserved_blocks", "has_ext4_reserved_blocks")
+ copy_prop("system_squashfs_compressor", "squashfs_compressor")
+ copy_prop("system_squashfs_compressor_opt", "squashfs_compressor_opt")
elif mount_point == "data":
# Copy the generic fs type first, override with specific one if available.
copy_prop("fs_type", "fs_type")
@@ -453,13 +473,14 @@
def main(argv):
- if len(argv) != 3:
+ if len(argv) != 4:
print __doc__
sys.exit(1)
in_dir = argv[0]
glob_dict_file = argv[1]
out_file = argv[2]
+ target_out = argv[3]
glob_dict = LoadGlobalDict(glob_dict_file)
if "mount_point" in glob_dict:
@@ -485,7 +506,7 @@
image_properties = ImagePropFromGlobalDict(glob_dict, mount_point)
- if not BuildImage(in_dir, image_properties, out_file):
+ if not BuildImage(in_dir, image_properties, out_file, target_out):
print >> sys.stderr, "error: failed to build %s from %s" % (out_file,
in_dir)
exit(1)
diff --git a/tools/releasetools/check_target_files_signatures.py b/tools/releasetools/check_target_files_signatures.py
index dd57033..5c541ab 100755
--- a/tools/releasetools/check_target_files_signatures.py
+++ b/tools/releasetools/check_target_files_signatures.py
@@ -331,7 +331,7 @@
by_certpair = {}
- for i in all:
+ for i in all_apks:
if i in self.apks:
if i in other.apks:
# in both; should have same set of certs
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 0d8ca34..fe40a72 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -51,6 +51,9 @@
self.private_key_suffix = ".pk8"
# use otatools built boot_signer by default
self.boot_signer_path = "boot_signer"
+ self.boot_signer_args = []
+ self.verity_signer_path = None
+ self.verity_signer_args = []
self.verbose = False
self.tempfiles = []
self.device_specific = None
@@ -397,11 +400,14 @@
assert p.returncode == 0, "mkbootimg of %s image failed" % (
os.path.basename(sourcedir),)
- if info_dict.get("verity_key", None):
+ if (info_dict.get("boot_signer", None) == "true" and
+ info_dict.get("verity_key", None)):
path = "/" + os.path.basename(sourcedir).lower()
- cmd = [OPTIONS.boot_signer_path, path, img.name,
- info_dict["verity_key"] + ".pk8",
- info_dict["verity_key"] + ".x509.pem", img.name]
+ cmd = [OPTIONS.boot_signer_path]
+ cmd.extend(OPTIONS.boot_signer_args)
+ cmd.extend([path, img.name,
+ info_dict["verity_key"] + ".pk8",
+ info_dict["verity_key"] + ".x509.pem", img.name])
p = Run(cmd, stdout=subprocess.PIPE)
p.communicate()
assert p.returncode == 0, "boot_signer of %s image failed" % path
@@ -694,7 +700,8 @@
argv, "hvp:s:x:" + extra_opts,
["help", "verbose", "path=", "signapk_path=", "extra_signapk_args=",
"java_path=", "java_args=", "public_key_suffix=",
- "private_key_suffix=", "boot_signer_path=", "device_specific=",
+ "private_key_suffix=", "boot_signer_path=", "boot_signer_args=",
+ "verity_signer_path=", "verity_signer_args=", "device_specific=",
"extra="] +
list(extra_long_opts))
except getopt.GetoptError as err:
@@ -724,6 +731,12 @@
OPTIONS.private_key_suffix = a
elif o in ("--boot_signer_path",):
OPTIONS.boot_signer_path = a
+ elif o in ("--boot_signer_args",):
+ OPTIONS.boot_signer_args = shlex.split(a)
+ elif o in ("--verity_signer_path",):
+ OPTIONS.verity_signer_path = a
+ elif o in ("--verity_signer_args",):
+ OPTIONS.verity_signer_args = shlex.split(a)
elif o in ("-s", "--device_specific"):
OPTIONS.device_specific = a
elif o in ("-x", "--extra"):