am 7db4860: Merge change 845 into donut

Merge commit '7db486058cf4fce4be04e13d1ec6b7cf404d3e38'

* commit '7db486058cf4fce4be04e13d1ec6b7cf404d3e38':
  Config: Add ConfigBuildFlags, and change it based on TARGET_BUILD_TYPE
diff --git a/Android.mk b/Android.mk
index 954d1d6..cafd0dd 100644
--- a/Android.mk
+++ b/Android.mk
@@ -41,6 +41,18 @@
 			org/mobilecontrol/% \
 			,$(LOCAL_SRC_FILES))
 
+# Include a different set of source files when building a debug build.
+# TODO: Maybe build these into a separate .jar and put it on the classpath
+#       in front of framework.jar.
+# NOTE: Do not use this as an example; this is a very special situation.
+#       Do not modify LOCAL_SRC_FILES based on any variable other
+#       than TARGET_BUILD_TYPE, otherwise builds can become inconsistent.
+ifeq ($(TARGET_BUILD_TYPE),debug)
+  LOCAL_SRC_FILES += $(call find-other-java-files,core/config/debug)
+else
+  LOCAL_SRC_FILES += $(call find-other-java-files,core/config/ndebug)
+endif
+
 ## READ ME: ########################################################
 ##
 ## When updating this list of aidl files, consider if that aidl is
@@ -236,6 +248,11 @@
 	   ) \
 	 )
 
+# Pass a special "fake-out" version of some classes to the doc/API tools.
+# ConfigBuildFlags uses this trick to prevent certain fields from appearing
+# as "final" in the official SDK APIs.
+fwbase_dirs_to_document += core/config/sdk
+
 # These are relative to dalvik/libcore
 # Intentionally not included from libcore:
 #     icu openssl suncompat support
diff --git a/core/config/README.txt b/core/config/README.txt
new file mode 100644
index 0000000..5f48fb3
--- /dev/null
+++ b/core/config/README.txt
@@ -0,0 +1,5 @@
+One of the subdirectories {debug, ndebug} is included in framework.jar
+by ../../Android.mk depending on the value of $(TARGET_BUILD_TYPE).
+
+The sdk/ directory contains the files that are passed to the doc/API
+tools regardless of $(TARGET_BUILD_TYPE).
diff --git a/core/config/debug/android/util/ConfigBuildFlags.java b/core/config/debug/android/util/ConfigBuildFlags.java
new file mode 100644
index 0000000..eb00163
--- /dev/null
+++ b/core/config/debug/android/util/ConfigBuildFlags.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+package android.util;
+
+/**
+ * Static flags set by the build process.
+ */
+/* package */ final class ConfigBuildFlags {
+    /* package */ static final boolean DEBUG = true;
+}
diff --git a/core/config/ndebug/android/util/ConfigBuildFlags.java b/core/config/ndebug/android/util/ConfigBuildFlags.java
new file mode 100644
index 0000000..2345a40
--- /dev/null
+++ b/core/config/ndebug/android/util/ConfigBuildFlags.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+package android.util;
+
+/**
+ * Static flags set by the build process.
+ */
+/* package */ final class ConfigBuildFlags {
+    /* package */ static final boolean DEBUG = false;
+}
diff --git a/core/config/sdk/android/util/ConfigBuildFlags.java b/core/config/sdk/android/util/ConfigBuildFlags.java
new file mode 100644
index 0000000..f903ee4
--- /dev/null
+++ b/core/config/sdk/android/util/ConfigBuildFlags.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2009 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.
+ */
+
+package android.util;
+
+/**
+ * Static flags set by the build process.
+ */
+/* package */ final class ConfigBuildFlags {
+    /* This field is intentionally declared as non-final.  This file
+     * is passed to the SDK docs/API tools, and is used to force them
+     * to avoid treating DEBUG as a constant value.  This is necessary
+     * to avoid breaking the API check when switching to and from
+     * a debug build.
+     */
+    /* package */ static boolean DEBUG = false;
+}