am 98ce73b2: (-s ours) Merge "Refresh ARM toolchain to GCC 4.7 / binutils 2.22."

* commit '98ce73b27a9df7795cc91ea9ca5781d3255828c7':
  Refresh ARM toolchain to GCC 4.7 / binutils 2.22.
diff --git a/CleanSpec.mk b/CleanSpec.mk
index c20d401..59b7d68 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -150,11 +150,7 @@
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/*)
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/APPS/*)
 
-# For GCC 4.7 toolchain change
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/EXECUTABLES)
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/lib/*.o)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/build.prop)
 
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk
index 99b2f8c..8be89c4 100644
--- a/core/combo/TARGET_linux-arm.mk
+++ b/core/combo/TARGET_linux-arm.mk
@@ -35,7 +35,7 @@
 endif
 
 ifeq ($(strip $(TARGET_GCC_VERSION)),)
-TARGET_GCC_VERSION := 4.7
+TARGET_GCC_VERSION := 4.6
 endif
 
 TARGET_ARCH_SPECIFIC_MAKEFILE := $(BUILD_COMBOS)/arch/$(TARGET_ARCH)/$(TARGET_ARCH_VARIANT).mk
diff --git a/core/definitions.mk b/core/definitions.mk
index a524b2f..26fe7b4 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2066,6 +2066,29 @@
 endef
 
 ###########################################################
+## API Check
+###########################################################
+
+# eval this to define a rule that runs apicheck.
+#
+# Args:
+#    $(1)  target
+#    $(2)  stable api file
+#    $(3)  api file to be tested
+#    $(4)  arguments for apicheck
+#    $(5)  command to run if apicheck failed
+#    $(6)  target dependent on this api check
+#    $(7)  additional dependencies
+define check-api
+$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK) $(7)
+	@echo "Checking API:" $(1)
+	$(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) )
+	$(hide) mkdir -p $$(dir $$@)
+	$(hide) touch $$@
+$(6): $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
+endef
+
+###########################################################
 ## Other includes
 ###########################################################
 
diff --git a/core/tasks/apicheck.mk b/core/tasks/apicheck.mk
index 63fd4d4..24b3428 100644
--- a/core/tasks/apicheck.mk
+++ b/core/tasks/apicheck.mk
@@ -22,58 +22,48 @@
 
 .PHONY: checkapi
 
-# eval this to define a rule that runs apicheck.
-#
-# Args:
-#    $(1)  target
-#    $(2)  stable api file
-#    $(3)  api file to be tested
-#    $(4)  arguments for apicheck
-#    $(5)  command to run if apicheck failed
-define check-api
-$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp: $(2) $(3) $(APICHECK)
-	@echo "Checking API:" $(1)
-	$(hide) ( $(APICHECK_COMMAND) $(4) $(2) $(3) || ( $(5) ; exit 38 ) )
-	$(hide) mkdir -p $$(dir $$@)
-	$(hide) touch $$@
-checkapi: $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(strip $(1))-timestamp
-endef
-
 # Run the checkapi rules by default.
 droidcore: checkapi
 
 last_released_sdk_version := $(lastword $(call numerically_sort, \
-            $(filter-out $(SRC_API_DIR)/current, \
+            $(filter-out current, \
                 $(patsubst $(SRC_API_DIR)/%.txt,%, $(wildcard $(SRC_API_DIR)/*.txt)) \
              )\
         ))
 
 # INTERNAL_PLATFORM_API_FILE is the one build by droiddoc.
+# Note that since INTERNAL_PLATFORM_API_FILE is the byproduct of api-stubs module,
+# (See frameworks/base/Android.mk)
+# we need to add api-stubs as additional dependency of the api check.
 
 # Check that the API we're building hasn't broken the last-released
 # SDK version.
 $(eval $(call check-api, \
-	checkapi-last, \
-	$(SRC_API_DIR)/$(last_released_sdk_version).txt, \
-	$(INTERNAL_PLATFORM_API_FILE), \
-	-hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
-	-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
-	-error 16 -error 17 -error 18 , \
-	cat $(BUILD_SYSTEM)/apicheck_msg_last.txt \
-	))
+    checkapi-last, \
+    $(SRC_API_DIR)/$(last_released_sdk_version).txt, \
+    $(INTERNAL_PLATFORM_API_FILE), \
+    -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
+    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+    -error 16 -error 17 -error 18 , \
+    cat $(BUILD_SYSTEM)/apicheck_msg_last.txt, \
+    checkapi, \
+    $(call doc-timestamp-for,api-stubs) \
+    ))
 
 # Check that the API we're building hasn't changed from the not-yet-released
 # SDK version.
 $(eval $(call check-api, \
-	checkapi-current, \
-	$(SRC_API_DIR)/current.txt, \
-	$(INTERNAL_PLATFORM_API_FILE), \
-	-error 2 -error 3 -error 4 -error 5 -error 6 \
-	-error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
-	-error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
-	-error 25 , \
-	cat $(BUILD_SYSTEM)/apicheck_msg_current.txt \
-	))
+    checkapi-current, \
+    $(SRC_API_DIR)/current.txt, \
+    $(INTERNAL_PLATFORM_API_FILE), \
+    -error 2 -error 3 -error 4 -error 5 -error 6 \
+    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
+    -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
+    -error 25 , \
+    cat $(BUILD_SYSTEM)/apicheck_msg_current.txt, \
+    checkapi, \
+    $(call doc-timestamp-for,api-stubs) \
+    ))
 
 .PHONY: update-api
 update-api: $(INTERNAL_PLATFORM_API_FILE) | $(ACP)
diff --git a/core/version_defaults.mk b/core/version_defaults.mk
index 09eeb67..9330465 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.2.1.2.4.8.16.32.64
+  PLATFORM_VERSION := 4.2.2.2.2.2.2.2.2.2
 endif
 
 ifeq "" "$(PLATFORM_SDK_VERSION)"
diff --git a/envsetup.sh b/envsetup.sh
index 3aeb52b..8decf6f 100644
--- a/envsetup.sh
+++ b/envsetup.sh
@@ -107,8 +107,8 @@
     fi
     if [ -n "$ANDROID_PRE_BUILD_PATHS" ] ; then
         export PATH=${PATH/$ANDROID_PRE_BUILD_PATHS/}
-        # strip trailing ':', if any
-        export PATH=${PATH/%:/}
+        # strip leading ':', if any
+        export PATH=${PATH/:%/}
     fi
 
     # and in with the new
@@ -116,7 +116,7 @@
     prebuiltdir=$(getprebuilt)
     gccprebuiltdir=$(get_abs_build_var ANDROID_GCC_PREBUILTS)
 
-    # defined in core/combo/TARGET_linux-{arm,mips,x86}.mk
+    # defined in core/config.mk
     targetgccversion=$(get_build_var TARGET_GCC_VERSION)
     export TARGET_GCC_VERSION=$targetgccversion
 
@@ -158,8 +158,8 @@
     export ANDROID_TOOLCHAIN=$ANDROID_EABI_TOOLCHAIN
     export ANDROID_QTOOLS=$T/development/emulator/qtools
     export ANDROID_DEV_SCRIPTS=$T/development/scripts
-    export ANDROID_BUILD_PATHS=:$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN$ARM_EABI_TOOLCHAIN_PATH$CODE_REVIEWS:$ANDROID_DEV_SCRIPTS
-    export PATH=$PATH$ANDROID_BUILD_PATHS
+    export ANDROID_BUILD_PATHS=$(get_build_var ANDROID_BUILD_PATHS):$ANDROID_QTOOLS:$ANDROID_TOOLCHAIN$ARM_EABI_TOOLCHAIN_PATH$CODE_REVIEWS:$ANDROID_DEV_SCRIPTS:
+    export PATH=$ANDROID_BUILD_PATHS$PATH
 
     unset ANDROID_JAVA_TOOLCHAIN
     unset ANDROID_PRE_BUILD_PATHS
diff --git a/target/product/core.mk b/target/product/core.mk
index a7236f0..e10dc31 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -37,7 +37,6 @@
     KeyChain \
     MediaProvider \
     PackageInstaller \
-    PhotoTable \
     PicoTts \
     SettingsProvider \
     SharedStorageBackup \
diff --git a/target/product/full_base.mk b/target/product/full_base.mk
index ce8e63e..c28fd1b 100644
--- a/target/product/full_base.mk
+++ b/target/product/full_base.mk
@@ -37,7 +37,8 @@
     MagicSmokeWallpapers \
     NoiseField \
     PhaseBeam \
-    VisualizationWallpapers
+    VisualizationWallpapers \
+    PhotoTable
 
 include $(SRC_TARGET_DIR)/product/emulator.mk
 
diff --git a/target/product/mini.mk b/target/product/mini.mk
index 76d4511..b69c917 100644
--- a/target/product/mini.mk
+++ b/target/product/mini.mk
@@ -218,7 +218,7 @@
 PRODUCT_PACKAGES += \
     TestingCamera \
     Home \
-    DummySystemUI \
-    DummySettings \
+    SystemUI \
+    Settings \
     libsurfaceflinger_ddmconnection
 
diff --git a/tools/droiddoc/templates-sdk/assets/css/default.css b/tools/droiddoc/templates-sdk/assets/css/default.css
index 4c4cdee..cd25dc5 100644
--- a/tools/droiddoc/templates-sdk/assets/css/default.css
+++ b/tools/droiddoc/templates-sdk/assets/css/default.css
@@ -112,6 +112,11 @@
 a:focus,
 a:active {
   color: #33b5e5 !important; }
+  
+a.external-link {
+  background:url('../images/styles/open_new_page.png') no-repeat 100% 50%;
+  padding-right:16px;
+}
 
 img {
   border: none; }
@@ -266,7 +271,8 @@
     line-height: 15px; }
   #nav a {
     color: #555555;
-    text-decoration: none; }
+    text-decoration: none;
+    word-wrap:break-word; }
   #nav .nav-section-header {
     position: relative;
     margin-bottom: 1px;
@@ -320,13 +326,32 @@
     background: transparent; }
   #nav li.expanded li ul {
   /* 3rd level ul */
-    padding:0 10px;
+    padding:0 0 0 10px;
   }
     #nav li.expanded > .nav-section-header:after {
       content: '';
       background: transparent url(../images/styles/disclosure_up.png) no-repeat scroll 50% 50%;
       width: 34px;
       height: 34px; }
+  #nav li.expanded li ul.tree-list-children {
+    padding:0;  
+  }
+  #nav li.expanded li ul.tree-list-children .tree-list-children {
+    padding:0 0 0 10px;  
+  }
+  #nav li span.tree-list-subtitle {
+    display:inline-block;
+    padding:5px 0 0 10px;
+    color:#555;
+    text-transform:uppercase;
+    font-size:12px;
+  }
+  #nav li span.tree-list-subtitle:before {
+    content: '—';
+  }
+  #nav li span.tree-list-subtitle:after {
+    content: '—';
+  }
   #nav li ul {
     display:none;
     overflow: hidden;
@@ -351,11 +376,16 @@
     #nav li ul > li:last-child {
       padding-bottom:5px;
     }
+    #nav li ul.tree-list-children > li:last-child {
+      padding-bottom:0;
+    }
     #nav li.expanded ul > li {
       background:#efefef;
       background: rgba(0, 0, 0, 0.03); }
     #nav li.expanded ul > li li {
       background:inherit; }
+  #nav li ul.tree-list-children ul {
+    display:block; }
 
 .new,
 .new-child {
@@ -1524,6 +1554,7 @@
     cursor: pointer;
 }
 .button, a.button {
+    display:inline-block;
     background-color: #09c;
     background-image: -webkit-gradient(linear, left top, left bottom, from(#2faddb), to(#09c));
     background-image: -webkit-linear-gradient(top, #2faddb, #09c);
@@ -2387,6 +2418,9 @@
   list-style:none;
   margin-left:0;
 }
+#tb .nolist {
+  margin-left:15px;
+}
 
 
 pre.classic {
@@ -3012,6 +3046,15 @@
   margin:1.5em 0 .6em;
   padding:3px 95px 3px 3px; /* room for api-level */
 }
+body.google h4.jd-details-title {
+  background-color: #FFF;
+  padding-top:5px;
+  border-top: 1px solid #ccc;
+}
+body.google table.jd-sumtable th {
+  background-color: #FFF;
+  color:#000;
+}
 
 h4.jd-tagtitle {
   margin:0;
@@ -4241,20 +4284,21 @@
 }
 
 
+
 /************ DEVELOP TOPIC CONTAINERS ************/
 
 .landing-banner,
 .landing-docs {
   margin:20px 0 0;
 }
-.landing-banner .col-6:first-child,
-.landing-docs .col-6:first-child,
+.landing-banner div:first-child,
+.landing-docs div:first-child,
 .landing-docs .col-12 {
   margin-left:0;
   min-height:280px;
 }
-.landing-banner .col-6:last-child,
-.landing-docs .col-6:last-child,
+.landing-banner div:last-child,
+.landing-docs div:last-child,
 .landing-docs .col-12 {
   margin-right:0;
 }
@@ -4277,11 +4321,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;
 }
diff --git a/tools/droiddoc/templates-sdk/assets/js/docs.js b/tools/droiddoc/templates-sdk/assets/js/docs.js
index f1fbfff..b5f8946 100644
--- a/tools/droiddoc/templates-sdk/assets/js/docs.js
+++ b/tools/droiddoc/templates-sdk/assets/js/docs.js
@@ -140,14 +140,13 @@
     $selListItem = $selNavLink.closest('li');
 
     $selListItem.addClass('selected');
-    $selListItem.closest('li.nav-section').addClass('expanded');
-    $selListItem.closest('li.nav-section').children('ul').show();
-    $selListItem.closest('li.nav-section').parent().closest('li.nav-section').addClass('expanded');
-    $selListItem.closest('li.nav-section').parent().closest('ul').show();
     
+    // Traverse up the tree and expand all parent nav-sections
+    $selNavLink.parents('li.nav-section').each(function() {
+      $(this).addClass('expanded');
+      $(this).children('ul').show();
+    });
     
-  //  $selListItem.closest('li.nav-section').closest('li.nav-section').addClass('expanded');
-  //  $selListItem.closest('li.nav-section').closest('li.nav-section').children('ul').show();  
 
     // set up prev links
     var $prevLink = [];
@@ -1111,7 +1110,7 @@
 
 
 
-/*  	
+/*    
  *  Slideshow 1.0
  *  Used on /index.html and /develop/index.html for carousel
  *
@@ -1295,7 +1294,7 @@
  })(jQuery);
 
 
-/*	
+/*  
  *  dacSlideshow 1.0
  *  Used on develop/index.html for side-sliding tabs
  *
@@ -1722,6 +1721,10 @@
   referenceSearcher.setUserDefinedLabel("Reference");
   referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
 
+  googleSearcher = new google.search.WebSearch();
+  googleSearcher.setUserDefinedLabel("Google Services");
+  googleSearcher.setSiteRestriction("http://developer.android.com/google/");
+
   blogSearcher = new google.search.WebSearch();
   blogSearcher.setUserDefinedLabel("Blog");
   blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
@@ -1732,6 +1735,7 @@
   searchControl.addSearcher(trainingSearcher, searchOptions);
   searchControl.addSearcher(guidesSearcher, searchOptions);
   searchControl.addSearcher(referenceSearcher, searchOptions);
+  searchControl.addSearcher(googleSearcher, searchOptions);
   searchControl.addSearcher(blogSearcher, searchOptions);
 
   // configure result options
@@ -1849,12 +1853,16 @@
 /* ######################################################## */
 
 /* Initialize some droiddoc stuff, but only if we're in the reference */
-if (location.pathname.indexOf("/reference") == 0) {
-  $(document).ready(function() {
-    // init available apis based on user pref
-    changeApiLevel();
-    initSidenavHeightResize()
-  });
+if (location.pathname.indexOf("/reference")) {
+  if(!location.pathname.indexOf("/reference-gms/packages.html")
+    && !location.pathname.indexOf("/reference-gcm/packages.html")
+    && !location.pathname.indexOf("/reference/com/google") == 0) {
+    $(document).ready(function() {
+      // init available apis based on user pref
+      changeApiLevel();
+      initSidenavHeightResize()
+      });
+  }
 }
 
 var API_LEVEL_COOKIE = "api_level";
@@ -2065,6 +2073,9 @@
   return node;
 }
 
+
+
+
 function expand_node(me, node)
 {
   if (node.children_data && !node.expanded) {
@@ -2142,13 +2153,6 @@
   return null;
 }
 
-function load_navtree_data(toroot) {
-  var navtreeData = document.createElement("script");
-  navtreeData.setAttribute("type","text/javascript");
-  navtreeData.setAttribute("src", toroot+"navtree_data.js");
-  $("head").append($(navtreeData));
-}
-
 function init_default_navtree(toroot) {
   init_navtree("tree-list", toroot, NAVTREE_DATA);
   
@@ -2190,6 +2194,106 @@
   }
 }
 
+/* TODO: eliminate redundancy with non-google functions */
+function init_google_navtree(navtree_id, toroot, root_nodes)
+{
+  var me = new Object();
+  me.toroot = toroot;
+  me.node = new Object();
+
+  me.node.li = document.getElementById(navtree_id);
+  me.node.children_data = root_nodes;
+  me.node.children = new Array();
+  me.node.children_ul = document.createElement("ul");
+  me.node.get_children_ul = function() { return me.node.children_ul; };
+  //me.node.children_ul.className = "children_ul";
+  me.node.li.appendChild(me.node.children_ul);
+  me.node.depth = 0;
+
+  get_google_node(me, me.node);
+
+}
+
+function new_google_node(me, mom, text, link, children_data, api_level)
+{
+  var node = new Object();
+  var child;
+  node.children = Array();
+  node.children_data = children_data;
+  node.depth = mom.depth + 1;
+  node.get_children_ul = function() {
+      if (!node.children_ul) {
+        node.children_ul = document.createElement("ul"); 
+        node.children_ul.className = "tree-list-children"; 
+        node.li.appendChild(node.children_ul);
+      }
+      return node.children_ul;
+    };
+  node.li = document.createElement("li");
+
+  mom.get_children_ul().appendChild(node.li);
+  
+  
+  if(link) {
+    child = document.createElement("a");
+
+  }
+  else {
+    child = document.createElement("span");
+    child.className = "tree-list-subtitle";
+
+  }
+  if (children_data != null) {
+    node.li.className="nav-section";
+    node.label_div = document.createElement("div");
+    node.label_div.className = "nav-section-header-ref";  
+    node.li.appendChild(node.label_div);
+    get_google_node(me, node);
+    node.label_div.appendChild(child);
+  }
+  else {
+    node.li.appendChild(child);
+  }
+  if(link) {
+    child.href = me.toroot + link;
+  }
+  node.label = document.createTextNode(text);
+  child.appendChild(node.label);
+
+  node.children_ul = null;
+
+  return node;
+}
+
+function get_google_node(me, mom)
+{
+  mom.children_visited = true;
+  var linkText;
+  for (var i in mom.children_data) {
+    var node_data = mom.children_data[i];
+    linkText = node_data[0];
+
+    if(linkText.match("^"+"com.google.android")=="com.google.android"){
+      linkText = linkText.substr(19, linkText.length);
+    }
+      mom.children[i] = new_google_node(me, mom, linkText, node_data[1],
+          node_data[2], node_data[3]);
+  }
+}
+function showGoogleRefTree() {
+  init_default_google_navtree(toRoot);
+  init_default_gcm_navtree(toRoot);
+  resizeNav();
+}
+
+function init_default_google_navtree(toroot) {
+  init_google_navtree("gms-tree-list", toroot, GMS_NAVTREE_DATA);
+}
+
+function init_default_gcm_navtree(toroot) {
+  init_google_navtree("gcm-tree-list", toroot, GCM_NAVTREE_DATA);
+}
+
 /* TOGGLE INHERITED MEMBERS */
 
 /* Toggle an inherited class (arrow toggle)
@@ -2283,6 +2387,3 @@
     ensureAllInheritedExpanded();
   }
 });
-
-
-
diff --git a/tools/droiddoc/templates-sdk/class.cs b/tools/droiddoc/templates-sdk/class.cs
index b2a4791..d0664c5 100644
--- a/tools/droiddoc/templates-sdk/class.cs
+++ b/tools/droiddoc/templates-sdk/class.cs
@@ -2,7 +2,7 @@
 <?cs include:"macros.cs" ?>
 <html>
 <?cs include:"head_tag.cs" ?>
-<body class="gc-documentation 
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
   <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
   elif:design ?>design<?cs
   elif:distribute ?>distribute<?cs
diff --git a/tools/droiddoc/templates-sdk/classes.cs b/tools/droiddoc/templates-sdk/classes.cs
index 77624c5..47899e5 100644
--- a/tools/droiddoc/templates-sdk/classes.cs
+++ b/tools/droiddoc/templates-sdk/classes.cs
@@ -2,7 +2,7 @@
 <?cs include:"macros.cs" ?>
 <html>
 <?cs include:"head_tag.cs" ?>
-<body class="gc-documentation 
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
   <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
   elif:design ?>design<?cs
   elif:distribute ?>distribute<?cs
diff --git a/tools/droiddoc/templates-sdk/components/masthead.cs b/tools/droiddoc/templates-sdk/components/masthead.cs
index 025d076..1c10768 100644
--- a/tools/droiddoc/templates-sdk/components/masthead.cs
+++ b/tools/droiddoc/templates-sdk/components/masthead.cs
@@ -23,7 +23,7 @@
                   es-lang="Diseñar"               
                   >Design</a></li>
                 <li class="develop"><a href="<?cs var:toroot ?>develop/index.html" <?cs
-                  if:training || guide || reference || tools || develop ?>class="selected"<?cs /if ?>
+                  if:training || guide || reference || tools || develop || google ?>class="selected"<?cs /if ?>
                   zh-TW-lang="開發"
                   zh-CN-lang="开发"
                   ru-lang="Разработка"
@@ -161,8 +161,9 @@
                           ja-lang="ツール"
                           es-lang="Herramientas"               
                           >Tools</a>
-                          <ul><li><a href="<?cs var:toroot ?>sdk/index.html">Get the
-SDK</a></li></ul>
+                          <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>
                       </ul>
                     </li>
@@ -191,11 +192,11 @@
     
     
     
-<?cs if:training || guide || reference || tools || develop ?>
+<?cs if:training || guide || reference || tools || develop || google ?>
     <!-- Secondary x-nav -->
     <div id="nav-x">
         <div class="wrap">
-            <ul class="nav-x col-9 develop" style="width:75%">
+            <ul class="nav-x col-9 develop" style="width:100%">
                 <li><a href="<?cs var:toroot ?>training/index.html" <?cs
                   if:training ?>class="selected"<?cs /if ?>
                   zh-TW-lang="訓練課程"
@@ -215,7 +216,7 @@
                   es-lang="Guías de la API"               
                   >API Guides</a></li>
                 <li><a href="<?cs var:toroot ?>reference/packages.html" <?cs
-                  if:reference ?>class="selected"<?cs /if ?>
+                  if:reference && !(reference.gcm || reference.gms) ?>class="selected"<?cs /if ?>
                   zh-TW-lang="參考資源"
                   zh-CN-lang="参考"
                   ru-lang="Справочник"
@@ -230,8 +231,12 @@
                   ru-lang="Инструменты"
                   ko-lang="도구"
                   ja-lang="ツール"
-                  es-lang="Herramientas"               
+                  es-lang="Herramientas"
                   >Tools</a></li>
+                <li><a href="<?cs var:toroot ?>google/index.html" <?cs
+                  if:google || reference.gcm || reference.gms?>class="selected"<?cs /if ?>
+                  >Google Services</a>
+                </li>
             </ul>
         </div>
         
diff --git a/tools/droiddoc/templates-sdk/customizations.cs b/tools/droiddoc/templates-sdk/customizations.cs
index 4ce01d7..a45e4ba 100644
--- a/tools/droiddoc/templates-sdk/customizations.cs
+++ b/tools/droiddoc/templates-sdk/customizations.cs
@@ -133,6 +133,31 @@
         });
     </script>
 <?cs /def ?>
+
+<?cs
+def:google_nav() ?>
+  <div class="wrap clearfix" id="body-content">
+    <div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
+      <div id="devdoc-nav" class="scroll-pane">
+<a class="totop" href="#top" data-g-event="left-nav-top">to top</a>
+
+<?cs
+        include:"../../../../frameworks/base/docs/html/google/google_toc.cs" ?>
+        
+
+      </div>
+      <script type="text/javascript">
+       showGoogleRefTree();
+    
+      </script>
+    </div> <!-- end side-nav -->
+    <script>
+      $(document).ready(function() {
+        scrollIntoView("devdoc-nav");
+        });
+    </script>
+<?cs /def ?>
+
 <?cs
 def:about_nav() ?>
   <div class="wrap clearfix" id="body-content">
@@ -171,12 +196,18 @@
         scrollIntoView("devdoc-nav");
         });
     </script>
+:
+
 <?cs /def ?>
 <?cs # The default side navigation for the reference docs ?><?cs 
 def:default_left_nav() ?>
+<?cs if:reference.gcm || reference.gms ?>
+  <?cs call:google_nav() ?>
+<?cs else ?>
   <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">
@@ -272,7 +303,9 @@
         scrollIntoView("packages-nav");
         scrollIntoView("classes-nav");
         });
-    </script><?cs 
+    </script>
+<?cs /if ?>
+    <?cs 
 /def ?>
 
 <?cs 
@@ -288,7 +321,7 @@
   elif:tools ?><?cs 
     call:tools_nav() ?><?cs
   elif:google ?><?cs 
-    call:dist_google_nav() ?><?cs 
+    call:google_nav() ?><?cs 
   elif:more ?><?cs 
     call:dist_more_nav() ?><?cs
   elif:distribute ?><?cs 
@@ -296,7 +329,7 @@
   elif:about ?><?cs 
     call:about_nav() ?><?cs 
   else ?><?cs 
-    call:default_left_nav() ?><?cs 
+    call:default_left_nav() ?> <?cs 
   /if ?>
     <script>
       $(document).ready(function() {
@@ -332,7 +365,9 @@
 /def ?>
 
 <?cs # appears on the right side of the blue bar at the bottom off every page ?><?cs 
-def:custom_buildinfo() ?>
-  Android <?cs var:sdk.version ?>&nbsp;r<?cs var:sdk.rel.id ?> - <?cs var:page.now ?>
+def:custom_buildinfo() ?><?cs
+  if:!google ?>
+    Android <?cs var:sdk.version ?>&nbsp;r<?cs var:sdk.rel.id ?> &mdash; <?cs
+  /if ?><?cs var:page.now ?>
 <?cs /def ?>
 
diff --git a/tools/droiddoc/templates-sdk/docpage.cs b/tools/droiddoc/templates-sdk/docpage.cs
index 3feb00f..0e7c247 100644
--- a/tools/droiddoc/templates-sdk/docpage.cs
+++ b/tools/droiddoc/templates-sdk/docpage.cs
@@ -2,7 +2,7 @@
 <?cs include:"macros.cs" ?>
 <html>
 <?cs include:"head_tag.cs" ?>
-<body class="gc-documentation
+<body class="gc-documentation <?cs if:(google || reference.gms || reference.gcm) ?>google<?cs /if ?>
   <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs if:guide ?> guide<?cs /if ?><?cs
   elif:about ?>about<?cs
   elif:design ?>design<?cs
@@ -17,7 +17,7 @@
 ?>class="col-13" id="doc-col"<?cs else 
 ?>class="col-12" id="doc-col"<?cs /if ?> >
 
-<?cs if:(design||training||walkthru) && !page.trainingcourse ?><?cs # header logic for docs that provide previous/next buttons ?>
+<?cs if:(design||training||walkthru) && !page.trainingcourse && !page.article ?><?cs # header logic for docs that provide previous/next buttons ?>
   <?cs if:header.hide ?>
   <?cs else ?>
   <div class="layout-content-row content-header <?cs if:header.justLinks ?>just-links<?cs /if ?>">
@@ -154,7 +154,7 @@
       </div>
       
       <?cs # for training classes, provide a different kind of link when the next page is a different class ?>
-      <?cs if:training ?>
+      <?cs if:training && !page.article ?>
       <div class="layout-content-row content-footer next-class" style="display:none" itemscope itemtype="http://schema.org/SiteNavigationElement">
           <a href="#" class="next-class-link hide">Next class: </a>
       </div>
diff --git a/tools/droiddoc/templates-sdk/gcm_navtree_data.cs b/tools/droiddoc/templates-sdk/gcm_navtree_data.cs
new file mode 100644
index 0000000..6f33d88
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/gcm_navtree_data.cs
@@ -0,0 +1,3 @@
+var GCM_NAVTREE_DATA =
+<?cs var:reference_tree ?>
+;
diff --git a/tools/droiddoc/templates-sdk/gms_navtree_data.cs b/tools/droiddoc/templates-sdk/gms_navtree_data.cs
new file mode 100644
index 0000000..66b7d55
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/gms_navtree_data.cs
@@ -0,0 +1,3 @@
+var GMS_NAVTREE_DATA =
+<?cs var:reference_tree ?>
+;
diff --git a/tools/droiddoc/templates-sdk/head_tag.cs b/tools/droiddoc/templates-sdk/head_tag.cs
index dc31877..4bc5d0f 100644
--- a/tools/droiddoc/templates-sdk/head_tag.cs
+++ b/tools/droiddoc/templates-sdk/head_tag.cs
@@ -14,7 +14,7 @@
 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 ?>
+<?cs if:reference && !(reference.gms || reference.gcm) ?>
 <!-- FULLSCREEN STYLESHEET -->
 <link href="<?cs var:toroot ?>assets/css/fullscreen.css" rel="stylesheet" class="fullscreen"
 type="text/css">
@@ -27,6 +27,10 @@
   var toRoot = "<?cs var:toroot ?>";
 </script>
 <script src="<?cs var:toroot ?>assets/js/docs.js" type="text/javascript"></script>
+<?cs if:reference.gms || reference.gcm || google?>
+<script src="<?cs var:toroot ?>gms_navtree_data.js" type="text/javascript"></script>
+<script src="<?cs var:toroot ?>gcm_navtree_data.js" type="text/javascript"></script>
+<?cs else ?>
 <script src="<?cs var:toroot ?>navtree_data.js" type="text/javascript"></script>
-
+<?cs /if ?>
 </head>
\ No newline at end of file
diff --git a/tools/droiddoc/templates-sdk/navtree_data.cs b/tools/droiddoc/templates-sdk/navtree_data.cs
new file mode 100644
index 0000000..73aa199
--- /dev/null
+++ b/tools/droiddoc/templates-sdk/navtree_data.cs
@@ -0,0 +1,3 @@
+var NAVTREE_DATA =
+<?cs var:reference_tree ?>
+;
diff --git a/tools/droiddoc/templates-sdk/package.cs b/tools/droiddoc/templates-sdk/package.cs
index ea676b9..12fae50 100644
--- a/tools/droiddoc/templates-sdk/package.cs
+++ b/tools/droiddoc/templates-sdk/package.cs
@@ -3,7 +3,7 @@
 <html>
 <?cs include:"head_tag.cs" ?>
 
-<body class="gc-documentation 
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
   <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
   elif:design ?>design<?cs
   elif:distribute ?>distribute<?cs
diff --git a/tools/droiddoc/templates-sdk/packages.cs b/tools/droiddoc/templates-sdk/packages.cs
index 1c3aa30..d38c7f5 100644
--- a/tools/droiddoc/templates-sdk/packages.cs
+++ b/tools/droiddoc/templates-sdk/packages.cs
@@ -2,7 +2,7 @@
 <?cs include:"macros.cs" ?>
 <html>
 <?cs include:"head_tag.cs" ?>
-<body class="gc-documentation 
+<body class="gc-documentation <?cs if:(reference.gms || reference.gcm) ?>google<?cs /if ?>
   <?cs if:(guide||develop||training||reference||tools||sdk) ?>develop<?cs
   elif:design ?>design<?cs
   elif:distribute ?>distribute<?cs