Merge "Remove AB update in GSI" into pi-dev
diff --git a/CleanSpec.mk b/CleanSpec.mk
index 0568923..7677261 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -483,6 +483,11 @@
 # Remove stale init.noenforce.rc
 $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/init/gsi/init.noenforce.rc)
 
+# Clean up Launcher3 which has been replaced with Launcher3QuickStep
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/app/Launcher3)
+$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/priv-app/Launcher3)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/Launcher3_intermediates)
+
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 95a6553..1e2eda2 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -74,6 +74,10 @@
 LOCAL_DROIDDOC_STUB_OUT_DIR:=
 LOCAL_DROIDDOC_TEMPLATE_DIR:=
 LOCAL_DROIDDOC_USE_STANDARD_DOCLET:=
+LOCAL_DROIDDOC_USE_METALAVA:=
+LOCAL_DROIDDOC_METALAVA_PREVIOUS_API:=
+LOCAL_DROIDDOC_METALAVA_ANNOTATIONS_ENABLED:=
+LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR:=
 LOCAL_DX_FLAGS:=
 LOCAL_EMMA_COVERAGE_FILTER:=
 LOCAL_EMMA_INSTRUMENT:=
diff --git a/core/droiddoc.mk b/core/droiddoc.mk
index b174f31..ae64052 100644
--- a/core/droiddoc.mk
+++ b/core/droiddoc.mk
@@ -15,12 +15,9 @@
 #
 
 $(call record-module-type,DROIDDOC)
-##
-##
-## Common to both droiddoc and javadoc
-##
-##
-
+###########################################################
+## Common logic to both droiddoc and javadoc
+###########################################################
 LOCAL_IS_HOST_MODULE := $(call true-or-empty,$(LOCAL_IS_HOST_MODULE))
 ifeq ($(LOCAL_IS_HOST_MODULE),true)
 my_prefix := HOST_
@@ -54,6 +51,7 @@
 endif
 
 ifeq ($(LOCAL_IS_HOST_MODULE),true)
+
 $(full_target): PRIVATE_BOOTCLASSPATH :=
 full_java_libs := $(addprefix $(HOST_OUT_JAVA_LIBRARIES)/,\
   $(addsuffix $(COMMON_JAVA_PACKAGE_SUFFIX),$(LOCAL_JAVA_LIBRARIES)))
@@ -128,18 +126,10 @@
 $(hide) for d in $(3) ; do find $$d -name '*.java' -and -not -name '.*' >> $(1) 2> /dev/null ; done ; true
 endef
 
-ifeq (a,b)
-$(full_target): PRIVATE_PROFILING_OPTIONS := \
-    -J-agentlib:jprofilerti=port=8849 -J-Xbootclasspath/a:/Applications/jprofiler5/bin/agent.jar
-endif
-
-
+###########################################################
+## Logic for droiddoc only
+###########################################################
 ifneq ($(strip $(LOCAL_DROIDDOC_USE_STANDARD_DOCLET)),true)
-##
-##
-## droiddoc only
-##
-##
 
 droiddoc_templates := \
     $(sort $(shell find $(LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR) -type f $(if $(ALLOW_MISSING_DEPENDENCIES),2>/dev/null)))
@@ -150,10 +140,6 @@
   endif
 endif
 
-droiddoc := \
-	$(HOST_JDK_TOOLS_JAR) \
-	$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX)
-
 $(full_target): PRIVATE_DOCLETPATH := $(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX):$(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX)
 $(full_target): PRIVATE_CURRENT_BUILD := -hdf page.build $(BUILD_ID)-$(BUILD_NUMBER_FROM_FILE)
 $(full_target): PRIVATE_CURRENT_TIME :=  -hdf page.now "$$($(DATE_FROM_FILE) "+%d %b %Y %k:%M")"
@@ -175,18 +161,127 @@
 $(full_target): PRIVATE_ADDITIONAL_HTML_DIR :=
 endif
 
-# TODO: not clear if this is used any more
+# TODO(nanzhang): Remove it if this is not used any more
 $(full_target): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
 
+ifeq ($(strip $(LOCAL_DROIDDOC_USE_METALAVA)),true)
+ifneq (,$(filter --generate-documentation,$(LOCAL_DROIDDOC_OPTIONS)))
+
+pos = $(if $(findstring $1,$2),$(call pos,$1,$(wordlist 2,$(words $2),$2),x $3),$3)
+metalava_args := $(wordlist 1, $(words $(call pos,--generate-documentation,$(LOCAL_DROIDDOC_OPTIONS))), \
+    $(LOCAL_DROIDDOC_OPTIONS))
+remaining_args :=  $(wordlist $(words $(call pos,--generate-documentation,$(LOCAL_DROIDDOC_OPTIONS))), \
+    $(words $(LOCAL_DROIDDOC_OPTIONS)), $(LOCAL_DROIDDOC_OPTIONS))
+doclava_args := $(wordlist 2, $(words $(remaining_args)), $(remaining_args))
+
+ifneq ($(LOCAL_DROIDDOC_METALAVA_PREVIOUS_API),)
+$(full_target): PRIVATE_DROIDDOC_METALAVA_PREVIOUS_API := --check-compatibility --previous-api $(LOCAL_DROIDDOC_METALAVA_PREVIOUS_API)
+else
+$(full_target): PRIVATE_DROIDDOC_METALAVA_PREVIOUS_API :=
+endif #!LOCAL_DROIDDOC_METALAVA_PREVIOUS_API
+
+metalava_annotations_deps :=
+ifeq ($(strip $(LOCAL_DROIDDOC_METALAVA_ANNOTATIONS_ENABLED)),true)
+ifeq ($(LOCAL_DROIDDOC_METALAVA_PREVIOUS_API),)
+$(error $(LOCAL_PATH): LOCAL_DROIDDOC_METALAVA_PREVIOUS_API has to be non-empty if metalava annotations was enabled!)
+endif
+ifeq ($(LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR),)
+$(error $(LOCAL_PATH): LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR has to be non-empty if metalava annotations was enabled!)
+endif
+
+$(full_target): PRIVATE_DROIDDOC_METALAVA_ANNOTATIONS := --include-annotations --migrate-nullness \
+    --extract-annotations $(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(LOCAL_MODULE)_annotations.zip \
+    --merge-annotations $(LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR) \
+    --hide HiddenTypedefConstant --hide SuperfluousPrefix --hide AnnotationExtraction
+metalava_annotations_deps := $(sort $(shell find $(LOCAL_DROIDDOC_METALAVA_MERGE_ANNOTATIONS_DIR) -type f))
+else
+$(full_target): PRIVATE_DROIDDOC_METALAVA_ANNOTATIONS :=
+endif #LOCAL_DROIDDOC_METALAVA_ANNOTATIONS_ENABLED=true
+
+$(full_target): \
+        $(full_src_files) $(LOCAL_GENERATED_SOURCES) \
+        $(droiddoc_templates) \
+        $(HOST_JDK_TOOLS_JAR) \
+        $(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX) \
+        $(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX) \
+        $(HOST_OUT_JAVA_LIBRARIES)/metalava$(COMMON_JAVA_PACKAGE_SUFFIX) \
+        $(html_dir_files) \
+        $(full_java_libs) \
+        $(ZIPSYNC) \
+        $(LOCAL_SRCJARS) \
+        $(LOCAL_ADDITIONAL_DEPENDENCIES) \
+        $(LOCAL_DROIDDOC_METALAVA_PREVIOUS_API) \
+        $(metalava_annotations_deps)
+	@echo metalava based docs: $(PRIVATE_OUT_DIR)
+	$(hide) mkdir -p $(dir $@)
+	$(hide) rm -rf $(PRIVATE_STUB_OUT_DIR)
+	$(call prepare-doc-source-list,$(PRIVATE_SRC_LIST_FILE),$(PRIVATE_JAVA_FILES), \
+			$(PRIVATE_SOURCE_INTERMEDIATES_DIR) $(PRIVATE_ADDITIONAL_JAVA_DIR))
+	$(ZIPSYNC) -d $(PRIVATE_SRCJAR_INTERMEDIATES_DIR) -l $(PRIVATE_SRCJAR_LIST_FILE) -f "*.java" $(PRIVATE_SRCJARS)
+	$(hide) ( \
+		$(JAVA) -jar $(HOST_OUT_JAVA_LIBRARIES)/metalava$(COMMON_JAVA_PACKAGE_SUFFIX) \
+                -encoding UTF-8 -source 1.8 \@$(PRIVATE_SRC_LIST_FILE) \@$(PRIVATE_SRCJAR_LIST_FILE) \
+                $(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
+                $(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
+                --sourcepath $(PRIVATE_SOURCE_PATH) \
+                --no-banner --color --quiet \
+                $(addprefix --stubs ,$(PRIVATE_STUB_OUT_DIR)) \
+                --write-stubs-source-list $(intermediates.COMMON)/stubs-src-list \
+                $(metalava_args) $(PRIVATE_DROIDDOC_METALAVA_PREVIOUS_API) $(PRIVATE_DROIDDOC_METALAVA_ANNOTATIONS) \
+                $(JAVADOC) -encoding UTF-8 -source 1.8 STUBS_SOURCE_LIST \
+                -J-Xmx1600m -J-XX:-OmitStackTraceInFastThrow -XDignore.symbol.file \
+                -quiet -doclet com.google.doclava.Doclava -docletpath $(PRIVATE_DOCLETPATH) \
+                -templatedir $(PRIVATE_CUSTOM_TEMPLATE_DIR) \
+                $(PRIVATE_DROIDDOC_HTML_DIR) $(PRIVATE_ADDITIONAL_HTML_DIR) \
+                $(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
+                $(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
+                -sourcepath $(PRIVATE_SOURCE_PATH) \
+                -d $(PRIVATE_OUT_DIR) \
+                $(PRIVATE_CURRENT_BUILD) $(PRIVATE_CURRENT_TIME) $(doclava_args) \
+        && touch -f $@ ) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
+
+ifeq ($(strip $(LOCAL_DROIDDOC_METALAVA_ANNOTATIONS_ENABLED)),true)
+$(TARGET_OUT_COMMON_INTERMEDIATES)/PACKAGING/$(LOCAL_MODULE)_annotations.zip: $(full_target)
+endif
+else
+# no docs generation
+$(full_target): \
+        $(full_src_files) $(LOCAL_GENERATED_SOURCES) \
+        $(full_java_libs) \
+        $(HOST_OUT_JAVA_LIBRARIES)/metalava$(COMMON_JAVA_PACKAGE_SUFFIX) \
+        $(ZIPSYNC) \
+        $(LOCAL_SRCJARS) \
+        $(LOCAL_ADDITIONAL_DEPENDENCIES)
+	@echo metalava based stubs: $@
+	$(hide) mkdir -p $(dir $@)
+	$(hide) rm -rf $(PRIVATE_STUB_OUT_DIR)
+	$(call prepare-doc-source-list,$(PRIVATE_SRC_LIST_FILE),$(PRIVATE_JAVA_FILES), \
+			$(PRIVATE_SOURCE_INTERMEDIATES_DIR) $(PRIVATE_ADDITIONAL_JAVA_DIR))
+	$(ZIPSYNC) -d $(PRIVATE_SRCJAR_INTERMEDIATES_DIR) -l $(PRIVATE_SRCJAR_LIST_FILE) -f "*.java" $(PRIVATE_SRCJARS)
+	$(hide) ( \
+		$(JAVA) -jar $(HOST_OUT_JAVA_LIBRARIES)/metalava$(COMMON_JAVA_PACKAGE_SUFFIX) \
+                -encoding UTF-8 -source 1.8 \@$(PRIVATE_SRC_LIST_FILE) \@$(PRIVATE_SRCJAR_LIST_FILE) \
+                $(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
+                $(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
+                --sourcepath $(PRIVATE_SOURCE_PATH) \
+                $(PRIVATE_DROIDDOC_OPTIONS) --no-banner --color --quiet \
+                $(addprefix --stubs ,$(PRIVATE_STUB_OUT_DIR)) \
+        && touch -f $@ ) || (rm -rf $(PRIVATE_SRC_LIST_FILE); exit 45)
+
+endif # stubs + docs generation
+
+else
+
 # TODO(tobiast): Clean this up once we move to -source 1.9.
 # OpenJDK 9 does not have the concept of a "boot classpath" so we should
 # then rename PRIVATE_BOOTCLASSPATH to PRIVATE_MODULE or similar. For now,
 # keep -bootclasspath here since it works in combination with -source 1.8.
 $(full_target): \
-        $(full_src_files) \
-        $(LOCAL_GENERATED_SOURCES) \
+        $(full_src_files) $(LOCAL_GENERATED_SOURCES) \
         $(droiddoc_templates) \
-        $(droiddoc) \
+        $(HOST_JDK_TOOLS_JAR) \
+        $(HOST_OUT_JAVA_LIBRARIES)/jsilver$(COMMON_JAVA_PACKAGE_SUFFIX) \
+        $(HOST_OUT_JAVA_LIBRARIES)/doclava$(COMMON_JAVA_PACKAGE_SUFFIX) \
         $(html_dir_files) \
         $(full_java_libs) \
         $(ZIPSYNC) \
@@ -200,39 +295,25 @@
 	$(ZIPSYNC) -d $(PRIVATE_SRCJAR_INTERMEDIATES_DIR) -l $(PRIVATE_SRCJAR_LIST_FILE) -f "*.java" $(PRIVATE_SRCJARS)
 	$(hide) ( \
 		$(JAVADOC) \
-                -encoding UTF-8 \
-                -source 1.8 \
-                \@$(PRIVATE_SRC_LIST_FILE) \
-                \@$(PRIVATE_SRCJAR_LIST_FILE) \
-                -J-Xmx1600m \
-                -J-XX:-OmitStackTraceInFastThrow \
-                -XDignore.symbol.file \
-                $(PRIVATE_PROFILING_OPTIONS) \
-                -quiet \
-                -doclet com.google.doclava.Doclava \
-                -docletpath $(PRIVATE_DOCLETPATH) \
+                -encoding UTF-8 -source 1.8 \@$(PRIVATE_SRC_LIST_FILE) \@$(PRIVATE_SRCJAR_LIST_FILE) \
+                -J-Xmx1600m -J-XX:-OmitStackTraceInFastThrow -XDignore.symbol.file \
+                -quiet -doclet com.google.doclava.Doclava -docletpath $(PRIVATE_DOCLETPATH) \
                 -templatedir $(PRIVATE_CUSTOM_TEMPLATE_DIR) \
-                $(PRIVATE_DROIDDOC_HTML_DIR) \
-                $(PRIVATE_ADDITIONAL_HTML_DIR) \
+                $(PRIVATE_DROIDDOC_HTML_DIR) $(PRIVATE_ADDITIONAL_HTML_DIR) \
                 $(addprefix -bootclasspath ,$(PRIVATE_BOOTCLASSPATH)) \
                 $(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
                 -sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
                 -d $(PRIVATE_OUT_DIR) \
-                $(PRIVATE_CURRENT_BUILD) $(PRIVATE_CURRENT_TIME) \
-                $(PRIVATE_DROIDDOC_OPTIONS) \
+                $(PRIVATE_CURRENT_BUILD) $(PRIVATE_CURRENT_TIME) $(PRIVATE_DROIDDOC_OPTIONS) \
                 $(addprefix -stubs ,$(PRIVATE_STUB_OUT_DIR)) \
-        && touch -f $@ \
-    ) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
-
-
+        && touch -f $@ ) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
+endif #LOCAL_DROIDDOC_USE_METALAVA
 
 else
-##
-##
-## standard doclet only
-##
-##
 
+###########################################################
+## Logic for javadoc only
+###########################################################
 ifdef USE_OPENJDK9
 # For OpenJDK 9 we use --patch-module to define the core libraries code.
 # TODO(tobiast): Reorganize this when adding proper support for OpenJDK 9
@@ -250,31 +331,15 @@
 			$(PRIVATE_SOURCE_INTERMEDIATES_DIR) $(PRIVATE_ADDITIONAL_JAVA_DIR))
 	$(ZIPSYNC) -d $(PRIVATE_SRCJAR_INTERMEDIATES_DIR) -l $(PRIVATE_SRCJAR_LIST_FILE) -f "*.java" $(PRIVATE_SRCJARS)
 	$(hide) ( \
-		$(JAVADOC) \
-                -encoding UTF-8 \
-                $(PRIVATE_DROIDDOC_OPTIONS) \
-                \@$(PRIVATE_SRC_LIST_FILE) \
-                \@$(PRIVATE_SRCJAR_LIST_FILE) \
-                -J-Xmx1024m \
-                -XDignore.symbol.file \
-                -Xdoclint:none \
-                $(PRIVATE_PROFILING_OPTIONS) \
-                $(addprefix -classpath ,$(PRIVATE_CLASSPATH)) \
-                $(PRIVATE_BOOTCLASSPATH_ARG) \
-                -sourcepath $(PRIVATE_SOURCE_PATH)$(addprefix :,$(PRIVATE_CLASSPATH)) \
+		$(JAVADOC) -encoding UTF-8 \@$(PRIVATE_SRC_LIST_FILE) \@$(PRIVATE_SRCJAR_LIST_FILE) \
+                $(PRIVATE_DROIDDOC_OPTIONS) -J-Xmx1024m -XDignore.symbol.file -Xdoclint:none -quiet \
+                $(addprefix -classpath ,$(PRIVATE_CLASSPATH)) $(PRIVATE_BOOTCLASSPATH_ARG) \
+                -sourcepath $(PRIVATE_SOURCE_PATH) \
                 -d $(PRIVATE_OUT_DIR) \
-                -quiet \
         && touch -f $@ \
     ) || (rm -rf $(PRIVATE_OUT_DIR) $(PRIVATE_SRC_LIST_FILE); exit 45)
 
-
-endif
-##
-##
-## Common to both droiddoc and javadoc
-##
-##
-
+endif # !LOCAL_DROIDDOC_USE_STANDARD_DOCLET
 
 ALL_DOCS += $(full_target)
 
@@ -296,4 +361,4 @@
 
 $(call dist-for-goals,docs,$(out_zip))
 
-endif
+endif #!LOCAL_UNINSTALLABLE_MODULE
diff --git a/target/product/core.mk b/target/product/core.mk
index acbc87f..c72bb2f 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -42,7 +42,7 @@
     KeyChain \
     Keyguard \
     LatinIME \
-    Launcher3 \
+    Launcher3QuickStep \
     ManagedProvisioning \
     MtpDocumentsProvider \
     PacProcessor \
diff --git a/target/product/sdk_base.mk b/target/product/sdk_base.mk
index c50d653..1e5ed19 100644
--- a/target/product/sdk_base.mk
+++ b/target/product/sdk_base.mk
@@ -23,7 +23,7 @@
 	Development \
 	Dialer \
 	Gallery2 \
-	Launcher3 \
+	Launcher3QuickStep \
 	Camera2 \
 	librs_jni \
 	LiveWallpapersPicker \
diff --git a/tools/fs_config/fs_config_generator.py b/tools/fs_config/fs_config_generator.py
index ed63c0e..4839578 100755
--- a/tools/fs_config/fs_config_generator.py
+++ b/tools/fs_config/fs_config_generator.py
@@ -1216,10 +1216,6 @@
 class PasswdGen(BaseGenerator):
     """Generates the /etc/passwd file per man (5) passwd."""
 
-    _GENERATED = ('#\n# THIS IS AN AUTOGENERATED FILE! DO NOT MODIFY!\n#')
-
-    _FILE_COMMENT = '# Defined in file: \"%s\"'
-
     def __init__(self):
 
         self._old_file = None
@@ -1254,8 +1250,6 @@
         if len(aids) == 0:
             return
 
-        print PasswdGen._GENERATED
-
         for aid in aids:
             if required_prefix is None or aid.friendly.startswith(required_prefix):
                 self._print_formatted_line(aid)
@@ -1280,7 +1274,6 @@
         """
         if self._old_file != aid.found:
             self._old_file = aid.found
-            print PasswdGen._FILE_COMMENT % aid.found
 
         try:
             logon, uid = Utils.get_login_and_uid_cleansed(aid)
@@ -1306,7 +1299,6 @@
         """
         if self._old_file != aid.found:
             self._old_file = aid.found
-            print PasswdGen._FILE_COMMENT % aid.found
 
         try:
             logon, uid = Utils.get_login_and_uid_cleansed(aid)