am 27fe9406: am 7e65b6c1: Merge "Remove tblgen and clang-tblgen from prebuilts."
* commit '27fe940676b568bb9a0af889028495fab73853f2':
Remove tblgen and clang-tblgen from prebuilts.
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 4765dfe..92e02a1 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -211,9 +211,18 @@
# 4.4.2
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+# "L" and beyond.
+# Make libart the default runtime
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+
# Rename persist.sys.dalvik.vm.lib to allow new default
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
+# KKWT development
+$(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/*)
+
# Add ro.product.cpu.abilist{32,64} to build.prop.
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
diff --git a/core/Makefile b/core/Makefile
index 1f5291d..889b241 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -909,11 +909,6 @@
.PHONY: stnod
stnod: systemtarball-nodeps
-# For platform-java goal, add platform as well
-ifneq (,$(filter platform-java, $(MAKECMDGOALS)))
-PLATFORM_ZIP_ADD_JAVA := true
-endif
-
#######
## platform.zip: system, plus other files to be used in PDK fusion build,
## in a zip file
@@ -930,7 +925,7 @@
$(TARGET_COPY_OUT_SYSTEM) \
$(patsubst $(PRODUCT_OUT)/%, %, $(TARGET_OUT_NOTICE_FILES)) \
$(addprefix symbols/,$(PDK_SYMBOL_FILES_LIST))
-ifeq (true,$(PLATFORM_ZIP_ADD_JAVA))
+ifneq ($(PDK_PLATFORM_JAVA_ZIP_CONTENTS),)
$(hide) cd $(OUT_DIR) && zip -qry $(patsubst $(OUT_DIR)/%,%,$@) $(PDK_PLATFORM_JAVA_ZIP_CONTENTS)
endif
ifneq ($(PDK_PLATFORM_ZIP_PRODUCT_BINARIES),)
@@ -1300,6 +1295,9 @@
.PHONY: target-files-package
target-files-package: $(BUILT_TARGET_FILES_PACKAGE)
+ifneq ($(filter $(MAKECMDGOALS),target-files-package),)
+$(call dist-for-goals, target-files-package, $(BUILT_TARGET_FILES_PACKAGE))
+endif
ifneq ($(TARGET_PRODUCT),sdk)
ifeq ($(filter generic%,$(TARGET_DEVICE)),)
@@ -1566,7 +1564,6 @@
sdk_atree_files := \
$(atree_dir)/sdk.exclude.atree \
- $(atree_dir)/sdk.atree \
$(atree_dir)/sdk-$(HOST_OS)-$(HOST_ARCH).atree \
$(sdk_tools_atree_files)
@@ -1578,6 +1575,12 @@
sdk_atree_files += $(atree_dir)/sdk-android-$(TARGET_CPU_ABI).atree
endif
+ifneq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ATREE_FILES),)
+sdk_atree_files += $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SDK_ATREE_FILES)
+else
+sdk_atree_files += $(atree_dir)/sdk.atree
+endif
+
deps := \
$(target_notice_file_txt) \
$(tools_notice_file_txt) \
@@ -1589,7 +1592,7 @@
$(INSTALLED_SDK_BUILD_PROP_TARGET) \
$(INSTALLED_BUILD_PROP_TARGET) \
$(ATREE_FILES) \
- $(atree_dir)/sdk.atree \
+ $(sdk_atree_files) \
$(sdk_tools_atree_files) \
$(HOST_OUT_EXECUTABLES)/atree \
$(HOST_OUT_EXECUTABLES)/line_endings
diff --git a/core/android_manifest.mk b/core/android_manifest.mk
new file mode 100644
index 0000000..21b95c2
--- /dev/null
+++ b/core/android_manifest.mk
@@ -0,0 +1,25 @@
+# Handle AndroidManifest.xmls
+# Input: LOCAL_MANIFEST_FILE, LOCAL_FULL_MANIFEST_FILE, LOCAL_FULL_LIBS_MANIFEST_FILES
+# Output: full_android_manifest
+
+ifeq ($(strip $(LOCAL_MANIFEST_FILE)),)
+ LOCAL_MANIFEST_FILE := AndroidManifest.xml
+endif
+ifdef LOCAL_FULL_MANIFEST_FILE
+ full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE)
+else
+ full_android_manifest := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE)
+endif
+
+# Set up rules to merge library manifest files
+ifdef LOCAL_FULL_LIBS_MANIFEST_FILES
+main_android_manifest := $(full_android_manifest)
+full_android_manifest := $(intermediates.COMMON)/AndroidManifest.xml
+$(full_android_manifest): PRIVATE_LIBS_MANIFESTS := $(LOCAL_FULL_LIBS_MANIFEST_FILES)
+$(full_android_manifest) : $(main_android_manifest) $(LOCAL_FULL_LIBS_MANIFEST_FILES)
+ @echo "Merge android manifest files: $@ <-- $^"
+ @mkdir -p $(dir $@)
+ $(hide) $(ANDROID_MANIFEST_MERGER) --main $< --libs $(PRIVATE_LIBS_MANIFESTS) \
+ --out $@
+
+endif
diff --git a/core/cleanbuild.mk b/core/cleanbuild.mk
index fa67332..dfdf43d 100644
--- a/core/cleanbuild.mk
+++ b/core/cleanbuild.mk
@@ -196,7 +196,8 @@
$(PRODUCT_OUT)/obj/EXECUTABLES/adbd_intermediates \
$(PRODUCT_OUT)/obj/EXECUTABLES/init_intermediates \
$(PRODUCT_OUT)/obj/ETC/mac_permissions.xml_intermediates \
- $(PRODUCT_OUT)/obj/ETC/sepolicy_intermediates
+ $(PRODUCT_OUT)/obj/ETC/sepolicy_intermediates \
+ $(PRODUCT_OUT)/obj/ETC/init.environ.rc_intermediates
# The files/dirs to delete during a dataclean, which removes any files
# in the staging and emulator data partitions.
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index fd2b122..6dec940 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -109,6 +109,7 @@
LOCAL_WARNINGS_ENABLE:=
LOCAL_FULL_MANIFEST_FILE:=
LOCAL_MANIFEST_FILE:=
+LOCAL_FULL_LIBS_MANIFEST_FILES:=
LOCAL_RENDERSCRIPT_INCLUDES:=
LOCAL_RENDERSCRIPT_INCLUDES_OVERRIDE:=
LOCAL_RENDERSCRIPT_CC:=
diff --git a/core/config.mk b/core/config.mk
index 4e65049..3e76401 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -385,6 +385,9 @@
FINDBUGS := prebuilt/common/findbugs/bin/findbugs
EMMA_JAR := external/emma/lib/emma$(COMMON_JAVA_PACKAGE_SUFFIX)
+# Tool to merge AndroidManifest.xmls
+ANDROID_MANIFEST_MERGER := java -classpath prebuilts/devtools/tools/lib/manifest-merger.jar com.android.manifmerger.Main merge
+
YACC_HEADER_SUFFIX:= .hpp
# Don't use column under Windows, cygwin or not
diff --git a/core/main.mk b/core/main.mk
index 5175bef..c02ee5b 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -403,7 +403,7 @@
sdk_repo_goal := $(strip $(filter sdk_repo,$(MAKECMDGOALS)))
MAKECMDGOALS := $(strip $(filter-out sdk_repo,$(MAKECMDGOALS)))
-ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild,$(MAKECMDGOALS))),1)
+ifneq ($(words $(filter-out $(INTERNAL_MODIFIER_TARGETS) checkbuild target-files-package,$(MAKECMDGOALS))),1)
$(error The 'sdk' target may not be specified with any other targets)
endif
@@ -774,7 +774,7 @@
dangling_modules := $(filter-out %64,$(dangling_modules))
endif
ifneq ($(dangling_modules),)
- $(error Module names '$(dangling_modules)' in PRODUCT_PACKAGES has nothing to install!)
+ $(warning: Modules '$(dangling_modules)' in PRODUCT_PACKAGES have nothing to install!)
endif
$(foreach m, $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_PACKAGES_DEBUG), \
$(if $(strip $(ALL_MODULES.$(m).INSTALLED)),,\
diff --git a/core/multi_prebuilt.mk b/core/multi_prebuilt.mk
index be60e2f..bc85cea 100644
--- a/core/multi_prebuilt.mk
+++ b/core/multi_prebuilt.mk
@@ -69,7 +69,11 @@
$(if $(7), \
$(eval LOCAL_BUILT_MODULE_STEM := $(7)) \
, \
- $(eval LOCAL_BUILT_MODULE_STEM := $(notdir $(LOCAL_SRC_FILES))) \
+ $(if $(word 2,$(tw)), \
+ $(eval LOCAL_BUILT_MODULE_STEM := $(LOCAL_MODULE)$(suffix $(LOCAL_SRC_FILES))) \
+ , \
+ $(eval LOCAL_BUILT_MODULE_STEM := $(notdir $(LOCAL_SRC_FILES))) \
+ ) \
) \
$(eval LOCAL_MODULE_SUFFIX := $(suffix $(LOCAL_SRC_FILES))) \
$(if $(filter user,$(TARGET_BUILD_VARIANT)), \
diff --git a/core/package_internal.mk b/core/package_internal.mk
index 768032e..5771e98 100644
--- a/core/package_internal.mk
+++ b/core/package_internal.mk
@@ -52,16 +52,6 @@
endif
LOCAL_MODULE := $(LOCAL_PACKAGE_NAME)
-ifeq ($(strip $(LOCAL_MANIFEST_FILE)),)
-LOCAL_MANIFEST_FILE := AndroidManifest.xml
-endif
-
-# If you need to put the MANIFEST_FILE outside of LOCAL_PATH
-# you can use FULL_MANIFEST_FILE
-ifeq ($(strip $(LOCAL_FULL_MANIFEST_FILE)),)
-LOCAL_FULL_MANIFEST_FILE := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE)
-endif
-
ifneq ($(strip $(LOCAL_MODULE_CLASS)),)
$(error $(LOCAL_PATH): Package modules may not set LOCAL_MODULE_CLASS)
endif
@@ -94,8 +84,14 @@
LOCAL_RESOURCE_DIR := $(package_resource_overlays) $(LOCAL_RESOURCE_DIR)
-all_assets := $(call find-subdir-assets,$(LOCAL_ASSET_DIR))
-all_assets := $(addprefix $(LOCAL_ASSET_DIR)/,$(patsubst assets/%,%,$(all_assets)))
+all_assets := $(strip \
+ $(foreach dir, $(LOCAL_ASSET_DIR), \
+ $(addprefix $(dir)/, \
+ $(patsubst assets/%,%, \
+ $(call find-subdir-assets, $(dir)) \
+ ) \
+ ) \
+ ))
all_resources := $(strip \
$(foreach dir, $(LOCAL_RESOURCE_DIR), \
@@ -185,7 +181,8 @@
LOCAL_SDK_RES_VERSION:=$(LOCAL_SDK_VERSION)
endif
-full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE)
+include $(BUILD_SYSTEM)/android_manifest.mk
+
$(LOCAL_INTERMEDIATE_TARGETS): \
PRIVATE_ANDROID_MANIFEST := $(full_android_manifest)
ifneq (,$(filter-out current, $(LOCAL_SDK_VERSION)))
diff --git a/core/pathmap.mk b/core/pathmap.mk
index 28661c2..ee79647 100644
--- a/core/pathmap.mk
+++ b/core/pathmap.mk
@@ -105,12 +105,15 @@
# A list of all source roots under frameworks/support.
#
FRAMEWORKS_SUPPORT_SUBDIRS := \
+ annotations \
v4 \
v7/gridlayout \
v7/appcompat \
v7/mediarouter \
+ v7/recyclerview \
v8/renderscript \
- v13
+ v13 \
+ v17/leanback
#
# A version of FRAMEWORKS_SUPPORT_SUBDIRS that is expanded to full paths from
diff --git a/core/pdk_config.mk b/core/pdk_config.mk
index 9590d70..b0cccc9 100644
--- a/core/pdk_config.mk
+++ b/core/pdk_config.mk
@@ -37,11 +37,16 @@
endif # fusion
endif # pdk or fusion
+PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR :=
+PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR := \
+ host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates
+PDK_PLATFORM_JAVA_ZIP_CONTENTS :=
+
ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP))
# additional items to add to platform.zip for platform-java build
# 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_LIB_DIR := \
+PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \
target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \
target/common/obj/JAVA_LIBRARIES/core_intermediates \
target/common/obj/JAVA_LIBRARIES/core-junit_intermediates \
@@ -52,14 +57,21 @@
target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \
target/common/obj/JAVA_LIBRARIES/voip-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-ex-camera2_intermediates \
+ target/common/obj/JAVA_LIBRARIES/android-common_intermediates \
+
# not java libraries
-PDK_PLATFORM_JAVA_ZIP_CONTENTS := \
+PDK_PLATFORM_JAVA_ZIP_CONTENTS += \
target/common/obj/APPS/framework-res_intermediates/package-export.apk \
target/common/obj/APPS/framework-res_intermediates/src/R.stamp
+endif # platform-java or FUSION build
+
+PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR := \
+ $(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR) \
+ $(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)
-endif # platform-java or FUSION build
# check and override java support level
ifneq ($(TARGET_BUILD_PDK)$(PDK_FUSION_PLATFORM_ZIP),)
@@ -117,6 +129,11 @@
$(hide) rm -rf $@
$(hide) cp -fpPR $< $@
+# implicit rules for host java files
+$(HOST_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/host/common/% $(_pdk_fusion_stamp)
+ @mkdir -p $(dir $@)
+ $(hide) cp -fpPR $< $@
+
ifeq (true,$(TARGET_BUILD_PDK_JAVA_PLATFORM))
PDK_FUSION_OUT_DIR := $(OUT_DIR)
@@ -137,11 +154,11 @@
target/common/obj/APPS/framework-res_intermediates/package-export.apk))
# javalib.jar should pull classes.jar as classes.jar is not explicitly pulled.
-$(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR),\
+$(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR),\
$(eval $(call JAVA_dependency_template,$(lib_dir)/javalib.jar,\
$(lib_dir)/classes.jar)))
-# implicit rules for all others
+# implicit rules for all other target files
$(TARGET_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/target/common/% $(_pdk_fusion_stamp)
@mkdir -p $(dir $@)
$(hide) cp -fpPR $< $@
diff --git a/core/product.mk b/core/product.mk
index cf6fb9a..3b6b27e 100644
--- a/core/product.mk
+++ b/core/product.mk
@@ -86,6 +86,7 @@
PRODUCT_PACKAGE_OVERLAYS \
DEVICE_PACKAGE_OVERLAYS \
PRODUCT_TAGS \
+ PRODUCT_SDK_ATREE_FILES \
PRODUCT_SDK_ADDON_NAME \
PRODUCT_SDK_ADDON_COPY_FILES \
PRODUCT_SDK_ADDON_COPY_MODULES \
diff --git a/core/proguard_basic_keeps.flags b/core/proguard_basic_keeps.flags
index af0e05d..622d4ee 100644
--- a/core/proguard_basic_keeps.flags
+++ b/core/proguard_basic_keeps.flags
@@ -49,9 +49,10 @@
# -keep class * extends android.preference.Preference
# -keep class * extends android.app.BackupAgent
-#-keep class * implements android.os.Parcelable {
-# public static final android.os.Parcelable$Creator *;
-#}
+# Parcelable CREATORs must be kept for Parcelable functionality
+-keep class * implements android.os.Parcelable {
+ public static final ** CREATOR;
+}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
diff --git a/core/static_java_library.mk b/core/static_java_library.mk
index f95a382..f31ccd8 100644
--- a/core/static_java_library.mk
+++ b/core/static_java_library.mk
@@ -66,14 +66,7 @@
ifneq (,$(all_resources))
R_file_stamp := $(LOCAL_INTERMEDIATE_SOURCE_DIR)/R.stamp
-ifeq ($(strip $(LOCAL_MANIFEST_FILE)),)
- LOCAL_MANIFEST_FILE := AndroidManifest.xml
-endif
-ifdef LOCAL_FULL_MANIFEST_FILE
- full_android_manifest := $(LOCAL_FULL_MANIFEST_FILE)
-else
- full_android_manifest := $(LOCAL_PATH)/$(LOCAL_MANIFEST_FILE)
-endif
+include $(BUILD_SYSTEM)/android_manifest.mk
LOCAL_SDK_RES_VERSION:=$(strip $(LOCAL_SDK_RES_VERSION))
ifeq ($(LOCAL_SDK_RES_VERSION),)
diff --git a/core/tasks/vendor_module_check.mk b/core/tasks/vendor_module_check.mk
index 6e18901..99d3d9e 100644
--- a/core/tasks/vendor_module_check.mk
+++ b/core/tasks/vendor_module_check.mk
@@ -22,6 +22,7 @@
csr \
elan \
google \
+ htc \
imgtec \
invensense \
intel \
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index 1e172ed..4929abb 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 := 4.4.3
+ PLATFORM_VERSION := KKWT
endif
ifeq "" "$(PLATFORM_SDK_VERSION)"
@@ -59,7 +59,7 @@
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 := KKWT
endif
ifeq "" "$(DEFAULT_APP_TARGET_SDK)"
diff --git a/envsetup.sh b/envsetup.sh
index 60726d3..b5d43ac 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -11,6 +11,7 @@
- mma: Builds all of the modules in the current directory, and their dependencies.
- mmma: Builds all of the modules in the supplied directories, and their dependencies.
- cgrep: Greps on all local C/C++ files.
+- ggrep: Greps on all local Gradle files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
@@ -1065,6 +1066,11 @@
get_build_var TARGET_ARCH
}
+function ggrep()
+{
+ find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f -name "*\.gradle" -print0 | xargs -0 grep --color -n "$@"
+}
+
function jgrep()
{
find . -name .repo -prune -o -name .git -prune -o -name out -prune -o -type f -name "*\.java" -print0 | xargs -0 grep --color -n "$@"
diff --git a/target/product/base.mk b/target/product/base.mk
index 8aa3bc0..4b8326d 100644
--- a/target/product/base.mk
+++ b/target/product/base.mk
@@ -49,7 +49,6 @@
libeffects \
libinput \
libiprouteutil \
- libjni_latinime \
libjnigraphics \
libldnhncr \
libmedia \
@@ -58,7 +57,6 @@
libmtp \
libnetlink \
libnetutils \
- libpac \
libreference-ril \
libreverbwrapper \
libril \
@@ -103,7 +101,6 @@
tc \
vdc \
vold \
- webview \
wm
diff --git a/target/product/core.mk b/target/product/core.mk
index c5ef2aa..8c88b94 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -29,6 +29,7 @@
KeyChain \
PicoTts \
PacProcessor \
+ libpac \
ProxyHandler \
SharedStorageBackup \
VpnDialogs
diff --git a/target/product/core_minimal.mk b/target/product/core_minimal.mk
index 7e2b19e..fc69973 100644
--- a/target/product/core_minimal.mk
+++ b/target/product/core_minimal.mk
@@ -57,7 +57,8 @@
make_ext4fs \
screencap \
sensorservice \
- uiautomator
+ uiautomator \
+ webview
# The order of PRODUCT_BOOT_JARS matters.
PRODUCT_BOOT_JARS := \
@@ -74,8 +75,8 @@
apache-xml \
webviewchromium
-PRODUCT_RUNTIMES := runtime_libart_default
-PRODUCT_RUNTIMES += runtime_libdvm
+PRODUCT_RUNTIMES := runtime_libdvm_default
+PRODUCT_RUNTIMES += runtime_libart
PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \
ro.zygote=zygote32
diff --git a/target/product/core_tiny.mk b/target/product/core_tiny.mk
new file mode 100644
index 0000000..02140af
--- /dev/null
+++ b/target/product/core_tiny.mk
@@ -0,0 +1,101 @@
+#
+# Copyright (C) 2013 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.
+#
+# Tiny configuration for small devices such as wearables. Includes base and embedded.
+# No telephony
+
+PRODUCT_PACKAGES := \
+ Bluetooth \
+ CertInstaller \
+ FusedLocation \
+ InputDevices \
+ bluetooth-health \
+ hostapd \
+ wpa_supplicant.conf
+
+PRODUCT_PACKAGES += \
+ audio \
+ clatd \
+ clatd.conf \
+ dhcpcd.conf \
+ network \
+ pand \
+ pppd \
+ sdptool \
+ wpa_supplicant
+
+PRODUCT_PACKAGES += \
+ audio.primary.default \
+ audio_policy.default \
+ local_time.default \
+ power.default
+
+PRODUCT_PACKAGES += \
+ local_time.default
+
+PRODUCT_PACKAGES += \
+ BackupRestoreConfirmation \
+ DefaultContainerService \
+ SettingsProvider \
+ Shell \
+ bu \
+ com.android.location.provider \
+ com.android.location.provider.xml \
+ framework-res \
+ installd \
+ ip \
+ ip-up-vpn \
+ ip6tables \
+ iptables \
+ keystore \
+ keystore.default \
+ libOpenMAXAL \
+ libOpenSLES \
+ libdownmix \
+ libfilterfw \
+ libsqlite_jni \
+ libwilhelm \
+ make_ext4fs \
+ screencap \
+ sensorservice \
+ uiautomator
+
+# The order matters
+PRODUCT_BOOT_JARS := \
+ core \
+ conscrypt \
+ okhttp \
+ core-junit \
+ bouncycastle \
+ ext \
+ framework \
+ framework2 \
+ android.policy \
+ services \
+ apache-xml
+
+PRODUCT_RUNTIMES := runtime_libdvm_default
+
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.carrier=unknown
+
+$(call inherit-product-if-exists, frameworks/base/data/fonts/fonts.mk)
+
+# Overrides
+PRODUCT_BRAND := tiny
+PRODUCT_DEVICE := tiny
+PRODUCT_NAME := core_tiny
+
+$(call inherit-product, $(SRC_TARGET_DIR)/product/base.mk)
diff --git a/target/product/embedded.mk b/target/product/embedded.mk
index 60a19da..8764b86 100644
--- a/target/product/embedded.mk
+++ b/target/product/embedded.mk
@@ -20,6 +20,7 @@
PRODUCT_PACKAGES += \
adb \
adbd \
+ atrace \
bootanimation \
debuggerd \
debuggerd64 \
@@ -58,6 +59,7 @@
libutils \
linker \
linker64 \
+ lmkd \
logcat \
logwrapper \
mkshrc \
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/css/default.css b/tools/droiddoc/templates-sdk-dyn/assets/css/default.css
index 7515360..e7ab40f 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk-dyn/assets/css/default.css
@@ -98,7 +98,8 @@
#devdoc-nav.fixed {
position: fixed;
margin:0;
- top: 20px; }
+ top: 65px; /* sticky-header height + 20px gutter */
+}
#devdoc-nav span.small {
font-size:12px;
@@ -528,9 +529,9 @@
width:262px;
}
- .paging-links a.start-class-link {
- width:100%;
- text-align:right;
+ .paging-links a.start-class-link {
+ width:100%;
+ text-align:right;
}
/* list of classes on course landing page */
@@ -1365,8 +1366,7 @@
.training-nav-top, .training-nav-bottom,
#doc-col .content-footer,
.nav-x, .nav-y,
- .paging-links,
- a.totop {
+ .paging-links {
display: none !important;
}
@@ -1491,7 +1491,8 @@
Header, Login, Nav-X, Search
*/
#header {
- padding: 2.2em 0 0.2em 0;
+ margin: 0;
+ padding: 0;
}
#header:before, #header:after {
content: "";
@@ -1515,12 +1516,11 @@
.develop a.selected {
color: #F80;
}
+
.distribute a.selected {
color: #9C0;
}
-
-
.nav-x li {
display: inline;
margin-right: 45px;
@@ -1631,6 +1631,8 @@
.search-dropdown li a:hover h6, .search-dropdown li a:hover .desc {
color: #33b5e5
}
+
+
/* --------------------------------------------------------------------------
Buttons
*/
@@ -1828,8 +1830,8 @@
#qv-wrapper {
float:right;
clear:right;
- margin:0 0 0 20px; /* negative top-margin to counter the content-header bottom margin */
- padding:0 0 20px;
+ margin:0 0 0 30px; /* negative top-margin to counter the content-header bottom margin */
+ padding:0 0 30px;
}
#tb-wrapper {
@@ -1900,7 +1902,6 @@
.sidebox h5 {
font-weight:bold;
margin:0 0 10px;
- line-height: 16px;
}
.sidebox * {
@@ -2871,26 +2872,6 @@
margin:0 0 10px;
}
-#devdoc-nav a.totop {
- display:block;
- top:0;
- width:inherit;
- background: transparent url(../images/styles/gototop.png) no-repeat scroll 50% 50%;
- text-indent:-9999em;
-}
-#devdoc-nav a.totop {
- position:fixed;
- display:none;
-}
-#devdoc-nav a.totop:hover {
- background-color:#33B5E5;
-}
-
-.content-footer a.totop {
- text-transform:uppercase;
- line-height:30px;
-}
-
.expandable {
height:34px;
padding-left:20px;
@@ -3955,13 +3936,174 @@
z-index:100;
}
+
+
+
+
+/************ 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: 36px !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;
+}
+#context .breadcrumb {
+ float: left;
+ margin-bottom: 10px;
+}
+#context .util {
+ float: right;
+ margin-right: 20px;
+}
+
+.breadcrumb {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ position: relative;
+}
+.breadcrumb li {
+ float: left;
+ padding: 0 20px 0 0;
+ color: #000;
+ white-space: nowrap;
+}
+.breadcrumb li a {
+ color: #000;
+}
+.breadcrumb li:after {
+ content: url(../images/breadcrumb.png);
+ position: relative;
+ top: 1px;
+ left: 10px;
+ width: 5px;
+ height: 10px;
+}
+.breadcrumb li.current {
+ font-weight: 700;
+}
+.breadcrumb li.current:after {
+ 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);
+ 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;
}
-
-
-
-
+}
@@ -4436,11 +4578,11 @@
}
#nav-x {
- padding-top: 14px;
+ padding-top: 13px;
}
#nav-x .wrap {
- min-height:34px;
+ min-height:32px;
}
#nav-x .wrap,
@@ -4782,53 +4924,6 @@
-/************ DISTRIBUTE HOMEPAGE ***************/
-
-.marquee {
- width: 760px;
-}
-.marquee .main-img {
- float: left;
- margin-top: 20px;
- width: 490px;
-}
-.marquee .copy {
- width: 270px;
- float: left;
- margin-top: 30px;
-}
-.distribute-features {
- margin: 0;
-}
-.distribute-features ul {
- margin: 0;
-}
-.distribute-features ul li {
- list-style: none;
- float: left;
- border-top: 1px solid #9C0;
- width: 220px;
- margin-right: 50px;
-}
-.distribute-features ul li.last {
- margin-right: 0px;
-}
-
-.distribute-features .distribute-link li a {
- color:red !important;
-}
-
-.distribute-features .distribute-link li a,
-.distribute-features .distribute-link li a:active {
- color:#555 !important;
-}
-
-.distribute-features .distribute-link li a:hover,
-.distribute-features .distribute-link li a:hover * {
- color:#7AA1B0 !important;
-}
-
-
/************ DEVELOP TOPIC CONTAINERS ************/
.landing-banner,
@@ -4872,22 +4967,16 @@
.landing-docs a {
color:#333 !important;
}
-
.landing-docs a:hover,
.landing-docs a:hover * {
color:#7AA1B0 !important
}
-
.landing-docs .normal-links a {
color:#258aaf !important;
}
-
.plusone {
float:right;
}
-
-
-
.next-docs {
border-top:1px solid #ccc;
margin:40px 0 0;
@@ -4901,14 +4990,13 @@
.next-docs div:last-child {
margin-right:0;
}
-
.next-docs h2 {
font-size:14px;
line-height:21px;
color:#555;
text-transform:uppercase;
border-bottom:none;
- margin:0 0 1em;
+ margin:0;
padding:5px 0 0;
}
@@ -5006,3 +5094,1263 @@
.fullpage #footer {
margin-top: -40px;
}
+
+/************ 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;
+}
+
+/* A container for grid sets with uppercase h3 and rule */
+.dynamic-grid h3 {
+ font-size:14px;
+ line-height:21px;
+ color:#555;
+ text-transform:uppercase;
+ border-bottom:1px solid #CCC;
+ padding:8px 0 0 1px;
+ margin-bottom:10px;
+ clear:both;
+}
+
+.top-right-float {
+ float: right;
+}
+
+.clearfloat {
+ float: none;
+ 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: 0px 1px 3px rgba(0, 0, 0, 0.14);
+ 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;
+}
+.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;
+ clear: both;
+ visibility: hidden;
+}
+
+.resource-card:hover {
+ cursor: pointer;
+}
+.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;
+}
+
+/* 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;
+}
\ No newline at end of file
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css b/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
index 71cf65b..1093eae 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
+++ b/tools/droiddoc/templates-sdk-dyn/assets/css/fullscreen.css
@@ -15,16 +15,16 @@
@media screen, projection, print {
.full {
- padding: 2.5em 0;
- border-top: solid 1px #ddd;
- border-bottom: solid 1px #ddd;
- background: #f7f7f7;
+ padding: 2.5em 0;
+ border-top: solid 1px #ddd;
+ border-bottom: solid 1px #ddd;
+ background: #f7f7f7;
}
.wrap {
- margin: 0 auto;
- width: 100%;
- min-width:600px;
- clear: both;
+ margin: 0 auto;
+ width: 100%;
+ min-width:600px;
+ clear: both;
}
.cols {
height: 1%;
@@ -170,7 +170,7 @@
max-width: 100%;
}
-#nav-x .wrap,
+#header-wrapper #nav-x div.wrap,
#searchResults.wrap {
max-width:100%;
}
@@ -184,7 +184,18 @@
left:20px; /* !important ... for IE i think */
}
+#sticky-header {
+ padding: 0 20px;
+}
+#sticky-header > div {
+ width: 100%;
+}
+
+.sticky-menu {
+ width:100%;
+ left:-20px;
+}
}
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png b/tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png
new file mode 100644
index 0000000..407a318
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dyn/assets/images/breadcrumb.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png b/tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png
new file mode 100644
index 0000000..aa55f9a
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dyn/assets/images/link-out.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/resource-card-default-android.jpg b/tools/droiddoc/templates-sdk-dyn/assets/images/resource-card-default-android.jpg
new file mode 100644
index 0000000..8050744
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dyn/assets/images/resource-card-default-android.jpg
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/images/stack-arrow-right.png b/tools/droiddoc/templates-sdk-dyn/assets/images/stack-arrow-right.png
new file mode 100644
index 0000000..46d6a50
--- /dev/null
+++ b/tools/droiddoc/templates-sdk-dyn/assets/images/stack-arrow-right.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js b/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
index 6630bf9..09d5f7a 100644
--- a/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk-dyn/assets/js/docs.js
@@ -167,10 +167,12 @@
// highlight Design tab
if ($("body").hasClass("design")) {
$("#header li.design a").addClass("selected");
+ $("#sticky-header").addClass("design");
// highlight Develop tab
} else if ($("body").hasClass("develop") || $("body").hasClass("google")) {
$("#header li.develop a").addClass("selected");
+ $("#sticky-header").addClass("develop");
// In Develop docs, also highlight appropriate sub-tab
var rootDir = pagePathOriginal.substring(1,pagePathOriginal.indexOf('/', 1));
if (rootDir == "training") {
@@ -195,12 +197,34 @@
// highlight Distribute tab
} else if ($("body").hasClass("distribute")) {
$("#header li.distribute a").addClass("selected");
- }
+ $("#sticky-header").addClass("distribute");
+
+ 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 == "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");
+ }
+ } 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
mPagePath = pagePath;
highlightSidenav();
+ buildBreadcrumbs();
// set up prev/next links if they exist
var $selNavLink = $('#nav').find('a[href="' + pagePath + '"]');
@@ -385,70 +409,6 @@
});
- // Set up fixed navbar
- var prevScrollLeft = 0; // used to compare current position to previous position of horiz scroll
- $(window).scroll(function(event) {
- if ($('#side-nav').length == 0) return;
- if (event.target.nodeName == "DIV") {
- // Dump scroll event if the 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
- return;
- }
- var scrollTop = $(window).scrollTop();
- var headerHeight = $('#header').outerHeight();
- var subheaderHeight = $('#nav-x').outerHeight();
- var searchResultHeight = $('#searchResults').is(":visible") ?
- $('#searchResults').outerHeight() : 0;
- var totalHeaderHeight = headerHeight + subheaderHeight + searchResultHeight;
- // we set the navbar fixed when the scroll position is beyond the height of the site header...
- var navBarShouldBeFixed = scrollTop > totalHeaderHeight;
- // ... 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()) {
- navBarShouldBeFixed = false;
- }
-
- 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;
- }
-
- // Don't continue if the header is sufficently far away
- // (to avoid intensive resizing that slows scrolling)
- if (navBarIsFixed && navBarShouldBeFixed) {
- return;
- }
-
- if (navBarIsFixed != navBarShouldBeFixed) {
- if (navBarShouldBeFixed) {
- // make it fixed
- var width = $('#devdoc-nav').width();
- $('#devdoc-nav')
- .addClass('fixed')
- .css({'width':width+'px'})
- .prependTo('#body-content');
- // add neato "back to top" button
- $('#devdoc-nav a.totop').css({'display':'block','width':$("#nav").innerWidth()+'px'});
-
- // update the sidenaav position for side scrolling
- updateSideNavPosition();
- } else {
- // make it static again
- $('#devdoc-nav')
- .removeClass('fixed')
- .css({'width':'auto','margin':''})
- .prependTo('#side-nav');
- $('#devdoc-nav a.totop').hide();
- }
- navBarIsFixed = navBarShouldBeFixed;
- }
-
- resizeNav(250); // pass true in order to delay the scrollbar re-initialization for performance
- });
-
-
var navBarLeftPos;
if ($('#devdoc-nav').length) {
setNavBarLeftPos();
@@ -593,6 +553,22 @@
});
}
+
+/** Create the list of breadcrumb links in the sticky header */
+function buildBreadcrumbs() {
+ var $breadcrumbUl = $("#sticky-header ul.breadcrumb");
+ // Add the secondary horizontal nav item, if provided
+ var $selectedSecondNav = $("div#nav-x ul.nav-x a.selected").clone().removeClass("selected");
+ if ($selectedSecondNav.length) {
+ $breadcrumbUl.prepend($("<li>").append($selectedSecondNav))
+ }
+ // Add the primary horizontal nav
+ var $selectedFirstNav = $("div#header-wrap ul.nav-x a.selected").clone().removeClass("selected");
+ $breadcrumbUl.prepend($("<li>").append($selectedFirstNav));
+}
+
+
+
/** Highlight the current page in sidenav, expanding children as appropriate */
function highlightSidenav() {
// if something is already highlighted, undo it. This is for dynamic navigation (Samples index)
@@ -705,9 +681,8 @@
// Then figure out based on scroll position whether the header is visible
var windowHeight = $window.height();
var scrollTop = $window.scrollTop();
- var headerHeight = $('#header').outerHeight();
- var subheaderHeight = $('#nav-x').outerHeight();
- var headerVisible = (scrollTop < (headerHeight + subheaderHeight));
+ var headerHeight = $('#header-wrapper').outerHeight();
+ var headerVisible = scrollTop < stickyTop;
// 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.
@@ -717,7 +692,7 @@
// Depending on whether the header is visible, set the side nav's height.
if (headerVisible) {
// The sidenav height grows as the header goes off screen
- navHeight = windowHeight - (headerHeight + subheaderHeight - scrollTop) - topMargin;
+ navHeight = windowHeight - (headerHeight - scrollTop) - topMargin;
} else {
// Once header is off screen, the nav height is almost full window height
navHeight = windowHeight - topMargin;
@@ -905,8 +880,115 @@
+var stickyTop;
+/* 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
+ */
+(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();
+ $(el).css({height:height+'px', position:'relative'});
+ var $cardInfo = $(el).find('.card-info');
+
+ $cardInfo.css({position: 'absolute', bottom:'0px', left:'0px', right:'0px', overflow:'visible'});
+ });
+
+ resizeNav(); // must resize once loading is finished
+ });
+
+})();
+
@@ -1724,6 +1806,7 @@
$('.suggest-card').hide();
if ($("#searchResults").is(":hidden") && (search.value != "")) {
// if results aren't showing (and text not empty), return true to allow search to execute
+ $('body,html').animate({scrollTop:0}, '500', 'swing');
return true;
} else {
// otherwise, results are already showing, so allow ajax to auto refresh the results
@@ -2278,13 +2361,13 @@
var query = document.getElementById('search_autocomplete').value;
location.hash = 'q=' + query;
loadSearchResults();
- $("#searchResults").slideDown('slow');
+ $("#searchResults").slideDown('slow', setStickyTop);
return false;
}
function hideResults() {
- $("#searchResults").slideUp();
+ $("#searchResults").slideUp('fast', setStickyTop);
$(".search .close").addClass("hide");
location.hash = '';
@@ -2401,7 +2484,7 @@
return;
} else {
// first time loading search results for this page
- $('#searchResults').slideDown('slow');
+ $('#searchResults').slideDown('slow', setStickyTop);
$(".search .close").removeClass("hide");
loadSearchResults();
}
@@ -2409,19 +2492,22 @@
// when an event on the browser history occurs (back, forward, load) requery hash and do search
$(window).hashchange( function(){
- // Exit if the hash isn't a search query or there's an error in the query
+ // 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")) {
// If the results pane is open, close it.
if (!$("#searchResults").is(":hidden")) {
hideResults();
}
+ // Adjust the scroll position to account for sticky header
+ $(window).scrollTop($(window).scrollTop() - 60);
return;
}
// Otherwise, we have a search to do
var query = decodeURI(getQuery(location.hash));
searchControl.execute(query);
- $('#searchResults').slideDown('slow');
+ $('#searchResults').slideDown('slow', setStickyTop);
$("#search_autocomplete").focus();
$(".search .close").removeClass("hide");
@@ -3233,3 +3319,560 @@
$("#samples").append($ul);
}
+
+
+
+/* ########################################################## */
+/* ################### RESOURCE CARDS ##################### */
+/* ########################################################## */
+
+/** Handle resource queries, collections, and grids (sections). Requires
+ jd_tag_helpers.js and the *_unified_data.js to be loaded. */
+
+(function() {
+ // Prevent the same resource from being loaded more than once per page.
+ var addedPageResources = {};
+
+ $(document).ready(function() {
+ $('.resource-widget').each(function() {
+ initResourceWidget(this);
+ });
+
+ /* Pass the line height to ellipsisfade() to adjust the height of the
+ text container to show the max number of lines possible, without
+ 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-info .text').ellipsisfade(lineHeight);
+ });
+
+ /*
+ Three types of resource layouts:
+ Flow - Uses a fixed row-height flow using float left style.
+ Carousel - Single card slideshow all same dimension absolute.
+ Stack - Uses fixed columns and flexible element height.
+ */
+ function initResourceWidget(widget) {
+ var $widget = $(widget);
+ var isFlow = $widget.hasClass('resource-flow-layout'),
+ 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;
+ var m = $widget.get(0).className.match(/\bcol-(\d+)\b/);
+ if (m) {
+ sizeCols = parseInt(m[1], 10);
+ }
+
+ var opts = {
+ cardSizes: ($widget.data('cardsizes') || '').split(','),
+ maxResults: parseInt($widget.data('maxresults') || '100', 10),
+ itemsPerPage: $widget.data('itemsperpage'),
+ sortOrder: $widget.data('sortorder'),
+ query: $widget.data('query'),
+ section: $widget.data('section'),
+ sizeCols: sizeCols
+ };
+
+ // run the search for the set of resources to show
+
+ var resources = buildResourceList(opts);
+
+ if (isFlow) {
+ drawResourcesFlowWidget($widget, opts, resources);
+ } else if (isCarousel) {
+ drawResourcesCarouselWidget($widget, opts, resources);
+ } else if (isStack) {
+ var sections = buildSectionList(opts);
+ opts['numStacks'] = $widget.data('numstacks');
+ drawResourcesStackWidget($widget, opts, resources, sections);
+ }
+ }
+
+ /* Initializes a Resource Carousel Widget */
+ function drawResourcesCarouselWidget($widget, opts, resources) {
+ $widget.empty();
+ var plusone = true; //always show plusone on carousel
+
+ $widget.addClass('resource-card slideshow-container')
+ .append($('<a>').addClass('slideshow-prev').text('Prev'))
+ .append($('<a>').addClass('slideshow-next').text('Next'));
+
+ var css = { 'width': $widget.width() + 'px',
+ 'height': $widget.height() + 'px' };
+
+ 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)
+ .decorateResourceCard(resources[i],plusone);
+
+ $('<li>').css(css)
+ .append($card)
+ .appendTo($ul);
+ }
+
+ $('<div>').addClass('frame')
+ .append($ul)
+ .appendTo($widget);
+
+ $widget.dacSlideshow({
+ auto: true,
+ btnPrev: '.slideshow-prev',
+ btnNext: '.slideshow-next'
+ });
+ };
+
+ /* Initializes a Resource Card Stack Widget (column-based layout) */
+ 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 cards = $widget.find('.resource-card').detach().toArray();
+ var numStacks = opts.numStacks || 1;
+ var $stacks = [];
+ var urlString;
+
+ for (var i = 0; i < numStacks; ++i) {
+ $stacks[i] = $('<div>').addClass('resource-card-stack')
+ .appendTo($widget);
+ }
+
+ 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
+
+ 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]
+ );
+ }
+ }
+
+ 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);
+
+ 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;
+
+ 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]));
+ }
+
+ };
+
+ /* Initializes a flow widget, see distribute.scss for generating accompanying css */
+ function drawResourcesFlowWidget($widget, opts, resources) {
+ $widget.empty();
+ var cardSizes = opts.cardSizes || ['6x6'];
+ var i = 0, j = 0;
+ var plusone = true; // by default show plusone on resource cards
+
+ 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") ||
+ (cardSize == "9x2") || (cardSize == "9x3") ||
+ (cardSize == "12x2") || (cardSize == "12x3"));
+
+ // A stack has a third dimension which is the number of stacked items
+ var isStack = cardSize.match(/(\d+)x(\d+)x(\d+)/);
+ var stackCount = 0;
+ var $stackDiv = null;
+
+ if (isStack) {
+ // 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);
+ }
+
+ // 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);
+
+ if (isStack) {
+ $card.addClass('resource-card-' + isStack[1] + 'x' + isStack[2]);
+ if (++stackCount == parseInt(isStack[3])) {
+ $card.addClass('resource-card-row-stack-last');
+ stackCount = 0;
+ }
+ } else {
+ stackCount = 0;
+ }
+
+ $card.decorateResourceCard(resource,plusone)
+ .appendTo($stackDiv || $widget);
+
+ } while (++i < resources.length && stackCount > 0);
+ }
+ }
+
+ /* Build a site map of resources using a section as a root. */
+ function buildSectionList(opts) {
+ if (opts.section && SECTION_BY_ID[opts.section]) {
+ return SECTION_BY_ID[opts.section].sections || [];
+ }
+ return [];
+ }
+
+ function buildResourceList(opts) {
+ var maxResults = opts.maxResults || 100;
+
+ var query = opts.query || '';
+ var expressions = parseResourceQuery(query);
+ var addedResourceIndices = {};
+ var results = [];
+
+ for (var i = 0; i < expressions.length; i++) {
+ var clauses = expressions[i];
+
+ // build initial set of resources from first clause
+ var firstClause = clauses[0];
+ var resources = [];
+ switch (firstClause.attr) {
+ case 'type':
+ resources = ALL_RESOURCES_BY_TYPE[firstClause.value];
+ break;
+ case 'lang':
+ resources = ALL_RESOURCES_BY_LANG[firstClause.value];
+ break;
+ case 'tag':
+ resources = ALL_RESOURCES_BY_TAG[firstClause.value];
+ break;
+ case 'collection':
+ var urls = RESOURCE_COLLECTIONS[firstClause.value].resources || [];
+ resources = urls.map(function(url){ return ALL_RESOURCES_BY_URL[url]; });
+ break;
+ case 'section':
+ var urls = SITE_MAP[firstClause.value].sections || [];
+ resources = urls.map(function(url){ return ALL_RESOURCES_BY_URL[url]; });
+ break;
+ }
+ // console.log(firstClause.attr + ':' + firstClause.value);
+ resources = resources || [];
+
+ // use additional clauses to filter corpus
+ if (clauses.length > 1) {
+ var otherClauses = clauses.slice(1);
+ resources = resources.filter(getResourceMatchesClausesFilter(otherClauses));
+ }
+
+ // filter out resources already added
+ if (i > 1) {
+ resources = resources.filter(getResourceNotAlreadyAddedFilter(addedResourceIndices));
+ }
+
+ // 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;
+ }
+
+ // concat to final results list
+ results = results.concat(resources);
+ }
+
+ if (opts.sortOrder && results.length) {
+ var attr = opts.sortOrder;
+
+ if (opts.sortOrder == 'random') {
+ var i = results.length, j, temp;
+ while (--i) {
+ j = Math.floor(Math.random() * (i + 1));
+ temp = results[i];
+ results[i] = results[j];
+ results[j] = temp;
+ }
+ } else {
+ var desc = attr.charAt(0) == '-';
+ if (desc) {
+ attr = attr.substring(1);
+ }
+ results = results.sort(function(x,y) {
+ return (desc ? -1 : 1) * (parseInt(x[attr], 10) - parseInt(y[attr], 10));
+ });
+ }
+ }
+
+ results = results.filter(getResourceNotAlreadyAddedFilter(addedPageResources));
+ results = results.slice(0, maxResults);
+
+ for (var j = 0; j < results.length; ++j) {
+ addedPageResources[results[j].index] = 1;
+ }
+
+ return results;
+ }
+
+
+ function getResourceNotAlreadyAddedFilter(addedResourceIndices) {
+ return function(resource) {
+ return !addedResourceIndices[resource.index];
+ };
+ }
+
+
+ function getResourceMatchesClausesFilter(clauses) {
+ return function(resource) {
+ return doesResourceMatchClauses(resource, clauses);
+ };
+ }
+
+
+ function doesResourceMatchClauses(resource, clauses) {
+ for (var i = 0; i < clauses.length; i++) {
+ var map;
+ switch (clauses[i].attr) {
+ case 'type':
+ map = IS_RESOURCE_OF_TYPE[clauses[i].value];
+ break;
+ case 'lang':
+ map = IS_RESOURCE_IN_LANG[clauses[i].value];
+ break;
+ case 'tag':
+ map = IS_RESOURCE_TAGGED[clauses[i].value];
+ break;
+ }
+
+ if (!map || (!!clauses[i].negative ? map[resource.index] : !map[resource.index])) {
+ return clauses[i].negative;
+ }
+ }
+ return true;
+ }
+
+
+ function parseResourceQuery(query) {
+ // Parse query into array of expressions (expression e.g. 'tag:foo + type:video')
+ var expressions = [];
+ var expressionStrs = query.split(',') || [];
+ for (var i = 0; i < expressionStrs.length; i++) {
+ var expr = expressionStrs[i] || '';
+
+ // Break expression into clauses (clause e.g. 'tag:foo')
+ var clauses = [];
+ var clauseStrs = expr.split(/(?=[\+\-])/);
+ for (var j = 0; j < clauseStrs.length; j++) {
+ var clauseStr = clauseStrs[j] || '';
+
+ // Get attribute and value from clause (e.g. attribute='tag', value='foo')
+ var parts = clauseStr.split(':');
+ var clause = {};
+
+ clause.attr = parts[0].replace(/^\s+|\s+$/g,'');
+ if (clause.attr) {
+ if (clause.attr.charAt(0) == '+') {
+ clause.attr = clause.attr.substring(1);
+ } else if (clause.attr.charAt(0) == '-') {
+ clause.negative = true;
+ clause.attr = clause.attr.substring(1);
+ }
+ }
+
+ if (parts.length > 1) {
+ clause.value = parts[1].replace(/^\s+|\s+$/g,'');
+ }
+
+ clauses.push(clause);
+ }
+
+ if (!clauses.length) {
+ continue;
+ }
+
+ expressions.push(clauses);
+ }
+
+ return expressions;
+ }
+})();
+
+(function($) {
+ /* 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;
+ }
+ //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') + ')')
+ .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);
+ }
+
+ return this;
+ };
+
+ /* Simple jquery function to create dom for a resource section card (menu) */
+ $.fn.decorateResourceSection = function(section,plusone) {
+ var resource = section.resource;
+ //keep url clean for matching and offline mode handling
+ var urlPrefix = resource.image.indexOf("//") > -1 ? "" : toRoot;
+ var $base = $('<a>')
+ .addClass('card-bg')
+ .attr('href', resource.url)
+ .append($('<div>').addClass('card-section-icon')
+ .append($('<div>').addClass('icon'))
+ .append($('<div>').addClass('section').html(resource.title)))
+ .appendTo(this);
+
+ var $cardInfo = $('<div>').addClass('card-info').appendTo(this);
+
+ if (section.sections && section.sections.length) {
+ // Recurse the section sub-tree to find a resource image.
+ var stack = [section];
+
+ while (stack.length) {
+ if (stack[0].resource.image) {
+ $base.css('background-image', 'url(' + urlPrefix + stack[0].resource.image + ')');
+ break;
+ }
+
+ if (stack[0].sections) {
+ stack = stack.concat(stack[0].sections);
+ }
+
+ stack.shift();
+ }
+
+ var $ul = $('<ul>')
+ .appendTo($cardInfo);
+
+ var max = section.sections.length > 3 ? 3 : section.sections.length;
+
+ for (var i = 0; i < max; ++i) {
+
+ var subResource = section.sections[i];
+ if (!plusone) {
+ $('<li>')
+ .append($('<a>').attr('href', subResource.url)
+ .append($('<div>').addClass('title').html(subResource.title))
+ .append($('<div>').addClass('description ellipsis')
+ .append($('<div>').addClass('text').html(subResource.summary))
+ .append($('<div>').addClass('util'))))
+ .appendTo($ul);
+ } else {
+ $('<li>')
+ .append($('<a>').attr('href', subResource.url)
+ .append($('<div>').addClass('title').html(subResource.title))
+ .append($('<div>').addClass('description ellipsis')
+ .append($('<div>').addClass('text').html(subResource.summary))
+ .append($('<div>').addClass('util')
+ .append($('<div>').addClass('g-plusone')
+ .attr('data-size', 'small')
+ .attr('data-align', 'right')
+ .attr('data-href', resource.url)))))
+ .appendTo($ul);
+ }
+ }
+
+ // Add a more row
+ if (max < section.sections.length) {
+ $('<li>')
+ .append($('<a>').attr('href', resource.url)
+ .append($('<div>')
+ .addClass('title')
+ .text('More')))
+ .appendTo($ul);
+ }
+ } else {
+ // No sub-resources, just render description?
+ }
+
+ return this;
+ };
+})(jQuery);
+/* Calculate the vertical area remaining */
+(function($) {
+ $.fn.ellipsisfade= function(lineHeight) {
+ this.each(function() {
+ // get element text
+ var $this = $(this);
+ var remainingHeight = $this.parent().parent().height();
+ $this.parent().siblings().each(function ()
+ {
+ var h = $(this).height();
+ remainingHeight = remainingHeight - h;
+ });
+
+ adjustedRemainingHeight = ((remainingHeight)/lineHeight>>0)*lineHeight
+ $this.parent().css({'height': adjustedRemainingHeight});
+ $this.css({'height': "auto"});
+ });
+
+ return this;
+ };
+}) (jQuery);
diff --git a/tools/droiddoc/templates-sdk-dyn/components/masthead.cs b/tools/droiddoc/templates-sdk-dyn/components/masthead.cs
index 47639bb..763990a 100644
--- a/tools/droiddoc/templates-sdk-dyn/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk-dyn/components/masthead.cs
@@ -1,7 +1,7 @@
<?cs def:custom_masthead() ?>
<a name="top"></a>
-<?cs if:!devsite ?><?cs # leave out the global header for devsite; it's in devsite template ?>
- <!-- Header -->
+<?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 class="wrap" id="header-wrap">
<div class="col-3 logo">
@@ -31,7 +31,8 @@
ja-lang="開発"
es-lang="Desarrollar"
>Develop</a></li>
- <li class="distribute last"><a href="<?cs var:toroot ?>distribute/index.html"
+ <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="Распространение"
@@ -51,7 +52,7 @@
<div class="mid">
<div class="header">Links</div>
<ul>
- <li><a href="https://play.google.com/apps/publish/">Google Play Developer Console</a></li>
+ <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>
@@ -139,87 +140,80 @@
<!-- /New Search>
- <!-- Expanded quicknav -->
- <div id="quicknav" class="col-9">
- <ul>
- <li class="design">
- <ul>
- <li><a href="<?cs var:toroot ?>design/index.html">Get Started</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 ?>tools/index.html"
- zh-tw-lang="相關工具"
- zh-cn-lang="工具"
- ru-lang="Инструменты"
- ko-lang="도구"
- 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>
- <?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/index.html">Google Play</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/index.html">Publishing</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">Promoting</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/quality/index.html">App Quality</a></li>
- <li><a href="<?cs var:toroot ?>distribute/googleplay/spotlight/index.html">Spotlight</a></li>
- <li><a href="<?cs var:toroot ?>distribute/open.html">Open Distribution</a></li>
- </ul>
- </li>
- </ul>
- </div>
- <!-- /Expanded quicknav -->
+ <!-- Expanded quicknav -->
+ <div id="quicknav" class="col-9">
+ <ul>
+ <li class="design">
+ <ul>
+ <li><a href="<?cs var:toroot ?>design/index.html">Get Started</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 ?>tools/index.html"
+ zh-tw-lang="相關工具"
+ zh-cn-lang="工具"
+ ru-lang="Инструменты"
+ ko-lang="도구"
+ 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>
+ <?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/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>
- </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><!-- /Header -->
+
<?cs if:training || guide || reference || tools || develop || google || samples ?>
<!-- Secondary x-nav -->
<div id="nav-x">
@@ -270,10 +264,55 @@
</div>
<!-- /Sendondary x-nav -->
+
+ <?cs elif:distribute || googleplay || essentials || users || engage || monetize || 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="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>
+
<?cs /if ?>
-<?cs /if ?>
-<?cs # end if/else !devsite ?>
- <?cs
+ <div id="searchResults" class="wrap" style="display:none;">
+ <h2 id="searchTitle">Results</h2>
+ <div id="leftSearchControl" class="search-control">Loading...</div>
+ </div>
+
+</div> <!--end headerwrap -->
+
+<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
/def ?>
diff --git a/tools/droiddoc/templates-sdk-dyn/customizations.cs b/tools/droiddoc/templates-sdk-dyn/customizations.cs
index ed57f1c..2e2f2e6 100644
--- a/tools/droiddoc/templates-sdk-dyn/customizations.cs
+++ b/tools/droiddoc/templates-sdk-dyn/customizations.cs
@@ -7,7 +7,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/sdk/sdk_toc.cs" ?>
@@ -15,33 +14,16 @@
</div>
</div> <!-- end side-nav -->
-<?cs /def ?>
-<?cs
-def:resources_tab_nav() ?>
+<?cs /def ?><?cs
+
+def:no_nav() ?>
<div class="wrap clearfix" id="body-content">
- <a
- <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
- <div id="devdoc-nav" class="scroll-pane">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+<?cs /def ?><?cs
-<?cs
- include:"../../../../frameworks/base/docs/html/resources/resources_toc.cs" ?>
-
-
- </div>
- </div> <!-- end side-nav -->
- <script>
- $(document).ready(function() {
- scrollIntoView("devdoc-nav");
- });
- </script>
-<?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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/tools/tools_toc.cs" ?>
@@ -59,7 +41,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
@@ -73,14 +54,110 @@
scrollIntoView("devdoc-nav");
});
</script>
-<?cs /def ?>
-<?cs
+<?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">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/googleplay/googleplay_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?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">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/essentials/essentials_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?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">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/users/users_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?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">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/engage/engage_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">
+ <div id="devdoc-nav" class="scroll-pane">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/monetize/monetize_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?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">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/tools/disttools_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?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">
+<?cs include:"../../../../frameworks/base/docs/html/distribute/stories/stories_toc.cs" ?>
+ </div>
+ </div> <!-- end side-nav -->
+ <script>
+ $(document).ready(function() {
+ scrollIntoView("devdoc-nav");
+ });
+ </script>
+<?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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
-
<?cs
include:"../../../../frameworks/base/docs/html/guide/guide_toc.cs" ?>
@@ -99,7 +176,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
@@ -119,7 +195,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/distribute/distribute_toc.cs" ?>
@@ -139,7 +214,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/samples/samples_toc.cs" ?>
@@ -159,7 +233,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
@@ -183,7 +256,6 @@
<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">
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<?cs
include:"../../../../frameworks/base/docs/html/about/about_toc.cs" ?>
@@ -206,8 +278,6 @@
<div class="wrap clearfix" id="body-content">
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav">
-
-<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
<div id="api-nav-header">
<div id="api-level-toggle">
<label for="apiLevelCheckbox" class="disabled"
@@ -310,8 +380,10 @@
<?cs
def:custom_left_nav() ?><?cs
- if:fullpage ?><?cs
- call:fullpage() ?><?cs
+ if:fullpage ?><?cs
+ call:fullpage() ?><?cs
+ elif:nonavpage ?><?cs
+ call:no_nav() ?><?cs
elif:guide ?><?cs
call:guide_nav() ?><?cs
elif:design ?><?cs
@@ -324,15 +396,29 @@
call:google_nav() ?><?cs
elif:samples ?><?cs
call:samples_nav() ?><?cs
- elif:more ?><?cs
- call:dist_more_nav() ?><?cs
elif:distribute ?><?cs
- call:distribute_nav() ?><?cs
- elif:about ?><?cs
- call:about_nav() ?><?cs
- else ?><?cs
- call:default_left_nav() ?> <?cs
- /if ?><?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: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
+ else ?><?cs
+ call:default_left_nav() ?> <?cs
+ /if ?><?cs
/def ?>
<?cs # appears at the bottom of every page ?><?cs
diff --git a/tools/droiddoc/templates-sdk-dyn/docpage.cs b/tools/droiddoc/templates-sdk-dyn/docpage.cs
index ea462c9..745b19e 100644
--- a/tools/droiddoc/templates-sdk-dyn/docpage.cs
+++ b/tools/droiddoc/templates-sdk-dyn/docpage.cs
@@ -2,19 +2,36 @@
<?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 if:guide ?> guide<?cs /if ?><?cs if:samples ?> samples<?cs /if ?><?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
+ 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 ?>about<?cs
elif:design ?>design<?cs
- elif:distribute ?>distribute<?cs
- /if ?><?cs
- if:page.trainingcourse ?> trainingcourse<?cs /if ?>" itemscope itemtype="http://schema.org/Article">
-<?cs include:"header.cs" ?>
+/if ?><?cs
+if:page.trainingcourse ?> trainingcourse<?cs
+/if ?>" itemscope itemtype="http://schema.org/Article"><?cs
+include:"header.cs" ?>
-<div <?cs if:fullpage
-?>class="fullpage"<?cs elif:design||tools||about||sdk||distribute
-?>class="col-13" id="doc-col"<?cs else
-?>class="col-12" id="doc-col"<?cs /if ?> >
+<div <?cs
+ if:fullpage
+ ?>class="fullpage"<?cs
+ elif:(design||tools||about||sdk||googleplay||essentials||users||monetize||disttools) && !nonavpage
+ ?>class="col-13" id="doc-col"<?cs
+ elif:!nonavpage
+ ?>class="col-12" id="doc-col"<?cs /if ?> >
<?cs if:(design||training||walkthru) && !page.trainingcourse && !page.article ?><?cs # header logic for docs that provide previous/next buttons ?>
<?cs if:header.hide ?>
@@ -74,6 +91,7 @@
<?cs /if ?><?cs # end if training ?>
</div>
<?cs /if ?>
+
<?cs elif:samplesProjectIndex ?>
<div id="api-info-block">
<div class="sum-details-links">
@@ -83,7 +101,10 @@
</div><!-- end sum-details-links -->
</div><!-- end breadcurmb block -->
<h1 itemprop="name"><?cs var:projectDir ?></h1>
+
<?cs else ?>
+
+
<?cs if:(!fullpage && !header.hide) ?>
<?cs if:page.landing ?><?cs # header logic for docs that are landing pages ?>
<div class="landing-banner">
@@ -181,8 +202,6 @@
<?cs include:"footer.cs" ?>
</div><!-- end doc-content -->
-<?cs include:"trailer.cs" ?>
-
<!-- Start of Tag -->
<script type="text/javascript">
var axel = Math.random() + "";
@@ -193,6 +212,15 @@
<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://androiddevdocs-exp.appspot.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>
+
</body>
</html>
diff --git a/tools/droiddoc/templates-sdk-dyn/head_tag.cs b/tools/droiddoc/templates-sdk-dyn/head_tag.cs
index 54de169..70ad760 100644
--- a/tools/droiddoc/templates-sdk-dyn/head_tag.cs
+++ b/tools/droiddoc/templates-sdk-dyn/head_tag.cs
@@ -31,9 +31,15 @@
<!-- STYLESHEETS -->
<link rel="stylesheet"
-href="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
-<link href="<?cs var:toroot ?>assets/css/default.css" rel="stylesheet" type="text/css">
+href="<?cs
+if:android.whichdoc != 'online' ?>http:<?cs
+/if ?>//fonts.googleapis.com/css?family=Roboto+Condensed">
+<link rel="stylesheet" href="<?cs
+if:android.whichdoc != 'online' ?>http:<?cs
+/if ?>//fonts.googleapis.com/css?family=Roboto: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) ?>
<!-- FULLSCREEN STYLESHEET -->
<link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
diff --git a/tools/droiddoc/templates-sdk/assets/images/dac_logo@2x.png b/tools/droiddoc/templates-sdk/assets/images/dac_logo@2x.png
new file mode 100644
index 0000000..0f2784d
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/assets/images/dac_logo@2x.png
Binary files differ
diff --git a/tools/droiddoc/templates-sdk/components/masthead.cs b/tools/droiddoc/templates-sdk/components/masthead.cs
index 47639bb..beead52 100644
--- a/tools/droiddoc/templates-sdk/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk/components/masthead.cs
@@ -1,4 +1,7 @@
<?cs def:custom_masthead() ?>
+<?cs if:wear ?>
+ <?cs call:wear_masthead() ?>
+<?cs else ?>
<a name="top"></a>
<?cs if:!devsite ?><?cs # leave out the global header for devsite; it's in devsite template ?>
<!-- Header -->
@@ -6,7 +9,9 @@
<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" width="123" height="25" alt="Android Developers" />
+ <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>
@@ -275,5 +280,136 @@
<?cs /if ?>
<?cs # end if/else !devsite ?>
+<?cs /if ?><?cs # end if/else wear ?>
+ <?cs
+/def ?>
+
+
+<?cs def:wear_masthead() ?>
+<a name="top"></a>
+
+ <!-- Header -->
+ <div id="header">
+ <div class="wrap" id="header-wrap">
+ <div class="col-3 logo-wear">
+ <a href="<?cs var:toroot ?>wear/index.html">
+ <img src="<?cs var:toroot ?>wear/images/android-wear.png" height="16" alt="Android Wear" />
+ </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>
+
+
+ <!-- New Search -->
+ <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/">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 morehover -->
+
+ <div class="search" id="search-container">
+ <div class="search-inner">
+ <div id="search-btn"></div>
+ <div class="left"></div>
+ <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 ?>')" />
+ </form>
+ <div class="right"></div>
+ <a class="close hide">close</a>
+ <div class="left"></div>
+ <div class="right"></div>
+ </div>
+ </div><!-- end search -->
+
+ <div class="search_filtered_wrapper reference">
+ <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>
+ <div class="child-card guides no-display">
+ </div>
+ <div class="child-card training no-display">
+ </div>
+ <div class="child-card samples no-display">
+ </div>
+ </div>
+ <div class="suggest-card design no-display">
+ <ul class="search_filtered">
+ </ul>
+ </div>
+ <div class="suggest-card distribute no-display">
+ <ul class="search_filtered">
+ </ul>
+ </div>
+ </div><!-- end search_filtered_wrapper -->
+
+ </div>
+ <!-- end menu_container -->
+
+
+ </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>
+
<?cs
/def ?>
diff --git a/tools/droiddoc/templates-sdk/customizations.cs b/tools/droiddoc/templates-sdk/customizations.cs
index ed57f1c..f5f85fe 100644
--- a/tools/droiddoc/templates-sdk/customizations.cs
+++ b/tools/droiddoc/templates-sdk/customizations.cs
@@ -198,6 +198,27 @@
</script>
<?cs /def ?>
+
+<?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">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+ include:"../../../../frameworks/base/docs/html/wear/wear_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 ?>
@@ -329,7 +350,9 @@
elif:distribute ?><?cs
call:distribute_nav() ?><?cs
elif:about ?><?cs
- call:about_nav() ?><?cs
+ call:about_nav() ?><?cs
+ elif:wear ?><?cs
+ call:wear_nav() ?><?cs
else ?><?cs
call:default_left_nav() ?> <?cs
/if ?><?cs
diff --git a/tools/droiddoc/templates-sdk/head_tag.cs b/tools/droiddoc/templates-sdk/head_tag.cs
index 54de169..0916b00 100644
--- a/tools/droiddoc/templates-sdk/head_tag.cs
+++ b/tools/droiddoc/templates-sdk/head_tag.cs
@@ -15,13 +15,13 @@
?><?cs
# END if/else devsite ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="viewport" content="width=device-width" />
+<meta name="viewport" content="width=<?cs
+ if:page.viewport_width ?><?cs
+ var:page.viewport_width ?><?cs
+ else ?>device-width<?cs /if ?>" />
<?cs
if:page.metaDescription ?>
<meta name="Description" content="<?cs var:page.metaDescription ?>"><?cs
- /if ?><?cs
- if:page.customHeadTag ?>
-<?cs var:page.customHeadTag ?><?cs
/if ?>
<link rel="shortcut icon" type="image/x-icon" href="<?cs var:toroot ?>favicon.ico" />
<title><?cs
@@ -31,10 +31,10 @@
<!-- STYLESHEETS -->
<link rel="stylesheet"
-href="<?cs if:android.whichdoc != 'online' ?>http:<?cs /if ?>//fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold" title="roboto">
+href="<?cs 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) ?>
+<?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">
@@ -47,7 +47,10 @@
?><script src="<?cs var:toroot ?>_static/js/android_3p-bundle.js" type="text/javascript"></script><?cs
else
?><script src="<?cs var:toroot ?>assets/js/android_3p-bundle.js" type="text/javascript"></script><?cs
-/if ?>
+/if ?><?cs
+ if:page.customHeadTag ?>
+<?cs var:page.customHeadTag ?><?cs
+ /if ?>
<script type="text/javascript">
var toRoot = "<?cs var:toroot ?>";
var metaTags = [<?cs var:meta.tags ?>];
@@ -66,4 +69,4 @@
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
-</head>
\ No newline at end of file
+</head>