Merge change 22522 into donut

* changes:
  Add Gesture tests to CTS.
diff --git a/core/Makefile b/core/Makefile
index 9247c75..2c4d133 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -299,7 +299,7 @@
 $(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)
 	$(call pretty,"Target boot image: $@")
 	$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --output $@
-	$(hide) $(call assert-max-file-size,$@,$(BOARD_BOOTIMAGE_MAX_SIZE))
+	$(hide) $(call assert-max-file-size,$@,$(BOARD_BOOTIMAGE_MAX_SIZE),raw)
 endif # TARGET_BOOTIMAGE_USE_EXT2
 
 else	# TARGET_NO_KERNEL
@@ -577,7 +577,7 @@
 	$(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
 	$(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) --output $@
 	@echo ----- Made recovery image -------- $@
-	$(hide) $(call assert-max-file-size,$@,$(BOARD_RECOVERYIMAGE_MAX_SIZE))
+	$(hide) $(call assert-max-file-size,$@,$(BOARD_RECOVERYIMAGE_MAX_SIZE),raw)
 
 else
 INSTALLED_RECOVERYIMAGE_TARGET :=
@@ -662,7 +662,7 @@
 $(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) $(RECOVERY_FROM_BOOT_PATCH) | $(ACP)
 	@echo "Install system fs image: $@"
 	$(copy-file-to-target)
-	$(hide) $(call assert-max-file-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_MAX_SIZE))
+	$(hide) $(call assert-max-file-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_MAX_SIZE),yaffs)
 
 systemimage: $(INSTALLED_SYSTEMIMAGE)
 
@@ -671,7 +671,7 @@
 	            | $(INTERNAL_MKUSERFS)
 	@echo "make $@: ignoring dependencies"
 	$(call build-systemimage-target,$(INSTALLED_SYSTEMIMAGE))
-	$(hide) $(call assert-max-file-size,$(INSTALLED_SYSTEMIMAGE),$(BOARD_SYSTEMIMAGE_MAX_SIZE))
+	$(hide) $(call assert-max-file-size,$(INSTALLED_SYSTEMIMAGE),$(BOARD_SYSTEMIMAGE_MAX_SIZE),yaffs)
 
 #######
 ## system tarball
@@ -708,7 +708,7 @@
     $(call pretty,"Target userdata fs image: $(INSTALLED_USERDATAIMAGE_TARGET)")
     @mkdir -p $(TARGET_OUT_DATA)
     $(call build-userimage-ext2-target,$(TARGET_OUT_DATA),$(INSTALLED_USERDATAIMAGE_TARGET),userdata,)
-    $(hide) $(call assert-max-file-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_MAX_SIZE))
+    $(hide) $(call assert-max-file-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_MAX_SIZE),yaffs)
 endef
 
 else # TARGET_USERIMAGES_USE_EXT2 != true
@@ -718,7 +718,7 @@
     $(call pretty,"Target userdata fs image: $(INSTALLED_USERDATAIMAGE_TARGET)")
     @mkdir -p $(TARGET_OUT_DATA)
     $(hide) $(MKYAFFS2) -f $(TARGET_OUT_DATA) $(INSTALLED_USERDATAIMAGE_TARGET)
-    $(hide) $(call assert-max-file-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_MAX_SIZE))
+    $(hide) $(call assert-max-file-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_MAX_SIZE),yaffs)
 endef
 endif # TARGET_USERIMAGES_USE_EXT2
 
diff --git a/core/definitions.mk b/core/definitions.mk
index e4d2ecb..9b3a03d 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -1572,6 +1572,7 @@
 
 # $(1): The file(s) to check (often $@)
 # $(2): The maximum total image size, in decimal bytes
+# $(3): the type of filesystem "yaffs" or "raw"
 #
 # If $(2) is empty, evaluates to "true"
 #
@@ -1585,9 +1586,15 @@
   printname=$$(echo -n "$(1)" | tr " " +); \
   echo "$$printname total size is $$total"; \
   img_blocksize=$(call image-size-from-data-size,$(BOARD_FLASH_BLOCK_SIZE)); \
+  if [ "$(3)" == "yaffs" ]; then \
+    reservedblocks=5; \
+  else \
+    reservedblocks=0; \
+  fi; \
   twoblocks=$$((img_blocksize * 2)); \
   onepct=$$((((($(2) / 100) - 1) / img_blocksize + 1) * img_blocksize)); \
-  reserve=$$((twoblocks > onepct ? twoblocks : onepct)); \
+  reserve=$$(((twoblocks > onepct ? twoblocks : onepct) + \
+               reservedblocks * img_blocksize)); \
   maxsize=$$(($(2) - reserve)); \
   if [ "$$total" -gt "$$maxsize" ]; then \
     echo "error: $$printname too large ($$total > [$(2) - $$reserve])"; \
diff --git a/core/prebuilt.mk b/core/prebuilt.mk
index 34d2453..4cbbb99 100644
--- a/core/prebuilt.mk
+++ b/core/prebuilt.mk
@@ -40,6 +40,21 @@
 endif
 endif
 
+ifeq ($(LOCAL_CERTIFICATE),)
+  # can't re-sign this package, so predexopt is not available.
+else
+
+# If this is not an absolute certificate, assign it to a generic one.
+ifeq ($(dir $(strip $(LOCAL_CERTIFICATE))),./)
+    LOCAL_CERTIFICATE := $(SRC_TARGET_DIR)/product/security/$(LOCAL_CERTIFICATE)
+endif
+
+PACKAGES.$(LOCAL_MODULE).PRIVATE_KEY := $(LOCAL_CERTIFICATE).pk8
+PACKAGES.$(LOCAL_MODULE).CERTIFICATE := $(LOCAL_CERTIFICATE).x509.pem
+PACKAGES := $(PACKAGES) $(LOCAL_MODULE)
+
+endif
+
 ifneq ($(prebuilt_module_is_a_library),)
   ifneq ($(LOCAL_IS_HOST_MODULE),)
 	$(transform-host-ranlib-copy-hack)
diff --git a/tools/droiddoc/templates/assets/android-developer-reference.js b/tools/droiddoc/templates/assets/android-developer-reference.js
index 44fa903..3080760 100644
--- a/tools/droiddoc/templates/assets/android-developer-reference.js
+++ b/tools/droiddoc/templates/assets/android-developer-reference.js
@@ -29,18 +29,8 @@
 
 function changeApiLevel() {
 	var selectedLevel = $("#apiLevelControl option:selected").val();
-	var apis = $(".api");
-	apis.each(function(i) {
-		var obj = $(this);
-		var className = obj.attr("class");
-		var apiLevelIndex = className.lastIndexOf("-")+1;
-		var apiLevelEndIndex = className.indexOf(" ", apiLevelIndex);
-		apiLevelEndIndex = apiLevelEndIndex != -1 ? apiLevelEndIndex : className.length;
-		var apiLevel = className.substring(apiLevelIndex, apiLevelEndIndex);
-		if (apiLevel > selectedLevel) obj.addClass("absent").attr("title","Requires API Level "+apiLevel+" or higher");
-		else obj.removeClass("absent").removeAttr("title");
-	});
-
+  toggleVisisbleApis(selectedLevel, "body");
+  
   var date = new Date();
   date.setTime(date.getTime()+(50*365*24*60*60*1000)); // keep this for 50 years
   writeCookie(API_LEVEL_COOKIE, selectedLevel, null, date);
@@ -57,6 +47,20 @@
   }
 }
 
+function toggleVisisbleApis(selectedLevel, context) {
+	var apis = $(".api",context);
+	apis.each(function(i) {
+		var obj = $(this);
+		var className = obj.attr("class");
+		var apiLevelIndex = className.lastIndexOf("-")+1;
+		var apiLevelEndIndex = className.indexOf(" ", apiLevelIndex);
+		apiLevelEndIndex = apiLevelEndIndex != -1 ? apiLevelEndIndex : className.length;
+		var apiLevel = className.substring(apiLevelIndex, apiLevelEndIndex);
+		if (apiLevel > selectedLevel) obj.addClass("absent").attr("title","Requires API Level "+apiLevel+" or higher");
+		else obj.removeClass("absent").removeAttr("title");
+	});
+}
+
 /* NAVTREE */
 
 function new_node(me, mom, text, link, children_data, api_level)
@@ -150,6 +154,10 @@
     }
     node.plus_img.src = me.toroot + "assets/images/triangle-opened-small.png";
     node.expanded = true;
+    
+    // perform api level toggling because new nodes are new to the DOM 
+	  var selectedLevel = $("#apiLevelControl option:selected").val();
+    toggleVisisbleApis(selectedLevel, "#side-nav");
   }
 }
 
@@ -218,6 +226,10 @@
 
 function init_default_navtree(toroot) {
   init_navtree("nav-tree", toroot, NAVTREE_DATA);
+  
+  // perform api level toggling because because the whole tree is new to the DOM 
+	var selectedLevel = $("#apiLevelControl option:selected").val();
+  toggleVisisbleApis(selectedLevel, "#side-nav");
 }
 
 function init_navtree(navtree_id, toroot, root_nodes)